Saya telah mencoba mempelajari dan menerapkan model ARIMA. Saya telah membaca teks yang bagus tentang ARIMA oleh Pankratz - Peramalan dengan Kotak Univariat - Model Jenkins: Konsep dan Kasus . Dalam teks, penulis terutama menekankan prinsip kekikiran dalam memilih model ARIMA.
Saya mulai bermain dengan auto.arima()
fungsi dalam R paket perkiraan . Inilah yang saya lakukan, saya mensimulasikan ARIMA dan kemudian menerapkannya auto.arima()
. Di bawah ini adalah 2 contoh. Seperti yang dapat Anda lihat dalam kedua contoh, auto.arima()
diidentifikasi dengan jelas model yang banyak orang anggap non-pelit. Terutama dalam contoh 2, di mana auto.arima()
diidentifikasi ARIMA (3,0,3) ketika sebenarnya ARIMA (1,0,1) akan cukup dan pelit.
Di bawah ini adalah pertanyaan saya. Saya akan sangat menghargai saran dan rekomendasi.
- Apakah ada panduan kapan menggunakan / memodifikasi model yang diidentifikasi menggunakan algoritma otomatis seperti
auto.arima()
? - Apakah ada jurang jatuh hanya menggunakan AIC (yang saya pikir
auto.arima()
menggunakan) untuk mengidentifikasi model? - Dapatkah algoritma otomatis dibangun yang pelit?
Ngomong-ngomong saya menggunakan auto.arima()
contoh saja. Ini akan berlaku untuk semua algoritma otomatis.
Di bawah ini adalah Contoh # 1:
set.seed(182)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)
auto.arima(y)
qa <- arima(y,order=c(1,0,1))
qa
Di bawah ini adalah hasil dari auto.arima()
. Harap dicatat bahwa semua koefisien tidak signifikan. yaitu, nilai <2.
ARIMA(1,0,2) with non-zero mean
Coefficients:
ar1 ma1 ma2 intercept
0.5395 0.2109 -0.3385 19.9850
s.e. 0.4062 0.4160 0.3049 0.0878
sigma^2 estimated as 1.076: log likelihood=-728.14
AIC=1466.28 AICc=1466.41 BIC=1487.36
Di bawah ini adalah hasil dari menjalankan reguler arima()
dengan pesanan ARIMA (1,0,1)
Series: y
ARIMA(1,0,1) with non-zero mean
Coefficients:
ar1 ma1 intercept
0.2398 0.6478 20.0323
s.e. 0.0531 0.0376 0.1002
sigma^2 estimated as 1.071: log likelihood=-727.1
AIC=1462.2 AICc=1462.28 BIC=1479.06
Contoh 2:
set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)
auto.arima(y)
qa <- arima(y,order=c(1,0,1))
qa
Di bawah ini adalah hasil dari auto.arima()
:
ARIMA(3,0,3) with non-zero mean
Coefficients:
ar1 ar2 ar3 ma1 ma2 ma3 intercept
0.7541 -1.0606 0.2072 0.1391 0.5912 0.5491 20.0326
s.e. 0.0811 0.0666 0.0647 0.0725 0.0598 0.0636 0.0939
sigma^2 estimated as 1.027: log likelihood=-716.84
AIC=1449.67 AICc=1449.97 BIC=1483.39
Di bawah ini adalah hasil yang berjalan teratur arima()
dengan pesanan ARIMA (1,0,1)
Series: y
ARIMA(1,0,1) with non-zero mean
Coefficients:
ar1 ma1 intercept
0.2398 0.6478 20.0323
s.e. 0.0531 0.0376 0.1002
sigma^2 estimated as 1.071: log likelihood=-727.1
AIC=1462.2 AICc=1462.28 BIC=1479.06
sumber
Jawaban:
Ada beberapa masalah di sini. Pertama, jangan menganggap bahwa ARIMA yang disimulasikan benar-benar sesuai urutan yang Anda tentukan; Anda mengambil sampel dari model yang ditentukan dan karena keacakan, model pemasangan terbaik untuk sampel tertentu yang diambil mungkin bukan dari mana simulasi diambil.
Saya menyebutkan ini karena masalah kedua dan yang lebih penting:
auto.arima()
fungsi dapat memperkirakan model melalui algoritma pemasangan yang lebih efisien, menggunakan jumlah kuadrat bersyarat, untuk menghindari waktu komputasi yang berlebihan untuk seri panjang atau untuk model musiman yang kompleks. Ketika proses estimasi ini digunakan,auto.arima()
perkiraan kriteria informasi untuk suatu model (karena kemungkinan log dari model belum dihitung). Heuristik sederhana digunakan untuk menentukan apakah jumlah taksiran estimasi kuadrat aktif, jika pengguna tidak menunjukkan pendekatan mana yang harus digunakan .approximation
(length(x)>100 | frequency(x)>12)
approximation
TRUE
approximation
auto.arima()
approximation = TRUE
arima()
Sebagai contoh Anda 1, kita harus memiliki
Oleh karena itu
auto.arima()
telah memilih model yang lebih pelit dari model yang sebenarnya; sebuah ARIMA (0, 0, 1) dipilih. Tetapi ini didasarkan pada kriteria informasi dan sekarang sudah sesuai; model yang dipilih memiliki AIC, AICc, dan BIC yang lebih rendah, meskipun perbedaan untuk AIC dan AICc kecil. Setidaknya sekarang pemilihan konsisten dengan norma-norma untuk memilih model berdasarkan kriteria informasi.Alasan MA (1) dipilih, saya percaya, berkaitan dengan masalah pertama yang saya sebutkan; yaitu bahwa model pemasangan terbaik untuk sampel yang diambil dari ARIMA lain (p, d, q) mungkin tidak memiliki urutan yang sama dengan model sebenarnya. Ini karena pengambilan sampel acak. Mengambil seri yang lebih lama atau periode yang lebih lama dapat membantu meningkatkan kemungkinan bahwa model yang sebenarnya dipilih, tetapi jangan mengandalkannya.
Apapun, moral di sini adalah ketika sesuatu terlihat jelas salah, seperti dalam pertanyaan Anda, baca halaman manual atau dokumentasi terkait untuk meyakinkan diri sendiri bahwa Anda memahami cara kerja perangkat lunak.
sumber
auto.arima()
ditetapkan, jadi jika hanya dua model kandidat, yang lebih sederhana akan dipilih ...)Terima kasih banyak @ Gavin, @Irishstat, dan @Rob karena telah menjawab pertanyaan saya. Jelas bahwa jika saya memerlukan model pelit dari algoritma otomatis seperti kriteria informasi BIC auto.arima harus digunakan sebagai lawan AIC terutama setelah melihat posting ini dan posting @ Gavin di atas.
Saya juga sangat setuju dengan @Irishstat bahwa memilih model berdasarkan kriteria IC memiliki keterbatasan karena tidak memilih model yang lebih baik agar sesuai dengan data dengan outlier dan perubahan level. Menurut pendapat saya, perubahan outlier + level + data berantakan = data bisnis kata nyata , yang lainnya adalah dataset buku teks. Model otomatis apa pun yang tidak mempertimbangkan perubahan outlier + level, sekali lagi menurut saya harus digunakan dengan hati-hati.
Datang ke kode - auto.arima memiliki opsi untuk memilih antara AIC atau BIC. Lihat di bawah kode telah dimodifikasi dari pertanyaan di atas.
Terima kasih banyak komunitas yang divalidasi silang. Saya belajar hal-hal baru dan menarik setiap hari.
BIC IC memilih model MA (2).
sumber
Saya mengambil nilai-nilai 500 ke dalam AUTOBOX (perangkat lunak komersial yang telah saya bantu kembangkan) dan menerima saran berikut berdasarkan Chow Test untuk keteguhan parameter. Kesalahan mendasar yang dibuat dalam studi deret waktu adalah mengasumsikan bahwa data digerakkan oleh model tertentu dengan parameter konstan. AUTOBOX mendeteksi titik break pada periode 246 yang mungkin mencerminkan simulasi yang belum "dihangatkan". Saat mensimulasikan data, praktik yang baik adalah menghapus nilai "n" pertama dan kemudian mempelajari yang lainnya. Saya mengambil data dan mengelompokkannya menjadi dua bagian; 245 pertama dan 255 sisanya. Berikut adalah dua plot acf yang sangat berbeda .
Kembali ke analisis: Berikut adalah model yang diidentifikasi untuk nilai 246 terakhir dan di sini dengan statistik berikut . Aktual / Fit dan Forecast ada di sini dengan plot residual di sini . ACF residu menunjukkan kecukupan. Perhatikan bahwa 5 pulsa yang teridentifikasi memiliki efek yang sangat kecil dan dapat dengan mudah diabaikan (dalam hal ini!). Singkatnya pelajaran yang dipelajari di sini adalah bahwa kadang-kadang kita memiliki terlalu banyak data dan kita perlu mempertimbangkan waktu untuk mengubah koefisien. Dalam hal ini kami mengidentifikasi perubahan dalam parameter yang (tampaknya) tidak memiliki dampak besar pada model / parameter yang dihasilkan tetapi menunjukkan perbaikan proses yang umumnya diperlukan dalam analisis deret waktu. Pengalaman saya dengan auto.arima menunjukkan bahwa karena secara eksplisit tidak memperlakukan / memperbaiki pelanggaran gaussian, ia cenderung membuat model berlebihan dengan bersandar terlalu banyak pada nilai-nilai historis daripada mengekstraksi struktur dari data. Dalam hal ini karena ini adalah simulasi yang dikontrol secara ketat tanpa pelanggaran gaussian, itu berhasil tetapi saya akan secara umum menjadi tersangka bandwith dengan pendekatan langkah tunggal dan terbatas untuk identifikasi model ARIMA. Percaya tapi Verifikasi!
sumber
JIKA ini benar, itu akan membantu pengguna untuk melihat probabilitas relatif ini, bersama dengan AIC (?) Dari
auto.arima( ... trace=TRUE )
. Sebagai contoh, data telur berjalan seperti dalam pertanyaan ini memberikansumber