Resztki ładowania początkowego: Czy robię to dobrze?

10

Po pierwsze: z tego, co zrozumiałem, resztki ładowania początkowego działają w następujący sposób:

  1. Dopasuj model do danych
  2. Oblicz resztki
  3. Ponownie próbkuj resztki i dodaj je do 1.
  4. Dopasuj model do nowego zestawu danych od 3.
  5. Powtarzaj nczasy, ale zawsze dodawaj ponownie próbkowane reszty do dopasowania od 1.

Czy to jak dotąd poprawne?


To, co chcę zrobić, to coś nieco innego:

Chcę oszacować niepewność parametru i prognozy dla algorytmu, który szacuje pewną zmienną środowiskową.

To, co mam, to bezbłędne szeregi czasowe (z symulacji) tej zmiennej x_true, do których dodaję trochę hałasu x_noise, w celu wygenerowania syntetycznego zestawu danych x. Następnie próbuję znaleźć optymalne parametry, dopasowując mój algorytm do sumy kwadratów sum((x_estimate - x_true)^2)(! Nie x_estimate - x!) Jako funkcji celu. Aby zobaczyć, jak działa mój algorytm i utworzyć próbki rozkładów parametrów, chcę ponownie próbkować x_noise, dodać go x_true, ponownie dopasować do mojego modelu, przepłukać i powtórzyć. Czy to prawidłowe podejście do oceny niepewności parametrów? Czy mogę zinterpretować pasowania do zestawów danych po uruchomieniu jako niepewność prognozowania, czy też muszę postępować zgodnie z procedurą opisaną powyżej?

/ edit: Myślę, że tak naprawdę nie wyjaśniłem, co robi mój model. Pomyśl o tym jako o czymś w rodzaju metody usuwania szumów. To nie jest model predykcyjny, to algorytm, który próbuje wyodrębnić podstawowy sygnał hałaśliwych szeregów czasowych danych środowiskowych.

/ edit ^ 2: Dla użytkowników MATLAB-a tam zapisałem przykład szybkiego i brudnego regresji liniowej, co mam na myśli.

Oto, co uważam za „zwykłe” ładowanie resztkowe (popraw mnie, jeśli się mylę): http://pastebin.com/C0CJp3d1

Oto, co chcę zrobić: http://pastebin.com/mbapsz4c

Fred S.
źródło
Będzie to wyraźniejsze, jeśli pokażesz kod, który zrobiłeś do tej pory.
Metryki
Do tej pory nie kodowałem niczego w zakresie ładowania początkowego. Kod mojego modelu jest dość złożony, nie dziękuję, że to pomogłoby. Jako przykład możemy założyć, że model jest procedurą wygładzania, jak ruchoma średnia, z ruchomym oknem jako jedynym parametrem modelu. Mam szereg (syntetycznych) pomiarów w czasie i dodaję do tego błąd (niekoniecznie homoskedastyczny i normalnie rozłożony). Następnie chcę oszacować ruchome okno, które jest najbliższe leżącemu u podstaw „prawdziwemu”, który znam i chcę ocenić niepewność, ładując mój błąd syntetyczny. To pomaga?
Fred S
Oto kilka bardzo złych pseudo-kodów w stylu MATLAB, może to pomaga zrozumieć, co chciałbym zrobić: pastebin.com/yTRahzr5
Fred S
Przepraszam Fred, nie znam Matlaba. Proszę oznaczyć jako Matlab, aby uzyskać informacje od użytkowników.
Metryki
2
Och, moje pytanie tak naprawdę nie ogranicza się do MATLAB (a to nie jest tak naprawdę kod MATLAB, to tylko pseudo-kod oparty na składni MATLAB-a dla pętli for i komentarzy, które i tak by nie działały). Ale mogę to oznaczyć na wszelki wypadek.
Fred S

Odpowiedzi:

8

Oto bardziej szczegółowo ogólny algorytm (półparametryczny bootstrap):

B = liczba ładowań początkowych

model:
y=xβ+ϵ

niech będzie pozostałościąϵ^

  1. Uruchom regresję i uzyskaj estymator (y) i residuals .β^ϵ^
  2. Ponownie próbkuj resztki z wymianą i uzyskaj wektor resztkowy bootstrap .ϵ^B
  3. Uzyskaj zmienną zależną od ładowania początkowego, mnożąc estymator (y) z (1) przez oryginalne regresory i dodając resztę ładowania początkowego: .yB=xβ^+ϵ^B
  4. Uruchom regresję ze zmiennymi zależnymi od ładowania początkowego i regresorami, co daje estymator ładowania początkowego, tzn. na , co daje .yBxβ^B
  5. Powtórz procedurę razy, wracając do (2).B
Sweetbabyjesus
źródło
1

Nie jestem pewien, czy moje rozumowanie jest prawidłowe. Ale oto moja sugestia, aby zmodyfikować kod („zwykłe ładowanie resztek”, wiersze 28–34) w:

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  

Chodzi o to, że za każdym razem, gdy używasz resztek, nie z pierwszego uruchomienia, ale z poprzedniego dopasowania bootstrap. Jeśli chodzi o mnie, wszystkie inne wydają się ważne.

To jest poprawiona wersja, która została sprawdzona w MATLAB. Naprawiono dwa błędy.

O_Devinyak
źródło
No cóż, to było dla mnie nowe. bsxfun jest nieco skomplikowane; oto nowa wersja, która wykorzystuje Twój pomysł i powinna być nieco jaśniejsza. Daje to jednak nieco dziwne wyniki. To jest wynikiem zawsze resampling pozostałości pierwszego najlepszego dopasowania i dodać je do tej samej (mojego pomysłu), i to jest to, co się stanie, gdy resample z resztek każdej iteracji i dodać je do każdego nowego najlepszego dopasowania. Jakieś pomysły?
Fred S
Ups, mały błąd w wierszu 25 (powinien być p_est (:, i) zamiast p_est (:, 1)), ale nawet gdy naprawię, że rozkłady parametrów nadal wyglądają na niepewne: kliknij
Fred S
1
Odpowiedź jest ustalona i sprawdzona w MATLAB. Teraz idzie dobrze.
O_Devinyak
1
Nowe resztki dla każdego dopasowania - to było moje pierwsze zrozumienie resztkowego bootstrapu. Ale muszę przyznać, że różne źródła wykorzystują w tym celu resztki dopasowania do oryginalnych danych. Oto fajny samouczek na temat ładowania początkowego ( econ.pdx.edu/faculty/KPL/readings/mackinnon06.pdf ). Wydaje się, że moje podejście jest błędne, dopóki Twoje wdrożenie jest prawidłowe. Czy powinienem usunąć podaną odpowiedź?
O_Devinyak
1
Dzięki za kontynuację. IMHO, pozostaw odpowiedź innym użytkownikom z tym samym pytaniem. Odkryłem, że literatura (przynajmniej ta, która jest dla mnie dostępna) nie zawsze jest jasna na ten temat i może być dość myląca.
Fred S
1

Aby zobaczyć, jak działa algorytm pod względem dokładności predykcyjnej / błędu średniokwadratowego, prawdopodobnie potrzebujesz bootstrapu „optymizmu” Efron-Gonga. Jest to zaimplementowane dla łatwego użycia w rmspakiecie R. Zobacz swoje funkcje ols, validate.ols, calibrate.

Frank Harrell
źródło