我想使用 group_by %>% do(tidy(*))
运行几个线性回归模型并将模型结果提取到数据框 . 每个模型的数据框应包括以下内容:结果变量,暴露变量,样本大小,β系数,SE和p值 .
library(tidyverse)
data("mtcars")
outcomes <- c("wt, mpg", "hp", "disp")
exposures <- c("gear", "vs", "am")
covariates <- c("drat", "qsec")
模型应该针对所有协变量调整的每次暴露的每个结果回归,例如:
lm(wt ~ factor(gear)+drat+qsec, mtcars, na.action = na.omit)
lm(wt ~ factor(vs)+drat+qsec, mtcars, na.action = na.omit)
etc...
最终的代码可能看起来像这样?
models <- (mtcars %>%
gather(x_var, x_value, -c(y_var, y_i, cv1:cv3)) %>%
group_by(y_var, x_var) %>%
do(broom::tidy(lm(y_i ~ x_value + cv1 + cv2 + cv3, data = .))))
1 回答
这是一个解决方案,首先为您要运行的每个模型创建公式,然后从您要分析的数据集中调用正确的变量,而不是重新整形数据集本身并应用模型:
非常类似的过程,如果您更喜欢使用
purrr
来自purrr
包而不是do
:请记住,这种方法的关键是创建公式 . 因此,如果您设法以稍微不同的方式指定变量并使用比以前更少的代码创建公式,代码将变得更简单: