如何在R中的新数据上完美地应用(创建的)模型?

时间:2013-12-22 13:42:01

标签: r model prediction

对不起,如果感觉像是一个重复的问题,但老实说,我已经花了12个多小时,而且还没有找到易于理解和易于应用的方法。

情况很简单,我创建了2个模型,需要将它们应用到测试数据中。

#Model 1 -

reg5 <- glm(train$survived ~ train$pclass_str + train$sex + 
             train$age_2 + train$sibsp + train$pclass_str*train$sex, 
             family = "binomial")

#Model 2 - 
reg6 <- randomForest(train$survived_str ~ train$pclass_str + train$sex + 
                      train$age_2 + train$sibsp, ntree=5000)

应用它 -

test$pred_reg5 <- predict(reg5, newdata = test, type="response")
test$pred_reg6 <- predict(reg6, newdata = test, type="response")

我可以保证的是,列车和测试数据都包含模型中使用的相同名称的变量。虽然还有其他未使用的变量。

我得到的错误:

Error in `[<-.factor`(`*tmp*`, keep, value = c("0", "1", "1", "1", "0",  : 
  NAs are not allowed in subscripted assignments
In addition: Warning message:
'newdata' had 418 rows but variables found have 891 rows

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

将您的模型更改为,例如:

reg5 <- glm(survived ~ pclass_str + sex + age_2 + sibsp + pclass_str*sex, 
            data=train, family = "binomial")
reg6 <- randomForest(survived_str ~ pclass_str + sex + age_2 + sibsp, 
                     data=train, ntree=5000)

您的模型规范可能存在另一个问题,reg5使用survived ~...reg6使用survived_str ~...,但我无法从您的问题中判断出这是一个问题。

最后,正如@Roland指出的那样,您可以简化公式。如果您打算这么做,请阅读R中的公式文档(?formula)。在R公式中,通过指定a:b来构建交互。符号a*b等同于a + b +a:b(例如,一阶词语+他们的互动)。因此,指定pclass_str*sex等同于指定pclass_str + sex + pclass_str:sex