You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在gtsummary的tbl_custom_summary中获取当前分组的正确样本量?

解决gtsummary中按分组正确计算响应比例的问题

问题核心

在使用tbl_custom_summary按治疗组(trt)分组计算各肿瘤分期(stage)的响应患者比例时,原方法依赖当前分期的分组数据提取分组名称,当某分组下无对应分期的病例时,无法正确获取该分组的总响应数,导致比例计算错误(例如删除Drug A的T1期病例后,分母应取Drug A的总响应数21,而非全数据集的响应数54)。

解决方案

利用tbl_custom_summary传递给自定义统计函数的by_level参数,直接获取当前处理的分组级别,无需依赖当前分期的分组数据,确保分组信息的准确性。

修改后的完整代码

library(gtsummary)
library(tidyverse)

my_ratio_summary = function(numerator, na.rm = TRUE, conf.level = 0.95) {
  function(data, full_data, ...) {
    # 提取当前处理的分组级别(如Drug A、Drug B)
    current_group <- list(...)$by_level
    
    # 筛选当前分组的全部数据
    druggroup_data <- full_data %>% filter(trt == current_group)
    
    # 计算当前分期的响应数
    num <- sum(data[[numerator]], na.rm = na.rm)
    # 计算当前分组的总响应数
    denom <- sum(druggroup_data[[numerator]], na.rm = na.rm)
    # 计算比例,避免除以0
    ratio <- ifelse(denom == 0, NA_real_, num / denom)
    
    dplyr::tibble(num = num, denom = denom, ratio = ratio)
  }
}

# 生成表格
trial %>%
  filter(!(trt == 'Drug A' & stage == 'T1')) %>%
  tbl_custom_summary(
    include = c("stage"),
    by = "trt",
    stat_fns = ~ my_ratio_summary("response"),
    statistic = ~"{ratio}%, {num}/{denom}",
    digits = ~ c(style_percent, 0, 0)
  )

关键修改说明

  1. 分组信息获取方式:不再从当前分期的data中提取分组名称,而是直接通过...中的by_level参数获取当前处理的分组级别,即使当前分期无该分组的病例,也能准确拿到分组信息。
  2. 分母计算准确性:始终基于当前分组的全部数据计算总响应数,确保比例计算的分母正确。
  3. 异常处理:添加denom == 0的判断,避免出现除以0的运行错误。

可选调整

如果需要计算的是当前分期响应数占分组总样本数的比例,而非占总响应数的比例,只需将分母计算改为:

denom <- nrow(druggroup_data)

内容的提问来源于stack exchange,提问作者LittleLynx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:55:36