Apakah model diidentifikasi oleh auto.arima () pelit?


13

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.

  1. Apakah ada panduan kapan menggunakan / memodifikasi model yang diidentifikasi menggunakan algoritma otomatis seperti auto.arima()?
  2. Apakah ada jurang jatuh hanya menggunakan AIC (yang saya pikir auto.arima()menggunakan) untuk mengidentifikasi model?
  3. 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.t

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

Anda tampaknya tertarik pada sesuatu di sini karena prosedur AIC mungkin salah mengidentifikasi model paling sederhana. Selain itu kriteria AIC denga tidak ada pulsa / tidak ada perubahan level / tidak ada pulsa musiman / tidak ada tren waktu setempat / keteguhan parameter / keteguhan dari varians kesalahan.
IrishStat

AIC dan BIC sebanding dengan varians kesalahan dari model yang ditebak. Pendekatan ini dalam pengalaman saya hanya sederhana karena beberapa masalah yang telah saya angkat dan masalah keterbalikan muncul di sini. Tidak ada penggantian untuk sistem identifikasi cerdas yang membangun model berulang menyimpulkan ketika tidak ada parameter yang tidak dibutuhkan tetap dan tidak ada informasi / struktur yang jelas dalam residu. Singkatnya, identifikasi model otomatis adalah proses berulang bukan proses satu langkah sama seperti dalam semua analisis statistik.
IrishStat

@Irishstat apa tanda koefisien ma harus diinterpretasikan sebagai -0.1391 -0.5912 -0.5491?
peramal

dalam hal Teks Pankratz .. ya! . Anda dapat memeriksa akar polinomial ma untuk melihat apakah mereka memenuhi persyaratan keterbalikan.
IrishStat

jadi auto.arima di atas tidak dapat dibalik yaitu, -0.1391-0.5912-0.5491 adalah <1 oleh karena itu modelnya baik-baik saja.
peramal

Jawaban:


17

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)approximationTRUE n=100n=500 approximationauto.arima()approximation = TRUEarima()

Sebagai contoh Anda 1, kita harus memiliki

> auto.arima(y, approximation = FALSE)
Series: y 
ARIMA(0,0,1) with non-zero mean 

Coefficients:
         ma1  intercept
      0.7166    19.9844
s.e.  0.0301     0.0797

sigma^2 estimated as 1.079:  log likelihood=-728.94
AIC=1463.87   AICc=1463.92   BIC=1476.52
> qa
Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.0565  0.6890    19.9846
s.e.  0.0626  0.0456     0.0830

sigma^2 estimated as 1.078:  log likelihood=-728.53
AIC=1465.06   AICc=1465.14   BIC=1481.92

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.


Terima kasih atas respon yang mendetail. Saya memang menggunakan pendekatan Anda untuk contoh kedua: set.seed (453) y <- arima.sim (n = 500, daftar (ar = 0,2, ma = 0,6), rata-rata = 10) auto.arima (y, aproksimasi = SALAH) dan inilah yang saya dapatkan, data ini jelas overfitting - ARIMA (2,0,4) dengan koefisien rata-rata tidak nol: ar1 ar2 ma1 ma2 ma3 ma4 mencegat 0,5369 -0,9627 0,3681 0,6799 0,7065 0,17065 0,1701 20,0329 se 0,0278 0,0499 0,0533 0,0630 0,0793 0,0527 0,0927 sigma ^ 2 diperkirakan 1,024: log likelihood = -716,17 AIC = 1448,33 AICc = 1448,63 BIC = 1482,05
peramal

Saya belum membaca bab yang memiliki sesuatu yang disebut "invertiblity". Apakah auto.arima dalam kasus kedua melanggar aturan "invertiblity" dalam diagnosis model ?, saya mungkin tidak aktif, bisakah Anda mengoreksi jika saya salah?
peramal

1
@forecaster Anggap Anda tidak tahu yang sebenarnya, yang Anda miliki hanyalah sampel yang ada. Dalam keadaan itu, AIC dll melakukan apa yang Anda minta mereka lakukan. Seperti yang saya katakan di atas, seri simulasi mungkin bukan yang Anda minta, atau lebih tepatnya tidak mungkin untuk berhasil mengidentifikasi seri sebenarnya dari sampel kecil yang Anda ambil. Tidak ada yang tersirat di sini atau di tempat lain dalam statistik bahwa Anda akan mendapatkan model yang BENAR. Sebagai ahli statistik, jika Anda merasa seri ini terlalu banyak (katakanlah dari pengetahuan sebelumnya), letakkan batasan pada urutan istilah yang dicari. Atau gunakan BIC sebagai kriteria berhenti.
Reinstate Monica - G. Simpson

Saya tidak tahu cukup baik apa yang bisa dibalik untuk dapat menjawab pertanyaan itu. Mungkin tanyakan ini sebagai pertanyaan baru di sini?
Reinstate Monica - G. Simpson

@forecaster (Alasan saya katakan BIC, adalah bahwa ia memberikan penalti ekstra pada kompleksitas. Dalam hal ini, BIC dari ARIMA (1, 0, 1) memiliki BIC lebih rendah daripada model yang auto.arima()ditetapkan, jadi jika hanya dua model kandidat, yang lebih sederhana akan dipilih ...)
Pasang kembali Monica - G. Simpson

2

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.

###############
set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

## Adequetly describes the unknown data
fit.aic <- auto.arima(y,ic = c("aic"))
fit.aic

## Selects the model that is parsimonious
fit.bic <- auto.arima(y,ic = c("bic"))
fit.bic

BIC IC memilih model MA (2).

> fit.bic
Series: y 
ARIMA(0,0,2) with non-zero mean 

Coefficients:
         ma1     ma2  intercept
      0.9256  0.2335    20.0326
s.e.  0.0453  0.0444     0.0992

sigma^2 estimated as 1.059:  log likelihood=-724.19
AIC=1456.39   AICc=1456.47   BIC=1473.24

1

Saya mengambil nilai-nilai 500 ke dalam AUTOBOX (perangkat lunak komersial yang telah saya bantu kembangkan) dan menerima saran berikut masukkan deskripsi gambar di siniberdasarkan 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 masukkan deskripsi gambar di siniplot acf yang sangat berbeda masukkan deskripsi gambar di sini.

Kembali ke analisis: Berikut adalah model yang diidentifikasi untuk nilai 246 terakhir masukkan deskripsi gambar di sinidan di sini masukkan deskripsi gambar di sinidengan statistik berikut masukkan deskripsi gambar di sini. Aktual / Fit dan Forecast ada di sini masukkan deskripsi gambar di sinidengan plot residual di sini masukkan deskripsi gambar di sini. ACF residu menunjukkan kecukupanmasukkan deskripsi gambar di sini. 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!


0

 exp(SEBUAHsayaCmsayan-SEBUAHsayaCsaya)/2

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 memberikan

                                # relprob = exp( (AICmin - AIC) / 2 ) * 100
 ARIMA(0,1,0) with drift : 784.5    100
 ARIMA(0,1,1) with drift : 784.8     86
 ARIMA(1,1,0) with drift : 784.9     82
 ARIMA(0,1,0)            : 792.4      2
 ARIMA(2,1,2) with drift : Inf    0
 ARIMA(1,1,1) with drift : Inf    0

1
Ini adalah jawaban atau pertanyaan?
Tim

@Tim, saya sangat tentatif karena saya tidak tahu apakah probs relatif ini "nyata" atau paling tidak umum.
denis
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.