Esto es similar a Bootstrap: la estimación está fuera del intervalo de confianza
Tengo algunos datos que representan recuentos de genotipos en una población. Quiero estimar la diversidad genética usando el índice de Shannon y también generar un intervalo de confianza usando bootstrapping. Sin embargo, he notado que la estimación mediante bootstrapping tiende a ser extremadamente sesgada y da como resultado un intervalo de confianza que se encuentra fuera de mi estadística observada.
A continuación se muestra un ejemplo.
# 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]))
}
Generacion de datos
set.seed(5000)
X <- rmultinom(1, 100, prob = rep(1, 50))[, 1]
Cálculo
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
Generando los ICs con corrección de sesgos
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
Suponiendo que la varianza de t puede usarse para la varianza de t0 .
norm.ci(t0 = boot.out$t0, var.t0 = var(boot.out$t[, 1]))[-1]
## [1] 3.55475 3.80421
¿Sería correcto informar el IC centrado en t0 ? ¿Hay una mejor manera de generar el bootstrap?
Como señala la respuesta de @NRH, el problema no es que el arranque haya dado un resultado sesgado. Es que la simple estimación de "enchufable" de la entropía de Shannon, basada en datos de una muestra, está sesgada hacia abajo del valor real de la población.
Este problema fue reconocido en la década de 1950, a los pocos años de la definición de este índice. Este artículo discute los problemas subyacentes, con referencias a la literatura asociada.
El problema surge de la relación no lineal de las probabilidades individuales con esta medida de entropía. En este caso, la fracción de genotipo observada para el gen i en la muestra n , , es un estimador imparcial de la probabilidad real, . Pero cuando ese valor observado se aplica a la fórmula "plug in" para la entropía sobre los genes M:pn,ip^n,i pn,i
la relación no lineal significa que el valor resultante es una subestimación sesgada de la verdadera diversidad genética.
El sesgo depende del número de genes, y el número de observaciones, . En primer orden, la estimación del complemento será menor que la entropía verdadera en una cantidad . Las correcciones de orden superior se evalúan en el documento vinculado anteriormente.N ( M - 1 ) / 2 NM N (M−1)/2N
Hay paquetes en R que se ocupan de este problema. El
simboot
paquete en particular tiene una funciónestShannonf
que realiza estas correcciones de sesgo y una funciónsbdiv
para calcular los intervalos de confianza. Será mejor usar herramientas de código abierto establecidas para su análisis en lugar de intentar comenzar desde cero.fuente
simboot
paquete parece prometedor, pero no parece adecuado para mis propósitos, ya que necesita una muestra de control para estimar los intervalos de confianza.simboot
no cumple con sus necesidades, Google "entropía de Shannon sesgo r" para los enlaces a otros paquetes como Rentropy
,entropart
yEntropyEstimation
.