引导样本均值时是否需要居中?

机器算法验证 分布 引导程序 重采样 定心
2022-03-05 10:33:46

在阅读有关如何近似样本均值分布的信息时,我遇到了非参数自举法。的分布来近似的分布,其中表示引导样本。X¯nμX¯nX¯nX¯n

那么我的问题是:我需要居中吗?做什么的?

我不能 x\right)吗?P(X¯nx)P(X¯nx)

1个回答

是的,你可以来近似 x\right)但它不是最优的。这是百分位自举的一种形式。但是,如果您试图对总体均值进行推断,除非您有较大的样本量,否则百分位自举法的效果不佳。(它在处理许多其他推理问题时表现良好,包括样本量较小时。)我从 Wilcox 的社会和行为科学现代统计中得出这个结论,CRC 出版社,2012 年。恐怕我无法提供理论证明.P(X¯nx)P(X¯nx)

居中方法的一个变体进入下一步,并使用重新采样的标准差和样本大小来缩放居中的 bootstrap 统计量,计算方式与统计量相同。这些 t 统计量分布的分位数可用于构建置信区间或执行假设检验。这是 bootstrap-t 方法,它在对均值进行推断时给出了更好的结果。

为基于自举重采样的重采样标准差,使用 n-1 作为分母;s 是原始样本的标准差。s

T=X¯nX¯s/n

的模拟分布的第 97.5 和第 2.5 百分位数的置信区间Tμ

X¯T0.975sn,X¯T0.025sn

考虑下面的模拟结果,表明对于严重偏斜的混合分布,该方法的置信区间比百分位自举方法或没有自举的传统反演统计量更频繁地包含真实值。

compare.boots <- function(samp, reps = 599){
    # "samp" is the actual original observed sample
    # "s" is a re-sample for bootstrap purposes

    n <- length(samp)

    boot.t <- numeric(reps)
    boot.p <- numeric(reps)

    for(i in 1:reps){
        s <- sample(samp, replace=TRUE)
        boot.t[i] <- (mean(s)-mean(samp)) / (sd(s)/sqrt(n))
        boot.p[i] <- mean(s)
    }

    conf.t <- mean(samp)-quantile(boot.t, probs=c(0.975,0.025))*sd(samp)/sqrt(n)
    conf.p <- quantile(boot.p, probs=c(0.025, 0.975))

    return(rbind(conf.t, conf.p, "Trad T test"=t.test(samp)$conf.int))
}

# Tests below will be for case where sample size is 15
n <- 15

# Create a population that is normally distributed
set.seed(123)
pop <- rnorm(1000,10,1)
my.sample <- sample(pop,n)
# All three methods have similar results when normally distributed
compare.boots(my.sample)

这给出了以下内容(conf.t 是引导 t 方法;conf.p 是百分位引导方法)。

          97.5%     2.5%
conf.t      9.648824 10.98006
conf.p      9.808311 10.95964
Trad T test 9.681865 11.01644

有一个来自偏态分布的例子:

# create a population that is a mixture of two normal and one gamma distribution
set.seed(123)
pop <- c(rnorm(1000,10,2),rgamma(3000,3,1)*4, rnorm(200,45,7))
my.sample <- sample(pop,n)
mean(pop)
compare.boots(my.sample)

这给出了以下内容。请注意,“conf.t” - bootstrap t 版本 - 提供了比其他两个更宽的置信区间。基本上,它更擅长应对人口的异常分布。

> mean(pop)
[1] 13.02341
> compare.boots(my.sample)
                97.5%     2.5%
conf.t      10.432285 29.54331
conf.p       9.813542 19.67761
Trad T test  8.312949 20.24093

最后,这里有一千个模拟,看看哪个版本给出了最常见的置信区间:

# simulation study
set.seed(123)
sims <- 1000
results <- matrix(FALSE, sims,3)
colnames(results) <- c("Bootstrap T", "Bootstrap percentile", "Trad T test")

for(i in 1:sims){
    pop <- c(rnorm(1000,10,2),rgamma(3000,3,1)*4, rnorm(200,45,7))
    my.sample <- sample(pop,n)
    mu <- mean(pop)
    x <- compare.boots(my.sample)
    for(j in 1:3){
        results[i,j] <- x[j,1] < mu & x[j,2] > mu
    }
}

apply(results,2,sum)

这给出了以下结果 - 这些数字是置信区间包含模拟总体的真实值的 1,000 次。请注意,每个版本的真实成功率都远低于 95%。

     Bootstrap T Bootstrap percentile          Trad T test 
             901                  854                  890