簡體   English   中英

用於自舉的放回抽樣 [R]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM