Entendo que devemos usar o ARIMA para modelar uma série temporal não estacionária. Além disso, tudo o que li diz que o ARMA deve ser usado apenas para séries temporais estacionárias.
O que estou tentando entender é: o que acontece na prática ao classificar incorretamente um modelo e assumir d = 0
uma série temporal não estacionária? Por exemplo:
controlData <- arima.sim(list(order = c(1,1,1), ar = .5, ma = .5), n = 44)
os dados de controle são assim:
[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
Supondo que não sabia que eram os dados ARIMA(1,1,1)
, talvez eu desse uma olhada pacf(controlData)
.
Então eu uso o Dickey-Fuller para ver se os dados não são estacionários:
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
Então, suponho que os dados sejam ARIMA (2,0, *). Em seguida, use auto.arima(controlData)
para tentar obter o melhor ajuste?
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
Portanto, mesmo que os dados passados e futuros sejam ARIMA (1,1,1), posso ficar tentado a classificá-los como ARIMA (2,0,1). tsdata(auto.arima(controlData))
parece ser bom também.
Aqui está o que um modelador informado encontraria:
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) Por que esses critérios de informação são melhores que o modelo selecionado por auto.arima(controlData)
?
Agora, apenas comparo graficamente os dados reais e os 2 modelos:
plot(controlData)
lines(fitted(naiveFit), col = "red")
lines(fitted(informedFit), col = "blue")
2) No papel de advogado do diabo, que tipo de consequências eu pagaria usando um ARIMA (2, 0, 1) como modelo? Quais são os riscos desse erro?
3) Estou mais preocupado com quaisquer implicações para previsões futuras de vários períodos. Eu suponho que eles seriam menos precisos? Só estou procurando alguma prova.
4) Você sugeriria um método alternativo para a seleção de modelos? Há algum problema com o meu raciocínio como modelador "desinformado"?
Estou realmente curioso para saber quais são as outras conseqüências desse tipo de classificação incorreta. Estive procurando por algumas fontes e simplesmente não consegui encontrar nada. Toda a literatura que pude encontrar apenas detalhes sobre esse assunto, apenas afirmando que os dados devem estar estacionários antes de executar o ARMA e, se não estacionários, precisam ser diferenciados d vezes.
Obrigado!