Ich erstelle ein VAR-Modell, um den Preis eines Vermögenswerts zu prognostizieren, und möchte wissen, ob meine Methode statistisch fundiert ist, ob die von mir eingeschlossenen Tests relevant sind und ob weitere erforderlich sind, um eine zuverlässige Prognose auf Grundlage meiner Eingabevariablen zu gewährleisten.
Nachstehend ist mein aktueller Prozess zur Überprüfung der Granger-Kausalität und zur Vorhersage des ausgewählten VAR-Modells aufgeführt.
require("forecast")
require("vars")
#Read Data
da=read.table("VARdata.txt", header=T)
dac <- c(2,3) # Select variables
x=da[,dac]
plot.ts(x)
summary(x)
#Run Augmented Dickey-Fuller tests to determine stationarity and differences to achieve stationarity.
ndiffs(x[, "VAR1"], alpha = 0.05, test = c("adf"))
ndiffs(x[, "VAR2"], alpha = 0.05, test = c("adf"))
#Difference to achieve stationarity
d.x1 = diff(x[, "VAR1"], differences = 2)
d.x2 = diff(x[, "VAR2"], differences = 2)
dx = cbind(d.x1, d.x2)
plot.ts(dx)
#Lag optimisation
VARselect(dx, lag.max = 10, type = "both")
#Vector autoregression with lags set according to results of lag optimisation.
var = VAR(dx, p=2)
#Test for serial autocorrelation using the Portmanteau test
#Rerun var model with other suggested lags if H0 can be rejected at 0.05
serial.test(var, lags.pt = 10, type = "PT.asymptotic")
#ARCH test (Autoregressive conditional heteroscedasdicity)
arch.test(var, lags.multi = 10)
summary(var)
#Granger Causality test
#Does x1 granger cause x2?
grangertest(d.x2 ~ d.x1, order = 2)
#Does x2 granger cause x1?
grangertest(d.x1 ~ d.x2, order = 2)
#Forecasting
prd <- predict(var, n.ahead = 10, ci = 0.95, dumvar = NULL)
print(prd)
plot(prd, "single")
Ist diese Methode gut?
r
forecasting
modeling
var
Sie haben dies gerade gelesen
quelle
quelle
Antworten:
Ich denke, Sie haben es ziemlich richtig verstanden, aber beim Erstellen eines VAR-Modells stelle ich normalerweise sicher, dass ich die folgenden Schritte befolge:
1. Wählen Sie die Variablen aus
Dies ist der wichtigste Teil beim Erstellen Ihres Modells. Wenn Sie den Preis eines Vermögenswerts prognostizieren möchten, müssen Sie Variablen einbeziehen, die mit dem Mechanismus der Preisbildung zusammenhängen. Der beste Weg, dies zu tun, ist ein theoretisches Modell. Da Sie nicht erwähnt haben, was der Vermögenswert ist und welche anderen Variablen Sie in Ihr Modell aufgenommen haben, kann ich zu diesem Artikel nicht viel sagen. Eine Zusammenfassung der Vermögenswert-Preismodelle finden Sie hier .
2. Überprüfen Sie die Daten und nehmen Sie die richtigen Einstellungen vor
Nachdem Sie die Variablen ausgewählt haben, können Sie einige Anpassungen an den Daten vornehmen, um die Schätzung und Interpretation des Modells zu verbessern. Es ist nützlich, zusammenfassende Statistiken zu verwenden und einen Plot der Reihe anzuzeigen, um Ausreißer, fehlende Daten und andere seltsame Verhaltensweisen zu erkennen. Bei der Arbeit mit Preisdaten nehmen die Menschen normalerweise natürliche Protokolle, was eine varianzstabilisierende Transformation darstellt und auch eine gute Interpretation hat (Preisunterschiede in Protokollen werden kontinuierlich zu zusammengesetzten Renditen). Ich bin mir nicht sicher, ob Sie Protokolle erstellt haben, bevor Sie das Modell schätzen, aber es ist eine gute Idee, dies zu tun, wenn Sie mit Asset-Preisen arbeiten.
3. Überprüfen Sie, ob die Daten instationäre Komponenten enthalten
Jetzt können Sie mithilfe von Unit-Root-Tests prüfen, ob Ihre Serien stationär sind. Wenn Sie nur an Prognosen interessiert sind, wie von @JacobH angegeben, können Sie VAR in Ebenen ausführen, auch wenn Ihre Serien nicht stationär sind. Dann können Sie Ihren Standardfehlern jedoch nicht vertrauen, was bedeutet, dass Sie keine Rückschlüsse auf den Wert von ziehen können die Koeffizienten. Sie haben stationär mit dem ADF-Test getestet, der in diesen Anwendungen sehr häufig verwendet wird. Beachten Sie jedoch, dass Sie angeben sollten, ob Sie den Test ohne i) Konstante und ohne Trend ausführen möchten. ii) ein konstanter und kein Trend; und iii) eine Konstante und ein Trend. Normalerweise weisen Preisreihen stochastische Trends auf, sodass ein linearer Trend nicht genau ist. In diesem Fall können Sie die Spezifikation wählen. Ii. In Ihrem Code haben Sie die
ndiffs
Funktion des Prognosepakets. Ich bin nicht sicher, welche dieser drei Alternativen diese Funktion implementiert, um die Anzahl der Unterschiede zu berechnen (ich konnte sie in der Dokumentation nicht finden). Um Ihr Ergebnis zu überprüfen, können Sie dieur.df
Funktion im Paket "urca" verwenden:adf <- ur.df(x[, "VAR1"], type = "drift", lags = 10, selectlags = "AIC")
Beachten Sie, dass dieser Befehl den ADF-Test mit einer Konstanten und den vom AIC-Befehl ausgewählten Verzögerungen mit einer maximalen Verzögerung von 10 ausführt. Wenn Sie Probleme bei der Interpretation der Ergebnisse haben, sehen Sie sich diese Frage an . Wenn es sich bei der Reihe um I (1) handelt, verwenden Sie einfach die Differenz, die der fortlaufenden Verzinsung entspricht. Wenn der Test anzeigt, dass die Serien I (2) sind und Sie Zweifel haben, dass Sie andere Tests verwenden können, z. B. Phillips-Perron-Test (
PP.test
Funktion in R). Wenn alle Tests bestätigen, dass Ihre Serie I (2) ist (denken Sie daran, das Protokoll der Serie zu verwenden, bevor Sie die Tests ausführen), nehmen Sie den zweiten Unterschied, aber beachten Sie, dass sich Ihre Interpretation der Ergebnisse ändern wird, da Sie jetzt mit dem arbeiten Differenz der fortlaufenden Verzinsung. Die Preise von Vermögenswerten sind normalerweise I (1), da sie sich einem zufälligen Spaziergang nähern, was ein weißes Rauschen ist, wenn die erste Differenz angewendet wird.4. Wählen Sie die Reihenfolge des Modells
Dies kann mit gängigen Kriterien wie Akaike, Schwarz (BIC) und Hannan-Quinn erfolgen. Sie haben das mit der
VARselect
Funktion gemacht und das ist richtig, aber denken Sie daran, welches Kriterium Sie für Ihre Entscheidung verwendet haben. In der Regel weisen unterschiedliche Kriterien auf unterschiedliche Aufträge für den VAR hin.5. Überprüfen Sie, ob es integrierende Beziehungen gibt
Wenn alle Serien I (1) oder I (2) sind, sollten Sie vor dem Ausführen eines VAR-Modells in der Regel prüfen, ob es keine Kointegrationsbeziehungen zwischen den Serien gibt, insbesondere, wenn Sie eine Impulsantwortanalyse mit dem durchführen möchten Residuen. Dies können Sie mit dem Johansenn-Test oder dem Engle-Granger (nur für bivariate Modelle) durchführen. In R können Sie den Johansen-Test mit der
ca.jo
Funktion des Pakets "urca" ausführen. Beachten Sie, dass dieser Test auch andere Spezifikationen hat. Für Preisreihen verwende ich normalerweise den folgenden Code (wobeip
die Verzögerungslänge von Punkt 4 ist, ausgeführt mit den Reihen in Stufen):6. Schätzen Sie das Modell
Wenn Ihre Reihen nicht integriert sind, können Sie das Modell mit dem
VAR
Befehl wie in Ihrem Code beschrieben leicht abschätzen . Wenn die Reihen kointegriert sind, müssen Sie die langfristige Beziehung berücksichtigen, indem Sie ein Vektorfehlerkorrekturmodell mit dem folgenden Code schätzen (wobeik
die Reihenfolge der Kointegration gilt):7. Führen Sie Diagnosetests durch
Um zu testen, ob Ihr Modell gut spezifiziert ist, können Sie einen Test der seriellen Korrelation für die Residuen durchführen. In Ihrem Code haben Sie einen Portmanteau-Test mit der
serial.test
Funktion verwendet. Ich habe diese Funktion noch nie benutzt, finde sie aber in Ordnung. Im Paket MTS ist auch eine multivariate Version des Ljung-Box-Tests implementiert, die Sie mit der Funktion ausführen könnenmq
.8. Machen Sie Vorhersagen
Wenn Sie sicher sind, dass Ihr Modell gut spezifiziert ist, können Sie die
predict
Funktion wie in Ihrem Code verwenden. Sie können sogar Impulsantwortfunktionen zeichnen, um zu überprüfen, wie die Variablen mit derirf
Funktion auf einen bestimmten Schock reagieren .9. Vorhersagen auswerten
Sobald Sie Ihre Vorhersagen getroffen haben, müssen Sie diese auswerten und mit anderen Modellen vergleichen. Einige Methoden zur Bewertung der Genauigkeit von Vorhersagen finden Sie hier. Hierzu ist es jedoch entscheidend, dass Sie Ihre Serie in ein Training und ein Testset unterteilen, wie im Link erläutert.
quelle
predict
. Größere Codeteile können als Code formatiert werden, indem Sie den Text auswählen und oben im Editorfenster auf die Schaltfläche "Anführungszeichen" klicken.Ich dachte, ich würde Regis A Ely eine sehr nette Antwort hinzufügen. Seine Antwort ist nicht falsch, aber die Verwendung einer VAR für die Vorhersage unterscheidet sich von der Verwendung einer VAR für andere VAR-Typen (z. B. IRF, FEVD, Historical Decomp. Usw.). Infolgedessen wirken sich einige der von Regis A Ely beschriebenen Schritte in einigen Fällen negativ auf Ihre Prognose aus.
Haftungsausschluss:
Wenn ich mich auf instationäre Daten beziehe, meine ich, dass die Serie einen stochastischen Trend enthält. Wenn die Daten einen zeitlichen / saisonalen Trend aufweisen, müssen sie entsprechend gefiltert werden.
Zuerst
Im Allgemeinen besteht in einem uneingeschränkten VAR keine Notwendigkeit, sich über eine falsche Beziehung Gedanken zu machen. Eine falsche Regression tritt auf, wenn Sie eine instationäre Reihe (Y) auf eine andere instationäre Reihe (X) zurückführen und beide Reihen nicht zusammengeführt werden. Wenn Sie jedoch Y auf X sowie Verzögerungen von Y zurückführen, ist die Regression nicht störend, da die Einbeziehung der Verzögerung Y sicherstellt, dass die Fehler stationär sind. Mit anderen Worten, Verzögerungen von Y nehmen die Variation auf, die zuvor fälschlicherweise X zugewiesen wurde. Da eine uneingeschränkte VAR im Wesentlichen ein System von ARDL-Regressionen ist, bei denen jede Gleichung die gleiche Anzahl von Verzögerungen und Regressoren enthält, sollte klar sein, dass es sich um eine falsche Regression handelt daher dürfte das kein problem sein. Anders gesagt, wenn Ihre Daten alle I (1) sind, können Sie eine VAR ausführen, unabhängig davon, ob sie mitintegriert sind oder nicht. VECM ist nur erforderlich, wenn Sie die Beziehung zwischen Variablen für kurze und lange Zeiträume sowie für die Ko-Integration modellieren und identifizieren möchten. Die Frage ist nun, ob Sie die VAR in Ebenen oder in ersten Unterschieden ausführen.
Zweite
Bei der Vorhersage ist es nicht erforderlich, zuerst I (1) -Daten zu differenzieren. Sie können, wenn Sie möchten, dachte eine überraschend große Anzahl von Praktizierenden, dies nicht tun. Denken Sie daran, dass wir bei instationären Reihen immer noch einen konsistenten Schätzer erhalten können. Für eine Regression mit einer einzelnen Verzögerung der abhängigen Variablen ist dies intuitiv. Wenn eine Serie einer zufälligen Wanderung folgt (dh nicht stationär ist), wissen wir, dass die beste Schätzung, wo sie sich in der nächsten Periode befindet, genau dort ist, wo sie die letzte Periode war (dh Beta ist 1). Die Standardfehler von Schätzungen, die aus Modellen mit instationären Daten abgeleitet wurden, sind jedoch unterschiedlich, da sich die Varianz der Schätzung genau genommen der Unendlichkeit nähert, wenn sich T der Unendlichkeit nähert. Dies ist jedoch kein Problem für die Prognose. Die Vorhersage ist im Wesentlichen eine bedingte Erwartung und stützt sich daher nur auf die Parameterschätzungen Ihres Modells und nicht auf Standardfehler. Darüber hinaus werden Vorhersageintervalle Ihrer Vorhersage entweder direkt aus Ihren Fehlern, durch Bootstrapping-Fehler oder, wenn Sie über empirische Vorhersageintervalle (mein Favorit!) Über viele Daten verfügen, durch instationäre Daten nicht beeinflusst weil wieder Ihre Fehler stationär sein werden, wie in unserer obigen Diskussion über falsche Regression beschrieben.
Warum kümmert es mich?
Der ADF-Test hat eine geringe Leistung, insbesondere wenn die Serie nahe an der Einheitswurzel liegt, dies jedoch nicht ist. In einem anderen Fall wird der ADF-Test fälschlicherweise behaupten, dass eine Serie nicht stationär ist, obwohl dies tatsächlich nicht der Fall ist.
Angenommen, Ihr ADF-Test stellt fälschlicherweise sicher, dass die Serie nicht stationär ist. Wenn Sie alle notwendigen Transformationen vornehmen und ein VECM schätzen, wird Ihre Prognose falsch sein, da Ihr Modell falsch ist. Dies ist der Grund, warum Menschen in Ebenen prognostizieren.
Was ist mit Granger-Kausalität ???
Sie können den GC sogar mit einem VAR in Stufen testen, wenn die Daten I (1) sind. Ich weiß, das hört sich verrückt an. Wir wissen, dass Inferenz mit instationären Daten normalerweise nicht möglich ist. Es ist jedoch möglich, gemeinsame Hypothesen, z. B. GC, zu testen. Dies wird in Toda und Yamamoto (1995) gezeigt, die sich auf Sims, Stock und Watson (1990) stützen. Eine Anwendung finden Sie unter http://davegiles.blogspot.com/2011/04/testing-for-granger-causality.html .
Letztes Ding
Wenn Sie Ihre VAR jedoch nicht für Prognosen verwenden möchten, seien Sie vorsichtig. Ein VAR in Ebenen mit instationären und co-integrierten Reihen kann zu seltsamen Ergebnissen führen. Streng genommen ist die Darstellung des gleitenden Durchschnitts der VAR beispielsweise nicht vorhanden, da die Parametermatrix nicht invertierbar ist. Trotz dieser Tatsache kann immer noch eine IRF erhalten werden. Inferenz ist auch nicht möglich (gemeinsame Hypothesen können wie oben diskutiert getestet werden).
Sorgen Sie sich auch um kleine Proben. Alles, was ich besprochen habe, funktioniert in großen Samples gut, aber in kleinen Samples kann es verrückt werden. Dies gilt insbesondere für GC mit I (1) -Daten.
quelle