У цьому питанні, мабуть, існує більше ніж одне серйозне непорозуміння, але воно не має на меті правильне обчислення, а мотивувати вивчення часових рядів з деякою увагою.
Намагаючись розібратися у застосуванні часових рядів, здається, що неначе тренд даних робить передбачення майбутніх значень неправдоподібними. Наприклад, gtemp
часовий ряд із astsa
пакету виглядає приблизно так:
Тенденцію до зростання в останні десятиліття потрібно враховувати при побудові прогнозованих майбутніх значень.
Однак, щоб оцінити коливання часових рядів, дані потрібно перетворити на стаціонарний часовий ряд. Якщо я моделюю це як процес ARIMA з розмежуванням (я думаю, це відбувається через середину 1
в order = c(-, 1, -)
), як у:
require(tseries); require(astsa)
fit = arima(gtemp, order = c(4, 1, 1))
а потім спробуйте передбачити майбутні значення ( років), я пропускаю компонент висхідної тенденції:
pred = predict(fit, n.ahead = 50)
ts.plot(gtemp, pred$pred, lty = c(1,3), col=c(5,2))
Не торкаючись фактичної оптимізації конкретних параметрів ARIMA, як я можу відновити тенденцію до зростання в передбачуваній частині сюжету?
Я підозрюю, що є OLS десь "захований", який би пояснював цю нестаціонарність?
Я натрапив на концепцію drift
, яка може бути включена у Arima()
функцію forecast
пакету, надаючи правдоподібний сюжет:
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)
що є більш непрозорим щодо його обчислювального процесу. Я націлений на якесь розуміння того, як тенденція включена в обчислення сюжету. Є чи одна з проблем , які існують не drift
в arima()
( в нижньому регістрі)?
Для порівняння, використовуючи набір даних AirPassengers
, передбачувана кількість пасажирів поза кінцевою точкою набору даних будується з урахуванням цієї тенденції зростання:
Код є:
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))
надання сюжету, який має сенс.