Saya memiliki seri kebun binatang dengan banyak nilai yang hilang. Saya membaca yang auto.arima
dapat menyalahkan nilai-nilai yang hilang ini? Adakah yang bisa mengajari saya cara melakukannya? Terima kasih banyak!
Inilah yang saya coba, tetapi tidak berhasil:
fit <- auto.arima(tsx)
plot(forecast(fit))
Jawaban:
Pertama, perlu diketahui bahwa
forecast
menghitung prediksi out-of-sample tetapi Anda tertarik pada observasi in-sample.Filter Kalman menangani nilai yang hilang. Dengan demikian Anda dapat mengambil bentuk ruang keadaan model ARIMA dari output yang dikembalikan oleh
forecast::auto.arima
ataustats::arima
dan diteruskan keKalmanRun
.Edit (perbaiki dalam kode berdasarkan jawaban oleh stats0007)
Dalam versi sebelumnya saya mengambil kolom dari status yang disaring terkait dengan seri yang diamati, namun saya harus menggunakan seluruh matriks dan melakukan operasi matriks yang sesuai dari persamaan pengamatan, . (Terima kasih kepada @ stats0007 untuk komentarnya.) Di bawah ini saya memperbarui kode dan plot sesuai.yt=Zαt
Saya menggunakan
ts
objek sebagai seri sampel, bukanzoo
, tetapi harus sama:Anda dapat memplot hasilnya (untuk seluruh seri dan sepanjang tahun dengan pengamatan yang hilang di tengah sampel):
Anda dapat mengulangi contoh yang sama menggunakan Kalman lebih halus, bukan filter Kalman. Yang perlu Anda ubah adalah baris-baris ini:
Berurusan dengan pengamatan yang hilang melalui filter Kalman kadang-kadang ditafsirkan sebagai ekstrapolasi seri; ketika Kalman lebih halus digunakan, pengamatan yang hilang dikatakan diisi dengan interpolasi dalam seri yang diamati.
sumber
makeARIMA
mendefinisikan matriks bentuk ruang negara dan saya akan mengatakan bahwa kolom yang diambilid
sudah benar. Vektor dalam persamaan pengamatan didefinisikanmakeARIMA
sebagai :, diZ <- c(1, rep.int(0, r - 1L), Delta)
manaDelta
vektor berisi koefisien dari filter pembeda. Jika tidak ada filter differencing (yaitu, model ARMA,length(tmp)==1
) makaid
harus 1; jika tidak, kolom pertama terkait dengan seri differenced, sedangkan elemen berikutnya dalamZ
mengambil nilai 1 terkait dengan , indeks yang harus diambil.Inilah solusi saya:
@ Javlacalle:
Terima kasih untuk posting Anda, sangat menarik!
Saya punya dua pertanyaan untuk solusi Anda, harap Anda dapat membantu saya:
Mengapa Anda menggunakan KalmanRun alih-alih KalmanSmooth? Saya membaca KalmanRun dianggap ekstrapolasi, sementara smooth akan menjadi estimasi.
Saya juga tidak mendapatkan bagian id Anda. Mengapa Anda tidak menggunakan semua komponen di .Z? Maksud saya misalnya .Z memberikan 1, 0,0,0,0,1, -1 -> 7 nilai. Ini berarti .smooth (dalam kasus Anda untuk negara bagian KalmanRun) memberi saya 7 kolom. Seperti yang saya mengerti kolom alle yang 1 atau -1 masuk ke model.
Misalkan baris nomor 5 tidak ada di AirPass. Lalu saya akan mengambil jumlah baris 5 seperti ini: Saya akan menambahkan nilai dari kolom 1 (karena Z memberi 1), saya tidak akan menambahkan kolom 2-4 (karena Z mengatakan 0), saya akan menambahkan kolom 5 dan saya akan tambahkan nilai negatif dari kolom 7 (karena Z mengatakan -1)
Apakah solusi saya salah? Atau keduanya baik-baik saja? Bisakah Anda menjelaskan lebih lanjut kepada saya?
sumber