我以前使用AIC和step函数进行变量选择,但是由于某种原因无法使它起作用。
library(ISLR)
d = data("Caravan")
train_data = Caravan[-c(1:500,]
m0 <- glm(Purchase ~ 1, data = train_data, family = "binomial")
stats::step(m0, direction = "forward", trace = 1 )
PN-我尝试了stepAIC
函数,并尝试将范围作为scope = Purchase ~.,
传递,但这些更改都不能解决问题。
step函数的输出是与基础模型(m0)相同的模型。
答案 0 :(得分:2)
step
函数在其中使用update
。另一方面,与.
函数相比,update
在lm
函数中具有不同的含义。更新中的.
用来表示您希望以原始方式维护该公式,而不是像lm
中那样包含所有变量。因此,如果您的模型是m<-lm(y~x)
,则update(m,log(.)~.)
只是意味着将左侧更改为对数,即log(y)
,同时保持右侧不变。即x
。除了模型中的变量之外,perios不包含任何其他变量。
您应该做什么:
scopef <- reformulate(grep("Purchase",names(Caravan),value=T,invert = T),"Purchase")
step(m0,scopef,direction = "forward")
答案 1 :(得分:0)
这就是我解决问题的方式。正如Onyambu在答复中提到的那样,在AIC中,该点不能像lm中那样工作。我没有将84个预测变量手动连接,而是将粘贴功能与崩溃=“ +”结合使用。
glmnet( formula(paste0("Y~", paste(names(Caravan)[1:85], collapse="+"))),
....)