在R中组合ggpubr函数ggsummarystats()和stat_compare_means()可能吗?

5uzkadbs  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(150)

最近,我开始意识到强大的ggpubr包,以及通过向ggline图添加stat_compare_means()来轻松显示图的同时包含统计测试的轻松性。
我想通过在下面添加统计数据来完善我的数据,比如每组的参与者数量和平均值,也许还有sd值,这应该可以通过使用ggsummarystats()来实现。
但是,如果我将ggline参数嵌套到ggsummarystats()中,并在下面添加stat_compare_means(),R会输出“NULL”。
下面的示例工作正常,并在图形下方显示基本统计信息,但不包括上面p值的pmax。

df %>%
  ggsummarystats(x="TIMEPOINT",
         y="PROTEIN_CONCENTRATION",
         color="DISEASE",
         add=c("jitter", "mean_sd"),
         add.params = list(alpha=0.3),
         palette= "jco",
         ggfunc=ggline,
         summaries = c("n", "mean", "ci")
         )

如果我添加stat_compare_means(),它不再工作->“NULL”

df %>%
  ggsummarystats(x="TIMEPOINT",
         y="PROTEIN_CONCENTRATION",
         color="DISEASE",
         add=c("jitter", "mean_sd"),
         add.params = list(alpha=0.3),
         palette= "jco",
         ggfunc=ggline,
         summaries = c("n", "mean", "ci")
         )
stat_compare_means(aes(group = DISEASE), label = "p.signif", label.y = 40)

我的直觉告诉我,我必须以某种方式将stat_compare_means()包含到ggsummarystats中,就像ggline函数一样,但我不知道怎么做。
有谁知道如何将图表上方的asterix与下方的基本统计数据结合起来?

jutyujz0

jutyujz01#

ggsummarystats生成的对象本质上是两个ggplot的列表;一个用于主图,称为main.plot,另一个用于表,称为summary.plot。您必须将stat_compare_means添加到main.plot,并将其写回ggsummarystats对象。
由于没有可重现的示例,让我们使用ggsummarystats帮助文件中的示例:

library(ggpubr)
#> Loading required package: ggplot2

data("ToothGrowth")
df <- ToothGrowth
df$dose <- as.factor(df$dose)

set.seed(123)
qc <- rep(c("pass", "fail"), 30)
df$qc <- as.factor(sample(qc, 60))

summary.stats <- df %>%
  group_by(dose) %>%
  get_summary_stats(type = "common")

现在我们生成并存储图:

p <- ggsummarystats(
  df, x = "dose", y = "len",
  ggfunc = ggboxplot, add = "jitter",
  color = "dose", palette = "npg"
)

现在p看起来像这样:

p

我们将stat_compare_means层添加到pmain.plot成员,如下所示:

p$main.plot <- p$main.plot + 
  stat_compare_means(label = "p.signif",
                     comparisons = list(c("0.5", "1"),
                                        c("1",   "2"),
                                        c("0.5", "2")))

所以p变成:

p

创建于2023-09-26附带reprex v2.0.2

相关问题