fitdistr {MASS} | R Documentation

## Maximum-likelihood Fitting of Univariate Distributions

### Description

Maximum-likelihood fitting of univariate distributions, allowing parameters to be held fixed if desired.

### Usage

    fitdistr(x, densfun, start, ...)

### Arguments

`x` | A numeric vector.
`densfun` | Either a character string or a function returning a density evaluated at its first argument. Distributions `"beta"`, `"cauchy"`, `"chi-squared"`, `"exponential"`, `"f"`, `"gamma"`, `"log-normal"`, `"lognormal"`, `"logistic"`, `"negative binomial"`, `"normal"`, `"t"`, `"uniform"` and `"weibull"` are recognised, case being ignored.
`start` | A named list giving the parameters to be optimized with initial values. This can be omitted for some of the named distributions (see Details).
`...` | Additional parameters, either for `densfun` or for `optim`. In particular, it can be used to specify bounds via `lower` or `upper` or both. If arguments of `densfun` (or the density function corresponding to a character-string specification) are included they will be held fixed.

### Details

Direct optimization of the log-likelihood is performed, with numerical derivatives. The estimated standard errors are taken from the observed information, calculated by a numerical approximation.

For the following named distributions, reasonable starting values will be computed if `start` is omitted or only partially specified: `cauchy`, `gamma`, `logistic`, `negative binomial` ( parametrized by `mu` and `size`), `t`, `uniform`, `weibull`.

### Value

an object of class `"fitdistr"`, a list with two components,

`estimate` | the parameter estimates, and
`sd` | the estimated standard errors.

### References

Venables, W. N. and Ripley, B. D. (2002) Modern Applied Statistics with S. Fourth edition. Springer.

### Examples

    set.seed(123)
    x <- rgamma(100, shape = 5, rate = 0.1)
    fitdistr(x, "gamma")
    ## now do this directly with more control.
    fitdistr(x, dgamma, list(shape = 1, rate = 0.1), lower = 0.01)

    set.seed(123)
    x2 <- rt(250, df = 9)
    fitdistr(x2, "t", df = 9)
    ## allow df to vary: not a very good idea!
    fitdistr(x2, "t")
    ## now do this directly with more control.
    mydt <- function(x, m, s, df) dt((x-m)/s, df)/s
    fitdistr(x2, mydt, list(m = 0, s = 1), df = 9, lower = c(-Inf, 0))

    set.seed(123)
    x3 <- rweibull(100, shape = 4, scale = 100)
    fitdistr(x3, "weibull")

    set.seed(123)
    x4 <- rnegbin(500, mu = 5, theta = 4)
    fitdistr(x4, "Negative Binomial") # R only

[Package Contents]