我已经回顾了以下类似的问题和答案,但相信我的情况不同,需要另外一个问题。
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”作为列名。当我将列应用于多行时,这也不是一个复制数据的数据有效解决方案。
感谢任何帮助。
谢谢
答案 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)
而不是predict
。 predict.lm
是类mdl
的对象,会导致lm
自动“调度”predict
方法。
*严格来说,由于这是predict.lm
模型,因此调度的lm
“方法”为predict
,该方法要求predict.lm
为数据框。 newdata
还需要一个数据框。但是,有一些predict.glm
方法可以采用其他类型的参数。例如:
predict
包具有randomForest
模型的预测方法,可以将数据框或矩阵作为randomForest
参数。 newdata
包对glmnet
模型有predict
方法,需要矩阵,但在这种情况下,参数称为glmnet
而不是newx