Ini mirip dengan Bootstrap: perkiraan di luar interval kepercayaan
Saya memiliki beberapa data yang mewakili jumlah genotipe dalam suatu populasi. Saya ingin memperkirakan keragaman genetik menggunakan indeks Shannon dan juga menghasilkan interval kepercayaan menggunakan bootstrap. Namun, saya perhatikan bahwa perkiraan melalui bootstrap cenderung sangat bias dan menghasilkan interval kepercayaan yang berada di luar statistik yang saya amati.
Di bawah ini adalah contohnya.
# 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]))
}
Pembuatan data
set.seed(5000)
X <- rmultinom(1, 100, prob = rep(1, 50))[, 1]
Perhitungan
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
Menghasilkan CI dengan bias-koreksi
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
Dengan asumsi bahwa varian t dapat digunakan untuk varian t0 .
norm.ci(t0 = boot.out$t0, var.t0 = var(boot.out$t[, 1]))[-1]
## [1] 3.55475 3.80421
Apakah benar melaporkan CI terpusat sekitar t0 ? Apakah ada cara yang lebih baik untuk menghasilkan bootstrap?