在R点中指定预测使用lm()和predict()与交互和as.factor变量

时间:2015-06-29 19:56:03

标签: r lm interaction predict

我想根据使用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()的在线示例,但是那些我已经 发现往往不涉及这里提出的调整。

提前致谢。

1 个答案:

答案 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)