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, gtemp
deret waktu dari astsa
paket terlihat seperti ini:
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 1
dalam 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:
pred = predict(fit, n.ahead = 50)
ts.plot(gtemp, pred$pred, lty = c(1,3), col=c(5,2))
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 forecast
paket, 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)
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 drift
dalam arima()
(huruf kecil)?
Sebagai perbandingan, dengan menggunakan dataset AirPassengers
, jumlah penumpang yang diprediksi di luar titik akhir dataset diplot dengan memperhitungkan tren kenaikan ini:
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.