显示估计值、置信区间和真实参数
Displaying estimates, confidence intervals and true parameters
以下是我的数据类型。请不要关注数据是如何创建的,也不要关注这些数字在任何情况下是否真实。问题仅与图形有关。
set.seed(12)
TrueParameter = rep(c(10,15,18), each=8)
Estimate = rep(c(rnorm(8, 10, 1), rnorm(8, 15, 0.5), rnorm(8, 18, 2)))
LowBound95 = Estimate - abs(rnorm(24, 0, 5))
HighBound95 = Estimate + abs(rnorm(24, 0, 5))
LowBound99 = LowBound95 - abs(rnorm(24, 0, 5))
HighBound99 = HighBound95 + abs(rnorm(24, 0, 5))
dt = data.frame(TrueParameter = TrueParameter, Estimate = Estimate, LowBound95 = LowBound95, HighBound95 = HighBound95, LowBound99 = LowBound99, HighBound99 = HighBound99)
TrueParameter Estimate LowBound95 HighBound95 LowBound99 HighBound99
1 10 8.519432 3.3932082 12.176699 1.2461752 14.43811
2 10 11.577169 10.2402453 14.040165 9.3276472 17.51385
3 10 9.043256 8.0477272 9.256680 7.5311749 10.45175
4 10 9.079995 8.4243818 9.643348 5.2551908 14.67984
5 10 8.002358 7.2733584 10.286494 0.9180895 19.92009
6 10 9.727704 7.9173804 19.829378 5.9976284 20.08653
7 10 9.684651 6.3147455 14.939102 3.7309665 23.94172
8 10 9.371745 -0.9884341 13.045005 -1.8782768 15.80229
9 15 14.946768 12.2416248 17.643017 12.2203346 18.17831
10 15 15.214007 9.8615466 21.785371 3.4912489 25.73099
11 15 14.611140 12.7488565 15.861334 11.7383049 17.08261
12 15 14.353059 11.9273521 15.924082 6.1050227 17.84498
13 15 14.610217 13.2362959 16.642950 13.1193988 22.48913
14 15 15.005976 12.6084131 19.978079 8.1226293 27.56944
15 15 14.923792 10.9332653 19.202634 10.0496430 19.56754
16 15 14.648268 9.6260119 15.633912 4.0574665 18.27229
17 18 20.377758 19.8528371 24.549384 17.1433928 27.17201
18 18 18.681025 12.9010601 22.914975 8.0840684 26.64948
19 18 19.013936 16.1232632 28.784463 14.2410212 34.69653
20 18 17.413390 9.4352614 28.159690 4.5118924 34.93323
21 18 18.447283 16.9047645 23.302884 12.4169675 24.36431
22 18 22.014403 19.7670733 27.739711 19.1207606 28.18712
23 18 20.023958 15.1386918 22.650961 9.9701769 23.93612
24 18 17.395082 16.4450922 18.646682 14.7336458 24.66812
第一列是数据的已知真实参数。第二列是此真实参数的估计值,第三列和第四列表示此估计值的 95% 置信区间,而第五列和第六列表示 99% 的置信区间。
我的问题既是编程问题又是设计问题(我希望这不会让post太离题); 如何最好地显示这些数据?
我正在考虑让所有真实参数都低于其他参数(无论它们是否碰巧采用相同的值)。然后,真实参数将由垂直线表示。两个置信区间将被绘制为水平线(两种颜色),带有一个黑点用于估计。然后我们可以很容易地看到有多少置信区间与真实参数重叠。但我欢迎有人提出不同的设计!这是一个类似于显示这种数据的方法。不同之处在于,在我的情况下参数不是常数,我希望能够显示多个置信区间。
我通常使用 ggplot2
但我欢迎基于任何 R 函数和包的答案。可能确实存在对这种情节非常方便的软件包。
我知道您需要方便的功能 and/or 包,但无论如何...这是我通常在 base R 中执行此操作的方式。
我经常通过改变 lwd
.
来绘制多个置信区间
例如:
plot(dt$Estimate, pch=20, ylim=range(pretty(c(dt$LowBound99, dt$HighBound99))),
xlab='', ylab='', las=1, cex.axis=0.8, cex=1.5, xaxt='n')
segments(seq_len(nrow(dt)), dt$LowBound99, y1=dt$HighBound99, lend=1)
segments(seq_len(nrow(dt)), dt$LowBound95, y1=dt$HighBound95, lwd=4, lend=1)
我认为将 lend=1
用于 segments
很有用,这样可以清楚地定义间隔的结束。
然后您可以将真实参数值叠加为点:
points(dt$TrueParameter, pch=21, bg='white')
或将它们绘制为其他元素下方的水平线段:
plot(dt$Estimate, pch=20, ylim=range(pretty(c(dt$LowBound99, dt$HighBound99))),
xlab='', ylab='', las=1, xaxt='n',
panel.first=plot(dt$TrueParameter ~ factor(seq_len(nrow(dt))), add=TRUE,
xlab='', ylab='', axes=FALSE, border='gray70', medlwd=4))
segments(seq_len(nrow(dt)), dt$LowBound99, y1=dt$HighBound99, lend=1)
segments(seq_len(nrow(dt)), dt$LowBound95, y1=dt$HighBound95, lwd=4, lend=1)
上面,我们利用了箱线图的水平中值指标,当x
为factor
且y
为数值时默认部署。 (因为每个 x
只有一个真值,所以框的其余部分没有绘制。)我们可以在这里使用 points
和 pch='-'
或者 pch=-0x2013L
,但是它们围绕绘图坐标的中心有点差。
以下是我的数据类型。请不要关注数据是如何创建的,也不要关注这些数字在任何情况下是否真实。问题仅与图形有关。
set.seed(12)
TrueParameter = rep(c(10,15,18), each=8)
Estimate = rep(c(rnorm(8, 10, 1), rnorm(8, 15, 0.5), rnorm(8, 18, 2)))
LowBound95 = Estimate - abs(rnorm(24, 0, 5))
HighBound95 = Estimate + abs(rnorm(24, 0, 5))
LowBound99 = LowBound95 - abs(rnorm(24, 0, 5))
HighBound99 = HighBound95 + abs(rnorm(24, 0, 5))
dt = data.frame(TrueParameter = TrueParameter, Estimate = Estimate, LowBound95 = LowBound95, HighBound95 = HighBound95, LowBound99 = LowBound99, HighBound99 = HighBound99)
TrueParameter Estimate LowBound95 HighBound95 LowBound99 HighBound99
1 10 8.519432 3.3932082 12.176699 1.2461752 14.43811
2 10 11.577169 10.2402453 14.040165 9.3276472 17.51385
3 10 9.043256 8.0477272 9.256680 7.5311749 10.45175
4 10 9.079995 8.4243818 9.643348 5.2551908 14.67984
5 10 8.002358 7.2733584 10.286494 0.9180895 19.92009
6 10 9.727704 7.9173804 19.829378 5.9976284 20.08653
7 10 9.684651 6.3147455 14.939102 3.7309665 23.94172
8 10 9.371745 -0.9884341 13.045005 -1.8782768 15.80229
9 15 14.946768 12.2416248 17.643017 12.2203346 18.17831
10 15 15.214007 9.8615466 21.785371 3.4912489 25.73099
11 15 14.611140 12.7488565 15.861334 11.7383049 17.08261
12 15 14.353059 11.9273521 15.924082 6.1050227 17.84498
13 15 14.610217 13.2362959 16.642950 13.1193988 22.48913
14 15 15.005976 12.6084131 19.978079 8.1226293 27.56944
15 15 14.923792 10.9332653 19.202634 10.0496430 19.56754
16 15 14.648268 9.6260119 15.633912 4.0574665 18.27229
17 18 20.377758 19.8528371 24.549384 17.1433928 27.17201
18 18 18.681025 12.9010601 22.914975 8.0840684 26.64948
19 18 19.013936 16.1232632 28.784463 14.2410212 34.69653
20 18 17.413390 9.4352614 28.159690 4.5118924 34.93323
21 18 18.447283 16.9047645 23.302884 12.4169675 24.36431
22 18 22.014403 19.7670733 27.739711 19.1207606 28.18712
23 18 20.023958 15.1386918 22.650961 9.9701769 23.93612
24 18 17.395082 16.4450922 18.646682 14.7336458 24.66812
第一列是数据的已知真实参数。第二列是此真实参数的估计值,第三列和第四列表示此估计值的 95% 置信区间,而第五列和第六列表示 99% 的置信区间。
我的问题既是编程问题又是设计问题(我希望这不会让post太离题); 如何最好地显示这些数据?
我正在考虑让所有真实参数都低于其他参数(无论它们是否碰巧采用相同的值)。然后,真实参数将由垂直线表示。两个置信区间将被绘制为水平线(两种颜色),带有一个黑点用于估计。然后我们可以很容易地看到有多少置信区间与真实参数重叠。但我欢迎有人提出不同的设计!这是一个类似于显示这种数据的方法。不同之处在于,在我的情况下参数不是常数,我希望能够显示多个置信区间。
我通常使用 ggplot2
但我欢迎基于任何 R 函数和包的答案。可能确实存在对这种情节非常方便的软件包。
我知道您需要方便的功能 and/or 包,但无论如何...这是我通常在 base R 中执行此操作的方式。
我经常通过改变 lwd
.
例如:
plot(dt$Estimate, pch=20, ylim=range(pretty(c(dt$LowBound99, dt$HighBound99))),
xlab='', ylab='', las=1, cex.axis=0.8, cex=1.5, xaxt='n')
segments(seq_len(nrow(dt)), dt$LowBound99, y1=dt$HighBound99, lend=1)
segments(seq_len(nrow(dt)), dt$LowBound95, y1=dt$HighBound95, lwd=4, lend=1)
我认为将 lend=1
用于 segments
很有用,这样可以清楚地定义间隔的结束。
然后您可以将真实参数值叠加为点:
points(dt$TrueParameter, pch=21, bg='white')
或将它们绘制为其他元素下方的水平线段:
plot(dt$Estimate, pch=20, ylim=range(pretty(c(dt$LowBound99, dt$HighBound99))),
xlab='', ylab='', las=1, xaxt='n',
panel.first=plot(dt$TrueParameter ~ factor(seq_len(nrow(dt))), add=TRUE,
xlab='', ylab='', axes=FALSE, border='gray70', medlwd=4))
segments(seq_len(nrow(dt)), dt$LowBound99, y1=dt$HighBound99, lend=1)
segments(seq_len(nrow(dt)), dt$LowBound95, y1=dt$HighBound95, lwd=4, lend=1)
上面,我们利用了箱线图的水平中值指标,当x
为factor
且y
为数值时默认部署。 (因为每个 x
只有一个真值,所以框的其余部分没有绘制。)我们可以在这里使用 points
和 pch='-'
或者 pch=-0x2013L
,但是它们围绕绘图坐标的中心有点差。