使用poly(插入符号包中的训练模型中的函数导致数据帧错误

时间:2017-01-19 13:18:12

标签: r r-caret

这是我正在运行的代码:

library(caret)
library(ISLR)
data('Auto')
cverror <- c()
for(i in 1:5){
  train_control <- trainControl(method='LOOCV')
  models <- train(mpg~poly(horsepower,i), data = Auto, trControl=train_control, method='glm')
  cverror[i] <- (models$results$RMSE)^2
}

cverror

我想要完成的是使用循环计算不同多项式级别的MSE(均方误差),因此我不必逐行编码。我收到的错误消息是:

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

为什么我收到此错误?我的学习伙伴说,这个代码在他们的机器上运行良好,但它在我的个人或工作计算机上不起作用。我安装了最新的RStudio和R版本,所有软件包都是最新的。

以下代码行正常工作:

train(mpg~poly(horsepower,2), data = Auto, trControl=train_control, method='glm')

这与ISLR文本(我正在扩展)的第192/193页上的教程有关。

2 个答案:

答案 0 :(得分:1)

如果i <- 2其值未被替换为公式。公式字面上是mpg ~ poly(horsepower, i)

试试这个:

library(caret)
library(ISLR)
data('Auto')
cverror <- numeric(5)
for(i in 1:5){
  train_control <- trainControl(method='LOOCV')
  f <- bquote(mpg ~ poly(horsepower, .(i)))
  models <- train(as.formula(f), data = Auto, trControl=train_control, method='glm')
  cverror[i] <- (models$results$RMSE)^2
}

cverror
#[1] 24.23151 19.24821 19.33498 19.42443 19.03321

PS:高次多项式几乎可以保证过度拟合。我不推荐高于2,可能为3的多项式。在这种情况下通常有更好的模型。对于“自然”过程,高次多项式很少见。

答案 1 :(得分:0)

我有一个类似的问题。您是否尝试过使用以下内容?

models <- train(x = poly(Auto$horsepower,i), y = Auto$mpg, data = Auto, trControl=train_control, method='glm')

(我尚未测试此特定代码。)