คำศัพท์อาจไม่ได้ใช้อย่างสม่ำเสมอดังนั้นต่อไปนี้เป็นเพียงวิธีที่ฉันเข้าใจคำถามเดิม จากความเข้าใจของฉัน CIs ปกติที่คุณคำนวณไม่ใช่สิ่งที่ขอ ชุดบู๊ตสแตรปแต่ละชุดจะให้ความมั่นใจหนึ่งช่วงเวลาไม่มาก วิธีการคำนวณประเภท CI ที่แตกต่างจากผลลัพธ์ของชุดของการทำสำเนา bootstrap มีดังนี้:
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
เนื่องจากฉันต้องการเปรียบเทียบการคำนวณกับผลลัพธ์จากแพคเกจboot
ฉันจะกำหนดฟังก์ชันที่จะถูกเรียกสำหรับการทำซ้ำแต่ละครั้ง อาร์กิวเมนต์เป็นตัวอย่างดั้งเดิมและเวกเตอร์ดัชนีที่ระบุเคสสำหรับการเรพลิเคทเดียว มันส่งคืน , การประมาณปลั๊กอินสำหรับเช่นเดียวกับ , การประมาณปลั๊กอินสำหรับความแปรปรวนของค่าเฉลี่ย2} หลังจำเป็นสำหรับ bootstrap -CI เท่านั้น μ S 2 ⋆ M σ 2 Mเสื้อM⋆μS2⋆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
โดยไม่ต้องใช้แพคเกจboot
ที่คุณก็สามารถใช้replicate()
ที่จะได้รับชุดของซ้ำบูต
boots <- t(replicate(B, getM(DV, sample(seq(along=DV), replace=TRUE))))
แต่เรามาดูผลลัพธ์boot.ci()
ที่มีการอ้างอิงกัน
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
พื้นฐานเปอร์เซ็นไทล์และ -CI นั้นขึ้นอยู่กับการกระจายเชิงประจักษ์ของการประมาณบูทสแตรป ในการรับและ quantiles เราจะหาดัชนีที่สอดคล้องกับเวกเตอร์ที่เรียงลำดับของ bootstrap โดยประมาณ (โปรดทราบว่าจะทำการแก้ไขที่ซับซ้อนมากขึ้นเพื่อค้นหา quantile เชิงประจักษ์เมื่อดัชนีไม่ใช่ตัวเลขธรรมชาติ) .α / 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
สำหรับ -CI เราจำเป็นต้องใช้ bootstrapประมาณการเพื่อคำนวณค่า -val วิกฤติ สำหรับ CI ปกติมาตรฐานค่าวิกฤตจะเป็น value จากการแจกแจงปกติมาตรฐาน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
ในการประเมินความน่าจะเป็นที่ครอบคลุมของประเภท CI เหล่านี้คุณจะต้องดำเนินการจำลองนี้หลายครั้ง เพียงแค่ห่อโค๊ดลงในฟังก์ชั่นคืนรายการด้วย CI-results และรันด้วยreplicate()
เหมือนที่แสดงในส่วนสำคัญนี้
size=100
พิมพ์ผิดหรือเปล่า? ฉันไม่เชื่อว่าคุณได้รับขอบเขตด้านบนและล่างที่ถูกต้องเนื่องจากขนาดตัวอย่างโดยนัยดูเหมือนจะเป็น 1,000 เมื่อคุณคำนวณ CIs ของคุณในลูป (เนื่องจากคุณใช้sqrt.n
ในการคำนวณ) นอกจากนี้ทำไมคุณถึงเปรียบเทียบmu
และไม่ใช่ 0 โดยตรง (อันหลังเป็นค่าเฉลี่ยจริง)