Evet, yapabilirsiniz yaklaşır tarafından ancak optimal değildir. Bu yüzdelik önyüklemenin bir şeklidir. Ancak, büyük bir örnek büyüklüğünüz yoksa popülasyon ortalaması hakkında çıkarımlar yapmak istiyorsanız, yüzdelik bootstrap iyi performans göstermez. (Örneklem büyüklüğünün küçük olması da dahil olmak üzere birçok çıkarım problemiyle iyi sonuç verir.) Bu sonucu Wilcox'un Sosyal ve Davranış Bilimleri için Modern İstatistikleri , CRC Press, 2012'den aldım. . P ( ˉ X ∗ n ≤ x )P(X¯n≤x)P(X¯∗n≤x)
Merkezleme yaklaşımındaki bir varyant bir sonraki adıma geçer ve merkezlenmiş önyükleme istatistikinizi istatistikle aynı şekilde hesaplayarak yeniden örnekleme standart sapması ve örnek boyutu ile ölçeklendirir. Bu t istatistiklerinin dağılımından elde edilen miktarlar, bir güven aralığı oluşturmak veya bir hipotez testi yapmak için kullanılabilir. Bu bootstrap-t yöntemidir ve ortalama hakkında çıkarımlarda bulunurken üstün sonuçlar verir.
Let , bir ön yükleme yeniden örneğe dayalı olarak yeniden numune standart sapması, payda olarak n-1 kullanılarak ve s orijinal numunenin standart sapması olabilir. İzin Vermeks∗
T∗=X¯∗n−X¯s∗/n√
Simüle dağıtım bölgesinin 97.5th ve 2.5th yüzdelik için bir güven aralığı yapabilir için: μT∗μ
X¯−T∗0.975sn√,X¯−T∗0.025sn√
Aşağıdaki simülasyon sonuçlarını göz önünde bulundurun; bu, kötü eğrilmiş karışık bir dağılımla, bu yöntemin güven aralıklarının, yüzdelik önyükleme yönteminden veya önyükleme olmadan istatistikte geleneksel bir ters çevrmeden daha sık gerçek değeri içerdiğini gösterir.
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)
Bu aşağıdakileri verir (conf.t bootstrap t yöntemidir; conf.p yüzdelik bootstrap yöntemidir).
97.5% 2.5%
conf.t 9.648824 10.98006
conf.p 9.808311 10.95964
Trad T test 9.681865 11.01644
Çarpık bir dağılımdan tek bir örnekle:
# 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)
Bu aşağıdakileri verir. "Conf.t" - bootstrap t sürümü - diğer ikisinden daha geniş bir güven aralığı sağlar. Temel olarak, nüfusun olağandışı dağılımına cevap vermek daha iyidir.
> 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
Son olarak, hangi sürümün en sık doğru olan güven aralıkları verdiğini görmek için bin simülasyon vardır:
# 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)
Bu, aşağıdaki sonuçları verir - sayılar, güven aralığının simüle edilmiş bir popülasyonun gerçek değerini içerdiği 1000'in zamanıdır. Her versiyonun gerçek başarı oranının% 95'ten oldukça az olduğuna dikkat edin.
Bootstrap T Bootstrap percentile Trad T test
901 854 890