небольшой анализ временных рядов - PullRequest
2 голосов
/ 19 февраля 2020

Мне нужно сделать прогноз на ближайшие 2 года. Тем не менее, у меня есть очень небольшое количество данных. Данные:

   structure(list(BelegDat = structure(c(16801, 16832, 16861, 16892, 
    16922, 16953, 16983, 17014, 17045, 17075, 17106, 17136, 17167, 
    17198, 17226, 17257, 17287, 17318, 17348, 17379, 17410, 17440, 
    17471, 17501, 17532, 17563, 17591, 17622, 17652, 17683, 17713, 
    17744, 17775, 17805, 17836, 17866, 17897, 17928, 17956, 17987, 
    18017, 18048, 18078, 18109, 18140, 18170, 18201, 18231), class = "Date"), 
        Value = c(37, 28, 37, 47, 37, 28, 37, 37, 19, 37, 37, 28, 
        40, 30, 40, 50, 40, 30, 40, 40, 20, 40, 40, 30, 30, 40, 30, 
        30, 40, 30, 30, 50, 30, 50, 20, 20, 60, 20, 60, 40, 20, 10, 
        40, 20, 20, 10, 44, 33)), row.names = c(NA, -48L), class = "data.frame")

Я использую ARIMA:

myts <- ts(df_ready[,2], start=c(2016,01), end=c(2019,12), frequency = 12)

fit <- auto.arima(myts)

pred <- forecast(fit, 24) # next 2 years (24 Months)
plot(pred)

Мой вывод: Вывод

Не могли бы вы, Пожалуйста, покажите мне мою ошибку / предложите другой способ, как можно сделать этот прогноз?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Ваши данные не подтверждают сезонность; ваши данные согласуются с белым шумом, смещенным на смещение.

Форсирование определенной c структуры SARIMA с последующим ее использованием для прогнозирования на основе данных о белом шуме очень опасно.

Демонстрировать давайте изменим ситуацию и сгенерируем данные белого шума, которые сдвинуты на одно и то же смещение и имеют ту же дисперсию, что и данные образца. Имейте в виду, что это белый шум по конструкции .

library(forecast)
library(ggplot2)
set.seed(2018)
ts <- ts(
    rnorm(48, mean = 33.8750, sd = 11.15796),
    start = c(2016, 1), frequency = 12)
autoplot(ts) + theme_minimal()

enter image description here

Теперь мы подходим к SARIMA (0, 0 , 0) (0, 1, 0) 12 модель для данных.

fit <- arima(ts, order = c(0, 0 , 0), seasonal = list(order = c(0, 1, 0), period = 12))
fit
#
#Call:
#arima(x = ts, order = c(0, 0, 0), seasonal = list(order = c(0, 1, 0), period = 12))
#
#
#sigma^2 estimated as 283:  log likelihood = -152.7,  aic = 307.39

Опять-таки, имейте в виду, что данные были сгенерированы из ARIMA (0,0,0) = SARIMA (0,0,0) (0,0,0), то есть модель белого шума.

Теперь мы используем fit для прогноза

autoplot(forecast(ts, h = 24, model = fit)) + theme_minimal()

Так что мы сделано здесь, чтобы сделать прогноз на основе данных о белом шуме, предполагая несуществующий эффект сезонности.

enter image description here

Да, вы можете сделать это, не поднимая никаких предупреждений / флагов в пределах forecast. И нет, эти прогнозы не будут иметь смысла.

1 голос
/ 19 февраля 2020

В auto.arima есть аргумент D. Нам нужно установить его на 1, чтобы заставить ариму использовать сезонную модель. В этом случае

m1 <- ts(df$Value, start = min(df$BelegDat), frequency = 12)
autoplot(forecast(auto.arima(m1, D = 1), 24)) 

, что дает,

enter image description here

...