预测新数据警告

Predict Warning on newdata

我已经查看了以下类似的问题和答案,但相信我的情况不同,足以保证另一个问题。

Getting Warning: " 'newdata' had 1 row but variables found have 32 rows" on predict.lm 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)

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

感谢任何帮助。

谢谢

apl$grp是一个向量,但是predict要求newdata参数是一个数据框。*这个数据框必须包含与用于拟合模型的预测变量同名的列(尽管它也可以包含其他列)。所以,下面的代码应该可以工作:

predict(mdl, newdata = apl)

您可以使用 predict 而不是 predict.lmmdl 是 class lm 的对象,它导致 predict 到 "dispatch" 自动 predict.lm 方法。


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

  • randomForest 包有一个用于 randomForest 模型的预测方法,可以将数据框或矩阵作为 newdata 参数。
  • glmnet 包有一个 predict 方法用于需要矩阵的 glmnet 模型,尽管参数被称为 newx 而不是 newdata那种情况。