R: отображение прогноза ARIMA как расширения прошлых данных после преобразования журнала

Моя цель: я хочу понять временной ряд, сильно авторегрессивный (об этом мне сказали результаты ACF и PACF) и сделать прогноз.

Итак, я сначала преобразовал свои данные в ts, затем разложил временной ряд, проверил его стационарность (ряд не был стационарным). Затем я провел преобразование журнала и нашел модель Arima, которая лучше всего подходит для данных - я проверил точность с точностью (x) - я выбрал модель с выходом точности, близким к 0.

Это была правильная процедура? Я новичок в статистике и R и был бы признателен за некоторую критику, если бы это было неправильно.

При построении модели Arima я использовал следующий код:

ARIMA <- Arima(log(mydata2), order=c(2,1,2), list(order=c(0,1,1), period=12))

В результате я получил функцию журнала, а данные из прошлого (данные, которые я использовал для построения модели) не отображались на диаграмме. Итак, чтобы преобразовать журнал в исходный масштаб, я использовал следующий код:

ARIMA_FORECAST <- forecast(ARIMA, h=24, lambda=0)

Это верно? Я нашел это где-то в сети и толком не понимаю.

Теперь мой главный вопрос: как я могу построить исходные данные и ARIMA_FORECAST на одной диаграмме? Я имею в виду отображение его так, как отображаются прогнозы, если преобразование журнала не выполняется - прогноз должен отображаться как расширение данных из прошлого, также должны быть доверительные интервалы.


person BigMadAndy    schedule 17.01.2018    source источник


Ответы (2)


Самый простой подход - установить параметр преобразования Бокса-Кокса $ \ lambda = 0 $ в функции моделирования, а не использовать явные логарифмы (см. https://otexts.org/fpp2/transformations.html). Затем преобразование будет автоматически отменено при составлении прогнозов. Это проще, чем подход, описанный @markus. Например:

library(forecast)

# estimate an ARIMA model to log data
ARIMA <- auto.arima(AirPassengers, lambda=0)

# make a forecast 
ARIMA_forecast <- forecast(ARIMA)

# Plot forecasts and data
plot(ARIMA_forecast)

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

Или, если вы предпочитаете графику ggplot:

library(ggplot2)
autoplot(ARIMA_forecast)

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

person Rob Hyndman    schedule 17.01.2018
comment
Большое спасибо Маркусу и Робу! Я не знал, что это можно упростить до такой степени. Но я счастлив, что результат, который я получил сейчас, используя ваш метод, очень похож на тот, который я получил раньше при использовании ручного метода создания журнала и последующего удаления журнала. - person BigMadAndy; 20.01.2018
comment
@RobHyndman Я не могу поверить, что кто-то проголосовал за мой ответ, но не за ваш. Надеюсь, благодаря моему (не очень хорошему) ответу ваш ответ станет более обоснованным. (+1) - person markus; 26.01.2018

Пакет forecast предоставляет функции autolayer и geom_forecast, которые могут помочь вам нарисовать желаемый график. Вот пример с использованием данных AirPassengers. Я использую функцию auto.arima для оценки модели.

library(ggplot2)
library(forecast)

# log-transform data
dat <- log(AirPassengers)

# estimate an ARIMA model
ARIMA <- auto.arima(dat)

# make a forecast 
ARIMA_forecast <- forecast(ARIMA, h = 24, lambda = 0)

Поскольку ваши данные относятся к классу ts, вы можете использовать функцию autoplot из ggplot2 для построения исходных данных и добавления прогноза с помощью функции autolayer из forecast.

autoplot(AirPassengers) + forecast::autolayer(ARIMA_forecast)

Результат показан ниже.

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

person markus    schedule 17.01.2018