使用 purrr 和 R 执行多元回归

Performing multiple regression with purrr and R

我想弄清楚如何设置 purrr 到 运行 多个多元回归,如下图所示。您会注意到,此数据集描述了一个干预程序,我们正在使用 ANCOVA 程序(TIME 2 ~ TIME 1 + CONDITION)分析此数据。

om4g**TIME2**01 ~ om4g**TIME1**01 + CONDITION

示例:

om4g201 ~ om4g01 + CONDITION

以防万一有人想要可重现的代码:

dataset <- data.frame(rest201=c(10,20,30,40),
                      rest101=c(5,10,20,24),
                      omgt201=c(40,10,20,10),
                      omgt101=c(10,20,10,05),
                      CONDITION=c(0,1))
lm(rest201~rest101+CONDITION, data=dataset)
lm(omgt201~omgt101+CONDITION, data=dataset)

我在这里发现了一个与我类似的问题 (Making linear models in a for loop using R programming),但答案无效。

谢谢!

您可以为每个模型构建一个公式列表,然后使用它来构建模型。

x <- c(101, 102, 103)
mdls <- sprintf("omg4g%s ~ om4g%s + CONDITION",
        as.character(x + 100), 
        as.character(x)
)

out <- sapply(mdls, FUN = function(x) {
  formula(x, data = latino_dataset)
})

$`omg4g201 ~ om4g101 + CONDITION`
omg4g201 ~ om4g101 + CONDITION
<environment: 0x0000000009aff7b8>

$`omg4g202 ~ om4g102 + CONDITION`
omg4g202 ~ om4g102 + CONDITION
<environment: 0x0000000009afda98>

$`omg4g203 ~ om4g103 + CONDITION`
omg4g203 ~ om4g103 + CONDITION
<environment: 0x00000000099b0828>

例如

sapply(out, FUN = lm)

类似于@Roman 的回答,这里是使用 purrr 中的 map2 的方法:

library(purrr)

y_var = c("rest201", "omgt201")
x_var = list(c("rest101", "CONDITION"), c("omgt101", "CONDITION"))

map2(x_var, y_var, ~ lm(as.formula(paste(.y, "~", paste(.x, collapse = " + "))), data = dataset))

要获得每个模型的摘要 table,您可以用 summary 包装每个 lm 并提取 coefficients table:

map2(x_var, y_var, ~ {
  lm(as.formula(paste(.y, "~", paste(.x, collapse = " + "))), data = dataset) %>%
    summary() %>%
    `$`("coefficients")
})

结果:

[[1]]
            Estimate Std. Error   t value   Pr(>|t|)
(Intercept) 2.779097 0.76821670  3.617596 0.17169133
rest101     1.377672 0.04750594 29.000000 0.02194371
CONDITION   3.800475 0.72163694  5.266464 0.11945968

[[2]]
                 Estimate Std. Error       t value  Pr(>|t|)
(Intercept)  3.000000e+01  16.666667  1.800000e+00 0.3228289
omgt101     -2.445145e-16   1.333333 -1.833859e-16 1.0000000
CONDITION   -2.000000e+01  14.529663 -1.376494e+00 0.3999753