使用`tbl_regression`对嵌套数据框进行多变量回归 [英] Using `tbl_regression` for multivariable regression on nested data frames

查看:16
本文介绍了使用`tbl_regression`对嵌套数据框进行多变量回归的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在对具有一致的自变量集的结果变量列表进行多变量回归。对于单变量回归,我遵循this example在嵌套数据框上使用tl_uvregressionfromgtsummary,但我试图通过在嵌套数据框上使用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

提取为Tibble格式
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_regressionlist上应用tbl_merge

tbl_merge(out$table_out)

-输出

这篇关于使用`tbl_regression`对嵌套数据框进行多变量回归的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆