首页 > 解决方案 > 将 P 值添加到组箱线图中的比较

问题描述

我正在尝试创建一个箱线图,该箱线图仅显示重要的 p 值,在箱线图中每个条的组内。例如这里它将比较 I1 和 SI2 的“一般”、“好”、“非常好”等

在此处输入图像描述

我尝试使用以下代码来实现上述情节

library(ggplot2)
library(dplyr)
data("diamonds")

labeldat <- diamonds %>%
  group_by(cut, clarity) %>%
  dplyr::summarise(labels = paste(n(), n_distinct(color), sep = "\n"))


Comparisons = list(c("I1","SI2"),c("I1","SI1"),c("I1","VS2"),c("I1","VS1"),c("I1","VVS2"),c("I1","VVS1"),c("I1","IF"),
                   c("SI2","SI1"),c("SI2","VS2"),c("SI2","VS1"),c("SI2","VVS2"),c("SI2","VVS1"),c("SI2","IF"),
                   c("SI1","VS2"),c("SI1","VS1"),c("SI1","VVS2"),c("SI1","VVS1"),c("SI1","IF"),
                   c("VS2","VS1"),c("VS2","VVS2"),c("VS2","VVS1"),c("VS2","IF"),
                   c("VS1","VVS2"),c("VS1","VVS1"),c("VS1","IF"),
                   c("VVS2","VVS1"),c("VVS2","IF"),
                   c("VVS1","IF"))



ggplot(diamonds, aes(x=cut, y=price)) +
  geom_boxplot(aes(fill=clarity), position = position_dodge2(width=0.75)) + 
  theme_bw() + 
  geom_text(data = labeldat, aes(x = cut, y = -250, label = labels), hjust = 0.5, position = position_dodge2(width = .75))+
  stat_compare_means(aes(group=clarity), label = "p.signif", method="t.test", comparisons = Comparisons)

不幸的是,使用比较参数似乎通过计算错误,我无法解决如何解决:警告消息:计算失败stat_signif():需要 TRUE/FALSE 的缺失值

我试过在没有比较的情况下运行它,但它似乎只是给了我一个总分

标签: rggplot2boxplotggpubr

解决方案


我首先要说的是,在这个例子中进行了太多的比较,所以结果很混乱,为了适应额外的信息,y 轴被大大扩展了,箱线图被压扁了。但是为了提供答案并想象您可能有一个比较较少的数据集,问题是stat_compare_means()比较 x 轴上的组。要通过 比较clarity,您需要将其放在 x 轴上,然后按 刻面cut

library(ggplot2)
library(ggpubr)
library(dplyr)

labeldat <- diamonds %>%
  group_by(cut, clarity) %>%
  dplyr::summarise(labels = paste(n(), n_distinct(color), sep = "\n"))

ggplot(diamonds, aes(x=clarity, y=price)) +
  geom_boxplot(aes(fill=clarity), position = position_dodge2(width=0.75)) + 
  stat_compare_means(aes(group=clarity), label = "p.signif", method="t.test", comparisons = combn(1:8, 2, FUN = list)) +
  facet_grid(cols = vars(cut)) +
  theme_bw() + 
  geom_text(data = labeldat, aes(x = clarity, y = -2000, label = labels), hjust = 0.5, position = position_dodge2(width = .75)) +
  theme(axis.text.x = element_blank())

在此处输入图像描述


推荐阅读