Come utilizzare DLM con il filtro Kalman per le previsioni


19

Qualcuno potrebbe guidarmi attraverso un esempio su come utilizzare il filtro DLM Kalman in R in una serie temporale. Supponiamo di avere questi valori (valori trimestrali con stagionalità annuale); come useresti DLM per prevedere i valori successivi? E a proposito, ho abbastanza dati storici (qual è il minimo)?

89  2009Q1  
82  2009Q2  
89  2009Q3  
131 2009Q4  
97  2010Q1  
94  2010Q2  
101 2010Q3  
151 2010Q4  
100 2011Q1  
?   2011Q2

Sto cercando un tipo di risposta passo-passo in stile ricettario in codice R. La precisione della previsione non è il mio obiettivo principale, voglio solo imparare la sequenza di codice che mi dà un numero per il 2011Q2, anche se non ho abbastanza dati.


3
Questo potrebbe ottenere risposte migliori su stats.stackexchange.com
Joshua Ulrich

Bump ... Non riesco ancora a capire come farlo. Qualche acquirente a rispondere al post originale?
datayoda,

2
Con un DLM non è come un libro di cucina come si potrebbe desiderare. Prenderei la risposta di RockScience (la vignetta DLM) e la esaminerei. Un DLM è più simile alla progettazione di un programma rispetto ad altre tecniche che richiedono semplicemente l'inserimento di alcuni dati e la modifica di alcuni parametri. In definitiva, stai progettando una serie di array che implementano qualcosa come un modello Markov nascosto, e il dlmpacchetto lo rende il più semplice possibile.
Wayne,

Hai una soluzione al tuo problema? Sto cercando una soluzione a un simile tipo di problema di timeseries ma non riesco a trovare una soluzione.

Hai esaminato il documento suggerito da @RockScience? Hai guardato il dlmpacchetto? Come ho detto nella mia risposta, i DLM sono molto più simili alla creazione di un programma che all'inserimento di alcune variabili in una chiamata di funzione. datayoda non ha mai accettato una risposta, quindi non sono sicuro che abbiano superato questa osservazione.
Wayne,

Risposte:



16

I DLM sono fantastici, ma non sono così semplici come, per esempio, ARIMA o altri metodi. In altri metodi, inserisci i tuoi dati e poi modifica alcuni parametri dell'algoritmo, magari facendo riferimento a vari sistemi diagnostici per guidare le tue impostazioni.

Con un DLM, stai creando una macchina spaziale statale, che consiste in diverse matrici che praticamente implementano qualcosa come un modello Markov nascosto. Alcuni pacchetti ( sspirpenso, tra gli altri) prevedono che tu capisca il concetto e cosa fanno le matrici. Consiglio vivamente di iniziare con il dlmpacchetto e, come consiglia @ RockScience, di scorrere la vignetta.

Con dlmfarai sostanzialmente diversi passaggi:

  1. Quali tipi di componenti descrivono la mia serie? Una tendenza? Stagionalità? Variabili esogene? Utilizzerai dlmstrumenti come dlmModPolyl'implementazione di questi componenti, usando l' +operatore per unirli in un unico modello.

  2. Creare una subroutine R che accetta tutti i parametri richiesti da questo modello, crea i componenti con tali parametri, quindi li somma e restituisce il modello risultante.

  3. Utilizzare dlmMLEper eseguire una ricerca / ottimizzazione per trovare i parametri appropriati (utilizzando MLE, che è fondamentalmente l'ottimizzazione, con le insidie ​​che possono verificarsi nell'ottimizzazione). dlmMLEchiama ripetutamente la subroutine R con parametri candidati per creare modelli, quindi li verifica.

  4. Crea il tuo modello finale, usando la subroutine R che hai creato più i parametri che hai trovato nel passaggio 3.

  5. Filtra i tuoi dati con dlmFilter, quindi forse liscia con dlmSmooth.

  6. Se si utilizza dlmModRego si fa qualcosa che fa sì che il modello abbia parametri di variazione temporale, non è possibile utilizzare dlmForecastper prevedere le serie. Se finisci con un modello a variazione temporale, ti consigliamo di compilare i tuoi dati di input con NA e lasciare che dlmFiltercompili i NA per te (previsioni di un uomo povero), poiché dlmForecastnon funziona con parametri variabili nel tempo.

  7. Se vuoi esaminare i componenti individualmente (ad esempio l'andamento, separatamente da quello stagionale), dovrai capire le matrici e cosa c'è in ogni colonna, oltre a capire un po 'come dlmmetterli insieme (l'ordine conta!).

C'è un altro pacchetto, il cui nome mi sfugge, che tenta di creare un front-end in grado di utilizzare diversi di questi pacchetti (incluso dlmcome back-end). Sfortunatamente, non l'ho mai fatto funzionare bene, ma potrei essere solo io.

Consiglio vivamente di ottenere un libro sui DLM. Ne ho presi un paio e ho giocato molto dlmper arrivare dove sono, e non sono affatto l'esperto.


Grazie Wayne, penso che il mio caso sia abbastanza semplice in un modo in cui non ho individuato tendenze chiare o stagionalità nell'ispezione visiva. (Tuttavia, se siete a conoscenza di eventuali test in R, per favore fatemi sapere, cercherò di eseguirli). Il mio problema è che non so come compilare argomenti come (FF, V, GG, W, m0, C0, dV ecc.) Nelle funzioni dlm per i miei dati? Questo è il problema principale per me. Se ho una serie di dati bivariati (y = X1 + X2) ad es. (Prezzo = domanda + offerta), come potrei fare per calcolare questi argomenti per i miei dati? FF, V, GG, W, m0, C0, dV ecc. Richiesti nelle funzioni
dlm

1
@nclfinance Leggi le FAQ e non trattare questo luogo come un forum.

@nclfinance: esamina dlmla vignetta del pacchetto. Imparerai quello che devi sapere. Ecco perché lo consiglio dlm, perché non crei FF, ecc., Te stesso.
Wayne,

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.