Capisco che dovremmo usare ARIMA per modellare una serie temporale non stazionaria. Inoltre, tutto ciò che ho letto dice che ARMA dovrebbe essere usato solo per serie storiche stazionarie.
Quello che sto cercando di capire è, cosa succede in pratica quando si classificano erroneamente un modello e si presume d = 0
che una serie temporale non sia stazionaria? Per esempio:
controlData <- arima.sim(list(order = c(1,1,1), ar = .5, ma = .5), n = 44)
i dati di controllo si presentano così:
[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
Supponendo che non sapevo che fossero i dati ARIMA(1,1,1)
, potrei dare un'occhiata pacf(controlData)
.
Quindi uso Dickey-Fuller per vedere se i dati non sono fissi:
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
Quindi, potrei supporre che i dati siano ARIMA (2,0, *) Quindi utilizzare auto.arima(controlData)
per cercare di ottenere la soluzione migliore?
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
Quindi, anche se i dati passati e futuri sono ARIMA (1,1,1), potrei essere tentato di classificarli come ARIMA (2,0,1). tsdata(auto.arima(controlData))
anche bello.
Ecco cosa troverebbe un modellatore informato:
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) Perché questi criteri di informazione sono migliori del modello selezionato da auto.arima(controlData)
?
Ora, confronto graficamente i dati reali e i 2 modelli:
plot(controlData)
lines(fitted(naiveFit), col = "red")
lines(fitted(informedFit), col = "blue")
2) Nel ruolo del difensore del diavolo, che tipo di conseguenze dovrei pagare usando un ARIMA (2, 0, 1) come modello? Quali sono i rischi di questo errore?
3) Sono principalmente preoccupato per eventuali implicazioni per le previsioni a termine a più periodi. Presumo che sarebbero meno accurati? Sto solo cercando delle prove.
4) Consiglieresti un metodo alternativo per la selezione del modello? Ci sono problemi con il mio ragionamento come modellatore "non informato"?
Sono davvero curioso di sapere quali sono le altre conseguenze di questo tipo di classificazione errata. Ho cercato alcune fonti e non sono riuscito a trovare nulla. Tutta la letteratura che ho potuto trovare solo tocchi su questo argomento, invece solo affermando che i dati dovrebbero essere stazionari prima di eseguire l'ARMA, e se non è stazionaria, allora deve essere differenziata d volte.
Grazie!