Maximum-likelihood Fitting of Univariate Distributions
Maximum-likelihood fitting of univariate distributions, allowing parameters to be held fixed if desired.
fitdistr(x, densfun, start, ...)
- A numeric vector.
- Either a character string or a function returning a density evaluated
at its first argument.
- A named list giving the parameters to be optimized with initial values. This can be omitted for some of the named distributions and must be for others (see Details).
- Additional parameters, either for
optim. In particular, it can be used to specify bounds via
upperor both. If arguments of
densfun(or the density function co
For the Normal, log-Normal, exponential and Poisson distributions the
closed-form MLEs (and exact standard errors) are used, and
start should not be supplied.
For all other distributions, direct optimization of the log-likelihood
is performed using
optim. The estimated standard
errors are taken from the observed information matrix, calculated by a
numerical approximation. For one-dimensional problems the Nelder-Mead
method is used and for multi-dimensional problems the BFGS method,
unless arguments named
upper are supplied when
L-BFGS-B is used or
method is supplied explicitly.
"t" named distribution the density is taken to be the
location-scale family with location
m and scale
For the following named distributions, reasonable starting values will
be computed if
start is omitted or only partially specified:
"negative binomial" (parametrized by
"weibull". Note that these
starting values may not be good enough if the fit is poor: in
particular they are not resistant to outliers unless the fitted
distribution is long-tailed.
- An object of class
"fitdistr", a list with three components,
estimate the parameter estimates, sd the estimated standard errors, and loglik the log-likelihood.
Venables, W. N. and Ripley, B. D. (2002) Modern Applied Statistics with S. Fourth edition. Springer.
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 fixed-df fit 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