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

在R的ggpubr中为分组箱线图添加组内模态统计检验

同一Model分组内Modality间统计检验的实现方案

问题背景

已基于ggpubr绘制出按Model分组、展示不同Modality的Accuracy箱线图,但尝试添加同一Model内EMG与IMU的Wilcoxon检验时,检验结果无法正常显示。

解决方案

核心是利用stat_compare_means的group.by参数指定按Model分组进行检验,同时确保对比组在对应Model中有有效数据。以下是完整实现代码:

library(ggpubr)
library(dplyr)

# 加载数据集
df <- structure(list(Modality = c("IMU", "IMU", "IMU", "IMU", "EMG", 
"EMG", "EMG", "EMG", "EMG", "EMG", "MULTIMODAL", "MULTIMODAL", 
"MULTIMODAL", "MULTIMODAL", "MULTIMODAL", "MULTIMODAL"), Accuracy = c(0.890994094, 
0.932236205, 0.920874879, 0.808366656, 0.736169166, 0.727917473, 
0.76442499, 0.766358025, 0.672936004, 0.544758539, 0.922476135, 
0.958934517, 0.889652539, 0.878411911, 0.800769442, 0.9035499
), Precision = c(0.910120428, 0.935881939, 0.930419589, 0.858438788, 
0.783804275, 0.803642164, 0.867418091, 0.826140299, 0.651388637, 
0.683146414, 0.931054424, 0.960414109, 0.913705853, 0.892099619, 
0.827661119, 0.917972446), Recall = c(0.890994094, 0.932236205, 
0.920874879, 0.808366656, 0.736169166, 0.727917473, 0.76442499, 
0.766358025, 0.672936004, 0.544758539, 0.922476135, 0.958934517, 
0.889652539, 0.878411911, 0.800769442, 0.9035499), F1_Score = c(0.895340797, 
0.929767228, 0.923515392, 0.820549586, 0.740460186, 0.743306797, 
0.771715283, 0.778685153, 0.654271508, 0.562382109, 0.923856378, 
0.958423427, 0.894510388, 0.881315329, 0.804600327, 0.905468385
), Model = c("CNN", "CNN", "LSTM", "CNN-LSTM", "LSTM-CNN", "CNN", 
"LSTM", "LSTM-CNN", "CNN-LSTM", "CNN", "CNN", "LSTM", "CNN", 
"LSTM-CNN", "CNN-LSTM", "CNN-LSTM")), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -16L))

# 绘制基础箱线图
p <- ggboxplot(df, x = "Model", y = "Accuracy", color = "Modality", 
               palette = "jco", 
               add = "jitter", ylab = "Accuracy",
               width = 0.7,
               lwd = 1.35,
               xlab = "Model", legend = "right") +
  ggtitle("Boxplot of Accuracy by Model and Modality") +
  theme_minimal()

# 添加同一Model内EMG与IMU的Wilcoxon检验
p + stat_compare_means(
  comparisons = list(c("EMG", "IMU")),
  method = "wilcox.test",
  label = "p.signif",
  group.by = "Model",  # 关键:按Model分组执行检验
  hide.ns = TRUE,      # 可选:隐藏无显著差异的标记
  label.y = 1.0        # 可选:调整检验标签的纵向位置
)

关键说明

  • group.by = "Model":指定统计检验在每个Model分组内独立进行,这是解决原问题的核心参数。
  • hide.ns = TRUE:避免显示无显著性(ns)的标记,让图表更简洁。
  • label.y:统一设置检验标签的纵向位置,也可以根据不同Model设置向量值(如label.y = c(1.0, 1.02, 1.01, 1.0))来避免标签重叠。
  • 注意:部分Model可能仅包含EMG或IMU其中一种数据(如LSTM-CNN无IMU数据),这类分组会自动跳过检验,不会显示无效标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:12:02