我想根据使用lm()在R中估算的回归模型计算一些预测值。
要预测的点不包含在用于回归的数据集中 - 虽然我认为他们可以和NA一起代替因变量。这适用于SAS,但我不是在这种情况下。
下面简单的方法最初用于我的简单目的。
myLm1 = lm(log(p) ~ u + v + w, data=myDat)
DatToPred1 = data.frame(u=72, v=20, w=85)
predict(myLm1, DatToPred1)
但是现在假设模型规范包含交互x * y。线条 下面抛出错误。
myLm2 = lm(log(p) ~ u + v + w + x*y, data=myDat)
DatToPred2 = data.frame(u=72, v=20, w=85, x=1, y=45)
predict(myLm2, DatToPred2)
Error in data.frame(u=72, v=20, w=85, x=1, y=45, :
argument is missing, with no default
这看起来很奇怪,因为lm()可以找到x和y来形成x * y,看起来像 predict()也许可以这样做。
很明显,在下面的DatToPred2定义中包含x * y也会失败。
DatToPred2 = data.frame(u=72, v=20, w=85, x*y=45)
最后假设模型已进一步扩充,以包含分类变量z的全套虚拟变量。
myLm3 = lm(log(p) ~ u + v + w + x*y + as.factor(z), data=myDat)
我为一种指定要估算的点的值的方法而感到茫然。 此外,z可以采用大量n个值,并且列出与预测的特定点相对应的虚拟对象的所有值将是乏味的:
d_z1=0, d_z2=0, ... , d_zi=1, d_z(i+1)=0, ... , d_zn=0
在任何情况下,我都不知道R会期望在data.frame()定义中看到这些虚拟对象的预测点。
有大量要点预测的时间到了 它们的值将一起存储在数据框中。但是在这一点上,找到一种方法来预测模型中具有相互作用和as.factor的单个点将是一个很大的进步。
有许多涉及lm()和predict()的在线示例,但是那些我已经 发现往往不涉及这里提出的调整。
提前致谢。
答案 0 :(得分:1)
您还没有提供可重现的示例(即允许其他人重现您的错误的数据和代码),但是当我尝试使用内置数据框执行类似操作时,我没有遇到任何问题:
m1 = lm(mpg ~ wt + carb + qsec*hp, data=mtcars)
pred.dat=data.frame(carb=2, hp=120, qsec=10, wt=2.5)
predict(m1, newdata=pred.dat)
1
21.46763
要使用分类变量进行预测,只需提供您想要预测的类别:
m2 = lm(Sepal.Length ~ Petal.Length + Species, data=iris)
pred.dat = data.frame(Petal.Length=1.2, Species="setosa")
predict(m2, newdata=pred.dat)
如果您想要预测一组变量的所有组合(包括分类/虚拟变量),请使用expand.grid
生成所有组合:
pred.dat = expand.grid(Petal.Length=1:5, Species=unique(iris$Species))
predict(m2, newdata=pred.dat)