gpt4 book ai didi

r - FORECAST 包中的 STLF 函数

转载 作者:行者123 更新时间:2023-12-02 04:31:24 29 4
gpt4 key购买 nike

我正在尝试以周为基础预测年度时间序列(一年 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”函数,它给出了不同的参数(alpha、beta、l、b、sigma),但没有给出任何预测值。

欢迎提出任何意见。

最佳答案

据我从上面的评论中可以看出,您实际上希望从模型模拟 future 的样本路径,而不是获取点预测或区间预测。下面的代码就可以做到这一点。

# 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 个 future 样本路径,每个路径长度为 52。

关于r - FORECAST 包中的 STLF 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24991039/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com