对不起,如果感觉像是一个重复的问题,但老实说,我已经花了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
感谢您的帮助!
答案 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
。