首页 > 解决方案 > 如何通过采样 beta 循环 Holt 的双指数平滑?

问题描述

我想预测数百条记录,其中包含一些不同的 alpha 和 beta 循环。我的目标是在 RStudio 中通过 2 个 beta 样本(0.1 和 0.9)循环 holt 结果。这是代码:

library(forecast)
library(tidyverse)
library(magicfor)
magic_for(silent =  TRUE)
    dataset<- c(100,200,300,400,500,600,700,800,900,800,700)
    x<-c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9)

#-----------HOLT FOR BETA 0.1------------------

for (alpha in x) {
  des<-holt(dataset, alpha = alpha, beta=0.1)
  mape<-mean(abs(des$residuals)/des$x)*100
  put(beta=0.1, mape)
}
result01<-magic_result_as_dataframe()

#-----------HOLT FOR BETA 0.9------------------

for (alpha in x) {
  des<-holt(dataset, alpha = alpha, beta=0.9)
  mape<-mean(abs(des$residuals)/des$x)*100
  put(beta=0.9, mape)
}
result02<-magic_result_as_dataframe()

但我在 beta=0.9 中遇到错误,这是通知:

[1] "Model: ETS(A,A,N)" Error in ets(x, "AAN", alpha = alpha, beta = beta, phi = phi, damped = damped, : No model able to be fitted

我发现问题出在数据集上,如果我放置 8 条或更少的记录,它可以预测 beta=0.1、0.9 以及各种 alpha 和 beta 样本。但如果它有超过 8 条记录,它只能预测 beta=0.1 和更低(0.1、0.01、0.001、0.0001 仅)但如果 beta 高于 0.1 则可能是错误的

你能帮我解决这个问题吗?提前致谢

标签: rstatisticsforecastingholtwinters

解决方案


在 使用的参数化中holt(),beta 必须小于 alpha。有关此问题的讨论,请参见https://otexts.com/fpp2/estimation-and-model-selection.html

这里有一些代码可以为一系列 alpha 和 beta 值做你想做的事情。

library(forecast)
library(tidyverse)

dataset <- c(100, 200, 300, 400, 500, 600, 700, 800, 900, 800, 700)
get_mape <- function(x, alpha, beta) {
  des <- holt(dataset, alpha=alpha, beta=beta)
  mean(abs(des$residuals) / des$x) * 100
}
holt_mape <- expand.grid(
    alpha = c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9),
    betastar = c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9)
  ) %>%
  mutate(
    beta = betastar * alpha,
    mape = map2_dbl(alpha, beta, get_mape, x=dataset)
  ) %>%
  as_tibble()
holt_mape
#> # A tibble: 81 x 4
#>    alpha betastar   beta  mape
#>    <dbl>    <dbl>  <dbl> <dbl>
#>  1   0.1      0.1 0.01   18.5 
#>  2   0.2      0.1 0.02   17.9 
#>  3   0.3      0.1 0.03   16.7 
#>  4   0.4      0.1 0.04   14.7 
#>  5   0.5      0.1 0.05   13.6 
#>  6   0.6      0.1 0.06   12.5 
#>  7   0.7      0.1 0.0700 11.5 
#>  8   0.8      0.1 0.08   10.6 
#>  9   0.9      0.1 0.09    9.64
#> 10   0.1      0.2 0.02   19.1 
#> # … with 71 more rows

reprex 包(v0.3.0)于 2020-06-26 创建

但是,请注意 MAPE 是在训练数据上计算的。通常它会根据测试数据进行计算。


推荐阅读