Извлечение верхнего и нижнего пределов из функции прогноза - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь построить график с нижним и верхним пределами. Поскольку я комбинирую две модели прогноза, я не уверен, как получить значения нижнего и верхнего пределов в матрице.

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

Это код, который я пытаюсь:

df <- Base_df[1:39, ] 
Test_df <- Base_df[40:45,]

fcast <- matrix(NA,nrow=6,ncol=ncol(df))
upper <- matrix(NA,nrow=6,ncol=ncol(df))
lower <- matrix(NA,nrow=6,ncol=ncol(df))

for(i in 1:ncol(df)){
  fcets <- forecast(ets(df[,i],ic='aicc', seasonal.periods=6, level =95))
  fcar <- forecast(arima(df[,i]),h=12/2, level =95)
    #combining the values from both the forecasts 
    fcast[,i] <- (0.5*fcets$mean + 0.5*fcar$mean)
    #To get the values of upper limit
    upper[,i] <- 0.5*fcets$upper+0.5*fcar$upper
    #To get the values of lower limit
    lower[,i]<- 0.5*fcets$lower+0.5*fcar$lower
    } 

for(i in 1:10){
  plot(df[,i], type="l", col ="blue", main = colnames(Test_df)[i])
  lines(fcast[,i], col='red')
  lines(upper[,i])
  lines(lower[,i])
}

Ошибка:

Error in upper[, i] <- 0.5 * fc1$upper[, 1] + 0.5 * fc2$upper[, 1] : 
 number of items to replace is not a multiple of replacement length 

Обратите внимание, что df - это матрица с 10 кулонами и 39 строками, и все эти столбцы обозначают данные об отдельном продукте.

Я понимаю, что верхняя и нижняя матрицы должны быть определены по-разному. Может кто-нибудь помочь мне с тем, как это можно правильно закодировать?

1 Ответ

0 голосов
/ 03 апреля 2019

Почему бы не использовать встроенные функции ( fable )

library(fable)
library(tsibble)
library(tsibbledata)
library(lubridate)
aus_retail %>%
  filter(
    State %in% c("New South Wales", "Victoria"),
    Industry == "Department stores"
  ) %>% 
  fable::model(
    ets = ETS(box_cox(Turnover, 0.3))
  ) %>%
  fable::forecast(level = 95) %>% 
  autoplot(filter(aus_retail, year(Month) > 2010))

enter image description here

...