在R中同时使用交互项运行多个回归

时间:2019-11-20 20:17:04

标签: 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,因为这是我最了解的。

1 个答案:

答案 0 :(得分:4)

您可以执行以下操作,这将创建一个列表,其中每个元素都是回归模型之一,每个列表元素的名称将是与//check for valid review headline length if (strlen($data['review_headline']) < 10) { $this->setError(JText::_('COM_MYEXTENSION_REVIEWS_ASSIGNMENT_REVIEWSUBMIT_REVIEWHEAD_SHORT')); return false; } 交互的变量:

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等效,因此您无需重复每个列的名称。

for循环不一定很糟糕,上面的a + b + a*b函数本质上是以与for循环相同的方式进行迭代的。但是,R中的许多函数都是vectorized,它比循环要快和简洁。