Merencanakan nilai prediksi dalam deret waktu ARIMA di R

10

Kemungkinan ada lebih dari satu kesalahpahaman serius dalam pertanyaan ini, tetapi ini tidak dimaksudkan untuk membuat perhitungannya benar, tetapi lebih untuk memotivasi pembelajaran deret waktu dengan beberapa fokus dalam pikiran.

Dalam mencoba memahami penerapan deret waktu, tampaknya seolah-olah tren data membuat prediksi nilai masa depan menjadi tidak masuk akal. Misalnya, gtempderet waktu dari astsapaket terlihat seperti ini:

masukkan deskripsi gambar di sini

Tren naik dalam dekade terakhir perlu diperhitungkan ketika merencanakan nilai-nilai masa depan yang diprediksi.

Namun, untuk mengevaluasi fluktuasi deret waktu, data perlu dikonversi menjadi deret waktu stasioner. Jika saya memodelkannya sebagai proses ARIMA dengan differencing (saya kira ini dilakukan karena tengah 1dalam order = c(-, 1, -)) seperti pada:

require(tseries); require(astsa)
fit = arima(gtemp, order = c(4, 1, 1))

dan kemudian mencoba untuk memprediksi nilai masa depan ( tahun), saya kehilangan komponen tren ke atas:50

pred = predict(fit, n.ahead = 50)
ts.plot(gtemp, pred$pred, lty = c(1,3), col=c(5,2))

masukkan deskripsi gambar di sini

Tanpa perlu menyentuh optimasi sebenarnya dari parameter ARIMA tertentu, bagaimana saya bisa memulihkan tren kenaikan di bagian prediksi plot?

Saya menduga ada OLS "tersembunyi" di suatu tempat, yang akan menjelaskan ketidakstabilan ini?

Saya telah menemukan konsep drift, yang dapat dimasukkan ke dalam Arima()fungsi forecastpaket, memberikan plot yang masuk akal:

par(mfrow = c(1,2))
fit1 = Arima(gtemp, order = c(4,1,1), 
             include.drift = T)
future = forecast(fit1, h = 50)
plot(future)
fit2 = Arima(gtemp, order = c(4,1,1), 
             include.drift = F)
future2 = forecast(fit2, h = 50)
plot(future2)

masukkan deskripsi gambar di sini

yang lebih buram untuk proses komputasinya. Saya bertujuan semacam pemahaman tentang bagaimana tren dimasukkan ke dalam perhitungan plot. Apakah salah satu masalah yang tidak ada driftdalam arima()(huruf kecil)?


Sebagai perbandingan, dengan menggunakan dataset AirPassengers, jumlah penumpang yang diprediksi di luar titik akhir dataset diplot dengan memperhitungkan tren kenaikan ini:

masukkan deskripsi gambar di sini

The kode adalah:

fit = arima(log(AirPassengers), c(0, 1, 1), seasonal = list(order = c(0, 1, 1), period = 12))
pred <- predict(fit, n.ahead = 10*12)
ts.plot(AirPassengers,exp(pred$pred), log = "y", lty = c(1,3))

rendering plot yang masuk akal.

Antoni Parellada
sumber
1
Saya akan mengatakan bahwa jika Anda berpikir Anda memiliki serangkaian tren yang telah berubah dari waktu ke waktu, model ARIMA mungkin bukan cara terbaik untuk mendekati prediksi mereka. Dengan tidak adanya pengetahuan materi pelajaran (yang mungkin mengarah ke model yang lebih baik), saya akan cenderung melihat model ruang negara; khususnya varian Model Struktural Dasar untuk sesuatu seperti ini. Banyak diskusi tentang model ruang angkasa yang sulit diikuti, tetapi buku dan makalah Andrew Harvey cukup mudah dibaca (buku Peramalan, Model Rangkaian Waktu Struktural, dan Filter Kalman cukup bagus, misalnya). ...
ctd
ctd ... Ada beberapa penulis lain yang melakukannya dengan cukup baik, tetapi bahkan penulis yang lebih baik membuatnya sedikit lebih rumit daripada yang sebenarnya diperlukan untuk seorang pemula.
Glen_b -Reinstate Monica
Terima kasih, @Glen_b. Hanya mencoba untuk mendapatkan bakat untuk deret waktu, dan seperti dalam banyak topik matematika kurangnya mukadimah memotivasi adalah pembunuh. Semua seri waktu yang mungkin benar-benar kita pedulikan tampaknya tren naik atau turun - populasi, GOP, pasar saham, suhu global. Dan saya yakin Anda ingin menghilangkan tren (mungkin sebentar) untuk melihat pola siklus dan musiman. Tetapi penyambungan kembali temuan dengan tren menyeluruh untuk membuat prediksi tersirat atau tidak ditujukan sebagai tujuan.
Antoni Parellada
Komentar Rob Hyndman di sini relevan. Saya mungkin kembali dan memperluas sedikit itu.
Glen_b -Reinstate Monica
Posting blog Rob J. Hyndman "Konstanta dan model ARIMA dalam R" mungkin semua yang perlu Anda ketahui. Saya akan penasaran mendengar pendapat Anda setelah Anda menjelajahi posting blog.
Richard Hardy

Jawaban:

1

Itu sebabnya Anda tidak boleh melakukan ARIMA atau apapun pada data yang tidak stasioner.

Menjawab pertanyaan mengapa perkiraan ARIMA semakin datar cukup jelas setelah melihat persamaan ARIMA dan salah satu asumsi. Ini penjelasan yang disederhanakan, jangan memperlakukannya sebagai bukti matematika.



yt=βyt1+α+ϵ
β|β|1βyt1=0yt=const=α

new.data=ytyt1new.data=yt/yt11

 require(tseries)
 require(forecast)
 require(astsa)
 dif<-diff(gtemp)
 fit = auto.arima(dif)
 pred = predict(fit, n.ahead = 50)
 ts.plot(dif, pred$pred, lty = c(1,3), col=c(5,2))
 gtemp_pred<-gtemp[length(gtemp)]
 for(i in 1:length(pred$pred)){
   gtemp_pred[i+1]<-gtemp_pred[i]+pred$pred[i]
 }
 plot(c(gtemp,gtemp_pred),type="l")

masukkan deskripsi gambar di sini

mbt
sumber
α
ααα
BAIK. Saya harus bermain sedikit dengan kode Anda untuk melihat apa yang coba diilustrasikan dalam kaitannya dengan persamaan ts. Saya belum bekerja dengan ts, dan sudah lama saya sejak saya memposting pertanyaan.
Antoni Parellada
Setelah bermain sedikit dengan kode, saya melihat apa yang terjadi. Bisakah Anda memasukkan koefisien kecocokan, yang AR1 = 0.257; MA = - 0.7854, ke dalam persamaan model ARIMA untuk sepenuhnya menghargai proses pembuatan garis miring yang diproyeksikan atau diprediksi pada akhir plot Anda?
Antoni Parellada
y^t=ipβiyti+jqγjϵtj+α+ϵt
y^t=βyt1+γϵt1+α+ϵt
β=0.257γ=0.7854α=0.0064