Điều này tương tự với Bootstrap: ước tính nằm ngoài khoảng tin cậy
Tôi có một số dữ liệu đại diện cho số lượng kiểu gen trong dân số. Tôi muốn ước tính sự đa dạng di truyền bằng chỉ số của Shannon và cũng tạo ra khoảng tin cậy bằng cách sử dụng bootstrapping. Tuy nhiên, tôi đã nhận thấy rằng ước tính thông qua bootstrapping có xu hướng cực kỳ sai lệch và dẫn đến một khoảng tin cậy nằm ngoài thống kê quan sát của tôi.
Dưới đây là một ví dụ.
# Shannon's index
H <- function(x){
x <- x/sum(x)
x <- -x * log(x, exp(1))
return(sum(x, na.rm = TRUE))
}
# The version for bootstrapping
H.boot <- function(x, i){
H(tabulate(x[i]))
}
Tạo dữ liệu
set.seed(5000)
X <- rmultinom(1, 100, prob = rep(1, 50))[, 1]
Phép tính
H(X)
## [1] 3.67948
xi <- rep(1:length(X), X)
H.boot(xi)
## [1] 3.67948
library("boot")
types <- c("norm", "perc", "basic")
(boot.out <- boot::boot(xi, statistic = H.boot, R = 1000L))
##
## CASE RESAMPLING BOOTSTRAP FOR CENSORED DATA
##
##
## Call:
## boot::boot(data = xi, statistic = H.boot, R = 1000)
##
##
## Bootstrap Statistics :
## original bias std. error
## t1* 3.67948 -0.2456241 0.06363903
Tạo các TCTD với hiệu chỉnh sai lệch
boot.ci(boot.out, type = types)
## BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
## Based on 1000 bootstrap replicates
##
## CALL :
## boot.ci(boot.out = boot.out, type = types)
##
## Intervals :
## Level Normal Basic Percentile
## 95% ( 3.800, 4.050 ) ( 3.810, 4.051 ) ( 3.308, 3.549 )
## Calculations and Intervals on Original Scale
Giả sử rằng phương sai của t có thể được sử dụng cho phương sai của t0 .
norm.ci(t0 = boot.out$t0, var.t0 = var(boot.out$t[, 1]))[-1]
## [1] 3.55475 3.80421
Nó có đúng không khi báo cáo CI tập trung vào khoảng t0 ? Có cách nào tốt hơn để tạo bootstrap không?