我试图制作一个图表,代表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是测量的置信区间限制。鉴于每次测量我都有一个置信区间,我希望正确的直方图具有相应的置信区间,但我得到的是以下内容。
任何想法如何正确地放置那些讨厌的conf间隔?谢谢!
后期编辑:在给定药物的原始数据中,我有许多行,每行包含不良反应,年龄类别和每个类别都有2个测量值:prr或EBGM和相应的置信区间。这没有反映在数据模拟中。
答案 0 :(得分:1)
问题在于,您的每个条形图实际上都是多个条形图,因为对于reaction
,strata
和{{1}的每个组合,您有多行数据}。 (出于同样的原因,你会得到多个错误条。)
您可以在下面的代码中看到这一点,我已将measurement
更改为geom_histogram
并添加geom_bar
和alpha=0.3
以显示多个重叠栏。我还评论了错误栏。
colour="grey40"
您可以通过在数据中添加另一列来添加分组类别来解决此问题,您可以通过该列分隔这些条。例如,在下面的代码中,我们添加了一个名为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")
的新列,它只为count
和reaction
的每个组合中的每一行数据分配数字1到n。我们按strata
排序,以便每个测量类型将以measurement
顺序保存在一起。
count
现在绘制数据:
library(dplyr)
Data = Data %>% group_by(reaction, strata) %>%
arrange(measurement) %>%
mutate(count = 1:n())
现在你可以看到单独的条形图,以及它们的误差条(这很奇怪,但只是因为它们是假数据)。