如何用gtsummary在R中生成指定交叉表并添加Fisher精确检验P值
解决方案
以下是针对需求编写的R代码,基于gtsummary包实现指定的2×3交叉表,包含分层Fisher精确检验P值:
1. 模拟符合要求的数据集(可替换为你的真实数据)
set.seed(123) library(tidyverse) library(gtsummary) # 构造虚拟数据集(已完成因子转换与标注) df <- tibble( 治疗方案 = factor(sample(c("药物A", "药物B"), 50, replace = TRUE)), 癌症分级 = factor(sample(c("I级", "II级", "III级"), 50, replace = TRUE)), 生存结局 = factor(sample(c("Survived", "Died"), 50, replace = TRUE)) )
2. 生成目标交叉表代码
tbl_strata( data = df, strata = 治疗方案, # 按治疗方案分层 .tbl_fun = function(data) { data %>% # 按生存结局分组统计癌症分级的频数 tbl_summary( by = 生存结局, include = 癌症分级, type = all_categorical() ~ "categorical", statistic = all_categorical() ~ "{n}" ) %>% # 过滤掉Survived对应的行,仅保留Died列的统计结果 modify_table_body(filter, variable == "癌症分级" & label == "Died") %>% # 添加Fisher精确检验,分析癌症分级与死亡的关联 add_p(test = all_categorical() ~ "fisher.test") %>% # 调整表头与格式,移除冗余注释 modify_header(label ~ "癌症分级") %>% modify_footnote(everything() ~ NA) }, .header = "**{strata}**" # 设置分层标题格式 ) %>% modify_spanning_header(all_stat_cols() ~ "死亡情况") # 添加跨列表头
代码关键说明
tbl_strata():实现按治疗方案分层处理,每个药物单独生成子表modify_table_body():精准过滤掉Survived的统计行,只保留Died列的癌症分级频数add_p():为每个分层添加Fisher精确检验P值,检验癌症分级与死亡结局的关联- 格式调整:通过
modify_header()和modify_spanning_header()优化表格可读性,确保输出为2×3结构(3个癌症分级类别 + 1列死亡频数 + P值行)
内容的提问来源于stack exchange,提问作者Jay Bee
相关产品推荐
相关产品推荐

