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
相关产品推荐
相关产品推荐

