Verwendung des Standardfehlers der Bootstrap-Verteilung


19

(ignoriere den R-Code falls nötig, da meine Hauptfrage sprachunabhängig ist)

Wenn ich die Variabilität einer einfachen Statistik (zB Mittelwert) untersuchen möchte, weiß ich, dass ich das mit folgender Theorie tun kann:

x = rnorm(50)

# Estimate standard error from theory
summary(lm(x~1))
# same as...
sd(x) / sqrt(length(x))

oder mit dem bootstrap wie:

library(boot)

# Estimate standard error from bootstrap
(x.bs = boot(x, function(x, inds) mean(x[inds]), 1000))
# which is simply the standard *deviation* of the bootstrap distribution...
sd(x.bs$t)

Aber was ich mich frage ist, kann es nützlich sein / gültig (?) Zum Standard suchen Fehlern einer Bootstrap - Verteilung in bestimmten Situationen? Die Situation, mit der ich es zu tun habe, ist eine relativ verrauschte nichtlineare Funktion, wie zum Beispiel:

# Simulate dataset
set.seed(12345)
n   = 100
x   = runif(n, 0, 20)
y   = SSasymp(x, 5, 1, -1) + rnorm(n, sd=2)
dat = data.frame(x, y)

Hier konvergiert das Modell nicht einmal mit dem Originaldatensatz.

> (fit = nls(y ~ SSasymp(x, Asym, R0, lrc), dat))
Error in numericDeriv(form[[3L]], names(ind), env) : 
  Missing value or an infinity produced when evaluating the model

so dass die Statistiken , die ich in stattdessen bin interessiert sind mehr stabilisiert Schätzungen dieser nls Parameter - vielleicht ihre Mittel über eine Reihe von Bootstrap - Replikationen.

# Obtain mean bootstrap nls parameter estimates
fit.bs = boot(dat, function(dat, inds)
              tryCatch(coef(nls(y ~ SSasymp(x, Asym, R0, lrc), dat[inds, ])),
                       error=function(e) c(NA, NA, NA)), 100)
pars = colMeans(fit.bs$t, na.rm=T)

Hier sind diese in der Tat im Baseballstadion von dem, was ich verwendet habe, um die ursprünglichen Daten zu simulieren:

> pars
[1]  5.606190  1.859591 -1.390816

Eine geplottete Version sieht so aus:

# Plot
with(dat, plot(x, y))

newx = seq(min(x), max(x), len=100)
lines(newx, SSasymp(newx, pars[1], pars[2], pars[3]))

lines(newx, SSasymp(newx, 5, 1, -1), col='red')
legend('bottomright', c('Actual', 'Predicted'), bty='n', lty=1, col=2:1)

Bildbeschreibung hier eingeben

Wenn ich nun die Variabilität dieser stabilisierten Parameterschätzungen will , kann ich, unter der Annahme der Normalität dieser Bootstrap-Verteilung, einfach ihre Standardfehler berechnen:

> apply(fit.bs$t, 2, function(x) sd(x, na.rm=T) / sqrt(length(na.omit(x))))
[1] 0.08369921 0.17230957 0.08386824

Ist das ein vernünftiger Ansatz? Gibt es eine allgemeinere Herangehensweise, um auf die Parameter solcher instabiler nichtlinearer Modelle zu schließen? (Ich nehme an, ich könnte stattdessen hier eine zweite Ebene des Resamplings durchführen, anstatt mich auf die Theorie für das letzte Bit zu verlassen, aber das kann je nach Modell eine Menge Zeit in Anspruch nehmen. Trotzdem bin ich mir nicht sicher, ob diese Standardfehler auftreten würden nützlich für alles, da sie sich 0 nähern würden, wenn ich nur die Anzahl der Bootstrap-Replikationen erhöhen würde.)

Vielen Dank, und übrigens, ich bin Ingenieur, bitte verzeihen Sie mir, dass ich hier ein relativer Neuling bin.

Antworten:


13

In dieser Frage gibt es mehrere Probleme. Zunächst stellt sich die Frage, ob Bootstrap-Durchschnittswerte sinnvolle Schätzer sind, auch wenn einige der einzelnen Bootstrap-Schätzer nicht berechenbar sind (fehlende Konvergenz, Nichtexistenz von Lösungen). Zweitens, da die Bootstrap-Schätzer sinnvoll sind, stellt sich die Frage, wie Konfidenzintervalle oder nur Standardfehler für diese Schätzer ermittelt werden können.

--

In der vorliegenden Frage geht es jedoch darum, Schätzungen zu erstellen, selbst wenn der Algorithmus zur Berechnung der Schätzungen gelegentlich fehlschlägt oder der Schätzer gelegentlich undefiniert ist. Generell gibt es ein Problem:

  • Die Mittelung von Bootstrap-Schätzungen, während die Bootstrap-Beispiele, für die die Schätzungen nicht berechenbar sind, blind weggeworfen werden, führt im Allgemeinen zu verzerrten Ergebnissen.

Wie ernst das allgemeine Problem ist, hängt von mehreren Dingen ab. Zum Beispiel, wie häufig ist die Schätzung nicht berechenbar und ob die bedingte Verteilung der Probe gegeben , dass die Schätzung ist nicht berechenbar unterscheidet sich von der bedingten Verteilung der Probe , dass die Schätzung gegeben berechenbar ist. Ich würde nicht empfehlen, die Methode zu verwenden.

Xθ^θ^(X)Y.

θ~(X)=E(θ^(Y.)X,EIN(X))
EIN(X)Xθ^(Y.)N / A-XEIN(X)θ~(X)

θ^(Y.)XEIN(X)θ~(X)

EIN(X)θ~(X)

Bearbeiten :

Das sehr schöne Papier Estimation and Accuracy After Model Selection von Efron bietet eine allgemeine Methode zum Abschätzen des Standardfehlers eines Bagged Estimators, ohne eine zweite Schicht Bootstrapping zu verwenden. Das Papier befasst sich nicht explizit mit Schätzern, die gelegentlich nicht berechenbar sind.


Danke für die tolle Antwort. Der Punkt der Voreingenommenheit ist besonders gut aufgenommen. Sie können sich einen Extremfall vorstellen, in dem die Punktwolke völlig gleichmäßig ist, abgesehen von einer Reihe von Fernpunkten, die sehr gut zum Modell passen. Die überwiegende Mehrheit der nlsAnpassungen kann fehlschlagen, aber von den konvergierenden ist die Verzerrung groß und die vorhergesagten Standardfehler / CIs sind falsch klein. nlsBootverwendet eine Ad-hoc-Anforderung von 50% für erfolgreiche Anpassungen, aber ich stimme Ihnen zu, dass die (Dis-) Ähnlichkeit der bedingten Verteilungen ebenfalls ein Problem darstellt.
John Colby

(Ich werde versuchen, Ihnen morgen einen Bonus zu geben, wenn diese Seite es mir erlaubt, SO)
John Colby
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.