Dies ähnelt Bootstrap: Die Schätzung liegt außerhalb des Konfidenzintervalls
Ich habe einige Daten, die die Anzahl der Genotypen in einer Population darstellen. Ich möchte die genetische Vielfalt mithilfe des Shannon-Index abschätzen und mithilfe von Bootstrapping ein Konfidenzintervall generieren. Ich habe jedoch festgestellt, dass die Schätzung über Bootstrapping tendenziell extrem voreingenommen ist und zu einem Konfidenzintervall führt, das außerhalb meiner beobachteten Statistik liegt.
Unten ist ein Beispiel.
# 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]))
}
Datengenerierung
set.seed(5000)
X <- rmultinom(1, 100, prob = rep(1, 50))[, 1]
Berechnung
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
Generieren der CIs mit Bias-Korrektur
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
Angenommen, die Varianz von t kann für die Varianz von t0 verwendet werden .
norm.ci(t0 = boot.out$t0, var.t0 = var(boot.out$t[, 1]))[-1]
## [1] 3.55475 3.80421
Wäre es richtig, das CI um t0 herum zu melden ? Gibt es eine bessere Möglichkeit, den Bootstrap zu generieren?