我正在尝试使用波士顿数据集选择使用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)))
以上代码的输出如下:
吐出具有降低的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值时,我不知道我想判断我的模特。
谢谢
答案 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。