在 R 点中指定以使用 lm() 和 predict() 进行交互和 as.factor vars 进行预测

Specifying in R points to predict using lm() and predict() with interactions and as.factor vars

我想根据在 R 中使用 lm() 估计的回归模型计算一些预测值。

要预测的点未包含在用于回归的数据集中-- 尽管我认为它们可能与 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() 的例子,但我已经 发现往往不涉及此处提出的调整。

提前致谢。

您没有提供可重现的示例(即允许其他人重现您的错误的数据和代码),但是当我尝试使用内置数据框进行类似操作时我没有遇到问题:

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)

如果您想要对一组变量(包括 categorical/dummy 个变量)的所有组合进行预测,请使用 expand.grid 生成所有组合:

pred.dat = expand.grid(Petal.Length=1:5, Species=unique(iris$Species))
predict(m2, newdata=pred.dat)