用于自举的放回抽样 [R]

Sampling with replacement for bootstrapping [R]

我对 R 比较陌生,所以我只是想看看我缺少什么。我对正确执行此操作的过程有一些疑问。

我的样本 space 是 {2,4,9,12}。我需要验证这个样本的平均值是 6.75,如果我输入

s <- c(2,4,9,12)
mean(s)

我还需要计算s的方差,但是当我计算方差的时候 var(s) = 20.91667。我正在阅读的书 Statistical Inference, Casella & Berger 显示方差为 3.94。现在,我知道因为我是 bootstrapping,所以有一种不同的方法,不是将样本方差除以 (n-1),而是除以 ((n^n)-1),它需要从 i = 1 一直累加到 (n^n)。为了便于理解,将此公式的屏幕截图发布在这里:

问题一

R 中是否有一个函数可以找到 bootstrap 均值和方差来帮助我验证这个答案?如果是这样,能否提供一个例子说明如何做到这一点?

问题二

出于我自己的好奇心。假设我想 bootstrap 样本 space (不确定这是否有意义)。如何通过替换找到样本的 bootstrap 均值和方差并将其循环遍历 10,000 个样本?

请耐心等待,因为就像我之前提到的,我是 R 和 bootstrapping 这个概念的新手。如果我的思维过程不完全正确,请纠正我。因此,例如,当我输入sample(c(2,4,9,12), replace = T, 10000)时,它给了我10,000个元素,但我想要10,000个长度为4的向量。换句话说,当我输入sample(c(2,4,9,12), replace = T, 1)时,它只给出一个值,但是我希望它是一个 4 的向量,具有替换的这四个值的任意顺序。现在,一旦创建了所有 10,000 个向量(假设它不是重复的 SAME 向量),我希望能够找到每个向量的 bootstrap 均值和方差。一旦我有了这些均值和方差,我想能够创建分布图以直观地观察 CLT。

我知道我对bootstrapping的概念性理解可能有缺陷,所以请您指点我以巩固我的理解。

提前谢谢。

首先是:样本均值的方差和样本的方差是两个不同的量。当您执行 var(s) 并得到 20.91 时,您计算的是样本的方差,而不是样本均值的方差。那么现在,回答您的问题:

我确定 运行 和 bootstrap 有一些功能,但我的建议是从头开始。它只有大约 10 行代码。这样的事情可能会奏效:

s <- c(2,4,9,12)

N <- 10**5
sample_means <- numeric(N)

for (i in 1:N) {
    resample <- sample(s, replace = TRUE)
    sample_means[i] <- mean(resample)
}

mean(sample_means)
#> [1] 6.752375
var(sample_means)
#> [1] 3.941898

reprex package (v2.0.1)

于 2021-08-18 创建

您也可以使用 purrr 来获得更优雅的解决方案(至少在我看来是这样):

library(purrr)

s <- c(2,4,9,12)

N <- 10**5
sample_means <- rerun(
    .n = N,
    sample(s, replace = TRUE)
) %>%
    map_dbl(mean)

sample_means %>%
    mean()
#> [1] 6.75615

sample_means %>%
    var()
#> [1] 3.965604

reprex package (v2.0.1)

于 2021-08-18 创建

然后,如果您想使用上面的代码制作样本均值的直方图,您只需这样做

hist(sample_means)