使用ggplot2将显着条添加到比例图

时间:2019-05-01 12:50:15

标签: r ggplot2

我有一个比例图,我想添加显示各组之间统计差异的显着性条。我想使用ggsignif包创建类似的内容:

enter image description here

我尝试使用ggsignif包和ggplot2,但结果似乎不适用于比例测试(例如chi.square)

我的数据如下:

Input =("
        Group  Yes  No
        1       10       90
        2       30       70
        3       20       80
        ")

test_table = as.data.frame(read.table(textConnection(Input),
                              header=TRUE))

我的最初情节看起来像这样:

ggplot(test_table, 
       aes(x=Group, y=Yes)) 
    + geom_col()

1 个答案:

答案 0 :(得分:4)

这里有可能。

我们首先使用基数R的pairwise.prop.test计算比例对之间的成对比较(针对多个假设检验的校正)(有关详细信息,请参见?pairwise.prop.test?prop.test

library(broom)
library(tidyverse)
res <- pairwise.prop.test(as.matrix(test_table[, -1])) %>%
    tidy() %>%
    mutate_at(vars(contains("group")), ~factor(.x, test_table$Group))
res
## A tibble: 3 x 3
#  group1 group2 p.value
#  <fct>  <fct>    <dbl>
#1 2      1      0.00235
#2 3      1      0.149
#3 3      2      0.149

我使用broom::tidy整理pairwise.prop.test的输出;这不是关键的依赖关系,但可以节省我们一些时间。

然后我们可以绘制Yes/(Yes + No)的比例并通过成对检验比例测试覆盖p值

library(ggsignif)
df <- test_table %>%
    mutate(Prop = Yes / (Yes + No))

ggplot(df, aes(Group, Prop, group = Group)) +
    geom_col() +
    geom_signif(
        xmin = as.integer(res$group1),
        xmax = as.integer(res$group2),
        y_position = 0.3 + df$Prop,
        annotation = format(res$p.value, digits = 3),
        tip_length = 0.1)

enter image description here