我们可以使用 Bootstrap CI 来计算单个观测值 x(其中 0)的 95% 置信区间吗<=x<=100?
> n=1
> x=98
> mean_est=mean(x)
> nboot <- 2000
> resample_dist <- rep(NA, length = nboot)
> for (i in 1:nboot) {
+ resample_i <- sample(x, size = n, replace = TRUE)
+ resample_dist[[i]] <- mean(resample_i)
+ }
> b_lci <- quantile(resample_dist, probs = 0.025)
> b_uci <- quantile(resample_dist, probs = 0.975)
>
>
> sprintf("Bootstrapped: %.3f [%.3f, %.3f]", mean_est, b_lci, b_uci)
[1] "Bootstrapped: 98.000 [3.000, 96.000]"
不,这样不行。
让我们从代码开始。如果您查看
sample()
的文档,它会显示:
如果 x 的长度为 1,是数字(在 is.numeric 的意义上)并且 x >= 1, 通过样本进行采样从 1:x
开始
所以你的代码
resample_i <- sample(x, size = n, replace = TRUE)
对于 x = 98,实际上采样了 1 到 98 之间的 1 个数字。
好吧,这就是你得到结果的原因,但这与你想要做的完全不同。
现在从概念上讲,为了引导感兴趣的统计数据,我们需要具有不同值的样本。如果您只有一个观察结果,那么您的重采样将始终只包含相同的数字,计算这些数据的任何附加统计数据是没有意义的。
把它想象成一个瓮问题: 假设您有一个装有 10 个红球和 10 个绿球的瓮。
您进行一项观察(红色)。现在,如果您计算这一观察值的平均值(这对于一个样本来说没有意义),您将得到“红色”。对您的一次观察结果进行重新采样也无济于事,因为您的重新采样始终是
c("red","red",...,"red")
,当然,每次重新采样的平均值也是如此。