当阅读有关如何近似估计样本均值的分布时,我遇到了非参数自举方法。显然,可以通过的分布来近似的分布,其中表示样本均值引导程序样本。
然后我的问题是:我需要居中吗?做什么的?
我不能只用近似吗?
当阅读有关如何近似估计样本均值的分布时,我遇到了非参数自举方法。显然,可以通过的分布来近似的分布,其中表示样本均值引导程序样本。
然后我的问题是:我需要居中吗?做什么的?
我不能只用近似吗?
Answers:
是的,您可以通过来近似,但是不是最佳的。这是百分位数引导程序的一种形式。但是,如果您要对总体平均值进行推断,除非您的样本量很大,否则百分位数自举法不能很好地执行。(它在许多其他推断问题上也能很好地发挥作用,包括在样本量小的情况下。)我从威尔科克斯的《现代社会和行为科学统计》,CRC出版社,2012年得出这一结论。 。
居中方法的一个变种进入下一步,并使用重新采样的标准偏差和样本大小缩放居中的自举统计量,其计算方法与统计相同。来自这些t统计量分布的分位数可用于构建置信区间或执行假设检验。这是bootstrap-t方法,在对均值进行推断时会给出更好的结果。
令为基于n-1作为分母的基于bootstrap重采样的重采样标准差;和s是原始样本的标准偏差。让
的模拟分布的第97.5和2.5个百分位数可以通过以下方式为形成置信区间:
考虑下面的仿真结果,该结果表明在混合分布严重偏斜的情况下,此方法的置信区间包含百分率自举法或传统的at统计量反演而没有自举的情况下,包含真实值的频率更高。
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是bootstrap t方法; conf.p是百分位数bootstrap方法)。
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