Mendeteksi Pencilan dalam Time Series (LS / AO / TC) menggunakan paket tsoutliers di R. Bagaimana cara mewakili pencilan dalam format persamaan?

35

Komentar: Pertama saya ingin mengatakan besar terima kasih kepada penulis yang baru tsoutliers paket yang menerapkan Chen dan Liu deteksi time series outlier yang diterbitkan dalam Journal of American Association statistik pada tahun 1993 dalam perangkat lunak Open Source .R

Paket mendeteksi 5 jenis pencilan yang berbeda secara iteratif dalam data deret waktu:

  1. Additive Outlier (AO)
  2. Innovation Outlier (IO)
  3. Level Shift (LS)
  4. Perubahan sementara (TC)
  5. Pergeseran Tingkat Musiman (SLS)

Yang lebih hebat lagi adalah bahwa paket ini mengimplementasikan auto.arima dari paket perkiraan sehingga mendeteksi outlier tidak ada masalah. Paket ini juga menghasilkan plot yang bagus untuk pemahaman yang lebih baik tentang data deret waktu.

Di bawah ini adalah pertanyaan saya:

Saya mencoba menjalankan beberapa contoh menggunakan paket ini dan itu berhasil. Pencilan aditif dan pergeseran level bersifat intuitif. Namun, saya memiliki 2 pertanyaan berkaitan dengan menyerahkan outlier Perubahan Sementara dan outlier Inovatif yang saya tidak bisa mengerti.

Contoh Perubahan Sementara Sementara:

Perhatikan contoh berikut:

library(tsoutliers)
library(expsmooth)
library(fma)

outlier.chicken <- tsoutliers::tso(chicken,types = c("AO","LS","TC"),maxit.iloop=10)
outlier.chicken
plot(outlier.chicken)

Program ini dengan tepat mendeteksi perubahan level dan perubahan sementara di lokasi berikut.

Outliers:
  type ind time coefhat tstat
1   LS  12 1935   37.14 3.153
2   TC  20 1943   36.38 3.350

Di bawah ini adalah plot dan pertanyaan saya.

  • Bagaimana cara menulis perubahan sementara dalam format persamaan? (Pergeseran level dapat dengan mudah ditulis sebagai variabel biner, kapan saja sebelum 1935 / Obs 12 adalah 0 dan setiap saat setelah 1935 dan setelah adalah 1.)

Persamaan untuk perubahan sementara dalam manual paket dan artikel diberikan sebagai:

L(B)=11δB

di mana adalah 0,7. Saya hanya berusaha menerjemahkan ini ke contoh di atas.δ

  • Pertanyaan kedua saya adalah tentang outlier inovasi, saya belum pernah
    menemukan outlier inovasi dalam praktek. contoh numersial atau contoh kasus akan sangat membantu.

pencilan

Sunting: @Irishstat, fungsi tsoutliers melakukan pekerjaan yang sangat baik dalam mengidentifikasi outlier dan menyarankan model ARIMA yang sesuai. Melihat dataset Nile, lihat aplikasi auto.arima di bawah ini dan kemudian terapkan tsoutliers (dengan default yang mencakup auto.arima):

auto.arima(Nile)
Series: Nile 
ARIMA(1,1,1)                    

Coefficients:
         ar1      ma1
      0.2544  -0.8741
s.e.  0.1194   0.0605

sigma^2 estimated as 19769:  log likelihood=-630.63
AIC=1267.25   AICc=1267.51   BIC=1275.04

Setelah menerapkan fungsi tsoutliers, ia mengidentifikasi outlier LS dan outlier aditif dan merekomendasikan pesanan ARIMA (0,0,0).

nile.outliers <- tso(Nile,types = c("AO","LS","TC"))
nile.outliers
Series: Nile 
ARIMA(0,0,0) with non-zero mean 

Coefficients:
      intercept       LS29       AO43
      1097.7500  -242.2289  -399.5211
s.e.    22.6783    26.7793   120.8446

sigma^2 estimated as 14401:  log likelihood=-620.65
AIC=1249.29   AICc=1249.71   BIC=1259.71

Outliers:
  type ind time coefhat  tstat
1   LS  29 1899  -242.2 -9.045
2   AO  43 1913  -399.5 -3.306

masukkan deskripsi gambar di sini

peramal cuaca
sumber
8
Saya senang melihat bahwa Anda menemukan paket itu berguna, terima kasih! BTW Saya telah memperbaiki kesalahan ketik pada fungsi yang memplot hasilnya sehingga pada rilis berikutnya dari paket, sumbu y akan mencakup kisaran seri asli dan seri yang disesuaikan.
javlacalle
2
Dalam versi terakhir paket, fungsi tsoutlierstelah diubah namanya tsountuk menghindari konflik dengan fungsi dengan nama yang sama dalam paket forecast.
javlacalle
1
@javlacalle Saya mengunduh paket tsoutliers terbaru yang masih memiliki tsoutliers tidak juga. Saya tidak yakin kapan paket akan diperbarui. Saya senang bahwa kami memiliki nama funtion yang berbeda.
peramal
Saya bergegas memberitahukan tentang pembaruan. Diperlukan waktu hingga diperbarui pada CRAN. Saya baru saja melihat bahwa versi terbaru 0.4 dapat diunduh dari CRAN.
javlacalle
@javlacalle Saya menemukan tsoutliers sangat sulit untuk diinstal pada mac saya. Saya menyeduh gsl yang terinstal, saya mencoba untuk mengkompilasi menggunakan clangdan gccdan tidak berhasil. Saya pikir ini adalah paket yang luar biasa tetapi instalasinya benar-benar membuat saya sedih.
B.Mr.W.

Jawaban:

19

Perubahan sementara, TC, adalah jenis pencilan umum. Persamaan yang diberikan dalam dokumentasi paket dan yang Anda tulis adalah persamaan yang menggambarkan dinamika tipe pencilan ini. Anda dapat menghasilkannya melalui fungsi filterseperti yang ditunjukkan di bawah ini. Menyala untuk menampilkannya untuk beberapa nilai delta. Untukδ=0TC runtuh dalam outlier aditif; di sisi lain,δ=1, TC seperti pergeseran level.

tc <- rep(0, 50)
tc[20] <- 1
tc1 <- filter(tc, filter = 0, method = "recursive")
tc2 <- filter(tc, filter = 0.3, method = "recursive")
tc3 <- filter(tc, filter = 0.7, method = "recursive")
tc4 <- filter(tc, filter = 1, method = "recursive")
par(mfrow = c(2,2))
plot(tc1, main = "TC delta = 0")
plot(tc2, main = "TC delta = 0.3")
plot(tc3, main = "TC delta = 0.7")
plot(tc4, main = "TC delta = 1", type = "s")

perubahan sementara

Dalam contoh Anda, Anda bisa menggunakan fungsi ini outliers.effectsuntuk mewakili efek dari pencilan yang terdeteksi pada seri yang diamati:

# unit impulse
m1 <- ts(outliers.effects(outlier.chicken$outliers, n = length(chicken), weights = FALSE))
tsp(m1) <- tsp(chicken)
# weighted by the estimated coefficients
m2 <- ts(outliers.effects(outlier.chicken$outliers, n = length(chicken), weights = TRUE))
tsp(m2) <- tsp(chicken)

Pencilan inovasi, IO, lebih aneh. Berlawanan dengan tipe outlier lain yang dipertimbangkan tsoutliers, efek IO tergantung pada model yang dipilih dan pada estimasi parameter. Fakta ini bisa merepotkan secara seri dengan banyak outlier. Dalam iterasi pertama dari algoritma (di mana efek dari beberapa outlier mungkin tidak terdeteksi dan disesuaikan) kualitas estimasi model ARIMA mungkin tidak cukup baik untuk secara akurat mendefinisikan IO. Selain itu, karena algoritma membuat kemajuan, model ARIMA baru dapat dipilih. Dengan demikian, dimungkinkan untuk mendeteksi IO pada tahap awal dengan model ARIMA tetapi akhirnya dinamiknya ditentukan oleh model ARIMA lain yang dipilih pada tahap terakhir.

Dalam dokumen ini ditunjukkan bahwa, dalam beberapa keadaan, pengaruh IO dapat meningkat ketika tanggal kejadiannya menjadi lebih jauh ke masa lalu, yang merupakan sesuatu yang sulit untuk ditafsirkan atau diasumsikan.

IO memiliki potensi yang menarik karena dapat menangkap outlier musiman. Jenis outlier lainnya yang dipertimbangkan tsoutlierstidak dapat menangkap pola musiman. Namun demikian, dalam beberapa kasus mungkin lebih baik untuk mencari kemungkinan pergeseran tingkat musiman, SLS, daripada IO (seperti yang ditunjukkan dalam dokumen yang disebutkan sebelumnya).

IO memiliki interpretasi yang menarik. Kadang-kadang dipahami sebagai aditif outlier yang mempengaruhi istilah gangguan dan kemudian menyebar dalam seri sesuai dengan dinamika model ARIMA. Dalam hal ini, IO seperti aditif outlier, keduanya mempengaruhi pengamatan tunggal tetapi IO adalah impuls dalam jangka waktu gangguan sedangkan AO adalah impuls yang ditambahkan langsung ke nilai-nilai yang dihasilkan oleh model ARIMA atau proses pembuatan data. . Apakah outlier mempengaruhi inovasi atau berada di luar istilah gangguan dapat menjadi bahan diskusi.

Dalam referensi sebelumnya Anda dapat menemukan beberapa contoh data nyata di mana IO terdeteksi.

javlacalle
sumber
Terima kasih atas tanggapan terperinci. Saya sangat menghargai itu. Saya punya beberapa pertanyaan tambahan. Apakah ada keuntungan menggunakan auto.arima, mengidentifikasi p, d, q dan kemudian menggunakan tsoutliers menggunakan arima sebagai metode tsmethod?
peramal
1
Keuntungan utama menggunakan forecast::auto.arimabersama tsoutliersadalah bahwa semuanya menjadi otomatis. Namun, disarankan untuk menjalankan prosedur otomatis dengan opsi alternatif. Pertama-tama Anda dapat melihat ACF atau unit root test dan kemudian memilih model ARIMA untuk diteruskan tsoutliers. Jika ada outlier yang ditemukan untuk model yang Anda ajukan maka Anda dapat mengulangi lagi analisis untuk seri yang disesuaikan. Ini adalah proses berulang. Prosedur otomatis menyediakan panduan yang bermanfaat, tetapi mungkin tidak selalu memberikan solusi terbaik atau unik.
javlacalle
1
Prosedur untuk menemukan outlier adalah berulang. Untuk keamanan batas ditetapkan pada jumlah iterasi yang diijinkan. Saat Anda mengamati peringatan, Anda dapat mencoba menjalankan algoritme dengan meningkatkan argumen maxit.iloopmenjadi 5-6 dan melihat apakah hasilnya berubah. Jika peringatan dikembalikan dengan besar maxit.iloop(mis. 20 atau lebih) itu mungkin merupakan tanda bahwa sesuatu tidak dimodelkan dengan benar. Menghapus IO dari jenis outlier yang dapat dipertimbangkan mungkin merupakan opsi yang baik dalam beberapa kasus. Dalam kebanyakan kasus, Anda dapat mengabaikan peringatan itu. Anda dapat menggunakannya suppressWarningsuntuk menghindarinya.
javlacalle
2
@mugen Saya tidak tahu buku teks yang membahas masalah ini secara menyeluruh. Karena pendekatan yang dibahas dalam posting ini terkait dengan analisis intervensi, setiap buku teks (tentang Ekonometrika atau Rangkaian Waktu) dengan bab tentang masalah ini akan sangat membantu; misalnya, Analisis Rangkaian Waktu. Dengan Aplikasi dalam R . Untuk perincian, Anda harus meninjau beberapa artikel jurnal yang berhubungan dengan masalah ini, mulai misalnya oleh Chen dan Liu (1993) dan referensi di dalamnya.
javlacalle
2
@mugen, saya juga akan memeriksa artikel Tsay . Selain itu, saya akan memeriksa buku klasik karya Pankratz yang memiliki liputan yang bagus tentang outlier.
peramal