Вероятно, в этом вопросе есть несколько серьезных недоразумений, но это не означает, что вычисления правильны, а скорее мотивируют изучение временных рядов с некоторым вниманием.
Пытаясь понять применение временных рядов, кажется, что удаление данных делает прогноз будущих значений неправдоподобным. Например, 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))
рендеринг сюжета, который имеет смысл.