Bootstrap, Monte Carlo

12

Im Rahmen der Hausaufgaben wurde mir folgende Frage gestellt:

Entwerfen und implementieren Sie eine Simulationsstudie, um die Leistung des Bootstraps zu untersuchen und 95% -Konfidenzintervalle für den Mittelwert einer univariaten Datenstichprobe zu erhalten. Ihre Implementierung kann in R oder SAS erfolgen.

Aspekte der Leistung, die Sie möglicherweise betrachten möchten, sind die Abdeckung des Konfidenzintervalls (dh wie oft das Konfidenzintervall den wahren Mittelwert enthält) und die Monte-Carlo-Variation (dh wie stark variieren die oberen und unteren Konfidenzgrenzen zwischen den Simulationen).

Weiß jemand, wie man mit dem Monte-Carlo-Variationsaspekt umgeht? Ich kann nicht einmal einen Algorithmus oder irgendetwas ausarbeiten. Hat das mit der Monte-Carlo-Integration zu tun? Vielen Dank!

Sarah
quelle

Antworten:

18

Diese Verwechslung zwischen Bootstrap-Prozeduren und Monte-Carlo-Prozeduren wiederholt sich immer wieder. Vielleicht ist dies also ein ebenso guter Ort, um sie anzugehen. (Die Beispiele vonR Codebeispiele können auch bei den Hausaufgaben hilfreich sein.)

Betrachten Sie diese Implementierung des Bootstraps 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)
}

Ein kurzer Blick bestätigt, dass dies deterministisch ist Berechnung ist: Es werden keine zufälligen Werte generiert oder verwendet. (Ich werde die Details seines Innenlebens interessierten Lesern überlassen, um es selbst herauszufinden.)

Die Argumente bootsind ein Stapel numerischer Daten im Array xund ein Verweis tauf eine Funktion (die genau wie auf Arrays angewendet werden kann x), um einen einzelnen numerischen Wert zurückzugeben. Mit anderen Worten, tist eine Statistik . Es generiert alle möglichen Muster mit Ersatz aus xund gilt tfür jedes von ihnen, wodurch für jedes dieser Muster eine Nummer erzeugt wird: das ist der Bootstrap auf den Punkt gebracht. Der Rückgabewert ist ein Array , die die genaue Bootstrap Verteilung der tfür die Probe ,x .

Lassen Sie uns als winziges Beispiel den Mittelwert für ein Beispiel booten x= c(1,3):

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

2(1,3)(1,1)(1,3)(3,1)(3,3)boottt1223jeweils wie in der Ausgabe gezeigt.

(1,3,3,4,7)

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

Histogramm der SD

5

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

Das Ergebnis für diese bestimmte Zufallsstichprobe ist 3,83587. Dies ist definitiv: Wenn Sie booterneut mit demselben Datensatz anrufen würden, wäre die Antwort genau dieselbe. Aber wie könnte sich die Antwort bei verschiedenen Zufallsstichproben ändern? Finden Sie es heraus, indem Sie diesen Vorgang einige Male wiederholen und ein Histogramm der Ergebnisse zeichnen:

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

Histogramm der Simulationen

01010/122.887

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

Aber das ist bei weitem nicht die nominellen 95%, die wir angegeben haben (und auf die wir gehofft haben)! Dies ist ein Wert der Simulation: Sie vergleicht unsere Hoffnungen mit dem, was wirklich vor sich geht. (Warum die Diskrepanz? Ich glaube, das liegt daran, dass das Bootstrapping einer SD mit wirklich kleinen Samples nicht gut funktioniert.)

Rezension

  • Bootstrap-Statistiken sind konzeptionell genauso wie alle anderen Statistiken wie Mittelwert oder Standardabweichung. Die Berechnung dauert in der Regel sehr lange. (Siehe Warnmeldung im bootCode!)

  • Die Monte-Carlo-Simulation kann nützlich sein, um zu untersuchen, wie sich eine Bootstrap-Statistik aufgrund der Zufälligkeit beim Abrufen von Stichproben ändert. Die bei einer solchen Simulation beobachtete Variation ist auf Variation in den Proben zurückzuführen, nicht auf Variation im Bootstrap.

  • nnn

whuber
quelle
+1 Das ist sehr schön. Ich glaube nicht, dass ich es besser hätte machen können! Ich möchte nur hinzufügen, dass ich einige Artikel über die Leistung des Bootstraps bei der Fehlerratenschätzung und für Konfidenzintervalle bei der Schätzung von Varianzen habe. Diese Ergebnisse finden Sie in der zweiten Ausgabe meines Bootstrap-Methodenbuchs und in meinem Buch über Bootstrapping mit Anwendungen für R.
Michael R. Chernick
Amazon Links zu den Büchern sind hier: amazon.com/… amazon.com/Introduction-Bootstrap-Methods-Applications/dp/…
Michael R. Chernick
Ich würde nur sagen, dass die Idee darin besteht, Daten aus bekannten Verteilungen zu simulieren und das Bootstrap-Verfahren von Interesse anzuwenden (z. B. Konfidenzintervalle für einen Parameter oder eine Schätzung der Fehlerrate eines Klassifikators), und Sie können bewerten, wie gut dies funktioniert, weil Sie die Wahrheit kennen.
Michael R. Chernick
5

Der Bootstrap ist insofern eine Monte-Carlo-Technik, als er eine Art Zufallsstichprobe beinhaltet. Wenn Sie den Bootstrap zweimal mit demselben Datensatz ausführen, erhalten Sie unterschiedliche Antworten. Je mehr Beispiele Sie in Ihrem Bootstrap verwenden, desto weniger Variationen erhalten Sie.

Die Abdeckung bezieht sich auf die Variation der Ergebnisse für verschiedene Datensätze aus derselben hypothetischen Stichprobenverteilung.

Simon Byrne
quelle
danke, ich gehe davon aus, dass es nur bedeutet, Code zu erstellen, um zu sehen, ob die Konfidenzgrenzen zwischen den Simulationen variieren!
Sarah
7
Um genau zu sein (pedantisch?), Sollten wir klarstellen, dass der Bootstrap ist nicht per se eine Monte - Carlo - Technik. Sie wird jedoch normalerweise mithilfe der Monte-Carlo-Simulation angenähert , da es häufig nicht möglich ist, die bestimmten interessierenden Größen zu berechnen. Ich finde den Wortlaut des Problems auch sehr anfällig für Fehlinterpretationen! Man muss darauf achten, den Stichprobenfehler vom Monte-Carlo-Näherungsfehler zu unterscheiden . Letzteres wird nur sinnvoll geschätzt, wenn die MC-Bootstrap-Näherung für dasselbe Beispiel viele Male wiederholt wird, wie Sie hervorheben. :)
Kardinal
1

Ich bin mir auch nicht sicher, was genau unter " Monte-Carlo- Variation" per se zu verstehen ist. Sicherlich sollte es möglich sein zu sehen, wie stark die Iterationen variieren, beispielsweise beim Wert der oberen (oder unteren) Grenze (Hinweis). Vielleicht möchten sie, dass Sie dies nur für den Monte Carlo tun und nicht für den Bootstrap? Das ist jedoch keine Voraussetzung für eine Übung. Es kann am besten sein, nur zu fragen, was mit diesem Satz gemeint ist.

gung - Monica wieder einsetzen
quelle
Danke für Ihre Hilfe! Vielleicht werde ich mir vorerst nur die Variation zwischen Ober- und Untergrenze ansehen und später nach Monte Carlo fragen. Nun nur um herauszufinden, wie ich das mache ..
Sarah
Hier gibt es mehrere Möglichkeiten. Einer ist oben-unten (dh der Unterschied). Meine Interpretation der Phrasierung in der Frage ist Variation in der oberen und Variation in der unteren (dh 2 verschiedene Variationen), aber ich nehme an, ich kann nicht sicher sein. Ist ein anderer Teil Ihrer Frage, wie Sie eine MC-Simulation in R durchführen können?
Gung - Reinstate Monica
Ich kam zu dem Schluss, dass es auch nach 2 verschiedenen Variationen suchte, also denke ich werde das versuchen!
Sarah
1
Fairerweise frage ich mich jetzt, ob Sie an diesem Punkt gut sind oder ob Sie zusätzliche Hinweise benötigen, wie Sie sich dem nähern können, was wir bei der Frage vermutet haben.
Gung - Reinstate Monica
1
Speichern Sie also bei jeder Iteration die oberen und unteren Grenzen (Hinweis)?
Gung - Reinstate Monica
1

Mein Verständnis dieser Hausaufgabe ist, dass Sie aufgefordert werden, eine Monte-Carlo-Simulation für eine bestimmte statistische Technik durchzuführen. Das heißt, Sie simulieren eine Reihe von zufälligen Datensätzen, wenden diese Technik auf diesen Datensatz an und speichern die Zahlen, um sie später auf bequeme Weise zusammenzufassen (Mittelwerte, simulierte Wahrscheinlichkeiten usw.).

Bei der fraglichen Technik handelt es sich nun um den Bootstrap, in dem eine Monte-Carlo-Simulation enthalten ist (es sei denn, Sie haben, wie bereits gezeigt, aufgefordert, den genauen Bootstrap durchzuführen, was höchst unwahrscheinlich ist). Als Ergebnis Ihrer Simulationen speichern Sie möglicherweise den Stichprobenmittelwert, die Stichprobenstandardabweichung und die Grenzen des Konfidenzintervalls für den vom Bootstrap erhaltenen Mittelwert.

n=10

StasK
quelle
3
Eine Sache, die ich aus der Arbeit mit dem exakten Bootstrap gelernt habe, ist, dass das Standard-CI mit normaler Theorie bei kleinen Samples oft viel besser funktioniert , selbst wenn sie schief sind. Der Bootstrap kommt mit großen Stichproben voll zur Geltung: Die Theorie ist asymptotisch und nicht exakt.
whuber
2
@whuber, das ist eine interessante Beobachtung. Normalerweise betone ich die asymptotische Natur des Bootstraps (siehe Peter Halls Buch The Bootstrap and Edgeworth Expansions, um zu verstehen, warum), habe es diesmal aber nicht geschafft.
StasK