Myślę, że masz rację, ale budując model VAR, zwykle upewniam się, że wykonuję następujące kroki:
1. Wybierz zmienne
To najważniejsza część budowania modelu. Jeśli chcesz prognozować cenę środka trwałego, musisz uwzględnić zmienne związane z mechanizmem kształtowania ceny. Najlepszym sposobem na to jest zastosowanie modelu teoretycznego. Ponieważ nie wspomniał, co jest atutem i jakie są inne zmienne zawarte w modelu Naprawdę nie mogę wiele powiedzieć o tej pozycji, ale można znaleźć podsumowanie modeli wyceny aktywów w tutaj .
2. Sprawdź dane i dokonaj odpowiednich korekt
Po wybraniu zmiennych możesz wprowadzić pewne zmiany w danych, które poprawią oszacowanie i interpretację modelu. Przydatne jest użycie statystyk podsumowujących i obejrzenie wykresu serii w celu wykrycia wartości odstających, brakujących danych i innych dziwnych zachowań. Podczas pracy z danymi cenowymi ludzie zwykle biorą dzienniki naturalne, co jest transformacją stabilizującą wariancję, a także ma dobrą interpretację (różnica cen w dziennikach staje się stale złożonymi zwrotami). Nie jestem pewien, czy wziąłeś dzienniki przed oszacowaniem modelu, ale warto to zrobić, jeśli pracujesz z cenami aktywów.
3. Sprawdź, czy dane zawierają składniki niestacjonarne
Teraz możesz użyć testów root root, aby sprawdzić, czy seria jest nieruchoma. Jeśli interesuje Cię tylko prognozowanie, jak zauważył @JacobH, możesz uruchamiać VAR na poziomach, nawet jeśli Twoja seria nie jest stacjonarna, ale wtedy nie można ufać standardowym błędom, co oznacza, że nie można wnioskować o wartości współczynniki. Testowałeś stacjonarnie za pomocą testu ADF, który jest bardzo często stosowany w tych aplikacjach, ale pamiętaj, że powinieneś określić, czy chcesz uruchomić test z i) bez stałej i bez trendu; ii) stały i bez trendu; oraz iii) stała i trend. Zwykle szeregi cen mają tendencje stochastyczne, więc trend liniowy nie będzie dokładny. W takim przypadku możesz wybrać specyfikację ii. W swoim kodzie użyłeśndiffs
funkcja pakietu prognozy. Nie jestem pewien, którą z tych trzech alternatyw stosuje ta funkcja w celu obliczenia liczby różnic (nie mogłem tego znaleźć w dokumentacji). Aby sprawdzić wynik, możesz użyć ur.df
funkcji z pakietu „urca”:
adf <- ur.df(x[, "VAR1"], type = "drift", lags = 10, selectlags = "AIC")
Zauważ, że to polecenie uruchomi test ADF ze stałą, a opóźnienia wybrane przez polecenie AIC, z maksymalnym opóźnieniem wynoszącym 10. Jeśli masz problemy z interpretacją wyników, spójrz na to pytanie . Jeśli szeregami są I (1), po prostu użyj różnicy, która będzie równa ciągłym składanym zwrotom. Jeśli test wykaże, że szereg to I (2) i masz wątpliwości, czy możesz użyć innych testów, np. Testu Phillipsa-Perrona (PP.test
funkcja w R). Jeśli wszystkie testy potwierdzą, że twoja seria to I (2) (pamiętaj, aby użyć dziennika serii przed uruchomieniem testów), weź drugą różnicę, ale pamiętaj, że twoja interpretacja wyników zmieni się, ponieważ teraz pracujesz z różnica stale składanych zwrotów. Ceny aktywów wynoszą zwykle I (1), ponieważ są one zbliżone do przypadkowego spaceru, który jest białym szumem przy zastosowaniu pierwszej różnicy.
4. Wybierz kolejność modelu
Można tego dokonać za pomocą powszechnie stosowanych kryteriów, takich jak Akaike, Schwarz (BIC) i Hannan-Quinn. Zrobiłeś to za pomocą VARselect
funkcji i to prawda, ale pamiętaj, jakie kryterium zastosowałeś przy podejmowaniu decyzji. Zwykle różne kryteria wskazują różne zamówienia na VAR.
5. Sprawdź, czy istnieją relacje kointegrujące
Jeśli wszystkie serie to I (1) lub I (2), przed uruchomieniem modelu VAR zwykle dobrze jest sprawdzić, czy nie ma żadnych relacji kointegracji między seriami, szczególnie jeśli chcesz przeprowadzić analizę odpowiedzi impulsowej za pomocą pozostałości. Możesz to zrobić za pomocą testu Johansenna lub Engle-Granger (tylko dla modeli dwuwymiarowych). W R możesz uruchomić test Johansena z ca.jo
funkcją pakietu „urca”. Pamiętaj, że ten test ma również inne specyfikacje. W przypadku serii cen zwykle używam następującego kodu (gdzie p
jest opóźnieniem dla pozycji 4, wykonywanym z serią w poziomach):
jo_eigen <- ca.jo(x, type = "eigen", ecdet = "const", K = p)
jo_trace <- ca.jo(x, type = "trace", ecdet = "const", K = p)
6. Oszacuj model
Jeśli twoje serie nie są zintegrowane, możesz łatwo oszacować model za pomocą VAR
polecenia, tak jak w kodzie. W przypadku, gdy serie są zintegrowane, należy wziąć pod uwagę relację długoterminową, szacując model wektorowej korekcji błędów za pomocą następującego kodu (gdzie k
jest kolejność kointegracji):
vecm <- cajorls(joeigen, r = k)
7. Uruchom testy diagnostyczne
Aby sprawdzić, czy Twój model jest dobrze określony, możesz uruchomić test szeregowej korelacji reszt. W swoim kodzie użyłeś testu Portmanteau z serial.test
funkcją. Nigdy nie korzystałem z tej funkcji, ale myślę, że jest OK. Istnieje również wielowymiarowa wersja testu Ljung-Box zaimplementowana w pakiecie MTS, którą można uruchomić za pomocą tej funkcji mq
.
8. Dokonuj prognoz
Po upewnieniu się, że Twój model jest dobrze określony, możesz użyć predict
funkcji tak, jak w kodzie. Możesz nawet wykreślić funkcje odpowiedzi impulsowej, aby sprawdzić, jak zmienne reagują na określony wstrząs za pomocą tej irf
funkcji.
9. Oceń prognozy
Po dokonaniu prognoz musisz je ocenić i porównać z innymi modelami. Niektóre metody oceny dokładności prognoz można znaleźć tutaj , ale w tym celu kluczowe jest podzielenie serii na zestaw szkoleniowy i testowy, jak wyjaśniono w linku.