运行 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,这比循环更快更简洁。
我有一个如下所示的数据框 (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,这比循环更快更简洁。