在R中计算AIC与BIC的疑问:step函数k参数设置是否正确?
关于R中step函数AIC/BIC判定的问题
核心结论
- 当你设置
k = log(nrow(S1901Income2022))时,实际在使用BIC - 当你修改为
k = 2时,输出结果基于标准AIC
原理说明
AIC和BIC的核心差异在于模型复杂度的惩罚项系数:
- 标准AIC公式:
AIC = -2 * log(似然值) + 2 * p,其中p是模型参数数量 - BIC公式:
BIC = -2 * log(似然值) + log(n) * p,其中n是样本量
R的step()函数中,k参数就是用来指定这个惩罚项的系数:
- 默认
k=2,对应标准AIC计算逻辑 - 当把
k设为log(n)时,完全匹配BIC的惩罚规则,哪怕输出标注为"AIC",本质是BIC数值
对应你的代码场景
第一次的代码:
step(burglary_intercept_model , direction = 'forward' , scope = formula(burglary_income_model) , trace = 1 , k = log(nrow(S1901Income2022)))
这里用样本量的对数作为k值,执行的是基于BIC的逐步回归。
修改后的代码:
step(burglary_intercept_model , direction = 'forward' , scope = formula(burglary_income_model) , trace = 1 , k = 2)
k=2对应AIC的标准惩罚系数,此时逐步回归的模型选择逻辑完全基于AIC。
内容的提问来源于stack exchange,提问作者Steven Morrison
相关产品推荐
相关产品推荐

