Penso che tu abbia capito bene, ma quando costruisco un modello VAR, di solito mi assicuro di seguire questi passaggi:
1. Seleziona le variabili
Questa è la parte più importante della costruzione del tuo modello. Se si desidera prevedere il prezzo di una risorsa, è necessario includere le variabili correlate al meccanismo di formazione del prezzo. Il modo migliore per farlo è attraverso un modello teorico. Dal momento che non hai menzionato qual è l'asset e quali sono le altre variabili che hai incluso nel tuo modello, non posso davvero dire molto su questo articolo, ma puoi trovare un riepilogo dei modelli di prezzi degli asset qui .
2. Controllare i dati e apportare le modifiche appropriate
Dopo aver selezionato le variabili, è possibile apportare alcune modifiche ai dati che miglioreranno la stima e l'interpretazione del modello. È utile utilizzare statistiche riassuntive e visualizzare un grafico della serie per rilevare valori anomali, dati mancanti e altri comportamenti strani. Quando si lavora con i dati sui prezzi, le persone di solito prendono registri naturali, che è una trasformazione stabilizzante la varianza e ha anche una buona interpretazione (la differenza di prezzo nei registri diventa rendimenti composti costantemente). Non sono sicuro se hai preso i registri prima di stimare il modello, ma è una buona idea farlo se stai lavorando con i prezzi degli asset.
3. Controllare se i dati contengono componenti non stazionari
Ora puoi usare i test radice dell'unità per verificare se le tue serie sono stazionarie. Se sei interessato solo alla previsione, come notato da @JacobH, puoi eseguire VAR a livelli anche quando le tue serie sono non stazionarie, ma quindi i tuoi errori standard non possono essere considerati attendibili, il che significa che non puoi fare deduzione sul valore di i coefficienti. Hai provato stazionario usando il test ADF, che è molto comunemente usato in queste applicazioni, ma tieni presente che dovresti specificare se vuoi eseguire il test con i) nessuna costante e nessuna tendenza; ii) una tendenza costante e assente; e iii) una costante e una tendenza. Di solito le serie di prezzi hanno tendenze stocastiche, quindi una tendenza lineare non sarà accurata. In questo caso è possibile scegliere la specifica ii. Nel tuo codice hai usato ilndiffs
funzione del pacchetto di previsione. Non sono sicuro di quale di queste tre alternative sia implementata questa funzione per calcolare il numero di differenze (non sono riuscito a trovarlo nella documentazione). Per verificare il risultato, potresti voler utilizzare la ur.df
funzione nel pacchetto "urca":
adf <- ur.df(x[, "VAR1"], type = "drift", lags = 10, selectlags = "AIC")
Si noti che questo comando eseguirà il test ADF con una costante e i ritardi selezionati dal comando AIC, con un ritardo massimo di 10. Se si riscontrano problemi nell'interpretazione dei risultati basta guardare questa domanda . Se le serie sono I (1) basta usare la differenza, che sarà uguale ai rendimenti composti continuamente. Se il test indica che le serie sono I (2) e non si è sicuri che è possibile utilizzare altri test, ad esempio il test Phillips-Perron (PP.test
funzione in R). Se tutti i test confermano che le tue serie sono I (2) (ricorda di utilizzare il registro delle serie prima di eseguire i test), prendi la seconda differenza, ma nota che la tua interpretazione dei risultati cambierà, dato che ora stai lavorando con il differenza dei rendimenti costantemente composti. I prezzi delle attività sono generalmente I (1) poiché sono vicini a una camminata casuale, che è un rumore bianco quando si applica la prima differenza.
4. Seleziona l'ordine del modello
Questo può essere fatto con criteri comunemente usati come Akaike, Schwarz (BIC) e Hannan-Quinn. L'hai fatto con la VARselect
funzione ed è giusto, ma ricorda qual è il criterio che hai usato per prendere la tua decisione. Di solito criteri diversi indicano ordini diversi per il VAR.
5. Controllare se ci sono relazioni di cointegrazione
Se tutte le tue serie sono I (1) o I (2), prima di eseguire un modello VAR, di solito è una buona idea verificare se non vi sono relazioni di cointegrazione tra le serie, specialmente se si desidera effettuare un'analisi della risposta all'impulso con residui. Puoi farlo usando il test Johansenn o Engle-Granger (solo per i modelli bivariati). In R puoi eseguire il test Johansen con la ca.jo
funzione del pacchetto "urca". Si noti che questo test ha anche diverse specifiche. Per le serie di prezzi di solito uso il seguente codice (dove p
è la lunghezza di ritardo dell'articolo 4, eseguita con la serie in livelli):
jo_eigen <- ca.jo(x, type = "eigen", ecdet = "const", K = p)
jo_trace <- ca.jo(x, type = "trace", ecdet = "const", K = p)
6. Stimare il modello
Se le tue serie non sono cointegrate, puoi facilmente stimare il modello con il VAR
comando, come fatto nel tuo codice. Nel caso in cui le serie siano cointegrate, è necessario considerare la relazione a lungo termine stimando un modello di correzione errori vettoriale con il seguente codice (dove si k
trova l'ordine di cointegrazione):
vecm <- cajorls(joeigen, r = k)
7. Eseguire test diagnostici
Per verificare se il modello è ben specificato, è possibile eseguire un test di correlazione seriale sui residui. Nel tuo codice hai usato un test Portmanteau con la serial.test
funzione. Non ho mai usato questa funzione ma penso che sia OK. Esiste anche una versione multivariata del test Ljung-Box implementata nel pacchetto MTS che è possibile eseguire con la funzionemq
.
8. Fai previsioni
Dopo aver verificato che il modello è ben specificato, è possibile utilizzare la predict
funzione come nel codice. È anche possibile tracciare le funzioni di risposta all'impulso per verificare come le variabili rispondono a un determinato shock utilizzando la irf
funzione.
9. Valuta le previsioni
Una volta effettuate le previsioni, è necessario valutarle e confrontarle con altri modelli. Alcuni metodi per valutare l'accuratezza delle previsioni sono disponibili qui , ma per fare ciò è fondamentale dividere le serie in una formazione e un set di test, come spiegato nel collegamento.