在R中“手工”计算AIC


15

我试过在R中计算线性回归的AIC,但未使用AIC函数,如下所示:

lm_mtcars <- lm(mpg ~ drat, mtcars)

nrow(mtcars)*(log((sum(lm_mtcars$residuals^2)/nrow(mtcars))))+(length(lm_mtcars$coefficients)*2)
[1] 97.98786

但是,AIC给出了不同的值:

AIC(lm_mtcars)
[1] 190.7999

有人可以告诉我我在做什么错吗?


5
(尚未检查您的答案):您不一定做错任何事情,因为可能性实际上仅定义为乘数常数;两个人可以计算对数似然并获得不同的数字(但对数似然的差异是相同的)。
Glen_b-恢复莫妮卡2014年

1
我认为,Hong Oois的答案与此问题有关。函数AIC使用的公式是-2*as.numeric(logLik(lm_mtcars))+2*(length(lm_mtcars$coefficients)+1)
COOLSerdash

luciano:该公式@COOLSerdash中的“ +1”表示源自方差参数项。还要注意,该函数logLik说,对于lm模型来说,它包括“所有常量” ...所以log(2*pi)在某处会有一个
Glen_b -Reinstate Monica 2014年

1
@Glen_b:为什么说似然只定义为一个乘法常数?毕竟,在比较来自不同分布族的非嵌套模型(例如,使用AIC或使用Cox检验)时,您需要记住该常数。
Scortchi-恢复莫妮卡

@Scortchi的定义不是我的!您将不得不使用RAFisher。我认为(1921)从一开始就是这样。至少在连续情况下,仍以这种方式进行定义,例如,请参见此处的 “更精确地”开头的句子。
Glen_b-恢复莫妮卡2014年

Answers:


18

请注意,logLikR中有关函数的帮助说,对于lm模型而言,它包括“所有常数” ...,因此该处将有一个“ a” log(2*pi),以及似然指数的另一个常数项。同样,您不能忘记计算是一个参数的事实。σ2

L(μ^,σ^)=(12πsn2)nexp(12i(ei2/sn2))

-2日志大号=ñ日志2π+ñ日志sñ2+一世Ë一世2/sñ2

=ñ[日志2π+日志sñ2+1]

AIC=2p-2日志大号

但请注意,对于具有1个独立变量的模型,p = 3(x系数,常数和)σ2

这意味着您将获得他们的答案:

nrow(mtcars)*(log(2*pi)+1+log((sum(lm_mtcars$residuals^2)/nrow(mtcars))))
       +((length(lm_mtcars$coefficients)+1)*2)

为什么在计算时只除以而不除? n n ps2ññ-p
卢克·索伯恩

1
参见AIC的定义:,其中参数的矢量最大,即计算值(即所有元素都是MLE);例如,参见Wikipedia Akaike信息标准:定义。如果您没有在的计算中除以,就不会计算的MLE,因此也就不会真正计算AIC -实际上,您需要进行两次调整拟合参数的效果。(是的,很多人做错了)θ θ Ñ σ 2 σ 2-2日志大号θ^+2pθθ^ñσ^2σ2
Glen_b-恢复莫妮卡(Monica

第二个等式中有错字吗?应该是 好吧,我知道,您使用的是-2日志大号=ñ日志2π+ñ日志sñ+一世Ë一世2/sñ22πsñ2
Rhody

10

AIC函数给出,其中是似然性,是估计参数的数量(包括截距和方差)。您正在使用,其中是残差平方和,&是样本量。这些公式的相加常数不同。只要你使用相同的公式和在寻找差异不同型号之间的AIC其中常数取消,也没关系。L k n log S r2ķ-2日志大号大号ķSrnñ日志小号[Rñ+2ķ-1小号[Rñ

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.