在ggplot2中的geom_linerange()上添加置信区间的水平指示线

时间:2014-01-07 02:21:42

标签: r ggplot2

我正在尝试生成一个Obersved / Expected医院感染率图表,误差条显示上下95%和99.7%的置信区间。

以下是数据:

orthssi <- structure(list(Hospital = structure(1:18, .Label = c("A", "B", 
"C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", 
"P", "Q", "R"), class = "factor"), SSIs = c(80L, 38L, 24L, 35L, 
39L, 30L, 128L, 27L, 70L, 30L, 30L, 2L, 6L, 38L, 3L, 9L, 52L, 
13L), Procedures = c(865L, 1069L, 796L, 891L, 997L, 550L, 2598L, 
373L, 1079L, 714L, 477L, 227L, 125L, 589L, 292L, 149L, 1984L, 
351L), Expected = c(44.89, 51.149, 35.15, 42.495, 46.987, 26.999, 
105.032, 18.304, 57.402, 31.409, 23.497, 10.898, 5.945, 29.614, 
13.295, 6.403, 88.449, 16.083), OE = c(1.782, 0.743, 0.683, 0.824, 
0.83, 1.111, 1.219, 1.475, 1.219, 0.955, 1.277, 0.184, 1.009, 
1.283, 0.226, 1.406, 0.588, 0.808), Probability = c(0.092, 0.036, 
0.03, 0.039, 0.039, 0.055, 0.049, 0.072, 0.065, 0.042, 0.063, 
0.009, 0.048, 0.065, 0.01, 0.06, 0.026, 0.037), Lower95CI = c(1.42623345874945, 
0.528256888855857, 0.439593399216354, 0.576826930846085, 0.593304300509315, 
0.755779204034742, 1.02072916367972, 0.983076938281617, 0.957133142026683, 
0.648442622896373, 0.86951670130161, 0.0222623281070364, 0.374607285544628, 
0.916025825389466, 0.0466447169655834, 0.651315412316165, 0.440436907019126, 
0.433548700419708), Upper95CI = c(2.19254259114914, 1.01294537379558, 
1.00844478624614, 1.13663544526487, 1.12647704263608, 1.56764294951526, 
1.44220199258348, 2.11060633474044, 1.52742490796631, 1.35122425878491, 
1.7979937836084, 0.655351540870752, 2.13516991355386, 1.73993010418865, 
0.652957058228699, 2.59615214768047, 0.76780774565962, 1.36405674299719
), Lower997CI = c(1.26545076052984, 0.438514548720716, 0.344268212303677, 
0.474612391243614, 0.493987129703437, 0.611131699675563, 0.929047103197505, 
0.785094671227173, 0.840231592610583, 0.523894662155343, 0.703500240342274, 
0.00513071434039922, 0.20498124083422, 0.761788735802099, 0.0165744691173032, 
0.414157407130073, 0.376765181801129, 0.303424472695538), Upper997CI = c(2.41408837016438, 
1.16380466027892, 1.19392754588927, 1.31181443961792, 1.29178515824501, 
1.82316431734875, 1.56260724140783, 2.46519277997175, 1.69514346690893, 
1.57391071859294, 2.08889292293282, 0.966984581231215, 2.80639425224956, 
1.99287051089929, 0.928351140481638, 3.28891183173877, 0.867510832843342, 
1.68791001193251)), .Names = c("Hospital", "SSIs", "Procedures", 
"Expected", "OE", "Probability", "Lower95CI", "Upper95CI", "Lower997CI", 
"Upper997CI"), row.names = c(NA, -18L), class = "data.frame")
> ssi0106 <- dput(orthssi)
structure(list(Hospital = structure(1:18, .Label = c("A", "B", 
"C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", 
"P", "Q", "R"), class = "factor"), SSIs = c(80L, 38L, 24L, 35L, 
39L, 30L, 128L, 27L, 70L, 30L, 30L, 2L, 6L, 38L, 3L, 9L, 52L, 
13L), Procedures = c(865L, 1069L, 796L, 891L, 997L, 550L, 2598L, 
373L, 1079L, 714L, 477L, 227L, 125L, 589L, 292L, 149L, 1984L, 
351L), Expected = c(44.89, 51.149, 35.15, 42.495, 46.987, 26.999, 
105.032, 18.304, 57.402, 31.409, 23.497, 10.898, 5.945, 29.614, 
13.295, 6.403, 88.449, 16.083), OE = c(1.782, 0.743, 0.683, 0.824, 
0.83, 1.111, 1.219, 1.475, 1.219, 0.955, 1.277, 0.184, 1.009, 
1.283, 0.226, 1.406, 0.588, 0.808), Probability = c(0.092, 0.036, 
0.03, 0.039, 0.039, 0.055, 0.049, 0.072, 0.065, 0.042, 0.063, 
0.009, 0.048, 0.065, 0.01, 0.06, 0.026, 0.037), Lower95CI = c(1.42623345874945, 
0.528256888855857, 0.439593399216354, 0.576826930846085, 0.593304300509315, 
0.755779204034742, 1.02072916367972, 0.983076938281617, 0.957133142026683, 
0.648442622896373, 0.86951670130161, 0.0222623281070364, 0.374607285544628, 
0.916025825389466, 0.0466447169655834, 0.651315412316165, 0.440436907019126, 
0.433548700419708), Upper95CI = c(2.19254259114914, 1.01294537379558, 
1.00844478624614, 1.13663544526487, 1.12647704263608, 1.56764294951526, 
1.44220199258348, 2.11060633474044, 1.52742490796631, 1.35122425878491, 
1.7979937836084, 0.655351540870752, 2.13516991355386, 1.73993010418865, 
0.652957058228699, 2.59615214768047, 0.76780774565962, 1.36405674299719
), Lower997CI = c(1.26545076052984, 0.438514548720716, 0.344268212303677, 
0.474612391243614, 0.493987129703437, 0.611131699675563, 0.929047103197505, 
0.785094671227173, 0.840231592610583, 0.523894662155343, 0.703500240342274, 
0.00513071434039922, 0.20498124083422, 0.761788735802099, 0.0165744691173032, 
0.414157407130073, 0.376765181801129, 0.303424472695538), Upper997CI = c(2.41408837016438, 
1.16380466027892, 1.19392754588927, 1.31181443961792, 1.29178515824501, 
1.82316431734875, 1.56260724140783, 2.46519277997175, 1.69514346690893, 
1.57391071859294, 2.08889292293282, 0.966984581231215, 2.80639425224956, 
1.99287051089929, 0.928351140481638, 3.28891183173877, 0.867510832843342, 
1.68791001193251)), .Names = c("Hospital", "SSIs", "Procedures", 
"Expected", "OE", "Probability", "Lower95CI", "Upper95CI", "Lower997CI", 
"Upper997CI"), row.names = c(NA, -18L), class = "data.frame")

这是我制作情节的ggplot代码:

ggplot(data=orthssi, mapping=aes(x=Hospital, y=OE, ymin = Lower997CI, ymax = Upper997CI)) + 
    geom_hline(yintercept=1, colour='gray') + 
    geom_point(colour='blue', size=3) + 
    scale_y_continuous(limits=c(0,ceiling(max(orthssi$Upper997CI)))) + 
    geom_linerange(mapping=aes(x=Hospital))   + 
    theme_bw() +  theme(panel.grid.major.x = element_blank())

它产生以下图表: O/E infection rate by hospital

我想做什么,并且无法管理,它在geom_linerange()上放置小的水平刻度,表示上下95%的位置,置信区间为99.7%。

修改 如果你是ggplot忍者我也会接受不同的线条颜色,表明99.7&amp; CI超过了95%的CI。

非常感谢任何有关如何添加这些刻度/颜色的帮助。

1 个答案:

答案 0 :(得分:7)

geom_errorbar将在末尾创建一个带水平条的行范围。因此,以下将起作用

ggplot(data=orthssi, mapping=aes(x=Hospital, y=OE, ymin = Lower997CI, ymax = Upper997CI)) + 
  geom_hline(yintercept = 1, colour = 'gray') + 
  geom_point(colour = 'blue', size = 3) + 
  scale_y_continuous(limits=c(0, ceiling(max(orthssi$Upper997CI)))) + 
  theme_bw() +  theme(panel.grid.major.x = element_blank()) + 
  geom_errorbar(aes(ymin = Lower95CI,ymax = Upper95CI),width = 0.2,colour = 'red') +
  geom_errorbar(width = 0.2) 

enter image description here

请注意,geom_linerange(mapping = aes(x = Hospital))组件已被删除,因为它是geom_errorbar(width = 0.2)

的一部分