StepAIC() 停止点

StepAIC() stopping point

我想了解 StepAIC() 的停止点。使用 direction = 'backward' 时,如果进一步删除条款不再降低模型 AIC,它会停止吗?示例如下:

fm<- lm(mpg ~ ., data = mtcars)
require(MASS)
fit_fm <- stepAIC(fm, direction = 'backward')
#The final step stopped at:
Step:  AIC=61.31
mpg ~ wt + qsec + am

       Df Sum of Sq RSS  AIC
<none>              169 61.3
- am    1      26.2 195 63.9
- qsec  1     109.0 278 75.2
- wt    1     183.3 353 82.8

这是否意味着删除任何术语 wt、qsec 或 am 根本不会降低模型 AIC(即所有 AIC = 61.31)?

是的,没错。您可以自己检查一下(extractAIC() 中的 second 值是 AIC):

extractAIC(fm_nowt <- update(fit_fm, . ~ . -wt))
## [1]  3.00000 82.79016
extractAIC(fm_noqsec <- update(fit_fm, . ~ . -qsec))
## [1]  3.00000 75.21711
extractAIC(fm_noam <- update(fit_fm, . ~ . -am))
## [1]  3.00000 63.90843

请注意,extractAIC() 返回的值与 AIC() 在 base R 中返回的值不同,但是 模型 AIC 之间的差异(即我们真正关心的)都一样:

 AIC(fm_nowt)- AIC(fit_fm)
[1] 21.48286
> extractAIC(fm_nowt)- extractAIC(fit_fm)
[1] -1.00000 21.48286
       Df Sum of Sq RSS  AIC
<none>              169 61.3
- am    1      26.2 195 63.9
- qsec  1     109.0 278 75.2
- wt    1     183.3 353 82.8

如果您删除更多项,此 table 将向您显示 AIC,<none> 行是当前模型。

如果保持模型不变,删除的附加项为 <none>,AIC 为 61.3。如果您删除这些术语,则每行显示 AIC(删除 am,获得 63.9 的 AIC,等等)。所以你是对的,删除任何剩余的条款都会提高 AIC - 你处于 AIC 的(本地)最小值。