如何在不重新估计参数的情况下对测试数据重新拟合 Holt-Winters 指数平滑模型

How to refit a Holt-Winters exponential smoothing model on test data without re-estimation of parameters

我尝试使用 HoltWinters 方法进行指数平滑来生成多个单步预测。因此,我将我的数据分为训练和测试,并在我的训练集上拟合了一个 HoltWinters 模型。现在我想为我的测试数据的长度生成多个单步预测,这样模型就会随着测试集的每一次新观察而“更新”,而无需重新估计参数。某种程度上可以完成滚动原点交叉验证。 我找到了 refit() 函数,但这似乎只适用于 ARIMA 模型。有人知道一些可以工作的代码吗?或者我可以在什么地方读到它?

Holt-Winters 方法是 ETS 模型的特例。所以你可以像这样使用 fable 包中的 ETS 函数:

library(fable)
library(dplyr)

fit <- as_tsibble(USAccDeaths) %>%
  filter(lubridate::year(index) < 1977) %>%
  model(ets = ETS(value))

fit %>%
  refit(as_tsibble(USAccDeaths)) %>%
  report()
#> Series: value 
#> Model: ETS(A,N,A) 
#>   Smoothing parameters:
#>     alpha = 0.6570182 
#>     gamma = 0.004485907 
#> 
#>   Initial states:
#>      l[0]      s[0]     s[-1]    s[-2]     s[-3]    s[-4]    s[-5]    s[-6]
#>  9753.881 -30.20712 -286.0886 227.9668 -65.55104 977.0047 1673.521 806.8883
#>     s[-7]     s[-8]     s[-9]    s[-10]   s[-11]
#>  327.0867 -529.6172 -754.7921 -1551.379 -794.833
#> 
#>   sigma^2:  80017.07
#> 
#>      AIC     AICc      BIC 
#> 1131.232 1137.507 1160.828

reprex package (v2.0.1)

创建于 2022-06-02

如果您特别想要 Holt-Winters 变体,您可以使用

model(ets = ETS(value ~ trend("A") + season("M")))

对于乘法 Holt-Winters 模型或

model(ets = ETS(value ~ trend("A") + season("A")))

对于添加剂 Holt-Winters 模型