使用ggplot在R中正确显示置信区间

时间:2015-12-06 06:05:40

标签: r graph ggplot2

我试图制作一个图表,代表2个测量值(prr和ebgm),用于按年龄类别分组的不同药物的不同不良反应,如下所示:

library(ggplot2)
strata <- factor(c("Neonates", "Infants", "Children", "Adolescents", "Pediatrics"), levels=c("Neonates", "Infants", "Children", "Adolescents", "Pediatrics"), order=T)
Data  <- data.frame(
                strata = sample(strata, 200, replace=T),
                drug=sample(c("ibuprofen", "clarithromycin", "fluticasone"), 200, replace=T), #20 de medicamente
                reaction=sample(c("Liver Injury", "Sepsis", "Acute renal failure", "Anaphylaxis"), 200, replace=T),
                measurement=sample(c("prr", "EBGM"), 200, replace=T),
                value_measurement=sample(runif(16), 200, replace=T),
                lower_CI=sample(runif(6), 200, replace=T),
                upper_CI=sample(runif(5), 200, replace=T)
                )

g <- ggplot(Data, aes(x=strata, y=value_measurement, fill=measurement, group=measurement))+
    geom_histogram(stat="identity", position="dodge")+
    facet_wrap(~reaction)+
    geom_errorbar(aes(x=strata, ymax=upper_CI, ymin=lower_CI), position="dodge", stat="identity")

ggsave(file="meh.png", plot=g)

上限和下限CI是测量的置信区间限制。鉴于每次测量我都有一个置信区间,我希望正确的直方图具有相应的置信区间,但我得到的是以下内容。

图表: Graph Snapshot

任何想法如何正确地放置那些讨厌的conf间隔?谢谢!

后期编辑:在给定药物的原始数据中,我有许多行,每行包含不良反应,年龄类别和每个类别都有2个测量值:prr或EBGM和相应的置信区间。这没有反映在数据模拟中。

1 个答案:

答案 0 :(得分:1)

问题在于,您的每个条形图实际上都是多个条形图,因为对于reactionstrata和{{1}的每个组合,您有多行数据}。 (出于同样的原因,你会得到多个错误条。)

您可以在下面的代码中看到这一点,我已将measurement更改为geom_histogram并添加geom_baralpha=0.3以显示多个重叠栏。我还评论了错误栏。

colour="grey40"

enter image description here

您可以通过在数据中添加另一列来添加分组类别来解决此问题,您可以通过该列分隔这些条。例如,在下面的代码中,我们添加了一个名为ggplot(Data, aes(x=strata, y=value_measurement, fill=measurement, group=measurement)) + geom_bar(stat="identity", position="dodge", alpha=0.3, colour="grey40") + facet_wrap(~reaction) #+ # geom_errorbar(aes(x=strata, ymax=upper_CI, ymin=lower_CI), # position="dodge", stat="identity") 的新列,它只为countreaction的每个组合中的每一行数据分配数字1到n。我们按strata排序,以便每个测量类型将以measurement顺序保存在一起。

count

现在绘制数据:

library(dplyr) 

Data = Data %>% group_by(reaction, strata) %>%
  arrange(measurement) %>%
  mutate(count = 1:n()) 

enter image description here

现在你可以看到单独的条形图,以及它们的误差条(这很奇怪,但只是因为它们是假数据)。