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

gtsummary中如何添加两类不同的卡方检验p值?

解决gtsummary添加整体Age组间死亡率差异p值的问题

方案1:用modify_table_body直接插入计算好的p值

先算出整体Age和mortality的卡方检验p值,再手动把这一行加到分层表格里:

library(gtsummary)
library(dplyr)

# 假设你的数据集名为df
df <- your_data_set

# 1. 生成原分层表格(按Age分层,对比Sex的死亡率p值)
tbl <- df %>%
  select(Sex, Age, mortality) %>%
  tbl_strata(
    strata = Age,
    ~ .x %>%
      tbl_summary(by = Sex, include = mortality) %>%
      add_p(test = list(mortality ~ "chisq.test"))
  )

# 2. 计算整体Age组间死亡率的卡方检验p值
overall_age_p <- chisq.test(df$Age, df$mortality)$p.value

# 3. 将p值插入表格末尾
final_tbl <- tbl %>%
  modify_table_body(
    ~ .x %>%
      add_row(
        variable = "overall_age_mortality",
        row_type = "p.value",
        label = "整体Age组间死亡率差异",
        p.value = overall_age_p,
        .after = nrow(.)  # 指定插入到表格最后一行
      )
  ) %>%
  # 格式化p值为常规显示样式
  modify_fmt_fun(p.value ~ style_pvalue(.x, digits = 3))

# 查看最终表格
final_tbl

方案2:生成单独的整体p值表格后合并

如果觉得直接插入行不够灵活,可以先做一个仅包含整体p值的小表格,再和原分层表格合并:

# 1. 生成原分层表格(同方案1)
tbl <- df %>%
  select(Sex, Age, mortality) %>%
  tbl_strata(
    strata = Age,
    ~ .x %>%
      tbl_summary(by = Sex, include = mortality) %>%
      add_p(test = list(mortality ~ "chisq.test"))
  )

# 2. 生成仅含整体Age-mortality p值的表格
overall_tbl <- df %>%
  select(Age, mortality) %>%
  tbl_summary(include = mortality) %>%
  add_p(test = list(mortality ~ "chisq.test"), group = Age) %>%
  # 只保留p值行,剔除其他冗余内容
  modify_table_body(~ .x %>% filter(row_type == "p.value")) %>%
  modify_row_labels(~ "整体Age组间死亡率差异") %>%
  # 隐藏统计列,仅保留p值列
  modify_column_hide(all_stat_cols())

# 3. 合并两个表格
final_tbl <- tbl_merge(list(tbl, overall_tbl))

# 查看最终表格
final_tbl

为什么多次调用add_p()无效?

因为tbl_strata生成的是分层独立的表格结构,每次add_p()只会作用在各分层内部,无法直接添加跨分层的整体统计量,所以需要通过手动插入或表格合并的方式补充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:13:28