Akaike's An Information Criterion
Generic function calculating Akaike's
AIC(object, ..., k = 2)
- a fitted model object for which there exists a
logLikmethod to extract the corresponding log-likelihood, or an object inheriting from class
- optionally more fitted model objects.
- numeric, the penalty per parameter to be used; the
k = 2is the classical AIC.
When comparing models fitted by maximum likelihood to the same data, the smaller the AIC or BIC, the better the fit. The theory of AIC requires that the log-likelihood has been maximized: whereas AIC can be computed for models not fitted by maximum likelihood, their AIC values should not be compared.
Examples of models not
logLik rather than these
functions: the action of their default methods is to call
on all the supplied objects and assemble the results. Note that in
several common cases
logLik does not return the value at
the MLE: see its help page.
The log-likelihood and hence the AIC/BIC is only defined up to an
additive constant. Different constants have conventionally been used
for different purposes and so
may give different values (and do for models of class
the help for
extractAIC). Particular care is needed
when comparing fits of different classes (with, for example, a
comparison of a Poisson and gamma GLM being meaningless since one has
a discrete response, the other continuous).
BIC is defined as
AIC(object, ..., k = log(nobs(object))).
This needs the number of observations to be known: the default method
looks first for a
"nobs" attribute on the return value from the
logLik method, then tries the
generic, and if neither succeed returns BIC as
- If just one object is provided, a numeric value with the corresponding
AIC (or BIC, or ..., depending on
If multiple objects are provided, a
data.framewith rows corresponding to the objects and columns representing the number of parameters in the model (
df) and the AIC or BIC.
Sakamoto, Y., Ishiguro, M., and Kitagawa G. (1986). Akaike Information Criterion Statistics. D. Reidel Publishing Company.
lm1 <- lm(Fertility ~ . , data = swiss) AIC(lm1) stopifnot(all.equal(AIC(lm1), AIC(logLik(lm1)))) BIC(lm1) lm2 <- update(lm1, . ~ . -Examination) AIC(lm1, lm2) BIC(lm1, lm2)