Bootstrap, Monte Carlo


12

Mi è stata posta la seguente domanda come parte dei compiti:

Progettare e implementare uno studio di simulazione per esaminare le prestazioni del bootstrap per ottenere intervalli di confidenza al 95% sulla media di un campione univariato di dati. L'implementazione può essere in R o SAS.

Gli aspetti delle prestazioni che potresti voler esaminare sono la copertura dell'intervallo di confidenza (ovvero, quale percentuale di volte in cui l'intervallo di confidenza contiene la vera media) e la variazione di Monte Carlo (ovvero, quanto variano i limiti di confidenza superiore e inferiore tra le simulazioni) '

Qualcuno sa come affrontare l'aspetto variante di Monte Carlo di questo? Non riesco nemmeno a elaborare un algoritmo o altro. Ha a che fare con l'integrazione di Monte Carlo? Grazie!

Risposte:


18

Questa confusione tra le procedure di bootstrap e le procedure di Monte Carlo continua a ripetersi, quindi forse questo è un posto adatto come qualsiasi altro per affrontarlo. (Anche gli esempi di Rcodice possono aiutare a fare i compiti.)

Considera questa implementazione del bootstrap in R:

boot <- function(x, t) { # Exact bootstrap of procedure t on data x
    n <- length(x)       # Must lie between 2 and 7 inclusive.
    if (n > 7) {
        stop("Sample size exceeds 7; use an approximate method instead.")
    }
    p <- c(n, 1:(n-1))
    a <- rep(x, n^(n-1))
    dim(a) <- rep(n, n)
    y <- as.vector(a)
    while (n > 1) {
        n <- n-1
        a <- aperm(a, p)
        y <- cbind(as.vector(a), y)
    }
    apply(y, 1, t)
}

Una rapida occhiata confermerà che si tratta di un calcolo deterministico : non vengono generati o utilizzati valori casuali. (Lascerò i dettagli del suo funzionamento interiore affinché i lettori interessati possano capire da soli.)

Gli argomenti bootsono un batch di dati numerici nella matrice xe un riferimento ta una funzione (che può essere applicata ad array esattamente come x) per restituire un singolo valore numerico; in altre parole, tè una statistica . Genera tutti i possibili campioni con sostituzione da xe si applica ta ciascuno di essi, producendo così un numero per ciascuno di tali campioni: questo è il bootstrap in breve. Il valore restituito è un array che rappresenta l' esatta distribuzione bootstrap di tper il campione x.

Come piccolo esempio , bootstrap la media per un esempio x= c(1,3):

> boot(c(1,3), mean)
> [1] 1 2 2 3

Esistono davvero quattro possibili campioni di dimensione con sostituzione da ; vale a dire, , , e . li genera tutti (nell'ordine appena elencato) e si applica a ciascuno di essi. In questo caso calcola la media e quelli risultano rispettivamente , , e , come mostrato nell'output.( 1 , 3 ) ( 1 , 1 ) ( 1 , 3 ) ( 3 , 1 ) ( 3 , 3 ) 1 2 2 32(1,3)(1,1)(1,3)(3,1)(3,3)boottt1223

La posizione da qui dipende da come si desidera utilizzare il bootstrap. Le informazioni complete sul bootstrap sono contenute in questo array di output, quindi di solito è una buona idea visualizzarlo. Ecco un esempio in cui la deviazione standard viene dal campione :(1,3,3,4,7)

hist(boot(c(1,3,3,4,7), sd))

Istogramma della SD

Ora siamo pronti a parlare della simulazione Monte Carlo. Supponiamo, diciamo, che avremmo avviato un limite di confidenza superiore del 95% sulla SD da un campione di usando il 95 ° percentile superiore della sua distribuzione bootstrap. Quali proprietà avrebbe questa procedura? Un modo per scoprirlo è supporre che i campioni siano stati ottenuti in modo casuale, per esempio, da una distribuzione uniforme. (L'applicazione indicherà spesso quale possa essere una ragionevole ipotesi distributiva; qui, ho scelto arbitrariamente una che è semplice per il calcolo ma non facile da trattare analiticamente.) Possiamo simulare ciò che accade prendendo un campione del genere e calcolando l'UCL:5

> set.seed(17)
> quantile(boot(runif(5, min=0, max=10), sd), .95)[1]
     95% 
3.835870 

Il risultato per questo particolare campione casuale è 3.83587. Questo è definito: se dovessi chiamare di bootnuovo con lo stesso set di dati, la risposta sarebbe esattamente la stessa. Ma come potrebbe cambiare la risposta con diversi campioni casuali? Scoprilo ripetendo questo processo alcune volte e disegnando un istogramma dei risultati:

> boot.sd <- replicate(100, quantile(boot(runif(5, min=0, max=10), sd), .95)[1])
> hist(boot.sd)

Istogramma delle simulazioni

Se dovessimo fare un altro set di simulazioni, i disegni casuali verrebbero fuori diversi, creando un istogramma (leggermente) diverso - ma non molto diverso da questo. Possiamo usarlo con una certa sicurezza per capire come funziona il bootstrap UCL della SD. Per riferimento, si noti che la deviazione standard di una distribuzione uniforme (che va da a come specificato qui) è uguale a . Come si aspetterebbe che qualsiasi UCL valga il suo sale, la maggioranza (tre quarti, o 0,75) dei valori nell'istogramma supera questo:10 10 / 01010/122.887

> length(boot.sd[boot.sd >= 10/sqrt(12)]) / length(boot.sd)
[1] 0.75

Ma questo non è affatto vicino al 95% nominale che abbiamo specificato (e speravamo)! Questo è un valore della simulazione: confronta le nostre speranze con ciò che sta realmente accadendo. (Perché la discrepanza? Credo che sia perché il bootstrap di una SD non funziona bene con campioni veramente piccoli.)

Revisione

  • Le statistiche Bootstrap sono concettualmente le stesse di qualsiasi altra statistica come una deviazione media o standard; tendono a impiegare molto tempo per il calcolo. (Vedi il messaggio di avviso nel bootcodice!)

  • La simulazione Monte-Carlo può essere utile per studiare come varia una statistica bootstrap a causa della casualità nell'ottenere campioni. La variazione osservata in tale simulazione è dovuta alla variazione nei campioni, non alla variazione nel bootstrap.

  • (Non illustrato qui) Poiché le statistiche bootstrap possono richiedere molti calcoli (apparentemente, fino a calcoli per campioni di dimensione ), è conveniente approssimare la distribuzione bootstrap. Questo di solito viene fatto creando un programma "black box" per ottenere un valore a caso dalla vera distribuzione bootstrap e chiamare ripetutamente quel programma. L'output collettivo approssima l'esatta distribuzione. L'approssimazione può variare a causa della casualità nella casella nera, ma tale variazione è un artefatto della procedura di approssimazione. Non è (concettualmente) inerente alla stessa procedura bootstrap. nnnn


+1 Questo è molto carino. Non penso che avrei potuto farlo meglio! Vorrei solo aggiungere che ho alcuni documenti sulle prestazioni del bootstrap nella stima del tasso di errore e per gli intervalli di confidenza durante la stima delle varianze. Questi risultati possono essere trovati nella seconda edizione del mio libro sui metodi bootstrap e nel mio libro sul bootstrap con applicazioni a R.
Michael R. Chernick,


Vorrei solo dire che l'idea è di simulare i dati di distribuzioni conosciute applicando la procedura di bootstrap di interesse (ad es. Intervalli di confidenza per un parametro o stima del tasso di errore di un classificatore) e puoi valutare quanto bene fa perché conosci la verità.
Michael R. Chernick,

5

Il bootstrap è una tecnica Monte Carlo, in quanto comporta un tipo di campionamento casuale. Se esegui il bootstrap due volte sullo stesso set di dati, otterrai risposte diverse. Più campioni usi nel tuo bootstrap, meno variazioni otterrai.

La copertura si riferisce alla variazione dei risultati su diversi set di dati dalla stessa ipotetica distribuzione di campionamento.


grazie, suppongo che significhi solo trovare un codice per vedere se i limiti di confidenza variano tra le simulazioni allora!
Sarah,

7
Per essere precisi (pedanti?), Dovremmo chiarire che il bootstrap non è di per sé una tecnica Monte Carlo. Tuttavia, di solito viene approssimato utilizzando la simulazione Monte Carlo poiché non è spesso trattabile per calcolare le particolari quantità di interesse. Trovo che la formulazione del problema sia anche soggetta a interpretazioni errate! Bisogna fare attenzione a distinguere l' errore di campionamento dall'errore di approssimazione di Monte Carlo . Quest'ultimo è sensibilmente stimato solo ripetendo l'approssimazione del bootstrap MC più volte sullo stesso campione, come sottolineato. :)
cardinale il

1

Non sono sicuro di cosa si intenda esattamente per " variazione Monte Carlo " di per sé. Certamente dovrebbe essere possibile vedere quanta variazione c'è tra le iterazioni in cose come il valore del limite superiore (o inferiore), ad esempio (suggerimento). Forse vogliono solo che tu faccia questo per il Monte Carlo, e non per il bootstrap? Questo non è un requisito che avrei dovuto fare per un esercizio, però. Potrebbe essere meglio chiedere semplicemente cosa si intende con quella frase.


Grazie per l'aiuto! Forse guarderò solo la variazione tra i limiti superiore e inferiore per ora e chiederò in seguito Monte Carlo. Ora, solo per capire come ci vado ..
Sarah,

Ci sono diverse possibilità qui. Uno è superiore-inferiore (cioè la differenza). La mia interpretazione del fraseggio nella domanda è la variazione in alto e la variazione in basso (cioè, 2 diverse varianti), ma suppongo di non esserne sicuro. In una nota diversa, fa parte della tua domanda come condurre la simulazione MC in R?
gung - Ripristina Monica

Sono giunto alla conclusione che stava cercando anche 2 diverse varianti, quindi pensa che ci proverò!
Sarah,

1
Abbastanza giusto, quello che mi chiedo ora è, sei bravo ad andare a questo punto o hai bisogno di ulteriori suggerimenti su come affrontare ciò che abbiamo indovinato la domanda è?
gung - Ripristina Monica

1
Quindi, su ogni iterazione, stai memorizzando i limiti superiore e inferiore (suggerimento)?
gung - Ripristina Monica

1

La mia comprensione di questo compito a casa è che ti sta chiedendo di fare una simulazione Monte Carlo per una certa tecnica statistica. Cioè, simuli un gruppo di set di dati casuali, applichi questa tecnica a questi set di dati e memorizzi i numeri per riassumere in un secondo momento in modo conveniente (mezzi, probabilità simulate, ecc.)

Ora, la tecnica in questione è il bootstrap, che prevede la simulazione Monte Carlo al suo interno (a meno che, come dimostrato da Whuber, non venga richiesto di eseguire il bootstrap esatto, il che è altamente improbabile). Quindi, come esiti delle tue simulazioni, potresti memorizzare la media del campione, la deviazione standard del campione e i limiti dell'intervallo di confidenza per la media ottenuta dal bootstrap.

Penso che per rendere questo studio interessante, vale la pena prelevare un campione di piccole dimensioni ( ) da una distribuzione distorta (esponenziale). In questo modo, l'intervallo di confidenza standard basato su CLT avrà probabilmente prestazioni inadeguate: diciamo, per un intervallo di confidenza del 90% che dovrebbe perdere il 5% su entrambe le estremità, vedrai qualcosa come il 10% e il 2%. L'elemento di avvio bootstrap può mostrare prestazioni migliori (ad esempio, 6% e 4%).n=10


3
Una cosa che ho imparato lavorando con il bootstrap esatto è che l'IC di teoria normale standard spesso funzionerà molto meglio con piccoli campioni anche quando sono inclinati. Il bootstrap si presenta da solo con grandi campioni: la teoria è asintotica, non esatta.
whuber

2
@whuber, questa è un'osservazione interessante. Di solito sottolineo la natura asintotica del bootstrap (vedi il libro The Bootstrap and Edgeworth Expansions di Peter Hall per capire perché), ma questa volta non ci sono riuscito.
StasK
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.