Вероятно, в этом вопросе есть несколько серьезных недоразумений, но это не означает, что вычисления правильны, а скорее мотивируют изучение временных рядов с некоторым вниманием.
Пытаясь понять применение временных рядов, кажется, что удаление данных делает прогноз будущих значений неправдоподобным. Например, 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))
рендеринг сюжета, который имеет смысл.
источник
Ответы:
Вот почему вы не должны делать ARIMA или что-либо еще на нестационарных данных.
Ответ на вопрос, почему прогноз ARIMA сбивается, становится довольно очевидным после рассмотрения уравнения ARIMA и одного из предположений. Это упрощенное объяснение, не рассматривайте его как математическое доказательство.
Давайте рассмотрим модель AR (1), но это верно для любой ARIMA (p, d, q).
Уравнение AR (1): и предположение о , что . С таким β каждая следующая точка ближе к 0, чем предыдущая, пока , а .
В таком случае, как бороться с такими данными? Вы должны сделать это стационарным путем дифференцирования ( ) или расчета% изменения ( ). Вы моделируете различия, а не сами данные. Различия становятся постоянными со временем, это ваша тенденция.new.data=yt−yt−1 new.data=yt/yt−1−1
источник
AR1 = 0.257; MA = - 0.7854
в уравнение модели ARIMA, чтобы полностью оценить процесс генерации спроецированной или прогнозируемой наклонной линии хвоста в конце графика?