【问题标题】:Error when replacing new factor levels in test dataset with `NA`用“NA”替换测试数据集中的新因子水平时出错
【发布时间】:2017-01-07 16:02:03
【问题描述】:

我已将我的数据集拆分为测试和训练数据集。我试图在训练集上拟合回归,然后在测试集上使用预测。当我这样做时,我收到一条错误消息,上面写着:“model.frame 因子 x 中的错误具有新级别”。我知道这是因为我的测试数据中有一些级别在我的训练数据中看不到。

我想要做的只是消除或忽略两个数据集中都不存在的级别。我试过这样做,但它没有为NA 设置任何级别,id 对象显示“整数(空)”:

id <- which(!(test$x %in% levels (train$x))
train$x[id] <- NA

fit <- lm(y ~ x, data=train)
P <- predict(fit,test)

【问题讨论】:

  • 但即使在需要添加 droplevels 命令之前,第一部分也无法正常工作。看来我要么得到一个空整数,要么得到一个错误,说替换有 190708 行,数据有 189590。

标签: r regression linear-regression predict levels


【解决方案1】:

您的代码会出现“替换长度不同”错误。

id <- which(!(test$x %in% levels (train$x))

告诉您test$x 中的哪些元素不在levels(train$x) 中,因此在进行替换时应使用id 来索引test$x,而不是train$x

test$x[id] <- NA
test$x <- droplevels(test$x)  ## also don't forget to remove unused factor levels

fit <- lm(y ~ x, data = train)
P <- predict(fit, test)

train 中的所有数据都将用于构建您的线性回归模型。 P 中的一些预测将是 NA


我仍然无法让id 对象正确识别两个数据集中没有的级别。在工作空间中,它只显示integer(0)

那么,你问的重点是什么??!! test$x 中的所有关卡都在levels(train$x) 中,并且没有新关卡。

【讨论】:

  • 我仍然无法让 Id 对象正确识别两个数据集中没有的级别。在工作空间中,它只显示整数(空)。
  • 因为我收到一条错误消息,上面写着“model.frame 因子 x 中的错误具有新级别”。这似乎表明 test$x 中的所有级别都不在 train$x 中。
猜你喜欢
  • 1970-01-01
  • 2021-03-13
  • 2017-12-07
  • 2017-11-15
  • 1970-01-01
  • 2015-01-27
  • 1970-01-01
相关资源
最近更新 更多