【问题标题】:lm() Regression with interactions for an entire dataframelm() 与整个数据帧交互的回归
【发布时间】:2023-03-03 01:51:01
【问题描述】:

我知道R 中有一个快捷方式可以在所有这样的数据帧上运行lm()regression:

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

其中df有解释变量x1,x2,...x5,所以写法一样

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

但这不包括 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

【问题讨论】:

  • 快捷方式是什么意思? \
  • 同样的方式 lm(y~.) 是 lm(y~x1+x2+x3+x4+x5) 的快捷方式,这样我就可以不用在 lm( )。

标签: r regression lm


【解决方案1】:

您要搜索的快捷方式是:

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

这将创建一个具有主效应和回归变量之间相互作用的模型。

【讨论】:

  • 欢迎来到 Stack Overflow!感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation would greatly improve its long-term value 通过展示为什么这是一个很好的解决问题的方法,并且会使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
  • 去掉星号,它们在那里基本上没用,而且可能有害。
【解决方案2】:

您可以使用^ 运算符。

看例子:

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

#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)。如您所见,所有交互都已产生。

【讨论】:

  • 看看this website。这是所有提到的交互。包括来自@LyzanderR 的那些。
  • 为什么是 5 的指数?我在想 3.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 2014-02-05
  • 2018-12-03
  • 2022-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多