Buduję model VAR do prognozowania ceny aktywów i chciałbym wiedzieć, czy moja metoda jest statystycznie solidna, czy testy, które podałem, są odpowiednie i czy potrzebne są dalsze, aby zapewnić wiarygodną prognozę na podstawie moich zmiennych wejściowych.
Poniżej znajduje się mój bieżący proces sprawdzania przyczynowości Grangera i prognozowania wybranego modelu VAR.
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")
Czy ta metoda brzmi?
r
forecasting
modeling
var
właśnie to przeczytałeś
źródło
źródło
Odpowiedzi:
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 (gdziep
jest opóźnieniem dla pozycji 4, wykonywanym z serią w poziomach):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 (gdziek
jest kolejność kointegracji):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 funkcjimq
.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ą tejirf
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.
źródło
predict
. Większe fragmenty kodu można sformatować jako kod, zaznaczając tekst i klikając przycisk „cudzysłowy” u góry okna edytora.Pomyślałem, że dodam do Regis A Ely bardzo ładną odpowiedź. Jego odpowiedź nie jest zła, ale używanie VAR do prognozowania różni się od używania VAR do robienia innych rzeczy typu VAR (tj. IRF, FEVD, rozkład historyczny itp.). W związku z tym niektóre kroki przedstawione przez Regis A Ely w niektórych przypadkach negatywnie wpłyną na twoją prognozę.
Zrzeczenie się:
Kiedy mówię o danych niestacjonarnych, mam na myśli, że seria zawiera trend stochastyczny. Jeśli dane mają trend czasowy / sezonowy, należy je odpowiednio filtrować.
Pierwszy
Ogólnie rzecz biorąc, w nieograniczonej VAR nie trzeba się martwić o fałszywy związek. Fałszywa regresja występuje, gdy regresujesz niestacjonarną serię (Y) na innej niestacjonarnej serii (X) i obie serie nie są zintegrowane. Jeśli jednak regresujesz Y na X, a także na opóźnienia Y, regresja nie będzie fałszywa, ponieważ włączenie opóźnienia Y gwarantuje, że błędy będą nieruchome. Innymi słowy, opóźnienia Y wychwytują odmianę, która poprzednio została błędnie przypisana do X. Ponieważ nieograniczony VAR jest zasadniczo systemem regresji ARDL, w którym każde równanie zawiera tę samą liczbę opóźnień i regresorów, powinno być jasne, że fałszywa regresja jest dlatego raczej nie będzie stanowić problemu. Mówiąc inaczej, jeśli twoje dane to wszystko I (1), niezależnie od tego, czy nie są one zintegrowane, możesz uruchomić VAR. VECM są niezbędne tylko wtedy, gdy chcesz zarówno modelować, jak i identyfikować relacje między zmiennymi w krótkim i długim okresie / kointegracji. Pytanie brzmi teraz, czy należy uruchamiać VAR na poziomach, czy na pierwszych różnicach.
druga
Podczas prognozowania nie trzeba najpierw różnicować danych I (1). Możesz, jeśli chcesz, pomyślał zaskakująco wielu praktykujących. Pamiętaj, że kiedy mamy serie niestacjonarne, nadal możemy uzyskać spójny estymator. Dla regresji z pojedynczym opóźnieniem zmiennej zależnej jest to intuicyjne. Jeśli seria podąża losowym spacerem (tj. Niestacjonarnym), wiemy, że najlepszym oszacowaniem tego, gdzie będzie następny okres, jest dokładnie to, gdzie był ostatni okres (tj. Beta wynosi 1). Standardowe błędy oszacowań pochodzących z modeli z danymi niestacjonarnymi są jednak różne, ponieważ ściśle mówiąc, wariancja oszacowania zbliża się do nieskończoności, gdy T zbliża się do nieskończoności. Nie stanowi to jednak problemu przy prognozowaniu. Prognozowanie jest zasadniczo warunkowym oczekiwaniem i dlatego opiera się tylko na szacunkach parametrów twojego modelu, a nie na standardowych błędach. Co więcej, przedziały prognozowania Twojej prognozy będą albo uzyskiwane bezpośrednio z twoich błędów, przez błędy ładowania początkowego, lub jeśli masz dużo danych za pomocą empirycznych przedziałów prognoz (mój ulubiony!), Na wszystkie te podejścia nie mają wpływu dane niestacjonarne ponieważ znowu Twoje błędy będą nieruchome, zgodnie z powyższą dyskusją o fałszywej regresji.
Dlaczego mnie to obchodzi?
Test ADF ma niską moc, szczególnie gdy seria jest bliska zrootowania jednostkowego, ale nie jest. Mówiąc inaczej, test ADF będzie miał tendencję do błędnego stwierdzania, że seria nie jest stacjonarna, podczas gdy w rzeczywistości tak nie jest.
Załóżmy, że test ADF nieprawidłowo zapewnia, że seria nie jest stacjonarna. Jeśli dokonasz wszystkich niezbędnych transformacji i oszacujesz VECM, twoja prognoza będzie błędna, ponieważ twój model jest zły. Dlatego ludzie prognozują poziomy.
Co z przyczynami Granger?
Możesz nawet przetestować GC z VAR na poziomach, gdy dane to I (1). Wiem, że to brzmi szalenie. Wiemy, że wnioskowanie zwykle nie jest możliwe w przypadku danych niestacjonarnych. Można jednak przetestować wspólne hipotezy, np. GC. Pokazano to w Toda i Yamamoto (1995), które czerpie z Simów, Stocka i Watsona (1990). Aplikację można znaleźć na stronie http://davegiles.blogspot.com/2011/04/testing-for-granger-causality.html .
Ostatnia rzecz
Jeśli jednak chcesz używać VAR do celów innych niż prognozowanie, bądź ostrożny. VAR poziomów z niestacjonarnymi i zintegrowanymi seriami może przynieść dziwne wyniki. Na przykład, ściśle mówiąc, reprezentacja średniej ruchomej VAR nie istnieje, ponieważ macierz parametrów nie będzie odwracalna. Mimo tego IRF nadal można uzyskać. Wnioskowanie jest również niewykonalne (hipotezy stawów myślowych można przetestować, jak omówiono powyżej).
Również martw się o małe próbki. Wszystko, co omówiłem, działa dobrze w dużej próbce, ale w małych próbkach rzeczy mogą się zwariować. Jest to szczególnie prawdziwe w przypadku GC z danymi I (1).
źródło