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

标签 r regression tidyverse interaction

我有一个如下所示的数据框 (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 交互的变量:

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这比循环更快更简洁。

关于在 R 中同时运行多个具有交互项的回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58962663/

相关文章:

R按模式将一列拆分为多列

r - 设置循环以在 R 中同时运行多个交叉表

r - 从列中的一串数字中提取字符

r - 难以在 R 中拟合分段线性数据

python - 用神经网络和 ReLU 逼近正弦函数

r - 在 R 中将全名与倒序匹配

r - 如何使用 r-script 从 Node 中的 R 脚本获取输出数据

r - 如何为R中的模型构建一个大的正则公式?

r - 整理 "Benchmark"列

r - ggplot : re-order categorical y-axis (Gantt chart)