在以下示例中,当模型由使用公式 (y~x) 调用的 caret::train 函数生成时,predict 函数会生成错误。如果模型是使用 x,y 规范生成的,则 predict 函数起作用。为什么是这样?应该使用 x,y 规范吗?直到现在我还以为这只是基于用户的喜好?有没有办法使预测函数与公式规范一起工作?
我曾认为由于使用了因子变量,模型可能会有所不同。然而,这些模型似乎产生了相同的回归方程。样本内预测没有差异。
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)
最佳答案
问题是由于您没有使用插入符号预测函数而是 predict.lm
引起的。因为类
class(lm_xy$finalModel) #lm
如果你只是这样做
pred_formula <- predict(lm_formula, test)
pred_xy <- predict(lm_xy, test)
使用插入符号
predict.train
这将预测最佳模型:all.equal(pred_xy, pred_formula)
#TRUE
现在,如果您检查:
summary(lm_formula$finalModel)
summary(lm_xy$finalModel)
您将看到公式案例中的对比名称在几个实例周围有`` 防止默认
predict.lm
从正常运行。这不是插入符号的问题 predict.train
.
关于r - 如果使用公式而不是 x,y 调用 caret::train 函数,为什么会产生错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48140757/