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?
Wie die Antwort von @NRH zeigt, besteht das Problem nicht darin, dass das Bootstrapping ein voreingenommenes Ergebnis lieferte. Es ist so, dass die einfache "Plug-in" -Schätzung der Shannon-Entropie, basierend auf Daten aus einer Stichprobe, vom wahren Populationswert nach unten verzerrt ist.
Dieses Problem wurde in den 1950er Jahren innerhalb weniger Jahre nach der Definition dieses Index erkannt. In diesem Artikel werden die zugrunde liegenden Probleme unter Bezugnahme auf die zugehörige Literatur erörtert.
Die nichtlineare Beziehung bedeutet, dass der resultierende Wert eine voreingenommene Unterschätzung der wahren genetischen Vielfalt ist.
Es gibt Pakete in R, die sich mit diesem Problem befassen. Das
simboot
Paket hat insbesondere eine FunktionestShannonf
, die diese Vorspannungskorrekturen vornimmt, und eine Funktionsbdiv
zum Berechnen von Konfidenzintervallen. Es ist besser, solche etablierten Open-Source-Tools für Ihre Analyse zu verwenden, als von vorne zu beginnen.quelle
simboot
Paket sieht vielversprechend aus, scheint aber für meine Zwecke nicht geeignet zu sein, da es eine Kontrollprobe zur Schätzung der Konfidenzintervalle benötigt.simboot
nicht erfüllt Ihre Bedürfnisse, Google „Shannon - Entropie Bias r“ für Verbindungen zu anderen R - Paketen wieentropy
,entropart
, undEntropyEstimation
.