【发布时间】: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