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

如何为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:45:37