Cara menggunakan DLM dengan pemfilteran Kalman untuk perkiraan

19

Bisakah seseorang memandu saya melalui contoh tentang cara menggunakan filter DLM Kalman dalam R pada seri waktu. Katakanlah saya memiliki nilai-nilai ini (nilai triwulanan dengan musiman tahunan); bagaimana Anda menggunakan DLM untuk memprediksi nilai selanjutnya? Dan BTW, apakah saya memiliki data historis yang cukup (berapa minimum)?

89  2009Q1  
82  2009Q2  
89  2009Q3  
131 2009Q4  
97  2010Q1  
94  2010Q2  
101 2010Q3  
151 2010Q4  
100 2011Q1  
?   2011Q2

Saya mencari jenis kode buku resep gaya-R cara-demi-langkah jawaban. Akurasi prediksi bukanlah tujuan utama saya, saya hanya ingin mempelajari urutan kode yang memberi saya nomor untuk 2011Q2, bahkan jika saya tidak memiliki cukup data.

datayoda
sumber
3
Ini mungkin mendapatkan jawaban yang lebih baik di stats.stackexchange.com
Joshua Ulrich
Bump ... Saya masih tidak mengerti bagaimana melakukan ini. Adakah yang mau menjawab pos asli?
datayoda
2
Dengan DLM itu tidak seperti gaya buku masak yang Anda inginkan. Saya akan mengambil jawaban RockScience (sketsa DLM) dan berjalan melewatinya. DLM lebih seperti merancang program daripada teknik lain yang hanya perlu memasukkan beberapa data dan menyesuaikan beberapa parameter. Pada akhirnya, Anda merancang satu set array yang mengimplementasikan sesuatu seperti Model Markov Tersembunyi, dan dlmpaket membuat ini semudah mungkin.
Wayne
Apakah Anda punya solusi untuk masalah Anda? Saya mencari solusi untuk jenis masalah waktu yang serupa tetapi tidak dapat menemukan solusi.
Sudahkah Anda mengerjakan makalah yang disarankan oleh @RockScience? Apakah Anda sudah melihat dlmpaketnya? Seperti yang saya katakan dalam jawaban saya, DLM lebih seperti membuat program daripada memasukkan beberapa variabel ke panggilan fungsi. datayoda tidak pernah menerima jawaban, jadi saya tidak yakin mereka bisa melewati pengamatan ini.
Wayne

Jawaban:

16

Makalah di JSS 39-02 membandingkan 5 paket Kalman filtering R yang berbeda dan memberikan kode sampel.

G. Grothendieck
sumber
16

DLM memang keren, tetapi tidak sesederhana, katakanlah, ARIMA atau metode lain. Dalam metode lain, Anda memasukkan data Anda dan kemudian men-tweak beberapa parameter algoritma, mungkin merujuk ke berbagai diagnostik untuk memandu pengaturan Anda.

Dengan DLM, Anda membuat mesin ruang angkasa negara, yang terdiri dari beberapa matriks yang pada dasarnya mengimplementasikan sesuatu seperti Hidden Markov Model. Beberapa paket ( sspirsaya pikir, antara lain) berharap Anda memahami konsep dan apa yang dilakukan oleh matriks. Saya sangat menyarankan Anda mulai dengan dlmpaket, dan seperti yang disarankan @RockScience, telusuri sketsa tersebut.

Pada dlmdasarnya Anda akan mengambil beberapa langkah:

  1. Apa jenis komponen yang menggambarkan seri saya? Sebuah tren? Musiman? Variabel eksogen? Anda akan menggunakan dlmalat seperti dlmModPolyuntuk mengimplementasikan komponen-komponen ini, menggunakan +operator untuk bergabung bersama menjadi satu model.

  2. Buat subrutin R yang membutuhkan banyak parameter yang diperlukan oleh model ini, membuat komponen dengan parameter tersebut, lalu menambahkannya bersama-sama dan mengembalikan model yang dihasilkan.

  3. Gunakan dlmMLEuntuk melakukan pencarian / optimasi untuk menemukan parameter yang sesuai (menggunakan MLE, yang pada dasarnya adalah optimasi, dengan perangkap yang dapat terjadi dalam optimasi). dlmMLEberulang kali panggil subrutin R Anda dengan parameter kandidat untuk membuat model, lalu uji mereka.

  4. Buat model akhir Anda, menggunakan subrutin R yang Anda buat plus parameter yang Anda temukan di langkah 3.

  5. Saring data Anda dengan dlmFilter, lalu mungkin lancar dlmSmooth.

  6. Jika Anda menggunakan dlmModRegatau melakukan sesuatu yang menyebabkan model memiliki parameter varian waktu, Anda tidak dapat menggunakan dlmForecastuntuk meramalkan seri Anda. Jika Anda berakhir dengan model varian waktu, Anda akan ingin mengisi data input Anda dengan NA dan biarkan dlmFilterisinya untuk Anda (perkiraan orang miskin), karena dlmForecasttidak bekerja dengan parameter yang bervariasi waktu.

  7. Jika Anda ingin memeriksa komponen secara terpisah (katakan tren, secara terpisah dari musim), Anda harus memahami matriks dan apa yang ada di setiap kolom, ditambah memahami sedikit tentang bagaimana dlmmenyatukannya (urutan penting!).

Ada paket lain, yang namanya lolos dari saya, yang mencoba membuat ujung depan yang dapat menggunakan beberapa paket ini (termasuk dlmsebagai ujung belakang). Sayangnya, saya tidak pernah berhasil dengan baik, tapi itu mungkin saya.

Saya sangat merekomendasikan untuk membeli buku tentang DLM. Saya mendapat beberapa dari mereka dan banyak bermain dlmuntuk sampai ke tempat saya, dan saya bukan ahli dengan cara apa pun.

Wayne
sumber
Terima kasih Wayne, saya pikir kasus saya cukup sederhana sehingga saya tidak menemukan tren yang jelas atau musiman dalam inspeksi visual. (Namun, jika Anda mengetahui adanya tes dalam R, tolong beri tahu saya, saya akan mencoba menjalankannya). Masalah saya adalah bahwa saya tidak tahu bagaimana mengisi argumen seperti (FF, V, GG, W, m0, C0, dV dll) dalam fungsi dlm untuk data saya? Ini adalah masalah utama bagi saya. Jika saya memiliki data seri bivariat (y = X1 + X2) misalnya (harga = permintaan + penawaran), lalu bagaimana saya bisa menghitung argumen ini untuk data saya? FF, V, GG, W, m0, C0, dV dll yang diperlukan dalam fungsi dlm
nclfinance
1
@nclfinance Harap baca FAQ dan jangan memperlakukan tempat ini sebagai forum.
@nclfinance: Bekerja melalui dlmsketsa paket. Anda akan belajar apa yang perlu Anda ketahui. Itu sebabnya saya sarankan dlm, karena Anda tidak membuat FF, dll, sendiri.
Wayne