使用 tidyverse、ggplot 和 broom 为 R 中的比例测试 (prop.test) 添加置信区间

Working with tidyverse, ggplot, and broom to add confidence interval to a proportion test (prop.test) in R

假设我正在处理比例,我有两个主要变量(性别和 pain_level)。绘制它们并不难:

使用 tidyverse 和 broom(在此感谢 link:)如果比例在统计上不同,我可以进行比较。

问题来了!

我要补充剧情,错误吧。我知道这并不像我想的那么难,但我找不到办法去做。我试图在此处复制此 link (http://www.andrew.cmu.edu/user/achoulde/94842/labs/lab07_solution.html),但我试图留在 tidyverse 环境中。

所需的输出应该是这样的:

请随意使用下面模拟原始数据集的script/syntax。

library(tidyverse)
ds <- data.frame(sex = rep(c("M","F"), 18),
                 pain_level = c("High","Moderate","low"))

#plot
ds %>% 
  group_by(pain_level, sex) %>% 
  summarise(n=n()) %>% 
  mutate(prop = n/sum(n)*100) %>% 
  ggplot(., aes(x = sex, fill = pain_level, y = prop)) +
  geom_bar(stat = "summary") +
  facet_wrap( ~ pain_level) +
  theme(legend.position = "none")

#p values of proportion test

ds %>% 
  rowwise %>%
  group_by(pain_level, sex) %>% 
  summarise(cases = n()) %>% 
  mutate(pop = sum(cases)) %>% #compute totals
  distinct(., pain_level, .keep_all= TRUE) %>% #keep only one value of the row 
  mutate(tst = list(broom::tidy(prop.test(cases, pop, conf.level=0.95)))) %>%
  tidyr::unnest(tst)

我认为以下内容可能与您想要的输出大致相似:

ds %>% 
  group_by(pain_level, sex) %>% 
  summarise(cases = n()) %>% 
  mutate(pop = sum(cases)) %>%
  rowwise() %>%
  mutate(tst = list(broom::tidy(prop.test(cases, pop, conf.level=0.95)))) %>%
  tidyr::unnest(tst) %>%
  ggplot(aes(sex, estimate, group = pain_level)) +
  geom_col(aes(fill = pain_level)) +
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high)) +
  facet_wrap(~ pain_level)