lm()回归与整个数据帧的交互

eti*_*nne 9 regression r lm

我知道有一个快捷方式R可以lm()在所有数据帧上运行回归,如下所示:

reg<-lm(y~.,data=df)
Run Code Online (Sandbox Code Playgroud)

df具有解释变量x1,x2,... x5,所以它与写入相同

reg<-lm(y~x1+x2+x3+x4+x5,data=df)
Run Code Online (Sandbox Code Playgroud)

但这不包括像x1:x2这样的交互术语,...是否有快捷方式在R数据框的所有列上运行回归?我正在寻找2个具有相同效果的快捷方式

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
Run Code Online (Sandbox Code Playgroud)

Lyz*_*deR 9

两者都可以使用^运算符.

看例子:

在您的第一种情况下,您只需要成对的交互(双向交互).所以你可以这样做:

#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  
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,上面产生了成对的相互作用

现在,为了包含您可以执行的所有交互:

> 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  
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您只需要使用一个大于您将使用的变量数的数字(在这种情况下,我使用5但它可能大于3).如您所见,所有交互都会产生.

  • 看看[这个网站](http://ww2.coastal.edu/kingw/statistics/R-tutorials/formulae.html)。以下是提到的所有交互。包括来自@LyzandeR 的。 (2认同)

小智 9

您要搜索的快捷方式是:

reg <- lm(y ~ (.)^2, data = df)
Run Code Online (Sandbox Code Playgroud)

这将创建一个具有主要影响以及回归变量之间相互作用的模型。

  • 欢迎使用Stack Overflow!感谢您提供此代码段,它可能会提供一些有限的即时帮助。通过显示_why_这是解决该问题的好方法,[适当的解释将大大提高其长期价值](// meta.stackexchange.com/q/114762/206345),并将使其对以后的读者更加有用。其他类似的问题。请[编辑]您的答案以添加一些解释,包括您所做的假设。 (3认同)