使用purrr和R进行多元回归

使用purrr和R进行多元回归,r,regression,linear-regression,purrr,R,Regression,Linear Regression,Purrr,我试图找出如何设置purr来运行几次多元回归,如下图所示。您会注意到,该数据集描述了一个干预计划,我们正在使用ANCOVA程序(时间2~时间1+条件)分析该数据 例如: om4g201 ~ om4g01 + CONDITION 以防有人想要一个可复制的代码: dataset <- data.frame(rest201=c(10,20,30,40), rest101=c(5,10,20,24), om

我试图找出如何设置purr来运行几次多元回归,如下图所示。您会注意到,该数据集描述了一个干预计划,我们正在使用ANCOVA程序(时间2~时间1+条件)分析该数据

例如:

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)

dataset您可以为每个模型构建一个公式列表,并使用该列表构建一个模型

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>

与@Roman的答案类似,这里介绍了如何使用
purr
中的
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))
要获取每个模型的汇总表,您可以将每个
lm
包装为
summary
,并提取
系数
表:

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

非常感谢你的回复,@Roman Luštrik。我很感激!代码几乎是100%。我将最后一句改为:sapply(out,FUN=lm,data=latino_数据集)(因为R返回了一个错误)。不幸的是,输出是这样的:sapply(out,FUN=lm,data=latino_数据集)om4g201~om4g101+条件系数Numeric,3您能告诉我如何显示摘要而不是此输出吗。再次感谢@Luis尝试添加
sapply(…,simplify=FALSE)
,您应该会得到一个结果列表。哇@useR,太棒了!多谢!这就是我要找的!您能告诉我如何报告每个预测值的重要性吗?非常感谢,@useR。我应该点击哪里接受你的答案?
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