如何为gtsummary的tbl_summary添加95%误差边际?
用gtsummary生成带95%误差边际的表格
误差边际(Margin of Error)本质是置信区间的半宽,对于均值类指标,计算方式为t临界值×标准误;对于比例类指标则是z临界值×比例标准误。可以通过add_stat()自定义统计函数实现需求,以下是具体代码示例:
1. 连续变量(均值±误差边际)
先定义计算误差边际的函数,再结合tbl_summary()生成表格:
library(gtsummary) library(dplyr) library(glue) # 自定义连续变量的95%误差边际计算函数 moe_continuous <- function(data, variable, by, ...) { data %>% group_by({{by}}) %>% summarize( 均值 = mean({{variable}}, na.rm = TRUE), 标准误 = sd({{variable}}, na.rm = TRUE) / sqrt(n()), 误差边际 = qt(0.975, df = n() - 1) * 标准误, .groups = "drop" ) %>% mutate(统计值 = glue::glue("{round(均值, 1)} ± {round(误差边际, 1)}")) %>% pull(统计值) } # 生成带误差边际的表格 mtcars %>% select(mpg, cyl) %>% tbl_summary( by = cyl, statistic = all_continuous() ~ "{mean}" # 先基础展示均值 ) %>% add_stat( fns = all_continuous() ~ moe_continuous, label = "均值 ± 95%误差边际" # 自定义列名 )
2. 分类变量(比例±误差边际)
如果需要处理分类变量,可使用以下自定义函数:
# 自定义分类变量的95%误差边际计算函数 moe_categorical <- function(data, variable, by, ...) { data %>% group_by({{by}}, {{variable}}) %>% summarize(计数 = n(), .groups = "drop_last") %>% mutate( 比例 = 计数 / sum(计数), 误差边际 = qnorm(0.975) * sqrt(比例 * (1 - 比例) / sum(计数)), 统计值 = glue::glue("{round(比例*100, 1)}% ± {round(误差边际*100, 1)}%") ) %>% pull(统计值) } # 示例:处理分类变量am(变速箱类型) mtcars %>% select(am, cyl) %>% tbl_summary( by = cyl, statistic = all_categorical() ~ "{p}%" # 先基础展示比例 ) %>% add_stat( fns = all_categorical() ~ moe_categorical, label = "比例 ± 95%误差边际" )
说明
- 函数中
qt(0.975, df)对应t分布的95%置信临界值(小样本适用),大样本可替换为qnorm(0.975)(即1.96) - 可根据需求调整小数位数、列名等格式细节
内容的提问来源于stack exchange,提问作者Sylv
相关产品推荐
相关产品推荐

