具有正向参数的 R stats::step 函数未优化 LR 模型 (AIC)
R stats::step function with forward direction param is not optimizing the LR model(AIC)
我之前使用过 AIC 和阶跃函数来选择变量,但由于某种原因无法让它工作。
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 ~.,
传递,但这些更改没有解决问题。
阶跃函数的输出是一个与基础模型(m0)相同的模型。
step
函数在其中使用 update
。另一方面,与 lm
函数相比,.
在 update
函数中具有不同的含义。 update 中的 .
用于表示您希望按照原来的方式维护公式,而不是像 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")
这就是我解决问题的方法。正如 Onyambu 在他的回复中提到的,在 AIC 中,点的工作方式与在 lm 中不同。我没有手动连接 84 个预测变量,而是使用带有 collapse="+" 的粘贴函数。
glmnet( formula(paste0("Y~", paste(names(Caravan)[1:85], collapse="+"))),
....)
我之前使用过 AIC 和阶跃函数来选择变量,但由于某种原因无法让它工作。
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 ~.,
传递,但这些更改没有解决问题。
阶跃函数的输出是一个与基础模型(m0)相同的模型。
step
函数在其中使用 update
。另一方面,与 lm
函数相比,.
在 update
函数中具有不同的含义。 update 中的 .
用于表示您希望按照原来的方式维护公式,而不是像 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")
这就是我解决问题的方法。正如 Onyambu 在他的回复中提到的,在 AIC 中,点的工作方式与在 lm 中不同。我没有手动连接 84 个预测变量,而是使用带有 collapse="+" 的粘贴函数。
glmnet( formula(paste0("Y~", paste(names(Caravan)[1:85], collapse="+"))),
....)