Построение прогнозных значений во временных рядах ARIMA в R

10

Вероятно, в этом вопросе есть несколько серьезных недоразумений, но это не означает, что вычисления правильны, а скорее мотивируют изучение временных рядов с некоторым вниманием.

Пытаясь понять применение временных рядов, кажется, что удаление данных делает прогноз будущих значений неправдоподобным. Например, gtempвременной ряд из astsaпакета выглядит так:

введите описание изображения здесь

Тенденция к росту в последние десятилетия должна учитываться при построении прогнозируемых будущих значений.

Однако для оценки колебаний временных рядов данные должны быть преобразованы в стационарные временные ряды. Если я модель это как процесс ARIMA с разностным (я предполагаю , что это происходит из - за средний 1дюйм order = c(-, 1, -)) , как в:

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

и затем попытаться предсказать будущие значения ( лет), я пропускаю компонент восходящего тренда:50

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))

рендеринг сюжета, который имеет смысл.

Антони Пареллада
источник
1
Я бы сказал, что если вы считаете, что у вас есть серия, в которой тенденция со временем изменилась, модели ARIMA могут быть не лучшим способом приблизиться к их прогнозированию. В отсутствие предметных знаний (которые могут привести к созданию лучших моделей), я был бы склонен взглянуть на модели пространства состояний; в частности варианты базовой структурной модели для чего-то подобного. Трудно следить за многими обсуждениями моделей пространства состояний, но книги и статьи Эндрю Харви вполне читабельны (например, книга « Прогнозирование, модели структурных временных рядов и фильтр Калмана» довольно хороша). ... ctd
Восстановить Монику
ctd ... Есть несколько других авторов, которые справляются достаточно хорошо, но даже лучшие из них делают это немного сложнее, чем это действительно должно быть для новичка.
Glen_b
Спасибо, @Glen_b. Просто пытаться понять стиль временных рядов, и, как и во многих других математических темах, отсутствие мотивирующей преамбулы является убийцей. Кажется, что все временные ряды, которые нас действительно волнуют, имеют тенденцию к росту или уменьшению - население, Республиканская партия, фондовый рынок, глобальные температуры. И я понимаю, что вы хотите избавиться от тенденций (возможно, на секунду), чтобы увидеть циклические и сезонные модели. Но объединение результатов с общей тенденцией делать прогнозы либо подразумевается, либо не рассматривается как цель.
Антони Пареллада
Комментарии Роба Хиндмана здесь актуальны. Я могу вернуться и немного рассказать об этом.
Glen_b
Публикация в блоге Роба Дж. Хиндмана «Константы и модели ARIMA в R» - это, вероятно, все, что вам нужно знать. Мне было бы интересно услышать ваше мнение, как только вы изучите сообщение в блоге.
Ричард Харди

Ответы:

1

Вот почему вы не должны делать ARIMA или что-либо еще на нестационарных данных.

Ответ на вопрос, почему прогноз ARIMA сбивается, становится довольно очевидным после рассмотрения уравнения ARIMA и одного из предположений. Это упрощенное объяснение, не рассматривайте его как математическое доказательство.

Давайте рассмотрим модель AR (1), но это верно для любой ARIMA (p, d, q).
Уравнение AR (1): и предположение о , что . С таким β каждая следующая точка ближе к 0, чем предыдущая, пока , а .

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")

введите описание изображения здесь

MBT
источник
Спасибо. Короче говоря, будет наклоном окончательного сюжета? α
Антони Пареллада
Нет. Я думаю, что вы перепутали это, потому что склон часто обозначается как . Однако, если вы спросите, какова связь между этим и уклоном, ответ не будет тривиальным. Короче говоря, если вы выбрали дифференцирование, было бы касательной к уклону, если бы вы выбрали% change, то не было бы никакого уклона, потому что тренд не будет линейным. ααα
августа
ХОРОШО. Мне придется немного поиграть с вашим кодом, чтобы увидеть, что он пытается проиллюстрировать в отношении уравнения ts. Я не работал с тс, и я давно не публиковал вопрос.
Антони Пареллада
Немного поиграв с кодом, я вижу, что происходит. Можете ли вы включить коэффициенты соответствия, которые входят AR1 = 0.257; MA = - 0.7854в уравнение модели ARIMA, чтобы полностью оценить процесс генерации спроецированной или прогнозируемой наклонной линии хвоста в конце графика?
Антони Пареллада
Конечно. В свой ответ я положил только уравнение AR (1). Уравнение для всего процесса ARMA (p, q): где первая сумма - AR (p) Часть и вторая сумма - это процесс MA (q). У нас есть ARMA (1,1), поэтому он менее сложен: где , , . у т=βут-1+gammaepsiт-1+α+epsiтβ=0,257γ=-0,7854α=0,0064
y^t=ipβiyti+jqγjϵtj+α+ϵt
y^t=βyt1+γϵt1+α+ϵt
β=0.257γ=0.7854α=0.0064
августа