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

如何在R的gtsummary中计算多分类变量组间各类别比例差异及95%CI

解决多分类变量组间比例差异及置信区间计算问题

默认情况下add_difference()函数对多分类变量只会输出整体的组间检验结果,不会自动计算每个类别与另一组的比例差异及置信区间。要实现三分类变量ses_status每个类别在男女组间的比例差异计算,可通过以下两种方式处理:

方法一:两两对比所有类别

通过指定test参数为pairwise.prop.test,实现多分类变量的两两比例差异检验,并输出对应置信区间:

# 加载所需包
library(gtsummary)
library(tidyverse)

# 构造数据集
dt <- data.frame(
  gender = as.factor(rep(c("M","F", "M"), 10)),
  smoke = as.factor(rep(c("Yes","No"),15)),
  ses_status = as.factor(rep(c("low", "high","middle"),10))
)

# 生成统计表格并添加差异计算
dt %>%
  tbl_summary(by = gender, include = c(ses_status, smoke)) %>%
  add_difference(
    include = c(ses_status, smoke),
    # 指定多分类变量用两两比例检验
    test = list(ses_status ~ "pairwise.prop.test"),
    # 格式化p值和差异估计值
    pvalue_fun = ~style_pvalue(.x, digits = 3),
    estimate_fun = ~style_ratio(.x, digits = 3)
  ) %>%
  # 调整表格表头样式
  modify_header(label = "**变量**") %>%
  bold_labels()

这段代码会输出ses_status三个类别两两之间的组间比例差异、95%置信区间,以及经过Bonferroni调整的p值,同时保留二元变量smoke的差异结果。

方法二:指定参考类别计算差异

如果只需要每个类别与某一参考类别的组间差异,可通过contrast和reference参数设置:

dt %>%
  tbl_summary(by = gender, include = c(ses_status, smoke)) %>%
  # 计算多分类变量与参考类别的差异
  add_difference(
    include = ses_status,
    test = list(ses_status ~ "prop.test"),
    contrast = list(ses_status ~ "reference"),
    reference = list(ses_status ~ "low") # 指定low为参考类别
  ) %>%
  # 单独处理二元变量smoke的差异
  add_difference(include = smoke)

此方法会输出middle vs low、high vs low在男女组间的比例差异及置信区间,适合有明确参考类别的分析场景。

内容的提问来源于stack exchange,提问作者Bikram Adhitya Adhikari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:03:20