使用lm()函数对整个数据框进行交互回归

10

我知道在 R 中有一种快捷方式可以对像这样的数据框运行一个 lm() 回归:

reg<-lm(y~.,data=df)

使用 df 作为自变量 x1、x2、...、x5 的解释变量,所以这与写成以下形式相同:

With df having explanatory variables x1, x2, ... x5, so it is the same as writing

reg<-lm(y~x1+x2+x3+x4+x5,data=df)

但是这并不包括像x1:x2这样的交互项,...在R中有没有一种快捷方式可以在数据框的所有列上运行回归并包含交互作用? 我正在寻找两个快捷方式,其效果与...

reg<-lm(y~x1*x2,x1*x3,x1*x4,x1*x5,x2*x3,...)
reg<-lm(y~x1*x2*x3*x4*x5) # this one will have interactions between the 5 variables

“快捷方式”是什么意思? - Heroka
1
与lm(y~x1+x2+x3+x4+x5)相似,有一种快捷方式可以让我不必在lm()中写出所有的变量。 - etienne
2个回答

18

您正在寻找的快捷方式是:

reg <- lm(y ~ (.)^2, data = df)

这将创建一个包含自变量主效应和交互作用的模型。


3
欢迎来到Stack Overflow!感谢您提供这段代码片段,它可能会提供一些有限的、即时的帮助。通过显示为什么这是解决问题的好方法,一个适当的解释将极大地提高其长期价值,并使其对未来读者的其他类似问题更有用。请[编辑]您的答案以添加一些解释,包括您做出的假设。 - Blue
移除星号,它们基本上在那里是无用的,有潜在的危害。 - Rui Barradas

11

你可以使用^运算符来实现这两种情况。

以下是示例:

在第一种情况下,您只需要进行成对交互(2-way interactions)。因此,您可以执行以下操作:

#Example df
df <- data.frame(a=runif(1:100), b=runif(1:100), c=runif(1:100), d=runif(1:100))

> lm(a ~ (b+c+d)^2, data=df)

Call:
lm(formula = a ~ (b + c + d)^2, data = df)

Coefficients:
(Intercept)            b            c            d          b:c          b:d          c:d  
    0.53873      0.23531      0.07813     -0.14763     -0.43130      0.11084      0.13181  

如您所见,上述内容产生了两两交互。

现在为了包括所有的交互,您可以执行以下操作:

> lm(a ~ (b+c+d)^5 , data=df)

Call:
lm(formula = a ~ (b + c + d)^5, data = df)

Coefficients:
(Intercept)            b            c            d          b:c          b:d          c:d        b:c:d  
    0.54059      0.23123      0.07455     -0.15150     -0.42340      0.11926      0.14017     -0.01803  
在这种情况下,您只需要使用一个大于将要使用的变量数量的数字(在此示例中我使用5,但可以是任何大于3的数字)。如您所见,所有交互都会被生成。

2
请查看此网站:http://ww2.coastal.edu/kingw/statistics/R-tutorials/formulae.html,其中提到了所有交互方式,包括@LyzandeR的方式。 - phiver
为什么是5的指数?我在想3。 - abalter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接