Terminologi ini mungkin tidak digunakan secara konsisten, jadi berikut ini hanya bagaimana saya memahami pertanyaan aslinya. Dari pemahaman saya, CI normal yang Anda hitung bukanlah yang diminta. Setiap set replikasi bootstrap memberi Anda satu interval kepercayaan, tidak banyak. Cara untuk menghitung berbagai tipe CI dari hasil satu set replikasi bootstrap adalah sebagai berikut:
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
Karena saya ingin membandingkan perhitungan dengan hasil dari paket boot
, saya pertama-tama mendefinisikan fungsi yang akan dipanggil untuk setiap ulangan. Argumennya adalah sampel asli, dan vektor indeks menentukan kasus untuk satu ulangan. Ia mengembalikan , estimasi plug-in untuk , serta , estimasi plug-in untuk varian mean . Yang terakhir hanya diperlukan untuk bootstrap -CI. μ SM⋆μ σ 2 M tS2⋆Mσ2Mt
> 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
Tanpa menggunakan paket, boot
Anda cukup menggunakan replicate()
satu set replikasi bootstrap.
boots <- t(replicate(B, getM(DV, sample(seq(along=DV), replace=TRUE))))
Tapi mari kita tetap dengan hasil dari boot.ci()
memiliki referensi.
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
Dasar, persentil, dan -CI bergantung pada distribusi empiris dari estimasi bootstrap. Untuk mendapatkan kuantil dan , kami menemukan indeks yang sesuai dengan vektor yang diurutkan dari perkiraan bootstrap (perhatikan bahwa akan melakukan interpolasi yang lebih rumit untuk menemukan kuantil empiris ketika indeks bukan bilangan alami) .α / 2 1 - α / 2tα/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
Untuk -CI, kita membutuhkan estimasi bootstrap untuk menghitung nilai- kritis . Untuk CI normal standar, nilai kritis hanya akan menjadi nilai dari distribusi normal standar.t ⋆ t ztt⋆tz
# 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
Untuk memperkirakan probabilitas cakupan tipe-CI ini, Anda harus menjalankan simulasi ini berkali-kali. Hanya membungkus kode menjadi suatu fungsi, mengembalikan daftar dengan hasil-CI dan menjalankannya dengan replicate()
seperti yang ditunjukkan dalam inti ini .
size=100
salah ketik? Saya tidak percaya Anda mendapatkan batas kanan atas dan bawah karena ukuran sampel implisit tampaknya 1000 ketika Anda menghitung CI Anda dalam loop (karena Anda gunakansqrt.n
dalam perhitungan). Juga, mengapa Anda membandingkanmu
dan bukan 0 secara langsung (yang terakhir menjadi mean sebenarnya)?