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)


Най-простият подход е да зададете параметъра на трансформация на Box-Cox $\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