Suppose I have the variable x that was generated using the following approach:
x <- rgamma(100,2,11) + rnorm(100,0,.01) #gamma distr + some gaussian noise
head(x,20)
[1] 0.35135058 0.12784251 0.23770365 0.13095612 0.18796901 0.18251968
[7] 0.20506117 0.25298286 0.11888596 0.07953969 0.09763770 0.28698417
[13] 0.07647302 0.17489578 0.02594517 0.14016041 0.04102864 0.13677059
[19] 0.18963015 0.23626828
How could I fit a gamma distribution to it?
To fit the gamma distribution to data and find parameter estimates, use gamfit , fitdist , or mle . Unlike gamfit and mle , which return parameter estimates, fitdist returns the fitted probability distribution object GammaDistribution . The object properties a and b store the parameter estimates.
A good alternative is the fitdistrplus
package by ML Delignette-Muller et al. For instance, generating data using your approach:
set.seed(2017)
x <- rgamma(100,2,11) + rnorm(100,0,.01)
library(fitdistrplus)
fit.gamma <- fitdist(x, distr = "gamma", method = "mle")
summary(fit.gamma)
Fitting of the distribution ' gamma ' by maximum likelihood
Parameters :
estimate Std. Error
shape 2.185415 0.2885935
rate 12.850432 1.9066390
Loglikelihood: 91.41958 AIC: -178.8392 BIC: -173.6288
Correlation matrix:
shape rate
shape 1.0000000 0.8900242
rate 0.8900242 1.0000000
plot(fit.gamma)
You could try to quickly fit Gamma distribution. Being two-parameters distribution one could recover them by finding sample mean and variance. Here you could have some samples to be negative as soon as mean is positive.
set.seed(31234)
x <- rgamma(100, 2.0, 11.0) + rnorm(100, 0, .01) #gamma distr + some gaussian noise
#print(x)
m <- mean(x)
v <- var(x)
print(m)
print(v)
scale <- v/m
shape <- m*m/v
print(shape)
print(1.0/scale)
For me it prints
> print(shape)
[1] 2.066785
> print(1.0/scale)
[1] 11.57765
>
You could also try to quickly and efficiently fit Gamma distribution with the Le Cam one-step estimation procedure using the onestep
command in the OneStep
package.
library(OneStep)
x <- rgamma(100,2,11) + rnorm(100,0,.01)
onestep(x,"gamma")
Parameters:
estimate
shape 2.155451
rate 11.679060
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With