CreateDataPartition不起作用

时间:2015-02-13 19:31:47

标签: r cross-validation r-caret lme4

我正在尝试将数据划分为训练和测试集以进行交叉验证。我使用以下行将数据拆分为表示状态的因子变量,该状态具有多个级别。我根据其他帖子使用该行,表明createDataPartition包中的caret应该在因素内分割。

inTrain = createDataPartition(y = LM_full$state, times = 1, p = 0.5, list = F)
LM_full_train=LM_full[inTrain,]
LM_full_test=LM_full[-inTrain,]

然后我尝试在训练数据上拟合线性模型并预测测试数据的值,但它总是说我在测试数据中有新的水平。我比较了训练状态和测试数据集的状态,它们是相同的,所以看起来在训练和测试数据中都应该存在一个变量级别。

> unique(LM_full_train$state) == unique(LM_full_test$state)
 [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[19] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

这是错误:

> lm2_pred <- predict(lm2, LM_full_test, type = "response")
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : 
  factor state has new levels CT, MA, NH, NJ, RI

如何避免此错误/拆分训练和测试数据,以便培训和测试数据中存在每个因素的水平?

1 个答案:

答案 0 :(得分:1)

一种选择是将新级别添加到模型中。

lm2$xlevels[["state"]] = union(lm2$xlevels[["state"]] , levels(LM_full_test$state))