Bootstrap può essere visto come una "cura" per le piccole dimensioni del campione?


71

Questa domanda è stata innescata da qualcosa che ho letto in questo manuale di statistica a livello di laurea e anche (indipendentemente) sentito durante questa presentazione in un seminario statistico. In entrambi i casi, l'affermazione era sulla falsariga di "poiché la dimensione del campione è piuttosto piccola, abbiamo deciso di eseguire la stima tramite bootstrap anziché (o insieme a) questo metodo parametrico ".X

Non hanno ottenuto nei dettagli, ma probabilmente il ragionamento è il seguente: il metodo assume i dati seguono una certa parametrico di distribuzione D . In realtà la distribuzione non è esattamente D , ma va bene finché la dimensione del campione è abbastanza grande. Poiché in questo caso la dimensione del campione è troppo piccola, passiamo al bootstrap (non parametrico) che non fa ipotesi distributive. Problema risolto!XDD

Secondo me, questo non è lo scopo di bootstrap. Ecco come lo vedo: bootstrap può dare un vantaggio quando è più o meno ovvio che ci sono abbastanza dati, ma non esiste una soluzione a forma chiusa per ottenere errori standard, valori p e statistiche simili. Un esempio classico è l'ottenimento di un elemento della configurazione per il coefficiente di correlazione dato un campione da una distribuzione normale bivariata: esiste la soluzione in forma chiusa, ma è così contorta che il bootstrap è più semplice. Tuttavia, nulla implica che bootstrap possa in qualche modo aiutare a cavarsela con una piccola dimensione del campione.

La mia percezione è giusta?

Se trovi questa domanda interessante, c'è un'altra mia domanda bootstrap più specifica:

Bootstrap: il problema del overfitting

PS Non posso fare a meno di condividere un esempio eclatante dell '"approccio bootstrap". Non sto rivelando il nome dell'autore, ma è uno dei "quants" di vecchia generazione che ha scritto un libro sulla finanza quantitativa nel 2004. L'esempio è preso da lì.

Considera il seguente problema: supponi di avere 4 risorse e 120 osservazioni di rendimento mensili per ciascuna. L'obiettivo è costruire il cdf tridimensionale congiunto dei rendimenti annuali. Anche per un singolo asset, l'attività sembra difficilmente raggiungibile con solo 10 osservazioni annuali, per non parlare della stima del cdf a 4 dimensioni. Ma non preoccuparti, il "bootstrap" ti aiuterà: prendi tutte le osservazioni a 4 dimensioni disponibili, ricampiona 12 con la sostituzione e componile per costruire un singolo vettore a 4 dimensioni "bootstrap" dei rendimenti annuali. Ripeti 1000 volte e, ecco, ti sei procurato un "campione bootstrap" di 1000 rendimenti annuali. Usalo come campione iid di dimensione 1000 ai fini della stima del cdf o qualsiasi altra inferenza che può essere ricavata da una storia millenaria.


18
Sento o leggo sentimenti simili al tuo primo paragrafo, ma tendo a non essere d'accordo. Di solito non vedo il bootstrap come necessariamente utile in piccoli campioni. La sua giustificazione è asintotica / campione di grandi dimensioni, e in molti casi in pratica la sua piccola prestazione del campione è problematica; la copertura degli intervalli, ad esempio, è spesso molto diversa dalla frequenza nominale. È un altro strumento utile, ma come molti altri che sono stati annunciati nel corso degli anni, non è la panacea che alcune persone immaginano che sia. Non credo proprio che sia una soluzione per campioni molto piccoli.
Glen_b,

Nel libro di Simon Sheather (Figura 3.40) c'è un diagramma di flusso per la regressione che suggerisce il bootstrap per l'inferenza quando la dimensione del campione non è grande e gli errori non sono normalmente distribuiti.
Tony Ladson,

2
La risposta alla domanda nel quarto paragrafo è sì (o almeno otterresti un credito per il tuo argomento se dai questa risposta a un test nella mia classe). Hai controllato questa discussione ? Nella mia risposta , ho dato una spiegazione delle approssimazioni fatte dal bootstrap e ho fornito un riferimento al documento strabiliante che ogni bootstrapper dovrebbe leggere per essere consapevole dei limiti del metodo. Sarebbe bello vedere riferimenti ai libri / documenti / presentazioni che hanno scatenato la tua domanda
StasK

Bootstrap non ti dà solo un termine extra in un'espansione edgeworth - come una normale approssimazione con un termine di correzione?
probabilityislogic

Risposte:


34

nn1nn

simfun <- function(n=5) {
    x <- rnorm(n)
    m.x <- mean(x)
    s.x <- sd(x)
    z <- m.x/(1/sqrt(n))
    t <- m.x/(s.x/sqrt(n))
    b <- replicate(10000, mean(sample(x, replace=TRUE)))
    c( t=abs(t) > qt(0.975,n-1), z=abs(z) > qnorm(0.975),
        z2 = abs(t) > qnorm(0.975), 
        b= (0 < quantile(b, 0.025)) | (0 > quantile(b, 0.975))
     )
}

out <- replicate(10000, simfun())
rowMeans(out)

I miei risultati per una corsa sono:

     t      z     z2 b.2.5% 
0.0486 0.0493 0.1199 0.1631 

α


6
La tua ultima frase mi ha incuriosito, quindi l'ho provato con il tuo esempio. Ho usato il bootpacchetto e gli ho fornito tutti gli intervalli possibili: il primo intervallo di approssimazione normale del primo ordine, l'intervallo di bootstrap di base, l'intervallo di bootstrap studentizzato, l'intervallo di percentuali di bootstrap (che il tuo codice già fornisce) e il percentile di bootstrap modificato (BCa) intervallo. I risultati erano essenzialmente tutti uguali (tassi di rifiuto intorno a .16-.17), ad eccezione dell'intervallo studentizzato, che aveva un tasso di rifiuto nominale (.05) (il che ha senso, poiché è più simile al test t standard).
Wolfgang,

2
@ Wolfgang, grazie per aver fatto le simulazioni aggiuntive. Sono un po 'sorpreso che gli altri intervalli non abbiano fatto un po' meglio, ma non sono sorpreso che non abbiano raggiunto il livello 0,05.
Greg Snow,

1
Sì, sono stato anche un po 'sorpreso! A volte la nostra intuizione fallisce. Ecco perché è così meraviglioso poter scrivere una piccola sceneggiatura in R in pochi minuti, far funzionare 10,000 \times 10,000iterazioni (che hanno richiesto altri due minuti per essere completati) ed essere in grado di controllare le cose. E il tuo esempio mostra bene che il bootstrap può funzionare piuttosto male con piccoli campioni anche quando le cose sono "belle" (cioè, i dati sono in effetti normali).
Wolfgang,

In realtà, il problema riscontrato in questa simulazione è esattamente quello di cui ho appena chiesto qui e risposto nei commenti di @whuber: stats.stackexchange.com/questions/323455/… . Quindi, non penso che il problema sia la dimensione del campione, ma la violazione dell'indipendenza per inferenza parametrica all'interno di ciascun campione.
passaggio di mezzo

2
zt

14

Se ti viene fornita una piccola dimensione del campione (come una luce laterale, ciò che è "piccolo" sembra dipendere da una regola consueta sottostante in ogni campo di ricerca), nessun bootstrap farà la magia. Supponendo che un database contenga tre osservazioni per ciascuna delle due variabili sotto inchiesta, nessuna inferenza avrà senso. Nella mia esperienza, il bootstrap non parametrico (1.000 o 10.000 repliche) funziona bene nella sostituzione del test t quando le distribuzioni del campione (almeno 10-15 osservazioni ciascuna) sono distorte e quindi i prerequisiti per il normale test t non sono soddisfatti. Inoltre, indipendentemente dal numero di osservazioni, il bootstrap non parametrico può essere una scelta obbligatoria quando i dati sono distorti positivamente, come sempre accade per i costi dell'assistenza sanitaria.


1
bootstrap può essere una scelta obbligatoria quando i dati sono distorti positivamente - perché non utilizzare invece una distribuzione distorta lognormale o simile? SAS e R hanno molte scelte.
James,

1
La risposta di James merita considerazione. Tuttavia, il solito problema che devo affrontare con la registrazione dei dati sui costi è la trasformazione posteriore alla metrica originale prima di presentare i risultati ai decisori. È possibile evitare questo problema con bootstrap non parametrico.
Carlo Lazzaro,

Carlo, dal momento che hai esperienza con la trasformazione dei tronchi, potresti voler rispondere a un'altra mia domanda (c'è un premio di
James,

James, ho dato una risposta allettante alla tua domanda qualche minuto fa.
Carlo Lazzaro,

tχ12

13

Altre risposte criticano le prestazioni degli intervalli di confidenza bootstrap , non bootstrap stesso. Questo è un problema diverso

Se il tuo contesto soddisfa le condizioni di regolarità per la convergenza della distribuzione bootstrap (convergenza in termini di numero di campioni bootstrap), il metodo funzionerà se usi un campione bootstrap abbastanza grande.

Nel caso in cui desideri davvero trovare problemi relativi all'uso del bootstrap non parametrico, ecco due problemi:

(1) Problemi con il ricampionamento.

Uno dei problemi con bootstrap, sia per campioni piccoli che grandi, è il passo di ricampionamento. Non è sempre possibile ricampionare mantenendo la struttura (dipendenza, temporale, ...) del campione. Un esempio di questo è un processo sovrapposto .

Supponiamo che ci siano un certo numero di fonti indipendenti in ciascuno dei quali si verificano eventi di volta in volta. Si presume che gli intervalli tra eventi successivi in ​​una qualsiasi sorgente siano variabili casuali indipendenti tutte con la stessa distribuzione, in modo che ciascuna sorgente costituisca un processo di rinnovo di tipo familiare. Gli output delle sorgenti sono combinati in un output aggregato.

Come ricampioneresti mantenendo la struttura sconosciuta della dipendenza ?

(2) Campioni bootstrap stretti e intervalli di confidenza bootstrap per piccoli campioni .

In piccoli campioni il minimo e il massimo degli stimatori per ciascun sottocampione possono definire un intervallo ristretto, quindi i punti finale destro e sinistro di qualsiasi intervallo di confidenza saranno molto stretti (il che è controintuitivo dato il piccolo campione!) In alcuni modelli.

x1,x2Exp(λ)λ>0

set.seed(1)
x <- rexp(2,1)
# Maximum likelihood estimator
1/mean(x)

# Profile likelihood: provides a confidence interval with right-end point beyond the maximum inverse of the mean
Rp <- Vectorize(function(l) exp(sum(dexp(x,rate=l,log=T))-sum(dexp(x,rate=1/mean(x),log=T))))

curve(Rp,0,5)
lines(c(0,5),c(0.147,0.147),col="red")

λλ^=2/(x1+x2)

library(boot)
set.seed(1)
x <- rexp(2,1)
1/mean(x)
# Bootstrap interval: limited to the maximum inverse of the mean
f.boot <- function(data,ind) 1/mean(data[ind])
b.b <- boot(data=x, statistic=f.boot, R=100000)
boot.ci(b.b, conf = 0.95, type = "all")
hist(b.b$t)

x1x2


6

Bootstrap funziona bene in campioni di piccole dimensioni per garantire la correttezza del test (ad esempio che il livello nominale 0,05 significatività è vicino alla dimensione effettiva della prova), tuttavia il bootstrap non non magicamente si concede potenza. Se hai un piccolo campione, hai poco potere, fine della storia.

Le regressioni parametriche (modelli lineari) e semiparametriche (GEE) tendono ad avere scarse proprietà del campione scarse ... la prima a causa della grande dipendenza da ipotesi parametriche, la seconda a causa dell'ingrandimento di solide stime di errore standard in piccoli campioni. Il bootstrap (e altri test basati sul ricampionamento) si comporta davvero bene in quelle circostanze.

Per la previsione, il bootstrap ti fornirà stime migliori (più oneste) della validità interna rispetto alla convalida del campione diviso.

n


2
(ad esempio che il livello di significatività nominale 0,05 è vicino alla dimensione effettiva del test), - ma nel codice R sopra abbiamo appena visto che il bootstrap non conserva la dimensione del test, giusto?
James,

Vedo che ti riferisci alla risposta fornita da Greg Snow. Sono stato sorpreso da quel risultato. Dovrò ricontrollare i miei fatti e modificare la mia risposta. Grazie.
AdamO,
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.