【问题标题】:Add events and follow-up time to tbl_uvregression将事件和跟进时间添加到 tbl_uvregression
【发布时间】:2020-08-19 09:01:06
【问题描述】:

我最近开始使用 {gtsummary} 包对回归输出进行制表,发现它真的很有帮助!

我遇到的一个问题与生存分析数据的呈现有关。

我想包括每个分类变量的每个级别的事件数量和随访时间长度。

df <- data.frame(
  time = sample(1:1000, 100, replace = TRUE),
  event = sample(0:1, 100, replace = TRUE),
  gender = sample(c("M", "F"), size = 100, replace = TRUE),
  stringsAsFactors = FALSE
)

tbl_uvregression(
  df, 
  method = survival::coxph, 
  y = survival::Surv(time = time, 
                     event = event)
)

默认情况下,输出包含一列N,它指的是模型中每个变量所包含的主题数。我想要这个和后续时间拆分,并为分类变量的每个级别提供gender

这可以使用 {gtsummary} 包来完成,还是我需要单独计算并以某种方式将其合并到表格中?

提前非常感谢!

【问题讨论】:

    标签: r gtsummary


    【解决方案1】:

    计划更新 add_n()add_nevent() 以包含一个参数,以选择性地将 Ns 直接添加到分类变量的级别。

    同时,您可以使用这些计数构建tbl_summary() 表,并将它们与 Cox 模型结果合并。示例如下,gtsummary 网站 (http://www.danieldsjoberg.com/gtsummary/articles/gallery.html#regression-tables-1) 的表格库中也有类似示例。

    library(gtsummary)
    library(dplyr)
    
    df <- data.frame(
      time = sample(1:1000, 100, replace = TRUE),
      event = sample(0:1, 100, replace = TRUE),
      gender = sample(c("M", "F"), size = 100, replace = TRUE),
      stringsAsFactors = FALSE
    )
    
    # calculate the total N by gender
    tbl_n <- df %>% select(gender) %>% 
      tbl_summary(statistic = everything() ~ "{n}") %>%
      modify_header(stat_0 ~ "**N**") %>%
      modify_footnote(everything() ~ NA)
    
    # calculate the event N by gender
    tbl_nevent <- df %>% filter(event == 1) %>% select(gender) %>% 
      tbl_summary(statistic = everything() ~ "{n}") %>%
      modify_header(stat_0 ~ "**Event N**")  %>%
      modify_footnote(everything() ~ NA)
    
    # build cox models
    tbl_cox <-
      tbl_uvregression(
      df, 
      method = survival::coxph, 
      y = survival::Surv(time = time, event = event),
      exponentiate = TRUE,
      hide_n = TRUE
    )
    
    # merge tbls together
    tbl_merge(list(tbl_n, tbl_nevent, tbl_cox)) %>%
      modify_spanning_header(everything() ~ NA)
    

    我还没有想过如何为这些表格增加跟进时间。但我会考虑最好的实现。它可能是通过@Mike 提到的tbl_survfit() 系列函数。

    【讨论】:

    • 谢谢@Daniel - 这无疑让我朝着正确的方向前进。很抱歉没有更仔细地查看您的文档 - 这当然始终是第一课!
    • 对于后续时间,使用 dplyr 计算每个级别的时间很简单,输出是一个数据帧。是否可以直接从数据框将其转换为 gtsummary 对象,然后与其他 tbls 合并?我知道 gt::gt() 会将数据框转换为 gt 对象,但不幸的是找不到合并 gt 对象的方法。
    • 有两种方法可以解决这个问题。 1.将gtsummary对象转换为带有as_tibble(tbl_cox)的tibble,并在计算出的后续时间中合并。 2. 在 gtsummary 对象中,正在打印的表格是tbl_cox$table_body。你也可以在那里合并你的估计。
    • 太棒了 Daniel - 我不知道为什么我没有更仔细地检查 gtsummary 对象。很好的一课。感谢您提供出色(且快速)的答案!
    【解决方案2】:

    所以这是 github 上 gtsummary 的一个未解决问题。一种使用gtsummary 的解决方案会提供一些事件:

    tbl_survfit(survfit(Surv(time, event) ~gender, df), times = c(50,100)) %>% 
      add_nevent() %>% 
      add_n()
    

    【讨论】:

    • 这些函数是本月初发布的,仅供参考
    • 谢谢@Mike - 我见过这些函数,并期望它们计算变量的每个级别的事件,因为这是我正在寻找的一个组成部分。不幸的是,他们还没有这样做,但很高兴知道该问题已发布到 GH。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多