Rozumiem, że powinniśmy używać ARIMA do modelowania niestacjonarnych szeregów czasowych. Ponadto wszystko, co czytam, mówi, że ARMA powinna być używana tylko do stacjonarnych szeregów czasowych.
Próbuję zrozumieć, co dzieje się w praktyce, kiedy błędnie klasyfikujesz model i zakładasz, d = 0
że szereg czasowy jest niestacjonarny? Na przykład:
controlData <- arima.sim(list(order = c(1,1,1), ar = .5, ma = .5), n = 44)
dane kontrolne wyglądają następująco:
[1] 0.0000000 0.1240838 -1.4544087 -3.1943094 -5.6205257
[6] -8.5636126 -10.1573548 -9.2822666 -10.0174493 -11.0105225
[11] -11.4726127 -13.8827001 -16.6040541 -19.1966633 -22.0543414
[16] -24.8542959 -25.2883155 -23.6519271 -21.8270981 -21.4351267
[21] -22.6155812 -21.9189036 -20.2064343 -18.2516852 -15.5822178
[26] -13.2248230 -13.4220158 -13.8823855 -14.6122867 -16.4143756
[31] -16.8726071 -15.8499558 -14.0805114 -11.4016515 -9.3330560
[36] -7.5676563 -6.3691600 -6.8471371 -7.5982880 -8.9692152
[41] -10.6733419 -11.6865440 -12.2503202 -13.5314306 -13.4654890
Zakładając, że nie wiedziałem, że dane są ARIMA(1,1,1)
, mógłbym rzucić okiem pacf(controlData)
.
Następnie używam Dickey-Fuller, aby sprawdzić, czy dane nie są stacjonarne:
require('tseries')
adf.test(controlData)
# Augmented Dickey-Fuller Test
#
# data: controlData
# Dickey-Fuller = -2.4133, Lag order = 3, p-value = 0.4099
# alternative hypothesis: stationary
adf.test(controlData, k = 1)
# Augmented Dickey-Fuller Test
#
#data: controlData
# Dickey-Fuller = -3.1469, Lag order = 1, p-value = 0.1188
# alternative hypothesis: stationary
Mogę więc założyć, że dane to ARIMA (2,0, *). Następnie użyć, auto.arima(controlData)
aby spróbować jak najlepiej dopasować?
require('forecast')
naiveFit <- auto.arima(controlData)
naiveFit
# Series: controlData
# ARIMA(2,0,1) with non-zero mean
#
# Coefficients:
# ar1 ar2 ma1 intercept
# 1.4985 -0.5637 0.6427 -11.8690
# s.e. 0.1508 0.1546 0.1912 3.2647
#
# sigma^2 estimated as 0.8936: log likelihood=-64.01
# AIC=138.02 AICc=139.56 BIC=147.05
Tak więc, mimo że przeszłe i przyszłe dane to ARIMA (1,1,1), mogę ulec pokusie sklasyfikowania ich jako ARIMA (2,0,1). tsdata(auto.arima(controlData))
też wygląda dobrze.
Oto, co znalazłby poinformowany modelarz:
informedFit <- arima(controlData, order = c(1,1,1))
# informedFit
# Series: controlData
# ARIMA(1,1,1)
#
# Coefficients:
# ar1 ma1
# 0.4936 0.6859
# s.e. 0.1564 0.1764
#
# sigma^2 estimated as 0.9571: log likelihood=-62.22
# AIC=130.44 AICc=131.04 BIC=135.79
1) Dlaczego te kryteria informacyjne są lepsze niż wybrany model auto.arima(controlData)
?
Teraz po prostu graficznie porównuję rzeczywiste dane i dwa modele:
plot(controlData)
lines(fitted(naiveFit), col = "red")
lines(fitted(informedFit), col = "blue")
2) Jako adwokat diabła, jakie konsekwencje zapłaciłbym, stosując model ARIMA (2, 0, 1) jako model? Jakie jest ryzyko tego błędu?
3) Najbardziej niepokoją mnie jakiekolwiek implikacje dla prognoz na wiele okresów. Zakładam, że byłyby mniej dokładne? Szukam tylko dowodu.
4) Czy zaproponowałbyś alternatywną metodę wyboru modelu? Czy są jakieś problemy z moim rozumowaniem jako „niedoinformowanego” modelarza?
Jestem naprawdę ciekawy, jakie są inne konsekwencje tego rodzaju błędnej klasyfikacji. Szukałem niektórych źródeł i nic nie znalazłem. Cała literatura, którą mogłem znaleźć, dotyczy tylko tego tematu, zamiast tego stwierdzenie, że dane powinny być nieruchome przed wykonaniem ARiMR, a jeśli są niestacjonarne, to należy je różnicować d razy.
Dzięki!