GammaPoiss {extraDistr} | R Documentation |
Gamma-Poisson distribution
Description
Probability mass function and random generation for the gamma-Poisson distribution.
Usage
dgpois(x, shape, rate, scale = 1/rate, log = FALSE)
pgpois(q, shape, rate, scale = 1/rate, lower.tail = TRUE, log.p = FALSE)
rgpois(n, shape, rate, scale = 1/rate)
Arguments
x , q |
vector of quantiles. |
shape , scale |
shape and scale parameters. Must be positive, scale strictly. |
rate |
an alternative way to specify the scale. |
log , log.p |
logical; if TRUE, probabilities p are given as log(p). |
lower.tail |
logical; if TRUE (default), probabilities are |
n |
number of observations. If |
Details
Gamma-Poisson distribution arises as a continuous mixture of
Poisson distributions, where the mixing distribution
of the Poisson rate \lambda
is a gamma distribution.
When X \sim \mathrm{Poisson}(\lambda)
and \lambda \sim \mathrm{Gamma}(\alpha, \beta)
, then X \sim \mathrm{GammaPoisson}(\alpha, \beta)
.
Probability mass function
f(x) = \frac{\Gamma(\alpha+x)}{x! \, \Gamma(\alpha)} \left(\frac{\beta}{1+\beta}\right)^x \left(1-\frac{\beta}{1+\beta}\right)^\alpha
Cumulative distribution function is calculated using recursive algorithm that employs the fact that
\Gamma(x) = (x - 1)!
. This enables re-writing probability mass function as
f(x) = \frac{(\alpha+x-1)!}{x! \, \Gamma(\alpha)} \left( \frac{\beta}{1+\beta} \right)^x \left( 1- \frac{\beta}{1+\beta} \right)^\alpha
what makes recursive updating from x
to x+1
easy using the properties of factorials
f(x+1) = \frac{(\alpha+x-1)! \, (\alpha+x)}{x! \,(x+1) \, \Gamma(\alpha)} \left( \frac{\beta}{1+\beta} \right)^x \left( \frac{\beta}{1+\beta} \right) \left( 1- \frac{\beta}{1+\beta} \right)^\alpha
and let's us efficiently calculate cumulative distribution function as a sum of probability mass functions
F(x) = \sum_{k=0}^x f(k)
See Also
Examples
x <- rgpois(1e5, 7, 0.002)
xx <- seq(0, 12000, by = 1)
hist(x, 100, freq = FALSE)
lines(xx, dgpois(xx, 7, 0.002), col = "red")
hist(pgpois(x, 7, 0.002))
xx <- seq(0, 12000, by = 0.1)
plot(ecdf(x))
lines(xx, pgpois(xx, 7, 0.002), col = "red", lwd = 2)