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

使用gt_summary的add_ci()返回均值而非95%CI的问题排查

问题:gt_summary::add_ci()返回均值而非95%置信区间

使用gt_summary包的add_ci()函数时,发现返回的置信区间(CI)结果均为均值,而非预期的95%置信区间,且与bayestestR包中ci()函数计算的置信区间差异显著。

问题原因

tbl_summary()和add_ci()的默认逻辑是针对原始观测数据,用正态近似法计算置信区间(基于均值和标准误),但你的数据是从贝叶斯模型提取的后验分布样本,需要直接从样本中提取分位数来得到贝叶斯可信区间(而非频率学置信区间),默认方法完全不适用。

解决方案

直接在tbl_summary()中自定义统计量,从后验样本计算中位数和95%可信区间(分位数区间或HPD区间),替代add_ci()的默认行为。以下是修改后的代码:

方法1:直接计算分位数可信区间

# 创建表格(修改后的版本)
total_mt_table <- total_mt_posteriors %>%
  tbl_strata(group, ~.x %>%
               tbl_summary(by = time,
                           # 自定义统计量:中位数 + 95%分位数可信区间
                           statistic = all_continuous() ~ "{median} ({p2.5}, {p97.5})",
                           missing = "no",
                           digits = all_continuous() ~ 2,
                           label = list(.value ~ "Total")) %>%
               modify_header(label ~ "**Muscle thickness<br>(cm)**") %>%
               modify_header(all_stat_cols() ~ "**{level}**") %>%
               modify_footnote(update = everything() ~ NA))
total_mt_table

方法2:计算HPD最高 posterior 密度区间

如果需要更严谨的HPD区间,可以先预计算区间再传入表格:

# 预计算HPD区间
total_mt_posteriors_hpd <- total_mt_posteriors %>%
  group_by(group, time) %>%
  summarise(
    median = median(.value),
    ci_low = ci(.value, method = "hpd")$CI_low,
    ci_high = ci(.value, method = "hpd")$CI_high,
    .groups = "drop"
  )

# 用预计算的统计量创建表格
total_mt_table_hpd <- total_mt_posteriors_hpd %>%
  tbl_strata(group, ~.x %>%
               tbl_summary(by = time,
                           include = c(median, ci_low, ci_high),
                           statistic = all_continuous() ~ "{mean}",
                           missing = "no",
                           digits = all_continuous() ~ 2,
                           label = list(median ~ "Total")) %>%
               modify_header(label ~ "**Muscle thickness<br>(cm)**") %>%
               modify_header(all_stat_cols() ~ "**{level}**") %>%
               # 合并中位数和HPD区间
               modify_fmt_fun(all_stat_cols() ~ function(x) {
                 paste0(x[1], " (", x[2], ", ", x[3], ")")
               }) %>%
               modify_footnote(update = everything() ~ NA))
total_mt_table_hpd

关键说明

  • 贝叶斯模型的后验样本必须用分位数或HPD区间表示可信区间,不能用频率学的正态近似方法。
  • gt_summary的add_ci()默认不支持贝叶后验样本的可信区间计算,必须手动定义统计逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:14:59