ggsignif软件包错误stat_signif需要以下缺失的美感:y

时间:2019-02-21 12:45:08

标签: r ggplot2 bar-chart p-value

这是我的数据的虚构示例:

x <- c("Control", "Case", "Case", "Case", "Control", "Control", "Control", "Case", "Case", "Case")
y <- c("Dead", "Dead", "Dead", "Alive", "Alive", "Dead", "Dead", "Dead", "Alive", "Dead")

我试图以条形图的形式表示这些数据,然后指出两个实验组(病例和对照)之间活着的和死亡的患者的比例有统计学意义的差异。我执行了Pearson的卡方检验,p值为4.674e-06。

这是我的剧情代码:

library(ggsignif)

ggplot(data, aes(x = data$x,
             fill = data$y)) + 
geom_bar(aes(y = stat(count/sum(count))), position = position_dodge(0.9)) + 
theme(plot.title = element_text(hjust = 0.5)) +
ylim(c(0, 0.4)) +
labs(x = NULL, y = "Proportion", fill = NULL) +
scale_x_discrete(labels = c("Control", "Case")) +
geom_signif(comparisons = list(c("Control", "Case"), map_signif_level = TRUE))

但是我得到:

Error: stat_signif requires the following missing aesthetics: y

任何人都可以告诉我为什么会发生这种情况以及如何解决吗?

谢谢

1 个答案:

答案 0 :(得分:1)

如错误消息所指示,geom_signif要求具有y的美感,而您未指定任何美感。

y = stat(count/sum(count))geom_bar移至您的整体美学,或将其添加到geom_signif的美学中。

接下来,解决您的审美问题:使用data$xdata$y代替xy。此外,您在geom_signif中犯了一个错误:map_signif_level = TRUE必须在comparisons之外

最后,geom_signif似乎无法使用美学计算的统计数据。因此,您需要预先计算此统计信息,例如通过dplyr:

data %>%
    group_by(x) %>%
    count(y) %>%
    mutate(Freq = n / sum(n)) %>%
    ggplot() +
    aes(x, Freq, fill = y) +
    geom_col(position = position_dodge(0.9)) +
    geom_signif(
        comparisons = list(c("Control", "Case")),
        map_signif_level = TRUE
    )