R: The Gamma Distribution

GammaDist {stats} | R Documentation

## The Gamma Distribution

### Description

Density, distribution function, quantile function and random generation for the Gamma distribution with parameters `shape` and `scale`.

### Usage

    dgamma(x, shape, rate = 1, scale = 1/rate, log = FALSE)
    pgamma(q, shape, rate = 1, scale = 1/rate, lower.tail = TRUE,
           log.p = FALSE)
    qgamma(p, shape, rate = 1, scale = 1/rate, lower.tail = TRUE,
           log.p = FALSE)
    rgamma(n, shape, rate = 1, scale = 1/rate)

### Arguments

`x, q` | vector of quantiles.
`p` | vector of probabilities.
`n` | number of observations. If `length(n) > 1`, the length is taken to be the number required.
`rate` | an alternative way to specify the scale.
`shape, scale` | shape and scale parameters. Must be positive, `scale` strictly.
`log, log.p` | logical; if `TRUE`, probabilities/densities p are returned as log(p).
`lower.tail` | logical; if TRUE (default), probabilities are P[X ≤ x], otherwise, P[X > x].

### Details

If `scale` is omitted, it assumes the default value of `1`.

The Gamma distribution with parameters `shape` = a and `scale` = s has density

f(x)= 1/(s^a Gamma(a)) x^(a-1) e^-(x/s)

for x ≥ 0, a > 0 and s > 0. (Here Gamma(a) is the function implemented by R's `gamma()` and defined in its help. Note that a = 0 corresponds to the trivial distribution with all mass at point 0.)

The mean and variance are E(X) = a*s and Var(X) = a*s^2.

The cumulative hazard H(t) = - log(1 - F(t)) is

    -pgamma(t, ..., lower = FALSE, log = TRUE)

Note that for smallish values of `shape` (and moderate `scale`) a large parts of the mass of the Gamma distribution is on values of x so near zero that they will be represented as zero in computer arithmetic. So `rgamma` may well return values which will be represented as zero. (This will also happen for very large values of `scale` since the actual generation is done for `scale = 1`.)

### Value

`dgamma` gives the density, `pgamma` gives the distribution function, `qgamma` gives the quantile function, and `rgamma` generates random deviates.

Invalid arguments will result in return value `NaN`, with a warning.

The length of the result is determined by `n` for `rgamma`, and is the maximum of the lengths of the numerical arguments for the other functions.

The numerical arguments other than `n` are recycled to the length of the result. Only the first elements of the logical arguments are used.

### Note

The S (Becker et al, 1988) parametrization was via `shape` and `rate`: S had no `scale` parameter. It is an error to supply and `scale` and `rate`.

`pgamma` is closely related to the incomplete gamma function. As defined by Abramowitz and Stegun 6.5.1 (and by ‘Numerical Recipes’) this is

P(a,x) = 1/Gamma(a) integral_0^x t^(a-1) exp(-t) dt

P(a, x) is `pgamma(x, a)`. Other authors (for example Karl Pearson in his 1922 tables) omit the normalizing factor, defining the incomplete gamma function γ(a,x) as gamma(a,x) = integral_0^x t^(a-1) exp(-t) dt, i.e., `pgamma(x, a) * gamma(a)`. Yet other use the ‘upper’ incomplete gamma function,

Gamma(a,x) = integral_x^Inf t^(a-1) exp(-t) dt,

which can be computed by `pgamma(x, a, lower = FALSE) * gamma(a)`.

Note however that `pgamma(x, a, ..)` currently requires a > 0, whereas the incomplete gamma function is also defined for negative a. In that case, you can use `gamma_inc(a,x)` (for Γ(a,x)) from package gsl.

See also https://en.wikipedia.org/wiki/Incomplete_gamma_function, or http://dlmf.nist.gov/8.2#i.

### Source

`dgamma` is computed via the Poisson density, using code contributed by Catherine Loader (see `dbinom`).

`pgamma` uses an unpublished (and not otherwise documented) algorithm ‘mainly by Morten Welinder’.

`qgamma` is based on a C translation of

Best, D. J. and D. E. Roberts (1975). Algorithm AS91. Percentage points of the chi-squared distribution. Applied Statistics, 24, 385–388.

plus a final Newton step to improve the approximation.

`rgamma` for `shape >= 1` uses

Ahrens, J. H. and Dieter, U. (1982). Generating gamma variates by a modified rejection technique. Communications of the ACM, 25, 47–54,

and for `0 < shape < 1` uses

Ahrens, J. H. and Dieter, U. (1974). Computer methods for sampling from gamma, beta, Poisson and binomial distributions. Computing, 12, 223–246.

### References

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Wadsworth & Brooks/Cole.

Shea, B. L. (1988). Algorithm AS 239: Chi-squared and incomplete Gamma integral, Applied Statistics (JRSS C), 37, 466–473. doi: 10.2307/2347328.

Abramowitz, M. and Stegun, I. A. (1972) Handbook of Mathematical Functions. New York: Dover. Chapter 6: Gamma and Related Functions.

NIST Digital Library of Mathematical Functions. http://dlmf.nist.gov/, section 8.2.

### See Also

`gamma` for the gamma function.

Distributions for other standard distributions, including `dbeta` for the Beta distribution and `dchisq` for the chi-squared distribution which is a special case of the Gamma distribution.

### Examples

    -log(dgamma(1:4, shape = 1))
    p <- (1:9)/10
    pgamma(qgamma(p, shape = 2), shape = 2)
    1 - 1/exp(qgamma(p, shape = 1))

    # even for shape = 0.001 about half the mass is on numbers
    # that cannot be represented accurately (and most of those as zero)
    pgamma(.Machine$double.xmin, 0.001)
    pgamma(5e-324, 0.001)  # on most machines 5e-324 is the smallest
                           # representable non-zero number
    table(rgamma(1e4, 0.001) == 0)/1e4

[Package stats version 3.5.1 Index]