Hello, we have a set of biological cell-size data, which are only available as frequencies of discrete size classes, because of the high effort of manual microscopic measurements. The lengths are approximately gamma distributed, however the shape of the distribution is relatively variable between different samples (maybe it's a mixture in reality). Is there any ML fitting (or moment-based) procedure for the gamma distribution and grouped data already available in R? Here is a small example: breaks <- c(0, 20, 30, 40, 50, 60, 70, 80, 90, 100, 150) mids <- c(10, 25, 35, 45, 55, 65, 75, 85, 95, 125) counts <- c(87, 5, 2, 2, 1, 1, 0, 0, 1, 1) Any help is highly appreciated Thomas P.
library(stats4)
ll <- function(shape, rate)
{
z <- pgamma(breaks, shape=shape, rate=rate)
-sum(counts * log(diff(z)))
}
mle(ll, start=list(shape=1, rate=1/mean(breaks)))
looks a plausible fit.
On Tue, 28 Nov 2006, Thomas Petzoldt wrote:
> Hello,
>
> we have a set of biological cell-size data, which are only available as
> frequencies of discrete size classes, because of the high effort of
> manual microscopic measurements.
>
> The lengths are approximately gamma distributed, however the shape of
> the distribution is relatively variable between different samples (maybe
> it's a mixture in reality).
>
> Is there any ML fitting (or moment-based) procedure for the gamma
> distribution and grouped data already available in R?
>
> Here is a small example:
>
> breaks <- c(0, 20, 30, 40, 50, 60, 70, 80, 90, 100, 150)
> mids <- c(10, 25, 35, 45, 55, 65, 75, 85, 95, 125)
> counts <- c(87, 5, 2, 2, 1, 1, 0, 0, 1, 1)
>
> Any help is highly appreciated
>
> Thomas P.
>
> ______________________________________________
> 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
> and provide commented, minimal, self-contained, reproducible code.
>
--
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
Augusto.Sanabria at ga.gov.au
2006-Nov-30 00:09 UTC
[R] ML fit of gamma distribution to grouped data
Thomas,
The Gamma distr. can be fitted via ML using:
Library("MASS")
GF <- fitdistr(given_data,"gamma")
sh <- GF$estimate[1]
ra <- GF$estimate[2]
Fitting via Moments, m:
var <- m[2] - m[1]*m[1]
sh <- m[1]*m[1]/var
sc <- m[1]/var
ra <- 1/sc
G_pdf <- dgamma(breaks,shape=sh,rate=ra,scale=1/ra)
Hope it helps,
Augusto
--------------------------------------------
Augusto Sanabria. MSc, PhD.
Mathematical Modeller
Risk Research Group
Geospatial & Earth Monitoring Division
Geoscience Australia (www.ga.gov.au)
Cnr. Jerrabomberra Av. & Hindmarsh Dr.
Symonston ACT 2601
Ph. (02) 6249-9155
-----Original Message-----
From: r-help-bounces at stat.math.ethz.ch
[mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Thomas Petzoldt
Sent: Tuesday, 28 November 2006 10:26
To: r-help at stat.math.ethz.ch
Subject: [R] ML fit of gamma distribution to grouped data
Hello,
we have a set of biological cell-size data, which are only available as
frequencies of discrete size classes, because of the high effort of
manual microscopic measurements.
The lengths are approximately gamma distributed, however the shape of
the distribution is relatively variable between different samples (maybe
it's a mixture in reality).
Is there any ML fitting (or moment-based) procedure for the gamma
distribution and grouped data already available in R?
Here is a small example:
breaks <- c(0, 20, 30, 40, 50, 60, 70, 80, 90, 100, 150)
mids <- c(10, 25, 35, 45, 55, 65, 75, 85, 95, 125)
counts <- c(87, 5, 2, 2, 1, 1, 0, 0, 1, 1)
Any help is highly appreciated
Thomas P.
______________________________________________
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
and provide commented, minimal, self-contained, reproducible code.
Dear Augusto,
thank you for your example. Your solutions are the in fact the usual
methods, but these do not apply to my case because I have grouped data.
The good news is, that the solution of Prof. Brian Ripley works
perfectly -- of course :-)
Thank you both for your help.
Thomas P.
Augusto.Sanabria at ga.gov.au wrote:
> Thomas,
>
> The Gamma distr. can be fitted via ML using:
>
> Library("MASS")
> GF <- fitdistr(given_data,"gamma")
> sh <- GF$estimate[1]
> ra <- GF$estimate[2]
>
> Fitting via Moments, m:
> var <- m[2] - m[1]*m[1]
> sh <- m[1]*m[1]/var
> sc <- m[1]/var
> ra <- 1/sc
>
> G_pdf <- dgamma(breaks,shape=sh,rate=ra,scale=1/ra)
>
>
> Hope it helps,
>
> Augusto
[...] original message deleted