[英]Sampling with replacement for bootstrapping [R]
我對 R 比較陌生,所以我只是想看看我錯過了什么。 我對正確執行此操作的過程有一些疑問。
我的樣本空間是 {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。 現在,我知道因為我正在引導,所以有一種不同的方法,不是樣本方差除以 (n-1),而是除以 ((n^n)-1),它需要從 i = 1 一直到 (n^n)。 為了便於理解,這里貼出這個公式的截圖:
問題一
是否有在 R 中實現的 function 找到可以幫助我驗證此答案的引導均值和方差? 如果是這樣,是否可以提供有關如何這樣做的示例?
問題2
為了我自己的好奇心。 假設我想引導該樣本空間(不確定這是否有意義)。 如何通過替換找到樣本的自舉均值和方差並將其循環遍歷 10,000 個樣本?
請耐心等待,因為正如我所提到的,我是 R 和這個引導概念的新手。 如果我的思維過程不完全正確,請糾正我。 因此,例如,當我輸入sample(c(2,4,9,12), replace = T, 10000)
時,它給了我 10,000 個元素,但我想要 10,000 個長度為 4 的向量。換句話說,當我input sample(c(2,4,9,12), replace = T, 1)
,它只給出一個值,但我希望它是一個 4 的向量,這四個值的任意順序帶有替換。 現在,一旦創建了所有 10,000 個向量(假設它不是重復的 SAME 向量),我希望能夠找到每個向量的自舉均值和方差。一旦我有了這些均值和方差,我希望能夠創建用於直觀觀察 CLT 的分布圖。
我知道我對 bootstrapping 的概念理解可能有缺陷,所以請你給我指點,以鞏固我的理解。
提前謝謝你。
首先是:樣本均值的方差和樣本的方差是兩個不同的量。 當您執行var(s)
並獲得20.91
時,您計算的是樣本的方差,而不是樣本均值的方差。 那么現在,關於你的問題:
我確定有運行引導程序的功能,但我的建議是從頭開始。 它只有大約 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.