我试图了解 R 中 AIC/BIC 的结果。出于某种原因,R 将要估计的参数数量加了 1。因此,R 使用不同于2 * p - 2 * logLik
(在高斯情况下logLik
是残差平方和)的公式。实际上它使用:2 * (p + 1) - 2 * logLik
.
经过研究,我发现问题与stats:::logLik.lm()
.
> stats:::logLik.lm ## truncated R function body
## ...
## attr(val, "df") <- p + 1
## ...
作为一个真实的例子(使用 R 的内置数据集trees
),考虑:
x <- lm(Height ~ Girth, trees) ## a model with 2 parameters
logLik(x)
## 'log Lik.' -96.01663 (df=3)
这真是令人费解。有谁知道为什么?
Edit1:glm
@crayfish44 的示例
model.g <- glm(dist ~ speed, cars, family=gaussian)
logLik(model.g) # df=3
model.p <- glm(dist ~ speed, cars, family=poisson)
logLik(model.p) #df=2
model.G <- glm(dist ~ speed, cars, family=Gamma)
logLik(model.G) #df=3
编辑2:方法logLik
> methods(logLik)
[1] logLik.Arima* logLik.glm* logLik.lm* logLik.logLik* logLik.nls*