【问题标题】:Running several regressions with interaction terms simultaneously in R在 R 中同时运行多个带有交互项的回归
【发布时间】:2019-11-20 20:17:04
【问题描述】:

我有一个如下所示的数据框 (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,因为这是我最了解的。

【问题讨论】:

    标签: r regression tidyverse interaction


    【解决方案1】:

    您可以这样做,这将创建一个列表,其中每个元素都是回归模型之一,每个列表元素的名称将是与 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,这比循环更快更简洁。

    【讨论】:

    • 在最后一行中,使用 lm(.x, data = df),我收到了找不到对象 .x 的错误消息。当我输入“form”而不是“.x”时,我得到“错误:无法将 'lm' 对象转换为函数”。
    • 抱歉,我编辑了答案,在lm 之前添加了~。有必要告诉map 一个匿名函数即将到来。 map 正在迭代 form 的每个元素。 .x 告诉 map 该参数在您正在映射的函数中的位置(在本例中为 lm)。
    • 匿名函数是什么意思?另外,我如何查看完整的输出?当我输入“models”或“summary(models)”时,输出看起来与 R 中的典型回归输出不同,并且不包括 P 值,只是系数。
    • modelslm 对象的列表。要获得单个lm 模型的完整摘要,您可以使用summary(m1)(如果您的模型对象称为m1)。在这里,您需要遍历模型列表,因此您可以执行 map(models, summary) 来获取每个模型的摘要(并且摘要也将作为列表返回)。要获取某个特定模型的摘要,您可以使用 summary(models[[2]])summary(models[["comfortable"]])
    • anonymous function 是一个您无需命名即可即时创建的函数。有关更多信息,请参阅“匿名函数”标题 here 下的前几段。
    猜你喜欢
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 2020-02-14
    • 1970-01-01
    • 2021-10-21
    相关资源
    最近更新 更多