如何使用R中的step()为BIC标准提取正确的模型?

时间:2018-03-19 15:13:30

标签: regression linear-regression

我正在尝试使用波士顿数据集选择使用AIC和BIC标准的最佳模型。根据AIC标准,我有最好的型号。对于BIC标准,我使用了以下代码:

# Selecting best possible model using BIC
lm.BIC<-step(lm.null,scope = list(lower = lm.null, upper = lm.full), direction = "both", trace = TRUE, k = log(nrow(training)))

以上代码的输出如下:

enter image description here

吐出具有降低的AIC值的模型。我检查了最后一个模型(呼叫模型1 medv ~ lstat + rm + ptratio + black + dis + nox)和另一个模型(呼叫模型2 medv ~ lstat + rm + ptratio + black + dis + nox + rad + tax + zn)的BIC值。模型2有三个额外的变量。我发现模型2的BIC值小于模型1.所以我很困惑如何使用上面的R代码行提取最好的BIC模型及其输出,当它显示的都是AIC值时,我不知道我想判断我的模特。

谢谢

1 个答案:

答案 0 :(得分:0)

使用代码参考AIC功能

?AIC 

您会发现AIC定义为-2 * L + k * npar,其中L是对数似然性,npar是拟合模型中的参数数,而对于AIC严格来说k = 2。 BIC定义为-2 * L + log(n)* npar。也就是说,对于BIC,我们有k = log(n),其中观察次数为n。因此,您的代码是正确的,并且实际上可以计算BIC。以下代码可根据BIC找到最佳模型:

opt_step = step(lm.null,scope = list(lower = lm.null, 
upper = lm.full), direction = "both", trace = TRUE, 
k = log(nrow(training)))

BIC = opt_step$anova$AIC
print(BIC)

尽管标记为AIC,但由于k已从其默认值更改,因此步长函数正在计算BIC。