\HeaderA{mle}{Maximum Likelihood Estimation}{mle}
\keyword{models}{mle}
\begin{Description}\relax
Estimate parameters by the method of maximum likelihood.
\end{Description}
\begin{Usage}
\begin{verbatim}
mle(minuslogl, start = formals(minuslogl), method = "BFGS",
    fixed = list(), ...)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{minuslogl}] Function to calculate negative log-likelihood.
\item[\code{start}] Named list. Initial values for optimizer.
\item[\code{method}] Optimization method to use. See \code{\LinkA{optim}{optim}}.
\item[\code{fixed}] Named list.  Parameter values to keep fixed during
optimization.
\item[\code{...}] Further arguments to pass to \code{\LinkA{optim}{optim}}.
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
The \code{\LinkA{optim}{optim}} optimizer is used to find the minimum of the
negative log-likelihood.  An approximate covariance matrix for the
parameters is obtained by inverting the Hessian matrix at the optimum.
\end{Details}
\begin{Value}
An object of class \code{\LinkA{mle-class}{mle.Rdash.class}}.
\end{Value}
\begin{Note}\relax
Be careful to note that the argument is -log L (not -2 log L). It
is for the user to ensure that the likelihood is correct, and that
asymptotic likelihood inference is valid.
\end{Note}
\begin{SeeAlso}\relax
\code{\LinkA{mle-class}{mle.Rdash.class}}
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
x <- 0:10
y <- c(26, 17, 13, 12, 20, 5, 9, 8, 5, 4, 8)
## This needs a constrained parameter space: most methods will accept NA
ll <- function(ymax=15, xhalf=6)
    if(ymax > 0 && xhalf > 0) -sum(stats::dpois(y, lambda=ymax/(1+x/xhalf), log=TRUE)) else NA
(fit <- mle(ll))
mle(ll, fixed=list(xhalf=6))
## alternative using bounds on optimization
ll2 <- function(ymax=15, xhalf=6)
    -sum(stats::dpois(y, lambda=ymax/(1+x/xhalf), log=TRUE))
mle(ll2, method="L-BFGS-B", lower=rep(0, 2))

summary(fit)
logLik(fit)
vcov(fit)
plot(profile(fit), absVal=FALSE)
confint(fit)

## use bounded optimization
## the lower bounds are really > 0, but we use >=0 to stress-test profiling
(fit1 <- mle(ll, method="L-BFGS-B", lower=c(0, 0)))
plot(profile(fit1), absVal=FALSE)

## a better parametrization:
ll2 <- function(lymax=log(15), lxhalf=log(6))
    -sum(stats::dpois(y, lambda=exp(lymax)/(1+x/exp(lxhalf)), log=TRUE))
(fit2 <- mle(ll2))
plot(profile(fit2), absVal=FALSE)
exp(confint(fit2))
\end{ExampleCode}
\end{Examples}

