Residui del bootstrap: lo sto facendo bene?


10

Prima di tutto: da quello che ho capito, i residui del bootstrap funzionano come segue:

  1. Adatta il modello ai dati
  2. Calcola i residui
  3. Ricampiona i residui e aggiungili a 1.
  4. Adatta il modello al nuovo set di dati da 3.
  5. Ripetere i ntempi, ma aggiungere sempre i residui ricampionati all'adattamento da 1.

È corretto finora?


Quello che voglio fare è qualcosa di leggermente diverso:

Voglio stimare l'incertezza dei parametri e delle previsioni per un algoritmo che stima alcune variabili ambientali.

Quello che ho è una serie temporale priva di errori (da una simulazione) di quella variabile x_true, a cui aggiungo un po 'di rumore x_noise, al fine di generare un set di dati sintetico x. Provo quindi a trovare i parametri ottimali adattando il mio algoritmo con la somma dei quadrati sum((x_estimate - x_true)^2)(! Non x_estimate - x!) Come funzione oggettiva. Per vedere come funziona il mio algoritmo e creare campioni delle distribuzioni dei miei parametri, voglio ricampionare x_noise, aggiungerlo a x_true, adattare di nuovo il mio modello, sciacquare e ripetere. È un approccio valido per valutare l'incertezza dei parametri? Posso interpretare gli adattamenti ai set di dati avviati come boot boot come incertezza di previsione o devo seguire la procedura che ho pubblicato sopra?

/ modifica: penso di non aver chiarito cosa fa il mio modello. Pensalo essenzialmente come un metodo di de-noising. Non è un modello predittivo, è un algoritmo che tenta di estrarre il segnale sottostante di una serie temporale rumorosa di dati ambientali.

/ edit ^ 2: Per gli utenti MATLAB là fuori, ho scritto un esempio di regressione lineare rapida e sporca di ciò che intendo.

Questo è quello che credo sia il bootstrap "ordinario" dei residui (per favore correggimi se sbaglio): http://pastebin.com/C0CJp3d1

Questo è quello che voglio fare: http://pastebin.com/mbapsz4c


Sarà più chiaro se mostri il codice che hai fatto finora.
Metriche

In realtà non ho codificato nulla finora in termini di bootstrap. Il codice per il mio modello è piuttosto complesso, non ringrazio che sarebbe di aiuto. Ad esempio, possiamo supporre che il modello sia una procedura di livellamento come una media mobile, con la finestra mobile come unico parametro del modello. Ho una serie di misurazioni (sintetiche) nel tempo e aggiungo un errore (non necessariamente omoschedastico e normalmente distribuito) a quello. Voglio quindi stimare la finestra mobile che si avvicina al "vero" sottostante che conosco e voglio valutare l'incertezza avviando il mio errore sintetico. Questo aiuta?
Fred S

Ecco qualche pseudo codice MATLAB molto cattivo, forse aiuta a capire cosa mi piacerebbe fare: pastebin.com/yTRahzr5
Fred S

Mi dispiace Fred, non conosco Matlab. Si prega di contrassegnare come Matlab per ottenere input dagli utenti.
Metriche

2
Oh, la mia domanda non è davvero limitata a MATLAB (e questo non è proprio il codice MATLAB, è solo uno pseudo-codice basato sulla sintassi MATLAB per i for-loop e i commenti che non funzionerebbero comunque). Ma posso etichettarlo per ogni evenienza.
Fred S

Risposte:


8

Ecco l'algoritmo generale (semi-parametrico-bootstrap) in modo più dettagliato:

B


y=xβ+ϵ

ϵ^

  1. β^ϵ^
  2. ϵ^B
  3. yB=xβ^+ϵ^B
  4. yBxβ^B
  5. B

1

Non sono sicuro che la mia comprensione sia corretta. Ma ecco il mio suggerimento di modificare il codice ("ordinario bootstrap di residui", righe 28-34) in:

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  

L'idea è che ogni volta che si utilizzano i residui non dalla prima esecuzione, ma dal precedente adattamento bootstrap. Per quanto mi riguarda, tutto il resto sembra essere valido.

Questa è la versione rivista che è stata verificata in MATLAB. Sono stati corretti due errori.


Oh, beh, questo era nuovo per me. bsxfun è piuttosto complicato; ecco una nuova versione che utilizza la tua idea e dovrebbe essere un po 'più chiara. Tuttavia, ciò produce risultati piuttosto strani. Questo è il risultato del ricampionamento sempre dei residui del primo adattamento migliore e di aggiungerli allo stesso (la mia idea iniziale), e questo è ciò che accade se ricampionare i residui di ogni iterazione e li aggiungo a ogni nuovo adattamento migliore. Qualche idea?
Fred S

Spiacenti, piccolo errore nella riga 25 (dovrebbe essere p_est (:, i) invece di p_est (:, 1)), ma anche quando correggo che le distribuzioni dei parametri sembrano ancora traballanti: clic
Fred S

1
La risposta è fissa e controllata in MATLAB. Adesso va bene.
O_Devinyak,

1
Nuovi residui per ogni misura - questa è stata la mia prima comprensione del bootstrap residuo. Ma devo ammettere che fonti diverse stanno utilizzando residui adatti ai dati originali a tale scopo. Ecco un bel tutorial su bootstrap ( econ.pdx.edu/faculty/KPL/readings/mackinnon06.pdf ). Sembra che il mio approccio sia sbagliato mentre l'implementazione è corretta. Devo cancellare la risposta data?
O_Devinyak,

1
Grazie per il seguito. IMHO, lascia la risposta ad altri utenti con la stessa domanda. Ho scoperto che la letteratura (almeno ciò che è disponibile per me) non è sempre chiara su quell'argomento e può essere abbastanza confusa.
Fred S

1

Per vedere come si comporta un algoritmo in termini di precisione predittiva / errore quadratico medio, probabilmente è necessario il bootstrap "ottimismo" di Efron-Gong. Questo è implementato per un facile utilizzo nel rmspacchetto R. Vedere le sue funzioni ols, validate.ols, calibrate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.