[R] Generate Random Draw from Gamma Distribution Re: Monte Carlo Simulation in R...

David Winsemius dwinsemius at comcast.net
Tue Nov 10 23:31:10 CET 2009


On Nov 10, 2009, at 5:00 PM, David Winsemius wrote:

>
> On Nov 10, 2009, at 4:29 PM, Hongwei Dong wrote:
>
>> Sorry for the confusion.
>>
>> Let me put it in this way. Here we have 2000 people and we want to
>> put them into 150 groups. The distribution of the group size follows
>> the Gamma distribution with shape parameter 0.067 and scale
>> parameter 0.008. At the same time, the minimum group size is 1, and
>> the largest one should not be bigger than 85.
>>
>> My questions:  Can I generate a set of groups that follow the above
>> rules by generating random draws?
>>
>> By the way, I also confused by the rate and scale parameters in R. I
>> did the distribution test in SPSS and got those shape and scale
>> parameters. In SPSS Q-Q plot, the scale parameter is 0.008. I
>> noticed that someone mentioned that this is actually the rate. I'm
>> confused.
>>
>
> I think you may want your scale (from whatever dataset it was
> determined) to be 1/0.008

Note that Ravi Varadhan and I may not be not disagreeing since:

 > rgamma
function (n, shape, rate = 1, scale = 1/rate)
snipped

You are fairly far out in the right tail of that distribution:

 >  round(rgamma(200, shape=0.067,  scale = 1/0.008))
   [1]  12   0   0   0  20   0   9   0  54   0   0   0   2   8  49    
0  26   0   0   0   0   2   0   0   0   0
  [27]   0   0   3   0   0   1   0   0   0  11   0   0   1 256   0    
3   0   9   0   0   0   0   0   1   0   0
  [53]   0   0   0   0   1   0   0   0   2   1   0   0   0   0  13    
0   0   0   0   0   0   0 152 157   0   3
  [79]   4   0   0   0   0  26   0  34   0   0   0   0   0   0   0    
0   0   0   0   0   0   0   0   0   0   0
[105]   4   0   0   0   0   0   0   0   2   0   1   0   5   2   0   
18   0   0   0   0   0   0  19   0 190   0
[131]   0   0   2   0   0   0   0  83   0   0   0   0   0   4   0    
0   0   0   0  20   0   9   1   1   0   0
[157]   0   4  16   0  28   0   0   0   0   0   0   0   0   0   0    
1   0   0   0   0   0   0   0  23   0   0
[183]   0   0   0   0   6   1   1   0   1   0   0   0   1   0   0    
0   0   0

I'm wondering if the Gamma distribution is the correct distribution to  
be fitting? Is there some sort of

-- 
David
>
> Read this message on an SPSS mailing list:
>
> http://www.listserv.uga.edu/cgi-bin/wa?A2=ind9902&L=spssx-l&D=0&F=P&P=7633
>
> .... and then look at the parameterization for rgamma in the r help
> pages. I seem to remember that Terry Therneau has also pointed out
> this ambiguous scale parameter issue for gamma in the past.
>
> (This is, by the way, beginning to sound quite a bit like a homework
> problem.)
>
> -- 
> David
>
>>
>> Thanks a lot.
>> Garry
>>
>> On Tue, Nov 10, 2009 at 12:15 PM, Ravi Varadhan <RVaradhan at jhmi.edu>
>> wrote:
>> I think he means "rate = 0.008", so he is looking for:
>>
>> rgamma(n, shape=0.067, rate=0.008)
>>
>> Even then his problem is not well-posed.  You cannot have both
>> "independent"
>> gamma rv's and have them sum to 2000.
>>
>> Ravi.
>> ----------------------------------------------------------------------------
>> -------
>>
>> Ravi Varadhan, Ph.D.
>>
>>
>> -----Original Message-----
>> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org
>> ] On
>> Behalf Of David Winsemius
>> Sent: Tuesday, November 10, 2009 2:47 PM
>> To: Hongwei Dong
>> Cc: R-help Forum; Duncan Murdoch
>> Subject: Re: [R] Generate Random Draw from Gamma Distribution Re:
>> Monte
>> Carlo Simulation in R...
>>
>>
>> On Nov 10, 2009, at 2:26 PM, Hongwei Dong wrote:
>>
>>> Exactly! Thanks, Duncan.
>>>
>>> Let me re-phrase me question like this:
>>>
>>> 1) X_i values are independent Gammas, with the shape 0.067 and scale
>>> 0.008
>>> 2) Min(X)=1 and Max(X)=85
>>
>> You might want to check that your parameterization in in agreement
>> with that used by the rgamma function. Simply using those numbers
>> yields a distribution that does not look as though it would get many
>> qualifying samples. Here are 20 draws without any exclusions  
>> outside a
>> range:
>>
>>> rgamma(20, shape=0.067,  scale = 0.008)
>> [1] 2.213459e-03 2.815705e-05 2.381306e-04 2.264602e-07 1.293713e-07
>> 7.680773e-38 6.441082e-15 6.168961e-13
>> [9] 5.089033e-06 1.571858e-16 9.869878e-12 1.813121e-13 1.253287e-11
>> 1.852885e-04 4.212802e-07 1.774495e-25
>> [17] 1.892984e-07 5.927422e-17 1.322638e-12 4.327472e-05
>>
>> http://finzi.psych.upenn.edu/R/Rhelp02/archive/31459.html
>>
>>
>>> 3) SUM(X)=2000
>>> 4) Do I also have to define the number of draws? if yes, it could be
>>> 250.
>>>
>>> Based on these restrictions, I want to generate random draw. I'm
>>> wondering
>>> how I can do this in R. Thanks.
>>>
>>> Garry
>>>
>>> On Tue, Nov 10, 2009 at 11:17 AM, Duncan Murdoch
>>> <murdoch at stats.uwo.ca>wrote:
>>>
>>>> On 11/10/2009 1:25 PM, Hongwei Dong wrote:
>>>>
>>>>> Hi, Dear R users,
>>>>>
>>>>> I'm wondering if I can do Monte Carlo Simulation in R. My problem
>>>>> is like
>>>>> this: I know variable X follows Gamma distribution with shape
>>>>> parameter
>>>>> 0.067 and scale parameter 0.008. The sum of the X is 2000. I need
>>>>> R help
>>>>> me
>>>>> to simulate a vector of X that satisfies both the probability
>>>>> distribution
>>>>> and the sum. Anyone has a clue to this? Much appreciated.
>>>>>
>>>>
>>>> Your requirements are slightly contradictory or incomplete.  Here's
>>>> one way
>>>> to fully specify the problem:
>>>>
>>>> The X_i values are independent Gammas, with the given shape and
>>>> scale. You
>>>> want to simulate from the joint distribution conditional on the
>>>> event sum(X)
>>>> == 2000.
>>>>
>>>> Is that your problem?  I don't know how to do the simulation, but
>>>> maybe
>>>> someone else does.
>>>>
>>>> Duncan Murdoch
>>>>
>


David Winsemius, MD
Heritage Laboratories
West Hartford, CT




More information about the R-help mailing list