【问题标题】:C - C_Holt-Winters function called within R Holt-Winters functionC - 在 R Holt-Winters 函数中调用的 C_Holt-Winters 函数
【发布时间】:2017-11-10 19:24:34
【问题描述】:

我试图了解在 R Holt-Winters 函数中调用的 C 函数。

让我感到困惑的部分是:

     for (i = *start_time - 1; i < *xl; i++) { 
56         /* indices for period i */ 
57         i0 = i - *start_time + 2; 
58         s0 = i0 + *period - 1; 
59 

60         /* forecast *for* period i */ 
61         xhat = level[i0 - 1] + (*beta > 0 ? trend[i0 - 1] : 0); 
62         stmp = *gamma > 0 ? season[s0 - *period] : (*seasonal != 1); 
63         if (*seasonal == 1) 
64             xhat += stmp; 
65         else 
66             xhat *= stmp; 

这看起来好像,如果“t”是 13 并且有 12 个季节性周期(即“周期”是 12),那么 i0 将是 1,s0 将是 12。然后 stmp 将采用基于来自时间 (s0-12) 的“季节”值,在本例中为时间 0。但这没有意义,因为 Holt-Winters 模型中的季节性分量来自(在本例中)12 个周期之前。

如果有人能解释 i0 和 s0 到底是什么,以及我对此的理解失败的地方,我将不胜感激。

完整代码:

https://github.com/pierre/holt-winters/blob/master/holt-winters.c

【问题讨论】:

  • 第一次通过循环(这似乎是你在说什么),i0 将是 1 如你所说,但s0 将是 12,而不是 13。(1 + period - 1),所以这是一个错误。
  • 你可以在基础 R 中复制它,这样你就可以很容易地看到 print 语句发生了什么,什么没有。请记住,您在此处看到的所有内容都是以 0 为底的。
  • 是的@Gregor,你是对的 - 我的意思是 12。

标签: c r holtwinters


【解决方案1】:

首先您需要记住,HW 需要为组件 leveltrendseason 插入初始值,插入位置 level[0]trend[0]season[0]...season[period-1]。需要注意的是,初始 season 分量是一个带有 period 元素的向量。

HoltWinters 函数开始估计时间序列的第 i 个值,然后计算 leveltrend 的下一个值>季节。变量i0对应向量trendlevel中的下一个空位,变量s0对应下一个空位在矢量季节中。

在第一次迭代中,i0 和 s0 被赋予以下值:

i0=1
s0=period

从第二次迭代开始,它们会加一,就像 i0++s0++ 一样。他们更新这些变量的方式似乎令人困惑,因为它是在变量 i 的函数中完成的,但这是有充分理由的:语句在所有迭代中都是相同的,包括第一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2012-09-16
    • 2016-02-16
    相关资源
    最近更新 更多