Bootstrap di parte: va bene centrare l'IC attorno alla statistica osservata?


11

Questo è simile a Bootstrap: la stima non rientra nell'intervallo di confidenza

Ho alcuni dati che rappresentano i conteggi dei genotipi in una popolazione. Voglio stimare la diversità genetica usando l'indice di Shannon e anche generare un intervallo di confidenza usando il bootstrap. Ho notato, tuttavia, che la stima tramite bootstrap tende ad essere estremamente distorta e si traduce in un intervallo di confidenza al di fuori della mia statistica osservata.

Di seguito è riportato un esempio.

# 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]))
}

Generazione dei dati

set.seed(5000)
X <- rmultinom(1, 100, prob = rep(1, 50))[, 1]

Calcolo

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

Generazione degli elementi della configurazione con correzione del bias

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

Supponendo che la varianza di t possa essere utilizzata per la varianza di t0 .

norm.ci(t0 = boot.out$t0, var.t0 = var(boot.out$t[, 1]))[-1]

## [1] 3.55475 3.80421

Sarebbe corretto segnalare l'IC centrato su t0 ? C'è un modo migliore per generare il bootstrap?

Risposte:


11

θ(p)=i=150pilogpi,
pR50nn=100
θ^n=θ(p^n)=i=150p^n,ilogp^n,i.
log(50)=3.912.bias(θ^100)0.28bias(θ^500)0.05Δpp

θ(pn)pnnp^nθ(pn)θ(pn)θ(p^n), il che comporta che l'intervallo percentile è completamente errato.

Per l'intervallo di base (e normale), i ruoli dei quantili sono scambiati. Ciò implica che l'intervallo sembra essere ragionevole (copre 3.912), sebbene gli intervalli che si estendono oltre 3.912 non siano logicamente significativi. Inoltre, non so se l'intervallo di base avrà la copertura corretta. La sua giustificazione si basa sulla seguente identità distributiva approssimativa:

θ(pn)θ(p^n)Dθ(p^n)θ(p),
nn=100

θ(p^n)±1.96se^n

θ(p)pθ(p)


5
1/n

@EdM sono informazioni molto utili. Non conoscevo la letteratura su questo particolare problema di distorsione. Potrebbe essere davvero utile se si potesse trasformare il commento in una risposta che spiega la correzione del bias e come potrebbe essere usato con il bootstrap, diciamo, per ottenere intervalli di confidenza.
NRH,

Neanche io conoscevo questa letteratura, fino a quando non sono arrivate questa domanda e la tua risposta. Il che è alquanto imbarazzante, poiché l'entropia di Shannon è spesso usata come misura nella mia area di scienza biomedica. Vedrò cosa posso mettere insieme come risposta aggiuntiva.
EdM,

1
θ(pn)

1
nnn

6

Come sottolinea la risposta di @NRH, il problema non è che il bootstrap abbia dato un risultato parziale. È che la semplice stima "plug-in" dell'entropia di Shannon, basata sui dati di un campione, è distorta al ribasso dal vero valore della popolazione.

Questo problema è stato riconosciuto negli anni '50, a pochi anni dalla definizione di questo indice. Questo documento discute le questioni di fondo, con riferimenti alla letteratura associata.

p^n,ipn,i

θ^n=θ(p^n)=i=1Mp^n,ilogp^n,i.

la relazione non lineare significa che il valore risultante è una sottovalutazione parziale della vera diversità genetica.

MN(M1)/2N

Ci sono pacchetti in R che affrontano questo problema. Il simbootpacchetto in particolare ha una funzione estShannonfche apporta queste correzioni di polarizzazione e una funzione sbdivper il calcolo degli intervalli di confidenza. Sarà meglio usare tali strumenti open source affermati per la tua analisi piuttosto che provare a ricominciare da zero.


Quindi lo stimatore in sé e per sé è errato a causa delle dimensioni del campione? Il simbootpacchetto sembra promettente, ma non sembra adatto ai miei scopi in quanto ha bisogno di un campione di controllo per stimare gli intervalli di confidenza.
ZNK,

1
"Erroneous" non è del tutto corretto; lo stimatore è "distorto" in quanto il suo valore atteso non è lo stesso del valore effettivo della popolazione. Ciò non significa che sia "errato"; gli stimatori distorti possono essere utili, come illustrato dal compromesso della variazione di polarizzazione nella selezione degli stimatori. Se simbootnon soddisfa le vostre esigenze, Google "Shannon entropia pregiudizi r" per link ad altri pacchetti R come entropy, entroparte EntropyEstimation.
EdM,

1
Vi sono ulteriori problemi derivanti dal fatto che alcuni genotipi presenti nella popolazione rischiano di perdere in un particolare campione. Alcuni dei pacchetti R basati sulla popolazione e sull'ecologia sembrano avere modi per affrontare questo problema.
EdM,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.