Durağan olmayan bir zaman serisinin modellenmesinde ARIMA'yı kullanmamız gerektiğini anlıyorum. Ayrıca, okuduğum her şey ARMA'nın sadece durağan zaman serileri için kullanılması gerektiğini söylüyor.
Anlamaya çalıştığım şey, bir modeli yanlış sınıflandırırken ve d = 0
durağan olmayan bir zaman serisini varsayırken pratikte ne olur ? Örneğin:
controlData <- arima.sim(list(order = c(1,1,1), ar = .5, ma = .5), n = 44)
Kontrol verileri şöyle görünür:
[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
Verileri bilmediğimi farz edersem ARIMA(1,1,1)
, bir bakabilirim pacf(controlData)
.
Sonra verilerin sabit olup olmadığını görmek için Dickey-Fuller kullanıyorum:
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
Yani, ARIMA (2,0, *) Sonra kullanmak verileri kabul edebilirsiniz auto.arima(controlData)
bir iyi uyumu yakalamak için denemek için?
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
Bu nedenle, geçmiş ve gelecekteki veriler ARIMA (1,1,1) olmasına rağmen, bunu ARIMA (2,0,1) olarak sınıflandırmak için cazip gelebilirim. tsdata(auto.arima(controlData))
çok iyi görünüyor.
Bilgili bir modelcinin bulabileceği şey:
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) Bu bilgi kriteri neden seçilen modelden daha iyi auto.arima(controlData)
?
Şimdi gerçek verileri ve 2 modeli grafiksel olarak karşılaştırıyorum:
plot(controlData)
lines(fitted(naiveFit), col = "red")
lines(fitted(informedFit), col = "blue")
2) Şeytanın savunuculuğunu oynamak, bir ARIMA'yı (2, 0, 1) model olarak kullanarak ne tür sonuçlar doğurabilirim? Bu hatanın riskleri nelerdir?
3) Çoğunlukla çok dönemli vadeli tahminlerin sonuçları hakkında endişeliyim. Sanırım daha az doğru olurlar mı? Sadece bazı kanıtları arıyorum.
4) Model seçimi için alternatif bir yöntem önerir misiniz? “Bilgi içermeyen” bir modelleyici olarak benim akıl yürütmemde herhangi bir sorun var mı?
Bu tür yanlış sınıflandırmaların diğer sonuçlarının ne olduğunu merak ediyorum. Bazı kaynaklar arıyordum ve hiçbir şey bulamadım. Bu konuyla ilgili bulabildiğim tüm literatür, sadece ARMA yapmadan önce verinin durağan olması gerektiğini ve durağan değilse, o zaman farklı zamanların farklı olması gerektiğini belirtiyor.
Teşekkürler!