이것은 부트 스트랩 과 유사합니다 : 추정이 신뢰 구간을 벗어났습니다.
인구의 유전자형 수를 나타내는 데이터가 있습니다. Shannon의 지수를 사용하여 유전 다양성을 추정하고 부트 스트랩을 사용하여 신뢰 구간을 생성하고 싶습니다. 그러나 부트 스트랩을 통한 추정치가 극도로 치우친 경향이 있으며 관찰 된 통계 범위를 벗어난 신뢰 구간을 초래한다는 것을 알았습니다.
아래는 예입니다.
# 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]))
}
데이터 생성
set.seed(5000)
X <- rmultinom(1, 100, prob = rep(1, 50))[, 1]
계산
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
바이어스 수정으로 CI 생성
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
t 의 분산이 t0 의 분산에 사용될 수 있다고 가정합니다 .
norm.ci(t0 = boot.out$t0, var.t0 = var(boot.out$t[, 1]))[-1]
## [1] 3.55475 3.80421
t0을 중심으로 CI를보고하는 것이 맞 습니까? 부트 스트랩을 생성하는 더 좋은 방법이 있습니까?