【问题标题】:Sampling with replacement for bootstrapping [R]带替换的自举抽样 [R]
【发布时间】:2021-10-20 15:25:32
【问题描述】:

我对 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)。为便于理解,这里贴出这个公式的截图:

问题 1

是否在 R 中实现了一个函数来找到可以帮助我验证这个答案的引导均值和方差?如果有,能否举个例子说明如何做?

问题 2

出于我自己的好奇心。假设我想引导该样本空间(不确定这是否有意义)。如何找到带有替换的样本的引导均值和方差并循环超过 10,000 个样本?

请耐心等待,因为正如我所提到的,我对 R 和这种引导概念并不陌生。如果我的思维过程不完全正确,请纠正我。因此,例如,当我输入 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 个向量(假设它不是重复的相同向量,我希望能够找到每个向量的引导均值和方差。一旦我有了这些均值和方差,我希望能够创建用于直观观察 CLT 的分布图。

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

提前谢谢你。

【问题讨论】:

    标签: r statistics mean variance


    【解决方案1】:

    第一件事:样本均值的方差和样本的方差是两个不同的量。当您执行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)
    

    【讨论】:

    • 您可以将for-loop 替换为apply(replicate(10000, sample(c(2,4,9,12), replace = TRUE, 4)), 2, mean)
    • 是的,谢谢@MartinGal!我认为 for 循环就基本 R 解决方案而言更具表现力,但是有很多方法可以做到这一点:)
    • 很好的解释,顺便说一句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多