用于自举的放回抽样 [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)
我对 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)