使用`tbl_regression`对嵌套数据框进行多变量回归 [英] Using `tbl_regression` for multivariable regression on nested data frames
本文介绍了使用`tbl_regression`对嵌套数据框进行多变量回归的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在对具有一致的自变量集的结果变量列表进行多变量回归。对于单变量回归,我遵循this example在嵌套数据框上使用tl_uvregression
fromgtsummary
,但我试图通过在嵌套数据框上使用tbl_regression
将其推广到多变量回归,当我尝试unnest
表时,我得到了输入必须是向量列表的错误。&下面是我尝试过的-我假设我遗漏了一些小但关键的步骤,但我找不出它是什么。我想要的输出是一个多变量回归输出表,每个模型作为一列,所有协变量作为行(类似于对tbl_regression
中单独运行的这些多变量模型的列表执行tbl_merge
)。
library(tidyverse)
library(magrittr)
library(gtsummary)
library(broom)
id <- 1:2000
gender <- sample(0:1, 2000, replace = T)
age <- sample(17:64, 2000, replace = T)
race <- sample(0:1, 2000, replace = T)
health_score <- sample(0:25, 2000, replace = T)
cond_a <- sample(0:1, 2000, replace = T)
cond_b <- sample(0:1, 2000, replace = T)
cond_c <- sample(0:1, 2000, replace = T)
cond_d <- sample(0:1, 2000, replace = T)
df <- data.frame(id, gender, age, race, health_score, cond_a, cond_b, cond_c, cond_d)
regression_tables <- df %>% select(-id) %>%
gather(c(cond_a, cond_b, cond_c, cond_d), key = "condition", value = "case") %>%
group_by(condition) %>% nest() %>%
mutate(model = map(data, ~glm(case ~ gender + age + race + health_score, family = "binomial", data = .)),
table = map(model, ~tbl_regression, exponentiate = T, conf.level = 0.99)) %>%
select(table) %>% unnest(table)
推荐答案
问题似乎是使用了lambda表达式(~
),而没有使用它,即指定参数。此外,没有tidy
方法(从broom
)可以从tbl_regression
library(dplyr)
library(tidyr)
library(broom)
library(gtsummary)
out <- df %>%
select(-id) %>%
gather(c(cond_a, cond_b, cond_c, cond_d), key = "condition",
value = "case") %>%
group_by(condition) %>%
nest() %>%
mutate(model = map(data,
~glm(case ~ gender + age + race + health_score,
family = "binomial", data = .)),
table = map(model, tbl_regression, exponentiate = T, conf.level = 0.99)) %>%
select(table)
out$table[[1]]
除了op使用map
进行循环的方法之外,实际上,我们可以简单地应用tbl_regression
之后的tbl_regression
(将gather
替换为pivot_longer
,因为gather
将被弃用,pivot_longer
是一个泛化版本)
out <- df %>%
select(-id) %>%
pivot_longer(cols = starts_with('cond'),
names_to = 'condition', values_to = 'case') %>%
nest_by(condition) %>%
mutate(model = list(glm(case ~ gender + age +
race + health_score,
family = "binomial", data = data)),
table_out = list(tbl_regression(model, exponentiate = TRUE, conf.level = 0.99)))
out
# A tibble: 4 x 4
# Rowwise: condition
# condition data model table_out
# <chr> <list<tbl_df[,5]>> <list> <list>
#1 cond_a [2,000 × 5] <glm> <tbl_rgrs>
#2 cond_b [2,000 × 5] <glm> <tbl_rgrs>
#3 cond_c [2,000 × 5] <glm> <tbl_rgrs>
#4 cond_d [2,000 × 5] <glm> <tbl_rgrs>
如果我们需要合并表,请在tbl_regression
的list
上应用tbl_merge
tbl_merge(out$table_out)
-输出
这篇关于使用`tbl_regression`对嵌套数据框进行多变量回归的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文