Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: Drawing from a known, non-regular, discrete distribution


From   Lulu Zeng <[email protected]>
To   "[email protected]" <[email protected]>
Subject   Re: st: Drawing from a known, non-regular, discrete distribution
Date   Wed, 19 Feb 2014 11:09:48 +1100

Dear Nick,

Thank you for your suggestion. I must have done something incorrectly
so mata still gives me the below error despite I did use -p :/ sum(p)-
for rescaling as you suggested (I also tried to rescale the original
probability variable but neither worked):

sum of the probabilities must be 1
             rdiscrete():  3300  argument out of range
                 <istmt>:     -  function returned error
r(3300);


My probability variable is "share", and "odo2" is my equivalent of
your "y". All I did was:

mata

p = st_data((1..10)', "share")

p :/ sum(p)

st_store(., "odo2", rdiscrete(st_nobs(), 1, p))       [this is where
the error occurs]


My apologies for coming back with the same question again.


Best Regards,
Lulu

On Tue, Feb 18, 2014 at 11:37 PM, Nick Cox <[email protected]> wrote:
> Here is an example of using -rdiscrete()- in Mata. In your case, the
> probabilities are already in a variable. If -rdiscrete()- chokes on
> small differences in total from 1, then check the probabilities and if
> need be scale by -p :/ sum(p)-.
>
> . clear
>
> . set obs 1000
> obs was 0, now 1000
>
> . mat p = [0.2,0.2,0.1,0.1,0.1,0.1,0.05,0.05,0.05,0.05]
>
> . gen double p = p[1,_n]
> (990 missing values generated)
>
> . list in 1/10, sep(0)
>
>      +-----+
>      |   p |
>      |-----|
>   1. |  .2 |
>   2. |  .2 |
>   3. |  .1 |
>   4. |  .1 |
>   5. |  .1 |
>   6. |  .1 |
>   7. | .05 |
>   8. | .05 |
>   9. | .05 |
>  10. | .05 |
>      +-----+
>
> . gen y = .
> (1000 missing values generated)
>
> . mata
> ------------------------------------------------- mata (type end to
> exit) ------------------
> : p = st_data((1..10)', "p")
>
> : st_store(., "y", rdiscrete(st_nobs(), 1, p))
>
> : end
> --------------------------------------------------------------------------------------------
>
> . tab y
>
>           y |      Freq.     Percent        Cum.
> ------------+-----------------------------------
>           1 |        202       20.20       20.20
>           2 |        200       20.00       40.20
>           3 |         98        9.80       50.00
>           4 |        102       10.20       60.20
>           5 |         87        8.70       68.90
>           6 |         99        9.90       78.80
>           7 |         49        4.90       83.70
>           8 |         54        5.40       89.10
>           9 |         53        5.30       94.40
>          10 |         56        5.60      100.00
> ------------+-----------------------------------
>       Total |      1,000      100.00
> Nick
> [email protected]
>
>
> On 18 February 2014 09:35, Nick Cox <[email protected]> wrote:
>> The "mapping" (if I am guessing correctly) is in fact trivial as in
>> effect your sample would just be the observation numbers.
>> Nick
>> [email protected]
>>
>>
>> On 18 February 2014 09:32, Nick Cox <[email protected]> wrote:
>>> Thanks for the details.
>>>
>>> The Mata function -rdiscrete()- should do most of whar you want. You
>>> will need to map your values to integers 1 up and then read in the
>>> probabilities so that they are copied from a variable to a vector in
>>> Mata. Then select integers and reverse the mapping.
>>>
>>> Nick
>>> [email protected]
>>>
>>>
>>> On 18 February 2014 09:17, Lulu Zeng <[email protected]> wrote:
>>>> Dear Nick,
>>>>
>>>> My apologies for the unclear description.
>>>>
>>>> 1. I have 2 variables in Stata, one variable holds the 1200 known,
>>>> discrete values I want to draw; the other holds the corresponding
>>>> probabilities.
>>>>
>>>> 2. The 2 variables are associated with a parameter (attribute) of a
>>>> random utility model. I am trying to draw from the distribution of
>>>> this parameter of interest, and then divide it by the price parameter
>>>> (which similarly has 2 associated variables too) to obtain a
>>>> distribution of willingness to pay.
>>>>
>>>>
>>>> Best Regards,
>>>> Lulu
>>>>
>>>>
>>>>
>>>>
>>>> On Tue, Feb 18, 2014 at 7:47 PM, Nick Cox <[email protected]> wrote:
>>>>> You have not, so far as I can see, specified
>>>>>
>>>>> 1. How you are holding information on your distribution. Is it 1200
>>>>> known values with associated probabilities (so as two variables in
>>>>> Stata), or is the information still outside Stata in some form?
>>>>>
>>>>> 2. What you expect to draw as a sample.
>>>>> Nick
>>>>> [email protected]
>>>>>
>>>>>
>>>>> On 18 February 2014 03:58, Lulu Zeng <[email protected]> wrote:
>>>>>> Dear Scott,
>>>>>>
>>>>>> Thank you for your response. My apologies that I am still a little
>>>>>> confused about how to do this in my case where I have 1,200
>>>>>> observation. Can I still use the cond() command without typing in each
>>>>>> point of the draw?
>>>>>>
>>>>>> Best Regards,
>>>>>> Lulu
>>>>>>
>>>>>> On Tue, Feb 18, 2014 at 1:50 PM, Scott Merryman
>>>>>> <[email protected]> wrote:
>>>>>>> http://www.stata.com/statalist/archive/2012-08/msg00256.html
>>>>>>>
>>>>>>> and the links within.
>>>>>>>
>>>>>>> Scott
>>>>>>>
>>>>>>>
>>>>>>> On Sun, Feb 16, 2014 at 9:15 PM, Lulu Zeng <[email protected]> wrote:
>>>>>>>> Dear Statalist,
>>>>>>>>
>>>>>>>> I am seeking help with taking draws from a known, non-regular (not
>>>>>>>> normal or lognormal etc), discrete distribution.
>>>>>>>>
>>>>>>>> For example, taking draws from a distribution like the one below.
>>>>>>>> However, in my case I have 1,200 points instead of the 4 points given
>>>>>>>> in the example.
>>>>>>>>
>>>>>>>> Draw value     Probability
>>>>>>>>
>>>>>>>>     0.5                0.15
>>>>>>>>
>>>>>>>>     0.6                0.30
>>>>>>>>
>>>>>>>>     0.2                0.25
>>>>>>>>
>>>>>>>>     0.9                0.30
>>>>>>>>
>>>>>>>> The "draw value" is the value to be drawn, "probability" is the chance
>>>>>>>> each value be drawn, so it adds up to 1.
>>>>>>> *
>>>>>>> *   For searches and help try:
>>>>>>> *   http://www.stata.com/help.cgi?search
>>>>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>>>>> *   http://www.ats.ucla.edu/stat/stata/
>>>>>> *
>>>>>> *   For searches and help try:
>>>>>> *   http://www.stata.com/help.cgi?search
>>>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>>>> *   http://www.ats.ucla.edu/stat/stata/
>>>>> *
>>>>> *   For searches and help try:
>>>>> *   http://www.stata.com/help.cgi?search
>>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>>> *   http://www.ats.ucla.edu/stat/stata/
>>>> *
>>>> *   For searches and help try:
>>>> *   http://www.stata.com/help.cgi?search
>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>> *   http://www.ats.ucla.edu/stat/stata/
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/faqs/resources/statalist-faq/
> *   http://www.ats.ucla.edu/stat/stata/
*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/faqs/resources/statalist-faq/
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index