如何使用插入符号循环 R 中阶跃函数的不同切割值

How to loop through different cut values for a step function in R with caret

如果这是一个初学者问题,我深表歉意,但我正在做 R 统计学习简介一书中的练习,无法为以下问题找到解决方案:

任务是使用具有不同切割值的阶跃函数和交叉验证来比较回归模型的准确性。我选择使用 caret 包。

library(ISLR)   
library(caret) 
Wage <- Wage

只需加载所需的包并加载我一直在使用的数据集(包含在 ISLR 包中)

cv.errors <- rep(0, 13) 
stepfit <- train(wage ~ cut(age, 7), 
 data = Wage,
 method = "lm",
  trControl = trainControl(
   method = "cv",
   number = 10))
cv.errors[1] <- stepfit$results$RMSE

到目前为止一切顺利,代码有效,让我可以使用准备好的向量中的 7 个切割来保存模型的最终 RMSE 值。

set.seed(1)
for(i in 2:14) {
 stepfit <- train(
  wage ~ cut(age, i), data = Wage,
  method = "lm",
   trControl = trainControl(
    method = "cv",
    number = 10
  ))
cv.errors[i] <- stepfit$results$RMSE
}

尝试循环从 2 到 14 的切割值但是不起作用并给我以下错误:

Error in `[.data.frame`(data, , all.vars(Terms), drop = FALSE) :
 undefined columns selected

任何帮助将不胜感激,谢谢!

您需要确保输入的是公式,它无法读取变量,例如:

set.seed(1)
for(i in 2:14) {
 f = as.formula(paste0("wage ~ cut(age, ",i,")"))
 stepfit <- train(form = f, 
  data = Wage,
  method = "lm",
   trControl = trainControl(
    method = "cv",
    number = 10
  ))
cv.errors[i] <- stepfit$results$RMSE
}