用purrr和R执行多元回归

时间:2017-11-27 19:58:56

标签: r regression linear-regression purrr

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

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

示例:

om4g201 ~ om4g01 + CONDITION

Regression models

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

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),但答案没有用。

谢谢!

2 个答案:

答案 0 :(得分:3)

与@ Roman的答案类似,以下是使用map2purrr的方法:

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))

要获取每个模型的摘要表,您可以使用lm打包每个summary并提取coefficients表:

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

答案 1 :(得分:1)

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

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>

e.g。

sapply(out, FUN = lm)