Функция STLF в пакете ПРОГНОЗ

Я пытаюсь прогнозировать ежегодные временные ряды на еженедельной основе (52 недели в год, и у меня есть данные за 164 недели). Поскольку частота больше 24, R советует мне использовать "stlf", а не "ets", чтобы избежать игнорирования сезонности. Функция "stlf" работает отлично, и я получил следующее:

> WR.ets<-stlf(WeeklyReferral,method="ets")
> summary(WR.ets)

Forecast method: STL +  ETS(A,A,N)

Model Information:
ETS(A,A,N) 

Call:
 ets(y = x.sa, model = etsmodel) 

  Smoothing parameters:
    alpha = 0.0262 
    beta  = 1e-04 

  Initial states:
    l = 93.1548 
    b = 0.1159 

  sigma:  12.6201

     AIC     AICc      BIC 
1675.954 1676.205 1688.353 

Error measures:
                     ME     RMSE      MAE       MPE     MAPE      MASE
Training set -0.1869514 12.62011 9.790321 -2.589141 11.12905 0.5990874

Forecasts:
         Point Forecast     Lo 80     Hi 80     Lo 95     Hi 95
2013.423       95.39869  79.22537 111.57201  70.66373 120.13364
2013.442       95.03434  78.85538 111.21330  70.29075 119.77793
...............................................................

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

temp<-stl(WeeklyReferral,s.window="periodic", robust=TRUE)
> temp
 Call:
 stl(x = WeeklyReferral, s.window = "periodic", robust = TRUE)

Components
Time Series:
Start = c(2010, 15) 
End = c(2013, 22) 
Frequency = 52 
            seasonal     trend   remainder
2010.269   7.1597729  82.33453  -0.4943046
2010.288  -1.4283001  82.69446   5.7338358
..........................................
2013.404   8.0046803 117.74388  -0.7485615

Затем я использую "тренд + остаток" в качестве нового временного ряда для прогнозирования на 3 месяца (12 периодов). Я использую последний вектор состояния, полученный функцией "stlf", в качестве вектора начального состояния в моих следующих формулах. И добавьте сезонные значения на той же неделе в прошлом году обратно к прогнозируемым значениям, так как функция "stlf" показывает, что модель ETS(A,A,N).

y<-c(rep(NA,13))
l<-c(rep(NA,13))
b<-c(rep(NA,13))
e<-c(rep(NA,12))
alpha<-0.0262
beta<-0.0001

y[1]<-117.74388-0.7485615
l[1]<-109.66913
b[1]<-0.11284923

for (j in 1:1000){
  for(i in 2:13){
e[i-1]=rnorm(sd=12.6201,n=1)
b[i]<-b[i-1]+beta*e[i-1]
l[i]<-l[i-1]+b[i-1]+alpha*e[i-1]
y[i]<-l[i-1]+b[i-1]+e[i-1]+temp$time.series[i+164-52,1]
}}

Я прав?

Я пытался использовать функцию "ets" для нового разложенного временного ряда, и она давала разные параметры (альфа, бета, l,b, сигма) и не давала никаких прогнозируемых значений.

Любые мнения приветствуются.

1 ответ

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

# STL decomposition
temp <- stl(WeeklyReferral, s.window="periodic", robust=TRUE)
# Seasonally adjusted data
sa <- seasadj(temp)
seascomp <- tail(temp$time.series,52)[,1]
# ETS model
fit <- ets(sa, "ZZN")
# Simulations from ETS model with re-seasonalization
sim <- matrix(0, nrow=52, ncol=1000)
for(i in 1:1000)
  sim[,i] <- simulate(fit, nsim=52) + seascomp

Матрица sim содержит 1000 будущих путей выборки длиной 52.

Другие вопросы по тегам