运行 R 中同时具有交互项的多个回归

Running several regressions with interaction terms simultaneously in R

我有一个如下所示的数据框 (df):

yourbehavior  condition  tryreduce  comfortable  vegvalidity
1             2          4          3            3
2             5          7          4            5
3             7          1          2            4

我想找出一种有效地运行以下回归的方法。

lm(yourbehavior ~ condition + tryreduce + (condition*tryreduce), data = df)
lm(yourbehavior ~ condition + comfortable + (condition*comfortable), data = df)
lm(yourbehavior ~ condition + vegvalidity + (condition*vegvalidity), data = df)

有谁知道如何同时执行这些回归分析?我的实际数据集中有几个比我在这个例子中包含的更多。

我了解到使用 for 循环通常不是在 R 中进行这些类型分析的最有效方法。如果可能,我更愿意使用 tidyverse,因为这是我最了解的。

您可以这样做,这将创建一个列表,其中每个元素都是回归模型之一,每个列表元素的名称将是与 condition:[=17 交互的变量=]

library(tidyverse)

interaction.vars = c("tryreduce", "comfortable", "vegvalidity")

form = paste("yourbehavior ~ condition *", interaction.vars)

models = form %>% 
  set_names(interaction.vars) %>% 
  map(~lm(.x, data=df))

如果您想遍历除前两列之外的每一列,您可以这样做:

interaction.vars = names(df)[!names(df) %in% c("yourbehavior","condition")]

请注意,在模型公式中 a*b 等同于 a + b + a*b,因此您无需重复每个列名称。

for 循环不一定是坏的,上面的 map 函数基本上以与 for 循环相同的方式迭代。但是,R 中的许多函数都是 vectorized,这比循环更快更简洁。