使用ggpubr的compare_means:基于p.adj设显著性水平及report函数用法
关于ggpubr::compare_means的两个技术问题解答
1. 基于p.adj设定显著性水平并添加p.signif标记
compare_means默认会计算校正后的p值(存储在p.adj列),要基于该值添加显著性标记,需在绘图时明确指定使用p.adj列判断显著性阈值,而非默认的原始p值。具体实现代码如下:
# 安装并加载包 install.packages("ggpubr") library(ggpubr) data("ToothGrowth") # 执行配对Wilcox检验,按dose分组计算校正p值 df_compare <- compare_means(len ~ supp, data = ToothGrowth, method = "wilcox.test", paired = TRUE, group.by = "dose", method.adj = "holm") # 可选指定校正方法,默认"holm" # 绘制箱线图并基于p.adj添加显著性标记 ggboxplot(ToothGrowth, x = "supp", y = "len", facet.by = "dose") + stat_pvalue_manual(df_compare, label = "p.signif", # 显示显著性符号 y.position = c(35, 35, 35), # 自定义每个分面的标记位置 # 设定校正p值的显著性阈值与对应符号 cutpoints = c(0, 0.001, 0.01, 0.05, 1), symbols = c("***", "**", "*", "ns"), p.adj = "p.adj") # 指定使用p.adj列判断显著性
关键说明:stat_pvalue_manual的p.adj参数指定以结果数据中的p.adj列作为显著性判断依据,cutpoints和symbols对应不同校正p值区间的标记符号。
2. 用report包处理compare_means的输出结果
compare_means返回的是数据框格式的批量检验结果,而report包对单个htest对象的支持更完善,因此可以先按分组生成独立的htest对象,再进行报告生成:
# 安装并加载report包 install.packages("report") library(report) # 按dose分组拆分数据集 split_data <- split(ToothGrowth, ToothGrowth$dose) # 对每个分组执行配对Wilcox检验,得到htest对象列表 test_list <- lapply(split_data, function(df) { wilcox.test(len ~ supp, data = df, paired = TRUE) }) # 为每个检验生成结构化报告 reports <- lapply(test_list, report) # 查看某一分组的报告示例 print(reports[["0.5"]]) # 生成所有分组的汇总报告表格 report_table(test_list)
若要直接处理compare_means的输出数据框,report包也能识别其中的统计字段并生成标准化报告:
# 直接处理compare_means的结果数据框 report(df_compare)
解释:report()会提取数据框中的统计量、校正p值等信息,生成包含检验类型、统计结果的自然语言报告;report_table()则生成简洁的表格,汇总所有分组的检验结果。
内容的提问来源于stack exchange,提问作者Balina
相关产品推荐
相关产品推荐

