Bootstrapping-Residuen: Mache ich es richtig?

10

Zuallererst: Nach meinem Verständnis funktioniert das Bootstrapping von Residuen wie folgt:

  1. Modell an Daten anpassen
  2. Berechnen Sie die Residuen
  3. Probieren Sie die Residuen erneut aus und addieren Sie sie zu 1.
  4. Modell an neuen Datensatz von 3 anpassen.
  5. Wiederholen Sie die nZeiten, aber fügen Sie immer die neu abgetasteten Residuen zur Anpassung von 1 hinzu.

Ist das soweit richtig?


Was ich tun möchte, ist etwas anderes:

Ich möchte die Parameter- und Vorhersageunsicherheit für einen Algorithmus schätzen, der eine Umgebungsvariable schätzt.

Was ich habe, ist eine fehlerfreie Zeitreihe (aus einer Simulation) dieser Variablen x_true, zu der ich etwas Rauschen hinzufüge x_noise, um einen synthetischen Datensatz zu generieren x. Ich versuche dann, optimale Parameter zu finden, indem ich meinen Algorithmus mit der Summe der Quadrate sum((x_estimate - x_true)^2)(! Nicht x_estimate - x!) Als Zielfunktion anpasse. Um zu sehen, wie mein Algorithmus funktioniert, und um Beispiele für die Verteilungen meiner Parameter zu erstellen, möchte ich ein Resample durchführen x_noise, es hinzufügen x_true, mein Modell erneut anpassen , spülen und wiederholen. Ist das ein gültiger Ansatz zur Bewertung der Parameterunsicherheit? Kann ich die Anpassungen an die Bootstrap-Datensätze als Vorhersageunsicherheit interpretieren oder muss ich das oben beschriebene Verfahren befolgen?

/ edit: Ich glaube, ich habe nicht wirklich klar gemacht, was mein Modell macht. Stellen Sie sich das im Wesentlichen als eine Art Entrauschungsmethode vor. Es ist kein Vorhersagemodell, sondern ein Algorithmus, der versucht, das zugrunde liegende Signal einer verrauschten Zeitreihe von Umgebungsdaten zu extrahieren.

/ edit ^ 2: Für die MATLAB-Benutzer da draußen habe ich ein schnelles und schmutziges lineares Regressionsbeispiel für das, was ich meine, aufgeschrieben.

Dies ist, was ich glaube, "gewöhnliches" Bootstrapping von Residuen ist (bitte korrigieren Sie mich, wenn ich falsch liege ): http://pastebin.com/C0CJp3d1

Folgendes möchte ich tun: http://pastebin.com/mbapsz4c

Fred S.
quelle
Es wird klarer, wenn Sie den Code anzeigen, den Sie bisher gemacht haben.
Metriken
Ich habe bisher noch nichts in Bezug auf Bootstrapping codiert. Der Code für mein Modell ist ziemlich komplex, ich danke nicht, dass das helfen würde. Als Beispiel können wir annehmen, dass das Modell ein Glättungsverfahren wie ein gleitender Durchschnitt ist, wobei das gleitende Fenster der einzige Modellparameter ist. Ich habe eine Reihe von (synthetischen) Messungen über die Zeit und füge dem einen Fehler hinzu (nicht unbedingt homoskedastisch und normalverteilt). Ich möchte dann das sich bewegende Fenster schätzen, das dem zugrunde liegenden "wahren", das ich kenne, am nächsten kommt, und die Unsicherheit durch Bootstrapping meines synthetischen Fehlers bewerten. Hilft das?
Fred S
Hier ist ein sehr schlechter Pseudocode im MATLAB-Stil, vielleicht hilft es zu verstehen, was ich tun möchte: pastebin.com/yTRahzr5
Fred S
Sorry Fred, ich kenne Matlab nicht. Bitte tagge als Matlab, um Eingaben von Benutzern zu erhalten.
Metriken
2
Oh, meine Frage ist wirklich nicht auf MATLAB beschränkt (und das ist nicht wirklich MATLAB-Code, es ist nur ein Pseudocode, der auf MATLABs Syntax für For-Loops und Kommentare basiert und sowieso nicht funktioniert). Aber ich kann es nur für den Fall markieren.
Fred S

Antworten:

8

Hier ist der allgemeine Algorithmus (semi-parametrischer Bootstrap) im Detail:

B = Anzahl der Bootstraps

das Modell:
y=xβ+ϵ

Sei die Residuenϵ^

  1. Führen Sie die Regression aus und erhalten Sie die Schätzer und Residuen . & egr;β^ϵ^
  2. Probieren Sie die Residuen mit Ersetzung erneut aus und erhalten Sie den Bootstrap-Residuenvektor .ϵ^B
  3. Erhalten Sie die Bootstrap-abhängige Variable, indem Sie die Schätzer aus (1) mit den ursprünglichen Regressoren multiplizieren und den Bootstrap-Rest hinzufügen: .yB=xβ^+ϵ^B
  4. Führen Sie die Regression mit den Bootstrap-abhängigen Variablen und den ursprünglichen Regressoren aus. Dies ergibt den Bootstrap-Schätzer, dh die Regression auf , dies ergibt . x ß ByBxβ^B
  5. Wiederholen Sie die Prozedur indem Sie zu (2) zurückkehren.B
Süßes Baby Jesus
quelle
1

Ich bin mir nicht sicher, ob mein Verständnis richtig ist. Aber hier ist mein Vorschlag, Ihren Code ("gewöhnliches Bootstrapping von Residuen", Zeilen 28-34) in Folgendes zu ändern:

for i = 2:n_boot  
x_res_boot = x_residuals( randi(n_data,n_data,1) );  
x_boot = x_res_boot+ x_best_fit;  
p_est(:, i) = polyfit( t, x_boot, 1 );  
x_best_fit2 = polyval( p_est(:, i), t );  
x_residuals = x_best_fit2 - x_boot;
x_best_fit=x_best_fit2;
end  

Die Idee ist, dass jedes Mal, wenn Sie Residuen verwenden, nicht vom ersten Lauf, sondern vom vorherigen Bootstrap-Fit. Was mich betrifft, scheint alles andere gültig zu sein.

Dies ist eine überarbeitete Version, die in MATLAB überprüft wurde. Zwei Fehler wurden behoben.

O_Devinyak
quelle
Oh, das war neu für mich. bsxfun ist etwas kompliziert; Hier ist eine neue Version, die Ihre Idee verwendet und etwas klarer sein sollte. Dies führt jedoch zu etwas seltsamen Ergebnissen. Dies ist das Ergebnis der ständigen Neuabtastung der Residuen der ersten besten Anpassung und des Hinzufügens derselben (meine ursprüngliche Idee). Dies geschieht, wenn ich die Residuen jeder Iteration erneut abtastet und sie jeder neuen besten Anpassung hinzufüge. Irgendwelche Ideen?
Fred S
Hoppla, kleiner Fehler in Zeile 25 (sollte p_est (:, i) anstelle von p_est (:, 1) sein), aber selbst wenn ich behebe, dass die Parameterverteilungen immer noch wackelig aussehen: click
Fred S
1
Die Antwort wird in MATLAB festgelegt und überprüft. Jetzt geht es gut.
O_Devinyak
1
Neue Residuen für jede Anpassung - das war mein erstes Verständnis von Residuen-Bootstrap. Aber ich muss zugeben, dass verschiedene Quellen zu diesem Zweck Residuen verwenden, die zu den Originaldaten passen. Hier ist ein nettes Tutorial zum Bootstrap ( econ.pdx.edu/faculty/KPL/readings/mackinnon06.pdf ). Scheint, dass mein Ansatz falsch ist, während Ihre Implementierung richtig ist. Soll ich die angegebene Antwort löschen?
O_Devinyak
1
Vielen Dank für das Follow-up. IMHO, lassen Sie die Antwort für andere Benutzer mit der gleichen Frage. Ich fand, dass die Literatur (zumindest die, die mir zur Verfügung steht) zu diesem Thema nicht immer klar ist und ziemlich verwirrend sein kann.
Fred S
1

Um zu sehen, wie sich ein Algorithmus in Bezug auf Vorhersagegenauigkeit / mittleren quadratischen Fehler verhält, benötigen Sie wahrscheinlich den Efron-Gong-Bootstrap "Optimismus". Dies ist für die einfache Verwendung im R- rmsPaket implementiert. Siehe Funktionen ols, validate.ols, calibrate.

Frank Harrell
quelle