Temel bootstrap güven aralığının kapsama olasılıkları


11

Üzerinde çalıştığım bir ders için şu sorum var:

Standart normal bootstrap güven aralığının ve temel bootstrap güven aralığının kapsama olasılıklarını tahmin etmek için bir Monte Carlo çalışması yapın. Normal bir popülasyondan örnek alın ve örnek ortalaması için ampirik kapsama oranlarını kontrol edin.

Standart normal bootstrap CI için kapsama olasılıkları kolaydır:

n = 1000;
alpha = c(0.025, 0.975);
x = rnorm(n, 0, 1);
mu = mean(x);
sqrt.n = sqrt(n);

LNorm = numeric(B);
UNorm = numeric(B);

for(j in 1:B)
{
    smpl = x[sample(1:n, size = n, replace = TRUE)];
    xbar = mean(smpl);
    s = sd(smpl);

    LNorm[j] = xbar + qnorm(alpha[1]) * (s / sqrt.n);
    UNorm[j] = xbar + qnorm(alpha[2]) * (s / sqrt.n);
}

mean(LNorm < 0 & UNorm > 0); # Approximates to 0.95
# NOTE: it is not good enough to look at overall coverage
# Must compute separately for each tail

Bu kurs için öğretilenlerden temel bootstrap güven aralığı şu şekilde hesaplanabilir:

# Using x from previous...
R = boot(data = x, R=1000, statistic = function(x, i){ mean(x[i]); });
result = 2 * mu - quantile(R$t, alpha, type=1);

Mantıklı. Anlamadığım temel bootstrap CI için kapsama olasılıklarının nasıl hesaplanacağı . Kapsam olasılığının, CI'nin gerçek değeri kaç kez içerdiğini (bu durumda mu) temsil edeceğini anlıyorum . bootİşlevi birçok kez çalıştırıyor muyum ?

Bu soruya farklı şekilde nasıl yaklaşabilirim?


Sen size=100bir yazım hatası mısın? Döngüdeki CI'lerinizi hesapladığınızda örtük örnek boyutu 1000 olarak göründüğü için sağ üst ve alt sınırları aldığınıza inanmıyorum ( sqrt.nhesaplamada kullandığınızdan beri ). Ayrıca, neden mudoğrudan 0 ile değil de karşılaştırıyorsunuz (sonuncusu gerçek ortalama)?
kardinal

Ayrıca, smpl = x[sample(1:n, size = 100, replace = TRUE)]; basitleştirilebilir smpl = sample(x, size=100, replace=TRUE).
kardinal

@cardinal - Evet, bir yazım hatasıydı ve mu0 olmakla aynı şeydi . Normal CI iyi çalışıyor, zorlandığım temel bootstrap CI.
TheCloudlessSky

Yanıtlar:


16

Terminoloji muhtemelen tutarlı bir şekilde kullanılmaz, bu yüzden aşağıdaki sadece orijinal soruyu nasıl anladığımdır. Anladığım kadarıyla, hesapladığınız normal CI'ler istenen şey değildir. Her bootstrap replikası seti size çok fazla değil, bir güven aralığı verir. Bir grup bootstrap replikatının sonuçlarından farklı CI tiplerini hesaplamanın yolu aşağıdaki gibidir:

B    <- 999                  # number of replicates
muH0 <- 100                  # for generating data: true mean
sdH0 <- 40                   # for generating data: true sd
N    <- 200                  # sample size
DV   <- rnorm(N, muH0, sdH0) # simulated data: original sample

bootMμSM2σM2t

> getM <- function(orgDV, idx) {
+     bsM   <- mean(orgDV[idx])                       # M*
+     bsS2M <- (((N-1) / N) * var(orgDV[idx])) / N    # S^2*(M)
+     c(bsM, bsS2M)
+ }

> library(boot)                                       # for boot(), boot.ci()
> bOut <- boot(DV, statistic=getM, R=B)
> boot.ci(bOut, conf=0.95, type=c("basic", "perc", "norm", "stud"))
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 999 bootstrap replicates
CALL : 
boot.ci(boot.out = bOut, conf = 0.95, type = c("basic", "perc", "norm", "stud"))

Intervals : 
Level      Normal            Basic         Studentized        Percentile    
95%   ( 95.6, 106.0 )   ( 95.7, 106.2 )  ( 95.4, 106.2 )   ( 95.4, 106.0 )  
Calculations and Intervals on Original Scale

Paketi bootkullanmadan replicate()bir dizi bootstrap kopyası almak için kullanabilirsiniz .

boots <- t(replicate(B, getM(DV, sample(seq(along=DV), replace=TRUE))))

Ancak boot.ci(), bir referansa sahip olmak için elde edilen sonuçlara sadık kalalım.

boots   <- bOut$t                     # estimates from all replicates
M       <- mean(DV)                   # M from original sample
S2M     <- (((N-1)/N) * var(DV)) / N  # S^2(M) from original sample
Mstar   <- boots[ , 1]                # M* for each replicate
S2Mstar <- boots[ , 2]                # S^2*(M) for each replicate
biasM   <- mean(Mstar) - M            # bias of estimator M

tα/21-α/2boot.ci()

(idx <- trunc((B + 1) * c(0.05/2, 1 - 0.05/2)) # indices for sorted vector of estimates
[1] 25 975

> (ciBasic <- 2*M - sort(Mstar)[idx])          # basic CI
[1] 106.21826  95.65911

> (ciPerc <- sort(Mstar)[idx])                 # percentile CI
[1] 95.42188 105.98103

tttz

# standard normal CI with bias correction
> zCrit   <- qnorm(c(0.025, 0.975))   # z-quantiles from std-normal distribution
> (ciNorm <- M - biasM + zCrit * sqrt(var(Mstar)))
[1] 95.5566 106.0043

> tStar <- (Mstar-M) / sqrt(S2Mstar)  # t*
> tCrit <- sort(tStar)[idx]           # t-quantiles from empirical t* distribution
> (ciT  <- M - tCrit * sqrt(S2M))     # studentized t-CI
[1] 106.20690  95.44878

Bu CI tiplerinin kapsama olasılıklarını tahmin etmek için, bu simülasyonu birçok kez çalıştırmanız gerekecektir. Kodu bir işleve sarın, CI sonuçlarıyla bir liste döndürünreplicate() ve bu özette gösterildiği gibi çalıştırın .


Vaov! - Neyi yanlış yaptığım hakkında harika bir açıklama. Ayrıca - kod ipuçları için teşekkürler! Mükemmel çalışıyor!
TheCloudlessSky

Tamam son bir soru: Bu bilgiyi çoğaltmaya çalıştığımda bir işlev oluşturdum computeCIsve çağırdım results = replicate(500, computeCIs());. Sonunda computeCIsgeri döner c(ciBasic, ciPerc). Kapsama olasılıklarını test etmek için mean(results[1, ] < 0 & results[2, ] > 0), o zaman gerçek ortalamayı (kapsama olasılığı) içeren tüm Temel CI'leri test etmek için test yapmam gerekir mi? Bunu 1koştuğumda almam gerektiğini düşündüğüm zaman alıyorum 0.95.
TheCloudlessSky

@TheCloudlessSky Kapsama frekansları açısından beklenen sonuçlarla tam işlev ve tam simülasyon için, bkz. Pastebin.com/qKpNKK0D
caracal

Evet, ben bir aptalım :) :) R kodunu kopyalarken yazım hatası yaptım ... yardımın için teşekkürler! :)
TheCloudlessSky

Güzel cevap için @caracal teşekkürler. Bağlantı pastebin.com/qKpNKK0Dkoptu. Güncellemek ve tam işlev ve tam simülasyon sağlamak için teşekkür ederiz. Teşekkürler
MYaseen208
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.