Функция 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.