Saya mengerti kita harus menggunakan ARIMA untuk pemodelan seri waktu non-stasioner. Juga, semua yang saya baca mengatakan ARMA seharusnya hanya digunakan untuk seri waktu stasioner.
Apa yang saya coba pahami adalah, apa yang terjadi dalam praktik ketika salah mengklasifikasikan model, dan berasumsi d = 0
untuk deret waktu yang non-stasioner? Sebagai contoh:
controlData <- arima.sim(list(order = c(1,1,1), ar = .5, ma = .5), n = 44)
data kontrol terlihat seperti ini:
[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
Dengan asumsi saya tidak tahu datanya ARIMA(1,1,1)
, saya mungkin akan melihatnya pacf(controlData)
.
Lalu saya menggunakan Dickey-Fuller untuk melihat apakah datanya tidak stasioner:
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
Jadi, saya mungkin berasumsi bahwa data tersebut adalah ARIMA (2,0, *) Kemudian gunakan auto.arima(controlData)
untuk mencoba mendapatkan yang terbaik?
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
Jadi, meskipun data masa lalu dan masa depan adalah ARIMA (1,1,1), saya mungkin tergoda untuk mengklasifikasikannya sebagai ARIMA (2,0,1). tsdata(auto.arima(controlData))
terlihat bagus juga.
Inilah yang akan ditemukan oleh pemodel informasi:
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) Mengapa kriteria informasi ini lebih baik daripada model yang dipilih oleh auto.arima(controlData)
?
Sekarang, saya hanya membandingkan data nyata, dan 2 model:
plot(controlData)
lines(fitted(naiveFit), col = "red")
lines(fitted(informedFit), col = "blue")
2) Bermain sebagai penasihat iblis, konsekuensi apa yang akan saya bayarkan dengan menggunakan ARIMA (2, 0, 1) sebagai model? Apa risiko dari kesalahan ini?
3) Saya lebih khawatir tentang implikasi untuk prediksi ke depan multi-periode. Saya menganggap mereka akan kurang akurat? Saya hanya mencari beberapa bukti.
4) Apakah Anda menyarankan metode alternatif untuk pemilihan model? Apakah ada masalah dengan alasan saya sebagai pemodel "tidak tahu"?
Saya benar-benar ingin tahu apa konsekuensi lain dari kesalahan klasifikasi semacam ini. Saya telah mencari beberapa sumber dan tidak dapat menemukan apa pun. Semua literatur yang saya dapat temukan hanya menyentuh pada subjek ini, sebagai gantinya hanya menyatakan data harus stasioner sebelum melakukan ARMA, dan jika tidak stasioner, maka perlu dibedakan d kali.
Terima kasih!
sumber
Jawaban:
Kesan saya adalah bahwa pertanyaan ini tidak memiliki jawaban yang unik dan sepenuhnya umum, jadi saya hanya akan mengeksplorasi kasus yang paling sederhana, dan sedikit informal.
dan MSE -nya akan
(jangka menengah persegi lenyap, serta produk silang kesalahan masa depan).
jadi meramalkan tingkat proses, kita akan miliki
yang pada kenyataannya, mengingat DGP yang benar akan
dan sebagainya
sementara saya ulangi untuk kenyamanan
Jadi, agar model yang dibedakan tampil lebih baik dalam hal prediksi MSE, kami ingin
Jadi, secara keseluruhan, tanpa membahas metode estimasi spesifik, saya percaya bahwa kami dapat menunjukkan secara informal bahwa model yang dibeda-bedakan harus diharapkan berkinerja lebih baik dalam hal prediksi MSE.
sumber
Itu pertanyaan yang bagus.
Seperti yang saya sadari, Anda baru saja mempertimbangkan pacf tapi itu belum cukup. ACF dan PACF sama-sama diperlukan untuk memilih model terbaik.
Di sisi lain, tes stasioner lemah dan sensitif dan membutuhkan sejumlah besar keterlambatan untuk diuji.
Selain itu, lebih disukai untuk membuat seri waktu stasioner sebelum menerapkan model apa pun. Secara kasar, model ARIMA hanya mempertimbangkan kasus khusus sebagai non-stasioner (lebih disukai dalam tren).
Tentang pertanyaan Anda, saya tidak yakin tentang fungsi auto.arima tetapi saya yakin bahwa jumlah titik data dalam contoh Anda kecil. Simulasi model dengan menggunakan banyak titik data akan menjawab pertanyaan Anda dengan baik. Juga, saya menyarankan Anda untuk mempertimbangkan ACF time series serta PACF. Tentang pemilihan model, aturan praktis adalah memilih model yang paling sederhana (perhatikan bahwa model yang paling sederhana setelah membuat time series stationary).
Saya merujuk Anda ke referensi ini . Buku ini tidak menjawab semua pertanyaan Anda tetapi memberi Anda beberapa petunjuk.
----- bagian pelengkap ------- @nsw mempertimbangkan tren dalam data Anda. Jika Anda mempertimbangkan model stasioner, itu menghasilkan prediksi naik / turun tetapi sebenarnya model ARMA dirancang untuk memprediksi data datar. Saya telah mengubah kode Anda untuk mencerminkan perbedaan ini:
membutuhkan ('perkiraan')
membutuhkan ('tseries')
controlData <- arima.sim (daftar (urutan = c (1,1,1), ar = .5, ma = .5), n = 1000 )
ACF (controlData)
ts.plot (controlData)
naiveFit <- arima (controlData, order = c (2,0,1))
trueFit <- arima (controlData, order = c (1,1,1))
PrnaiveFit <-forecast.Arima (naiveFit, 10)
PrtrueFit <- forecast.Arima (trueFit, 10)
matplot (cbind ( rata-rata PrnaiveFit $ , rata-rata PrtrueFit $ ), jenis = 'b', col = c ('merah', 'hijau'), ylab = c ('prediksi ion'), pch = c ('n', 't'))
sumber