【问题标题】:Multiple comparisons with geom_signif function, R与 geom_signif 函数的多重比较,R
【发布时间】:2017-05-16 03:00:55
【问题描述】:

ggsignif 包对于在ggplot 图表中快速轻松地指示重要比较非常有用。但是,comparisons 调用需要手动键入要比较的每对值。

例如

library(ggplot2)
library(ggsignif)

data(iris)

ggplot(iris, aes(x=Species, y=Sepal.Length)) + 
  geom_boxplot() +
  geom_signif(comparisons = list(c("versicolor", "virginica"),c('versicolor','setosa')), 
              map_signif_level=TRUE)

我想知道如何通过同时引用所有可能的组合来规避这种情况?例如expand.grid(x = levels(iris$Species), y = levels(iris$Species)),给出所有组合

           x          y
1     setosa     setosa
2 versicolor     setosa
3  virginica     setosa
4     setosa versicolor
5 versicolor versicolor
6  virginica versicolor
7     setosa  virginica
8 versicolor  virginica
9  virginica  virginica

但是如何让geom_signif(comparisons=... 接受这个?

包裹信息在这里https://cran.r-project.org/web/packages/ggsignif/index.html

【问题讨论】:

  • combn(levels(iris$Species), 2) 将为您提供所有三个配对组合
  • @AdamQuek 在没有list() 的情况下使用它会给出错误Warning message: Computation failed in stat_signif(): not enough 'y' observations。使用 with list() 只会将第一个比较添加到绘图中。
  • 未回答您在geom_signif 上的查询(从未使用过,也不打算这样做)。只是建议combn 是获得成对组合而不是expand.grid 的更明智的方法。
  • @AdamQuek 哦。好的,谢谢。

标签: r graph ggplot2 statistics pairwise


【解决方案1】:

基于 Adam Quek 的评论,您只需转置创建的矩阵并将每一行变成一个列表:

split(t(combn(levels(iris$Species), 2)), seq(nrow(t(combn(levels(iris$Species), 2)))))

$`1`
[1] "setosa"     "versicolor"

$`2`
[1] "setosa"    "virginica"

$`3`
[1] "versicolor" "virginica" 

ggplot(iris, aes(x = Species, y = Sepal.Length)) + 
  geom_boxplot() +
  geom_signif(comparisons = split(t(combn(levels(iris$Species), 2)), seq(nrow(t(combn(levels(iris$Species), 2))))), 
              map_signif_level = TRUE)

【讨论】:

  • 太棒了!谢谢你。能否麻烦您问一下如何避开或抖动这些线条?
  • 啊,我看到了step_increase=
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2021-06-13
  • 2012-05-04
  • 2016-03-19
  • 2011-06-16
相关资源
最近更新 更多