如何让tbl_summary()以含缺失值的总样本量为分母计算百分比?
解决gtsummary::tbl_summary()中分类变量百分比以组总观测数(含缺失)为分母的问题
gtsummary的tbl_summary()目前没有内置参数直接让分类变量的百分比计算以组内总观测数(包含缺失值)为分母,但可以通过自定义统计量函数结合statistic参数实现,同时保留tbl_summary的自动变量识别、统计检验等核心功能,无需切换到tbl_custom_summary()。
具体实现步骤
- 定义自定义统计函数,计算基于组总观测数的百分比
# 自定义统计函数:返回"计数 (百分比)"格式,百分比以组内总观测数(含缺失)为分母 pct_total <- function(x, ...) { # 获取当前分组的总观测数(包含缺失值) group_total <- length(x) # 统计各非缺失水平的计数 level_counts <- table(x, useNA = "no") # 计算百分比(保留整数精度) pct_values <- scales::percent(level_counts / group_total, accuracy = 1) # 拼接成目标格式 paste0(level_counts, " (", pct_values, ")") }
- 在
tbl_summary()中调用该函数,同时保留缺失值显示和统计检验功能
library(gtsummary) library(dplyr) # 示例数据集 df <- tibble::tibble( group = rep(c("A", "B"), each = 66), outcome = c( rep("Yes", 6), rep("No", 18), rep(NA, 42), rep("Yes", 7), rep("No", 25), rep(NA, 34) ) ) # 生成符合需求的汇总表 df %>% tbl_summary( by = group, missing = "ifany", # 将缺失值显示为"Unknown" # 指定所有分类变量使用自定义统计函数 statistic = list(all_categorical() ~ "{pct_total(.)}") ) %>% add_p() # 自动添加统计检验
输出效果
生成的表格中,分类变量的百分比将以组内总观测数为分母:
- outcome = Yes:Group A为
6 (9%)(6/66),Group B为7 (11%)(7/66) - outcome = No:Group A为
18 (27%)(18/66),Group B为25 (38%)(25/66) - Unknown(缺失值):Group A为
42 (64%)(42/66),Group B为34 (52%)(34/66)
补充说明
- 若需要调整百分比精度,可修改
scales::percent()的accuracy参数(如accuracy=0.1保留一位小数) add_p()会自动对分类变量应用合适的统计检验(如卡方检验),若需将缺失值作为一个水平参与检验,可通过test参数调整:
add_p(test = list(all_categorical() ~ "chisq.test", args = list(na.action = na.pass)))
内容的提问来源于stack exchange,提问作者Thomas Husson
相关产品推荐
相关产品推荐

