我有一个比例图,我想添加显示各组之间统计差异的显着性条。我想使用ggsignif
包创建类似的内容:
我尝试使用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()
答案 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)