bootstrap 可以被视为小样本量的“治疗方法”吗?

机器算法验证 引导程序 小样本
2022-02-05 23:43:51

这个问题是由我在这本研究生统计教科书中读到的内容引发的,并且在统计研讨会上的演讲中也(独立地)听到了一些内容。在这两种情况下,声明都遵循“因为样本量非常小,我们决定通过引导程序而不是(或连同)这个参数方法来执行估计”。X

他们没有深入细节,但可能的推理如下:方法假设数据遵循某个参数分布实际上,分布并不完全是,但只要样本量足够大就可以了。由于在这种情况下样本量太小,让我们切换到不做任何分布假设的(非参数)引导程序。问题解决了!XDD

在我看来,这不是引导程序的用途。以下是我的看法:当有足够的数据或多或少明显时,引导程序可以给一个优势,但没有封闭形式的解决方案来获得标准误差、p 值和类似的统计数据。一个典型的例子是给定一个双变量正态分布样本的相关系数的 CI:存在封闭形式的解决方案,但它非常复杂,以至于自举更简单。但是,没有任何迹象表明 bootstrap 可以以某种方式帮助人们摆脱小样本量。

我的看法对吗?

如果你觉得这个问题很有趣,我还有另一个更具体的引导问题:

Bootstrap:过拟合的问题

PS 我忍不住要分享一个“引导方法”的令人震惊的例子。我没有透露作者的名字,但他是老一辈的“量化专家”之一,他在 2004 年写了一本关于量化金融的书。例子取自那里。

考虑以下问题:假设您有 4 个资产和每个资产的 120 个月收益观察值。目标是构建年度回报的联合 4 维 cdf。即使对于单个资产,仅通过 10 年的观察似乎也很难完成这项任务,更不用说 4 维 cdf 的估计了。但不用担心,“bootstrap”会帮助您:取出所有可用的 4 维观察值,对 12 个进行替换并重新采样,然后将它们复合以构建单个“bootstrap” 4 维年回报向量。重复 1000 次,你瞧,你得到了一个包含 1000 个年度回报的“引导样本”。将此用作大小为 1000 的 iid 样本,用于 cdf 估计或任何其他可以从一千年历史中得出的推论。

4个回答

我记得读过使用百分置信区间进行自举相当于使用 Z 区间而不是 T 区间并使用而不是作为分母。不幸的是,我不记得我在哪里读到了这篇文章,并且在我的快速搜索中找不到参考。当 n 很大时,这些差异并不重要(当 n 很大时,引导程序的优势超过了这些小问题,但是较小时,这可能会导致问题。这是一些用于模拟和比较的 R 代码:nn1nn

simfun <- function(n=5) {
    x <- rnorm(n)
    m.x <- mean(x)
    s.x <- sd(x)
    z <- m.x/(1/sqrt(n))
    t <- m.x/(s.x/sqrt(n))
    b <- replicate(10000, mean(sample(x, replace=TRUE)))
    c( t=abs(t) > qt(0.975,n-1), z=abs(z) > qnorm(0.975),
        z2 = abs(t) > qnorm(0.975), 
        b= (0 < quantile(b, 0.025)) | (0 > quantile(b, 0.975))
     )
}

out <- replicate(10000, simfun())
rowMeans(out)

我的一次运行结果是:

     t      z     z2 b.2.5% 
0.0486 0.0493 0.1199 0.1631 

所以我们可以看到,使用 t 检验和 z 检验(具有真实总体标准差)都给出了 I 类错误率,其本质上不正确的 z 检验(除以样本标准差,但使用 Z 临界值而不是 T)拒绝空值的频率是应有的两倍以上。现在到引导程序,它拒绝空值的频率是它应该拒绝的 3 次(查看 0,真实均值是否在区间内),所以对于这个小样本量,简单引导程序的大小不合适,因此确实不解决问题(这是数据最正常的时候)。改进的引导间隔(BCa 等)可能会做得更好,但这应该引起一些关于使用引导作为小样本量的灵丹妙药的担忧。α

其他答案批评引导置信区间的性能,而不是引导本身。这是一个不同的问题。

如果您的上下文满足引导分布收敛的规律性条件(根据引导样本数量的收敛),那么如果您使用足够大的引导样本,该方法将有效。

如果您真的想找到使用非参数引导程序的问题,这里有两个问题:

(1)重采样问题。

对于小样本或大样本,bootstrap 的问题之一是重采样步骤。在保持样本结构(相关性、时间性...)的同时重新采样并不总是可能的。这方面的一个例子是叠加过程

假设有许多独立的源,每个源不时发生事件。假设任何一个源的连续事件之间的间隔都是独立的随机变量,它们都具有相同的分布,因此每个源都构成了一个熟悉类型的更新过程。源的输出组合成一个汇集输出。

在保持依赖未知结构的同时如何重新采样?

(2)小样本的窄引导样本和引导置信区间

在小样本中,每个子样本的估计量的最小值和最大值可能会定义一个窄区间,那么在某些模型中,任何置信区间的左右端点都将非常窄(考虑到小样本,这是违反直觉的!)。

假设,其中是速率。使用轮廓似然,您可以获得一个近似置信区间(95% 的近似置信区间是 0.147 水平的轮廓似然区间),如下所示:x1,x2Exp(λ)λ>0

set.seed(1)
x <- rexp(2,1)
# Maximum likelihood estimator
1/mean(x)

# Profile likelihood: provides a confidence interval with right-end point beyond the maximum inverse of the mean
Rp <- Vectorize(function(l) exp(sum(dexp(x,rate=l,log=T))-sum(dexp(x,rate=1/mean(x),log=T))))

curve(Rp,0,5)
lines(c(0,5),c(0.147,0.147),col="red")

此方法生成一条连续曲线,您可以从中提取置信区间。的最大似然估计通过重采样,我们只能为这个估计器获得三个可能的值,它们的最大值和最小值定义了相应引导置信区间的界限。即使对于大型引导样本,这也可能看起来很奇怪(通过增加这个数字你不会获得太多):λλ^=2/(x1+x2)

library(boot)
set.seed(1)
x <- rexp(2,1)
1/mean(x)
# Bootstrap interval: limited to the maximum inverse of the mean
f.boot <- function(data,ind) 1/mean(data[ind])
b.b <- boot(data=x, statistic=f.boot, R=100000)
boot.ci(b.b, conf = 0.95, type = "all")
hist(b.b$t)

在这种情况下,越接近,引导分布越窄,因此置信区间越窄(可能远离真实值)。事实上,这个例子与@GregSnow 提出的例子有关,尽管他的论点更具经验性。我提到的界限解释了@Wolfgang 分析的所有引导置信区间的不良性能。x1x2

如果为您提供的样本量较小(顺便说一句,什么是“小”似乎取决于每个研究领域的一些潜在的习惯规则),那么任何引导程序都无法发挥作用。假设数据库包含正在调查的两个变量中的每一个的三个观察值,那么任何推论都是没有意义的。以我的经验,当样本分布(每个至少 10-15 个观察值)出现偏差时,非参数引导程序(1,000 或 10,000 次重复)可以很好地替代 t 检验,因此不满足通常的 t 检验的先决条件。此外,无论观察的数量有多少,当数据呈正偏态时,非参数引导可能是强制性的选择,因为它总是发生在医疗保健成本上。

Bootstrap通过确保测试的正确性(例如,标称的 0.05 显着性水平接近测试的实际大小)在小样本量中运行良好,但是 bootstrap不会神奇地赋予您额外的能力。如果你有一个小样本,你就没有什么力量,故事结束。

参数(线性模型)和半参数(GEE)回归往往具有较差的小样本属性......前者是由于对参数假设的依赖性很大,后者是因为放大了小样本中的稳健标准误差估计。Bootstrapping(和其他基于重采样的测试)在这些情况下表现得非常好。

对于预测,bootstrapping 将比拆分样本验证为您提供更好(更诚实)的内部有效性估计。

由于无意中纠正了平均插补程序/热甲板(例如在模糊匹配中),自举通常会给您带来更少的权力。Bootstrapping 被错误地声称在匹配分析中提供更大的力量,在这种分析中,个体被重新采样以满足足够的集群大小,从而为 bootstrap 匹配的数据集提供比分析数据集n