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

标签 r r-caret

在以下示例中,当模型由使用公式 (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/

相关文章:

r - dcast 错误 : `Error in match(x, table, nomatch = 0L)`

r - 积分函数中多个参数对应的多个数组的所有可能组合

r - 从ggplot条形图中删除未使用的因子水平

R caret/rfe/bayesglm 特征选择

r - summary.connection(connection) : invalid connection 中的错误

r - 错误: attempt to apply non-function when using caret package

r - 插入符号和虚拟变量

r - 将 r 数据帧转换为正确的格式以使用rep

R将时间转换为一天中的时间

使用插入符号包运行 cforest with controls = cforest_unbiased()