R中的AIC()和extractAIC()有什么区别?

机器算法验证 r 回归 aic 逐步回归
2022-03-21 08:59:12

两者的 R 文档都没有说明太多。我可以从这个链接得到的只是使用任何一个都可以。我不明白为什么他们不相等。

事实:R 中的逐步回归函数step()使用extractAIC().

有趣的是,在 R 的“mtcars”数据集上运行一个lm()模型和一个“空”模型(仅截距)给出了不同的结果glm()AICextractAIC()

> null.glm = glm(mtcars$mpg~1)
> null.lm = lm(mtcars$mpg~1)

> AIC(null.glm)
[1] 208.7555
> AIC(null.lm)
[1] 208.7555
> extractAIC(null.glm)
[1]   1.0000 208.7555
> extractAIC(null.lm)
[1]   1.0000 115.9434

这很奇怪,因为上面的两个模型都是相同的,并且AIC()给出了相同的结果。

任何人都可以对这个问题有所了解吗?

2个回答

根据这两个功能的帮助(使用 ?AIC 和 ?extractAIC),这是可以预期的。

请注意,AIC 只是定义为一个附加常数,因为这也是对数似然的情况。这意味着您应该检查是否

extractAIC(full.modell) - extractAIC(null.modell)

AIC(full.modell) - AIC(null.modell)

给出相同的结果。只要他们这样做,这两个功能对于所有实际目的都是等效的。

lm通常的线性回归模型 ( ) 在AIC和之间有两个区别extractAIC

  • AIC考虑了误差的未知方差(即尺度)的估计,而extractAIC没有考虑,因此k与 少一extractAIC
  • AIC使用公式nlogRSSn+n+nlog(2π)对于 -2 对数似然,同时extractAIC删除附加常数,并且仅使用nlogRSSn. (至少默认情况下;您可以设置自定义比例。)

当然,如果这些值仅用于比较,这些都不重要。

除了这些,正如上面已经提到的,对于(与! 相比)extractAIC表现不同,即,它仅对 使用上述公式,因为它切换到拟合模型的函数,这是不同的。lmglmAIClmglmaic