这个答案分析了引文的含义,并提供了模拟研究的结果来说明它并帮助理解它可能想说什么。任何人(具有基本技能)都可以轻松地扩展这项研究,R
以探索其他置信区间程序和其他模型。
在这项工作中出现了两个有趣的问题。 一个是关于如何评估置信区间程序的准确性。人们对健壮性的印象取决于此。我展示了两种不同的准确度度量,以便您可以比较它们。
另一个问题是,尽管低置信度的置信区间过程可能是稳健的,但相应的置信限可能根本不稳健。间隔往往效果很好,因为他们在一端犯的错误通常会抵消他们在另一端犯的错误。作为一个实际问题,你可以很确定你的大约一半50%置信区间覆盖了它们的参数,但实际参数可能始终位于每个区间的一个特定端附近,具体取决于现实与模型假设的偏离程度。
健壮在统计中具有标准含义:
稳健性通常意味着对偏离围绕潜在概率模型的假设不敏感。
(Hoaglin、Moseller 和 Tukey,了解稳健和探索性数据分析。J. Wiley (1983),第 2 页。)
这与问题中的引用一致。要理解报价,我们仍然需要知道置信区间的预期目的。为此,让我们回顾一下格尔曼所写的内容。
我更喜欢 50% 到 95% 的间隔,原因有 3 个:
计算稳定性,
更直观的评估(50% 区间的一半应该包含真实值),
感觉在应用程序中最好了解参数和预测值的位置,而不是尝试不切实际的近乎确定性。
由于了解预测值不是置信区间 (CI) 的目的,因此我将重点了解参数值,这正是 CI 所做的。我们称这些为“目标”值。因此,根据定义, CI 旨在以指定的概率(其置信水平)覆盖其目标。达到预期的覆盖率是评估任何 CI 程序质量的最低标准。(此外,我们可能对典型的 CI 宽度感兴趣。为了使帖子保持合理的长度,我将忽略这个问题。)
这些考虑促使我们研究置信区间计算可能在多大程度上误导我们关于目标参数值的问题。 该引文可以被解读为暗示置信度较低的 CI 可能会保留其覆盖范围,即使数据是由与模型不同的过程生成的。这是我们可以测试的。程序是:
采用包含至少一个参数的概率模型。经典的是从未知均值和方差的正态分布中采样。
为模型的一个或多个参数选择 CI 过程。一个优秀的方法是根据样本均值和样本标准差构造 CI,将后者乘以学生 t 分布给出的因子。
将该程序应用于各种不同的模型——与采用的模型相差不大——以评估其在一系列置信水平上的覆盖范围。
例如,我就是这样做的。我允许基础分布在很宽的范围内变化,从几乎伯努利到均匀,到正态,到指数,一直到对数正态。这些包括对称分布(前三个)和强烈偏斜分布(后两个)。对于每个分布,我生成了 50,000 个大小为 12 的样本。对于每个样本,我构建了置信水平在50%和99.8%,它涵盖了大多数应用程序。
现在出现了一个有趣的问题:我们应该如何衡量 CI 程序执行的好坏(或差)? 一种常见的方法只是评估实际覆盖率和置信度之间的差异。不过,这对于高置信度水平来说可能看起来非常好。例如,如果您试图达到 99.9% 的置信度,但您只获得 99% 的覆盖率,那么原始差异仅为 0.9%。但是,这意味着您的程序未能覆盖目标的次数是应有的十倍!出于这个原因,比较覆盖范围的信息更丰富的方法应该使用优势比之类的东西。我使用 logits 的差异,这是优势比的对数。具体来说,当期望的置信水平是α实际覆盖范围是p, 然后
log(p1−p)−log(α1−α)
很好地捕捉到了差异。当它为零时,覆盖范围正是预期的值。当它为负时,覆盖率太低——这意味着 CI 过于乐观,低估了不确定性。
那么,问题是,当基础模型受到干扰时,这些错误率如何随置信水平而变化? 我们可以通过绘制模拟结果来回答它。 这些图量化了 CI 的“接近确定性”在这个原型应用程序中的“不切实际”程度。

图形显示了相同的结果,但左侧显示的是 logit 标度值,而右侧使用的是原始标度。Beta 发行版是 Beta(1/30,1/30)(实际上是伯努利分布)。对数正态分布是标准正态分布的指数。包含正态分布是为了验证这个 CI 过程确实达到了预期的覆盖范围,并揭示了有限模拟大小的预期变化量。(事实上,正态分布的图表非常接近于零,没有显示出明显的偏差。)
很明显,在 logit 尺度上,随着置信水平的增加,覆盖范围变得更加分散。 不过,也有一些有趣的例外。如果我们不关心引入偏斜或长尾的模型扰动,那么我们可以忽略指数和对数正态,并专注于其余部分。他们的行为反复无常,直到α超过95%左右(一个logit3),此时分歧已经开始。
这项小型研究使格尔曼的主张更加具体,并说明了他可能想到的一些现象。特别是,当我们使用置信度较低的 CI 程序时,例如α=50%,那么即使底层模型受到强烈扰动,看起来覆盖率仍然接近50%: 我们的感觉是这样的 CI 大约一半是正确的,另一半是不正确的。那是健壮的。相反,如果我们希望是对的,比如说,95%的时间,这意味着我们真的只想犯错5%在那个时候,我们应该为我们的错误率做好准备,以防万一世界不像我们的模型假设的那样运作。
顺便说一句,这个属性50%CI 之所以成立,很大程度上是因为我们正在研究对称置信区间。对于偏态分布,个体置信限可能很糟糕(而且根本不稳健),但它们的错误通常会抵消。 通常,一条尾巴短而另一条尾巴长,导致一端覆盖过度,另一端覆盖不足。我相信50%置信限不会像相应的区间那样稳健。
这是R
生成图的代码。它很容易修改以研究其他分布、其他置信范围和其他 CI 程序。
#
# Zero-mean distributions.
#
distributions <- list(Beta=function(n) rbeta(n, 1/30, 1/30) - 1/2,
Uniform=function(n) runif(n, -1, 1),
Normal=rnorm,
#Mixture=function(n) rnorm(n, -2) + rnorm(n, 2),
Exponential=function(n) rexp(n) - 1,
Lognormal=function(n) exp(rnorm(n, -1/2)) - 1
)
n.sample <- 12
n.sim <- 5e4
alpha.logit <- seq(0, 6, length.out=21); alpha <- signif(1 / (1 + exp(-alpha.logit)), 3)
#
# Normal CI.
#
CI <- function(x, Z=outer(c(1,-1), qt((1-alpha)/2, n.sample-1)))
mean(x) + Z * sd(x) / sqrt(length(x))
#
# The simulation.
#
#set.seed(17)
alpha.s <- paste0("alpha=", alpha)
sim <- lapply(distributions, function(dist) {
x <- matrix(dist(n.sim*n.sample), n.sample)
x.ci <- array(apply(x, 2, CI), c(2, length(alpha), n.sim),
dimnames=list(Endpoint=c("Lower", "Upper"),
Alpha=alpha.s,
NULL))
covers <- x.ci["Lower",,] * x.ci["Upper",,] <= 0
rowMeans(covers)
})
(sim)
#
# The plots.
#
logit <- function(p) log(p/(1-p))
colors <- hsv((1:length(sim)-1)/length(sim), 0.8, 0.7)
par(mfrow=c(1,2))
plot(range(alpha.logit), c(-2,1), type="n",
main="Confidence Interval Accuracies (Logit Scales)", cex.main=0.8,
xlab="Logit(alpha)",
ylab="Logit(coverage) - Logit(alpha)")
abline(h=0, col="Gray", lwd=2)
legend("bottomleft", names(sim), col=colors, lwd=2, bty="n", cex=0.8)
for(i in 1:length(sim)) {
coverage <- sim[[i]]
lines(alpha.logit, logit(coverage) - alpha.logit, col=colors[i], lwd=2)
}
plot(range(alpha), c(-0.2, 0.05), type="n",
main="Raw Confidence Interval Accuracies", cex.main=0.8,
xlab="alpha",
ylab="coverage-alpha")
abline(h=0, col="Gray", lwd=2)
legend("bottomleft", names(sim), col=colors, lwd=2, bty="n", cex=0.8)
for(i in 1:length(sim)) {
coverage <- sim[[i]]
lines(alpha, coverage - alpha, col=colors[i], lwd=2)
}