将Pearson卡方检验的p值添加到facet ggplots

3

我比较了来自三个不同组的分类数据。

我想知道是否有可能在分面 ggplots 中轻松添加卡方检验的 p 值(因为我正在分析一个大型数据集)。我刚刚读到一个神奇的方法,可以在比较平均值时这样做 https://www.r-bloggers.com/add-p-values-and-significance-levels-to-ggplots/。然而,在我的情况下,我找不到其他测试的解决方案(例如卡方检验)。

d.test <- data.frame(
  results = sample(c("A","B","C"), 30, replace =TRUE),
  test = sample(c("test1", "test2","test3"), 30, replace = TRUE)
)

chisq.test(d.test$results,d.test$test)

ggplot(d.test, aes(results) ) +
  geom_bar() + facet_grid(test ~ .)

非常感谢您的帮助!;D

1
这里是如何添加注释的链接,这里是如何获取p值的链接 - lukeA
2个回答

5

将你的p值存储在一个变量中

pval <- chisq.test(d.test$results,d.test$test)$p.value

使用annotate手动绘制文本。
ggplot(d.test, aes(results) ) +
  geom_bar() + facet_grid(test ~ .) +
  annotate("text", x=1, y=5, label=pval)

使用 xy 更改其定位。

ggplot(d.test, aes(results) ) +
  geom_bar() + facet_grid(test ~ .) +
  annotate("text", x=2, y=3, label=pval)    

使用signif更改显示的有效数字位数

ggplot(d.test, aes(results) ) +
  geom_bar() + facet_grid(test ~ .) +
  annotate("text", x=1, y=5, label=signif(pval,4))

添加一个名为“p-value”的标签。
ggplot(d.test, aes(results) ) +
  geom_bar() + facet_grid(test ~ .) +
  annotate("text", x=1, y=5, label=paste0("p-value: ", signif(pval,4)))

非常感谢。您的解决方案是将pval添加到每个facet中,如果需要注释很多图形,则可能有点耗时。是否有使用ggsignif或类似软件包的解决方案? - captcoma
1
我不确定我理解了...您只计算了一个p值,使用您提供的示例。您是否有其他p值要添加到绘图中? - CPak

4
具有创建大多数统计测试输出整洁数据框的方法。然后,您可以将该输出用作geom_text中的data=参数。

生成数据

library(broom)
library(dplyr)
library(ggplot2)

fakedata <- 
  data.frame(groups = sample(c("pop1", "pop2", "pop3", "pop4"), 120, replace = T),
             results = sample(c("A","B","C"), 120, replace = TRUE),
             test = sample(c("test1", "test2","test3"), 120, replace = TRUE))

进行整洁的测试

fakedata.test <-
  fakedata %>% 
    group_by(groups) %>% 
    do(fit = chisq.test(.$results, .$test)) %>% 
    tidy(fit)
# A tibble: 4 x 5
# Groups:   groups [4]
  groups statistic    p.value parameter                     method
  <fctr>     <dbl>      <dbl>     <int>                     <fctr>
1   pop1  3.714286 0.44605156         4 Pearson's Chi-squared test
2   pop2  2.321429 0.67687042         4 Pearson's Chi-squared test
3   pop3  2.294897 0.68169829         4 Pearson's Chi-squared test
4   pop4 10.949116 0.02714188         4 Pearson's Chi-squared test

可视化

fakedata %>% 
  ggplot(aes(results, test)) + 
  geom_jitter(width = 0.2, height = 0.2, shape = 1, size = 2) +
  geom_text(data = fakedata.test,
            aes(3, 3.5, 
                label = paste0("χ²(", parameter, ")=", round(statistic, 2), "; p=", round(p.value, 2))),
            hjust = 1) +
  facet_wrap(~groups)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接