r插入符号预测返回的输出少于输入

时间:2015-06-07 03:37:42

标签: r r-caret rpart

我使用caret来训练下面的rpart模型。

trainIndex <- createDataPartition(d$Happiness, p=.8, list=FALSE)
dtrain <- d[trainIndex, ]
dtest <- d[-trainIndex, ]
fitControl <- trainControl(## 10-fold CV
  method = "repeatedcv", number=10, repeats=10)
fitRpart <- train(Happiness ~ ., data=dtrain, method="rpart",
                trControl = fitControl)
testRpart <- predict(fitRpart, newdata=dtest)

dtest包含1296个观察值,因此我希望testRpart生成一个长度为1296的向量。相反,它长1077,即219短。

当我对dtest的前220行进行预测时,我的预测结果为1,所以它一直是219短。

对于为什么会这样做的任何解释,以及我可以做些什么来获得输入的一致输出?

修改: d可以从here加载以重现上述内容。

3 个答案:

答案 0 :(得分:11)

我下载了您的数据并找到了解释差异的原因。

如果只是从数据集中删除缺失值,则输出的长度匹配:

testRpart <- predict(fitRpart, newdata = na.omit(dtest))

注意nrow(na.omit(dtest))是1103,length(testRpart)是1103.所以你需要一个策略来解决缺失的值。请参阅?predict.rpart以及na.action参数的选项以选择所需内容。

答案 1 :(得分:1)

类似于Josh所说的,如果您需要使用插入符号中的predict.train生成预测,只需传递na.action的{​​{1}}:

na.pass

注意:将其移至一个单独的答案,这是基于Ricky对上述Josh答案的评论,以提高知名度。

答案 2 :(得分:0)

我在预测函数中使用“ newx”而不是“ newdata”遇到了类似的问题。使用“ newdata”(或什么都不做)可以解决我的问题,希望它将对使用newx并遇到相同问题的其他人有所帮助。