[R] find parameters for a gamma distribution

Prof Brian Ripley ripley at stats.ox.ac.uk
Wed Jan 5 23:15:37 CET 2005


First, you want to fit the data not the histogram counts (binned data).

Second, glm does not do a very principled fit of a gamma (it is a moment 
estimator).  Something like

> d <- rgamma(1000, 20, scale = 2)
> summary(glm(d ~ 1, Gamma))
Coefficients:
              Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.0253072  0.0001822   138.9   <2e-16

(Dispersion parameter for Gamma family taken to be 0.05185392)

where the shape = 1/0.05185392 (no s.e.) and 0.0253072 is the mean
= 1/(scale*shape)

Try instead (on 100000 obs here)

library(MASS)
fitdistr(d, "Gamma")
       shape           rate
   19.812444027    0.495157589
  ( 0.087858938) ( 0.002223778)

which works for me.  You can make it use scale =1/rate by
> fitdistr(d, dgamma, start=list(shape=20,scale=2))
       shape          scale
   19.812702659    2.019419771
  ( 0.087774433) ( 0.009060263)


On Wed, 5 Jan 2005, Andrew Collier wrote:

> hello,
>
> i have just started exploring R as an alternative to matlab for data analysis. so
> +far everything is _very_ promising. i have a question though regarding parameter
> +estimation. i have some data which, from a histogram plot, appears to arise from
> +a gamma distribution. i gather that you can fit the data to the distribution
> +using glm(). i am just not quite sure how this is done in practice... so here is
> +a simple example with artificial data:
>
> d <- rgamma(100000, 20, scale = 2)
> h <- hist(d, breaks = c(seq(10, 80, 2), 100))
>
> H <- data.frame(x = h$mids, y = h$density)
>
> g <- glm(y ~ x, data = H, family = Gamma)
> summary(g)
>
> Call:
> glm(formula = y ~ x, family = Gamma, data = H)
>
> Deviance Residuals:
>    Min       1Q   Median       3Q      Max
> -3.8654  -2.0887  -0.7685   0.7147   1.4508
>
> Coefficients:
>            Estimate Std. Error t value Pr(>|t|)
> (Intercept)  30.4758    26.7258   1.140    0.262
> x             1.0394     0.6825   1.523    0.137
>
> (Dispersion parameter for Gamma family taken to be 1.343021)
>
>    Null deviance: 119.51  on 35  degrees of freedom
> Residual deviance: 116.28  on 34  degrees of freedom
> AIC: -260.49
>
> Number of Fisher Scoring iterations: 7
>
> now i suppose that the estimates parameters are:
>
>        shape = 30.4758
>        scale = 1.0394
>
> am i interpreting the output correctly? and, if so, why are these estimates so
> +poor? i would, perhaps naively, expected the parameters from an artificial
> +sample like this to be pretty good.
>
> my apologies if i am doing something stupid here but my statistics capabilties
> +are rather limited!
>
> best regards,
> andrew collier.
> -- 
> Andrew B. Collier
>
> Antarctic Research Fellow                                   tel: +27 31 2601157
> Space Physics Research Institute                            fax: +27 31 2616550
> University of KwaZulu-Natal, Durban, 4041, South Africa
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list