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 boot
sind ein Stapel numerischer Daten im Array x
und ein Verweis t
auf eine Funktion (die genau wie auf Arrays angewendet werden kann x
), um einen einzelnen numerischen Wert zurückzugeben. Mit anderen Worten, t
ist eine Statistik . Es generiert alle möglichen Muster mit Ersatz aus x
und gilt t
fü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 t
fü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)boot
t
t
1223jeweils wie in der Ausgabe gezeigt.
(1,3,3,4,7)
hist(boot(c(1,3,3,4,7), 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 boot
erneut 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)
01010/12−−√≈2.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 boot
Code!)
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