预测新数据的警告

时间:2017-11-13 18:58:07

标签: r lm predict

我已经回顾了以下类似的问题和答案,但相信我的情况不同,需要另外一个问题。

Getting Warning: " 'newdata' had 1 row but variables found have 32 rows" on predict.lm in R

R Warning: newdata' had 15 rows but variables found have 22 rows

Warning message 'newdata' had 1 row but variables found have 16 rows in R

warning when calculating predicted values

Trouble using predict with linear model in R

Predict.lm in R fails to recognize newdata

列出的最后一个问题得到了Joran的一个很好的答案,它解释了建模和评分之间的命名惯例的核心。

我拟合的模型是一个多项式,它会产生一些命名问题。

mdl <- lm(val ~ poly(grp,2), data = mRetCurv)
model.frame(mdl)

生成以下输出:

     val       poly(grp, 2).1  poly(grp, 2).2
1   39.54227   -0.290170670    0.374017601
2   48.68225   -0.272368788    0.308602552

请注意我的预测变量的名称。如果我打电话

predict.lm(mdl, newdata = apl$grp)

就预测.lm而言,我得到标准警告为变量grp!= poly(grp,2).1或poly(grp,2).2。我尝试制作一个重复的grp列并重命名两个以匹配model.frame,但R不喜欢“poly(grp,2).1”作为列名。当我将列应用于多行时,这也不是一个复制数据的数据有效解决方案。

感谢任何帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

SELECT my_table.* EXCEPT(field3), t2.value as t2_value, t3.value as t3_value FROM my_table CROSS JOIN UNNEST(my_table.field3) AS t1 LEFT JOIN ids_table AS t2 ON t1.a = t2.id LEFT JOIN keys_table as t3 ON t1.b = t3.id 是一个向量,但apl$grp要求predict参数为数据框。 * 此数据框必须包含具有相同名称的列作为用于拟合模型的预测变量(尽管它也可以包含其他列)。因此,以下代码应该可以工作:

newdata

您可以使用predict(mdl, newdata = apl) 而不是predictpredict.lm是类mdl的对象,会导致lm自动“调度”predict方法。

*严格来说,由于这是predict.lm模型,因此调度的lm“方法”为predict,该方法要求predict.lm为数据框。 newdata还需要一个数据框。但是,有一些predict.glm方法可以采用其他类型的参数。例如:

  • predict包具有randomForest模型的预测方法,可以将数据框或矩阵作为randomForest参数。
  • newdata包对glmnet模型有predict方法,需要矩阵,但在这种情况下,参数称为glmnet而不是newx