# [R] AIC, AICc, and K

Martin Maechler maechler at stat.math.ethz.ch
Mon Dec 6 12:31:58 CET 2004

```>>>>> "Spencer" == Spencer Graves <spencer.graves at pdf.com>
>>>>>     on Sat, 04 Dec 2004 17:09:26 -0800 writes:

Spencer> I don't know the "best" way, but the following looks like it will
Spencer> work:

Spencer> tstDF <- data.frame(x=1:3, y=c(1,1,2))
Spencer> fit0 <- lm(y~1, tstDF)
Spencer> fitDF <- lm(y~x, tstDF)
Spencer> AIC(fitDF,fit0)
Spencer> df      AIC
Spencer> fitDF  3 5.842516
Spencer> fit0   2 8.001399

Spencer> The function AIC with only 1 argument returns only
Spencer> a single number.  However, given nested models, it
Spencer> returns a data.frame with colums df and AIC.  At
Spencer> least in this example (and I would think in all
Spencer> other contexts as well), "df" is the K you want.

yes, but Benjamin would hardly want to invent a second model
just in order to call AIC() with both models and get the data
frame...

As Benjamin hoped, the "df" is part of the logLik(.) result,
and if either of you had more carefully looked at  help(logLik),
you'd have seen

>> Value:
>>
>>      Returns an object, say 'r', of class 'logLik' which is a number
>>      with attributes, 'attr(r, "df")' (*d*egrees of *f*reedom) giving
>>      the number of parameters in the model. There's a simple 'print'
>>      method for 'logLik' objects.

More directly, you can use

> str(unclass(logLik(fit0)))
atomic [1:1] -2
- attr(*, "nall")= int 3
- attr(*, "nobs")= int 3
- attr(*, "df")= num 2

or

> stats:::AIC.logLik
function (object, ..., k = 2)
-2 * c(object) + k * attr(object, "df")

to see how these work.

Martin Maechler, ETH Zurich

Spencer> hope this helps.
Spencer> Spencer Graves

Spencer> Benjamin M. Osborne wrote:

>> How can I extract K (number of parameters) from an AIC
>> calculation, both to report K itself and to calculate
>> AICc?  I'm aware of the conversion from AIC -> AICc,
>> where AICc = AIC + 2K(K+1)/(n-K-1), but not sure of how K
>> is calculated or how to extract that value from either an
>> AIC or logLik calculation.

>> This is probably more of a basic statistics question than
>> an R question, but I thank you for your help.

>> -Ben Osborne
>>

```