我试图理解在 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