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