如何使用ggpubr和ggsignif的组合为p值的箱线图添加注释?

我正在尝试创建一个显示多个比较的箱形图。我制作了一个玩具数据集,该数据集似乎给了我与使用较大数据集相同的错误。

library(tidyverse)
library(ggsignif)
library(ggpubr)


dat <- data.frame(measurement = c("750","850","900","300","200","400","20","30","50"),diagnosis = c("Healthy","Healthy","Moderate","Sick","Sick"))

dat$measurement <- as.numeric(dat$measurement)

#List of comparisons
dat.compare <- list(c("Healthy","Moderate"),c("Healthy","Sick"),c("Moderate","Sick"))

#Running Anova
dat.lm <- lm(measurement ~ diagnosis,data = dat)
TukeyHSD(aov(dat.lm))
Yields: 
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = dat.lm)

$diagnosis
                       diff       lwr        upr     p adj
Moderate-Healthy -4.3333333 -8.830369  0.1637022 0.0574078
Sick-Healthy     -4.6666667 -9.163702 -0.1696312 0.0433911
Sick-Moderate    -0.3333333 -4.830369  4.1637022 0.9720206

dat.p <- list("0.05","0.04","0.97")

p adj是我要用以下代码注释到箱线图中的内容:

ggboxplot(dat,x ="diagnosis",y = "measurement",color = "diagnosis",palette = "jco",add = "jitter") +
  ggsignif::geom_signif(data=dat,comparisons = dat.compare,annotations=dat.p,map_signif_level = TRUE)

运行箱图代码时,出现以下错误:

Warning message:
Computation failed in `stat_signif()`:
names do not match previous names 

最终结果应如下所示

如何使用ggpubr和ggsignif的组合为p值的箱线图添加注释?

据我所知,比较列表上的名称与数据框中的名称匹配。我已经坚持了几个小时,知道我在做什么错吗?谢谢!

samleiming99n 回答:如何使用ggpubr和ggsignif的组合为p值的箱线图添加注释?

一种可能的解决方案是使用geom_signif手动在箱线图中添加您的值。

但是您首先需要生成一个数据框,其中将包含p的值,两个x值都在比较中,y位置用于设置p值。

以下是从Tukey测试开始的示例:

Tukey_data <- TukeyHSD(aov(dat.lm))$diagnosis

library(dplyr)
maxvalues <- dat %>% group_by(diagnosis) %>% summarise(MAX = max(measurement))

pval <- as.data.frame(Tukey_data) %>% rownames_to_column("Group") %>%
  rowwise() %>%
  mutate(Start = unlist(strsplit(Group,"-"))[1],End = unlist(strsplit(Group,"-"))[2]) %>%
  left_join(.,maxvalues,by = c("Start" = "diagnosis")) %>%
  left_join(.,by = c("End" = "diagnosis")) %>% ungroup() %>%
  mutate(ypos = c(12,10,8))
  mutate(End = factor(End,levels = c("Healthy","Moderate","Sick"))) %>% rowwise() %>%
  mutate(ypos = max(MAX.x,MAX.y)*(1+0.25*as.numeric(End)))

# A tibble: 3 x 10
  Group              diff   lwr    upr `p adj` Start    End      MAX.x MAX.y  ypos
  <chr>             <dbl> <dbl>  <dbl>   <dbl> <chr>    <chr>    <dbl> <dbl> <dbl>
1 Moderate-Healthy -4.33  -8.83  0.164  0.0574 Moderate Healthy      5     9    12
2 Sick-Healthy     -4.67  -9.16 -0.170  0.0434 Sick     Healthy      6     9    10
3 Sick-Moderate    -0.333 -4.83  4.16   0.972  Sick     Moderate     6     5     8

然后,您可以将其传递给geom_signif,如下所示:

library(ggpubr)
library(ggsignif)

ggboxplot(dat,x ="diagnosis",y = "measurement",color = "diagnosis",palette = "jco",add = "jitter") +
  geom_signif(data = pval,manual = TRUE,aes(xmax = End,xmin = Start,y_position= ypos,annotations = round(`p adj`,3)))

enter image description here

它能回答您的问题吗?

,

我发现,如果我将两种列表格式都更改为矢量,则程序包将使用它而不会出现错误。

我非常感谢@ dc37的帮助。

本文链接:https://www.f2er.com/2473984.html

大家都在问