Thuật ngữ có thể không được sử dụng nhất quán, vì vậy sau đây chỉ là cách tôi hiểu câu hỏi ban đầu. Theo hiểu biết của tôi, các TCTD bình thường bạn tính toán không phải là những gì được yêu cầu. Mỗi bộ sao chép bootstrap cung cấp cho bạn một khoảng tin cậy, không nhiều. Cách tính các loại CI khác nhau từ kết quả của một bộ sao chép bootstrap như sau:
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
Vì tôi muốn so sánh các tính toán với kết quả từ gói boot
, trước tiên tôi xác định một hàm sẽ được gọi cho mỗi lần lặp. Các đối số của nó là mẫu ban đầu và một vectơ chỉ mục chỉ định các trường hợp cho một lần lặp. Nó trả về , ước tính trình cắm cho , cũng như , ước tính trình cắm cho phương sai của trung bình . Cái sau sẽ chỉ được yêu cầu cho bootstrap -CI. L S 2 ⋆ M σ 2 M tM⋆μ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
Không cần sử dụng gói, boot
bạn chỉ có thể sử dụng replicate()
để có được một bộ sao chép bootstrap.
boots <- t(replicate(B, getM(DV, sample(seq(along=DV), replace=TRUE))))
Nhưng hãy gắn bó với kết quả boot.ci()
để có một tài liệu tham khảo.
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
Cơ bản, phân vị và -CI dựa vào phân phối theo kinh nghiệm của các ước tính bootstrap. Để có được các lượng tử và , chúng tôi tìm các chỉ số tương ứng với vectơ ước tính của bootstrap (lưu ý rằng sẽ thực hiện phép nội suy phức tạp hơn để tìm các lượng tử theo kinh nghiệm khi các chỉ số không phải là số tự nhiên) .α / 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
Đối với -CI, chúng tôi cần ước tính bootstrap để tính giá trị quan trọng . Đối với CI bình thường tiêu chuẩn, giá trị tới hạn sẽ chỉ là giá trị từ phân phối chuẩn thông thường.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
Để ước tính xác suất bảo hiểm của các loại CI này, bạn sẽ phải chạy mô phỏng này nhiều lần. Chỉ cần bọc mã vào một hàm, trả về một danh sách với kết quả CI và chạy nó với replicate()
như thể hiện trong ý chính này .
size=100
một lỗi đánh máy của bạn ? Tôi không tin rằng bạn đang nhận được giới hạn trên và dưới bên phải vì kích thước mẫu ẩn có vẻ là 1000 khi bạn tính toán các TCTD của mình trong vòng lặp (vì bạn sử dụngsqrt.n
trong tính toán). Ngoài ra, tại sao bạn so sánh vớimu
và không trực tiếp 0 (nghĩa sau là trung bình thực)?