Ceci est similaire à Bootstrap: l'estimation est en dehors de l'intervalle de confiance
J'ai quelques données qui représentent le nombre de génotypes dans une population. Je veux estimer la diversité génétique à l'aide de l'indice de Shannon et générer également un intervalle de confiance à l'aide du bootstrap. J'ai remarqué, cependant, que l'estimation via le bootstrap a tendance à être extrêmement biaisée et se traduit par un intervalle de confiance qui se situe en dehors de ma statistique observée.
Voici un exemple.
# 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]))
}
Génération de données
set.seed(5000)
X <- rmultinom(1, 100, prob = rep(1, 50))[, 1]
Calcul
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
Génération des CI avec correction de biais
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
En supposant que la variance de t peut être utilisée pour la variance de t0 .
norm.ci(t0 = boot.out$t0, var.t0 = var(boot.out$t[, 1]))[-1]
## [1] 3.55475 3.80421
Serait-il correct de rapporter l'IC centré autour de t0 ? Existe-t-il une meilleure façon de générer le bootstrap?
Comme le souligne la réponse de @NRH, le problème n'est pas que le bootstrapping a donné un résultat biaisé. C'est que la simple estimation «plug in» de l'entropie de Shannon, basée sur les données d'un échantillon, est biaisée vers le bas par rapport à la valeur réelle de la population.
Ce problème a été reconnu dans les années 50, quelques années après la définition de cet indice. Cet article discute des problèmes sous-jacents, avec des références à la littérature associée.
la relation non linéaire signifie que la valeur résultante est une sous-estimation biaisée de la véritable diversité génétique.
Il existe des packages dans R qui traitent de ce problème. Le
simboot
package en particulier a une fonctionestShannonf
qui effectue ces corrections de biais, et une fonctionsbdiv
de calcul des intervalles de confiance. Il sera préférable d'utiliser ces outils open source établis pour votre analyse plutôt que d'essayer de recommencer à zéro.la source
simboot
package semble prometteur, mais ne semble pas adapté à mes besoins car il a besoin d'un échantillon de contrôle pour estimer les intervalles de confiance.simboot
ne répond pas à vos besoins, Google « biais de shannon r » pour des liens vers d' autres packages R commeentropy
,entropart
etEntropyEstimation
.