【问题标题】:How to loop the Holt's Double Exponential Smoothing by sampling beta?如何通过采样 beta 循环 Holt 的双指数平滑?
【发布时间】:2020-06-25 09:41:39
【问题描述】:

我想预测数百条记录,其中包含一些不同的 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,则可能会出错

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

【问题讨论】:

    标签: r statistics forecasting holtwinters


    【解决方案1】:

    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 package (v0.3.0) 于 2020 年 6 月 26 日创建

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 2023-04-11
      • 2012-09-16
      • 2019-06-21
      • 2011-07-28
      • 2015-10-27
      • 2010-11-04
      相关资源
      最近更新 更多