为什么使用公式而不是x,y调用caret::train函数会生成错误?

4
在下面的示例中,当caret::train函数使用公式(y〜x)调用时生成模型时,predict函数会产生错误。如果使用x,y规范生成模型,则predict函数可以正常工作。为什么会这样?应该使用x,y规范吗?直到现在,我认为这仅仅是基于用户偏好?有没有办法使predict函数与公式规范一起工作?
我曾以为模型可能因使用因子变量而不同。然而,这些模型似乎产生相同的回归方程式。在样本内预测中没有任何差异。
library(ggplot2)
library(caret)
data("diamonds")
set.seed(42)
trainIndex <- createDataPartition(diamonds$price, p=0.8, list = FALSE)
train <- diamonds[trainIndex,]
test <- diamonds[-trainIndex,]
lm_formula <- train(
    price ~ ., train,
    method = "lm",
    trControl=trainControl(method="none")
)
lm_xy <- train(y = train$price,
                 x = train[,-which(colnames(train)=="price")],
                 method = "lm",
                 trControl=trainControl(method="none")
)

# the following generates the error shown beneath it
pred_formula <- predict(lm_formula$finalModel,test)
# Error in eval(predvars, data, env) : object 'cut.L' not found

pred_xy <- predict(lm_xy$finalModel,test)

# The following produces zero indicating the in-sample fits are identical
sum((lm_formula$finalModel$fitted.values-lm_xy$finalModel$fitted.values)^2)
1个回答

4
问题是由于您没有使用插值预测功能,而是使用了 predict.lm,因为类别不匹配所致。
class(lm_xy$finalModel) #lm

如果你只是做

这个

pred_formula <- predict(lm_formula, test)
pred_xy <- predict(lm_xy, test)

使用caret的 predict.train 函数可以预测最佳模型:
all.equal(pred_xy, pred_formula)
#TRUE

现在,如果您检查:
summary(lm_formula$finalModel)
summary(lm_xy$finalModel)

在公式案例中,你会看到对比名称周围有几个``符号,这样做可以防止默认的predict.lm函数正确运行。但是这不是caret predict.train的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接