gpt4 book ai didi

C - 在 R Holt-Winters 函数中调用的 C_Holt-Winters 函数

转载 作者:太空宇宙 更新时间:2023-11-04 00:00:21 24 4
gpt4 key购买 nike

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

最佳答案

首先您需要记住,HW 需要组件leveltrendseason 的初始值,插入位置 level[0]trend[0]season[0]...season[period-1]。请务必注意,初始季节组件是一个包含周期元素的 vector 。

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

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

i0=1
s0=period

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

关于C - 在 R Holt-Winters 函数中调用的 C_Holt-Winters 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47229827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com