2017-11-10 18 views
2

R Holt-Winters関数で呼び出されるC関数を理解しようとしています。私は混乱していたことによりR Holt-Winters関数内で呼び出されるC_Holt-Winters関数

セクションの読み取り:「t」は13であり、12の季節の期間がある場合、これは、のようにかかわらず、読み出し

 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; 

(すなわち、「期間」は12である)、次いで、I0は次のようになり1とs0は12になります。stmpは時間(s0-12)からの "season"値に基づいた値をとるでしょう。この場合は時間0になります。しかし、これは意味をなさない。季節性Holt-Wintersモデルのコンポーネントは、(この場合は)以前の12つの期間からのものです。

誰かがi0とs0が実際に何であるか、私がこれを理解できなかった箇所について説明できるなら、私は感謝します。

全コード:

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

+1

あなたが言っているようにループをはじめて見ると、 'i0'は1になりますが、' s0'は13ではなく12になります。(1 + period - 1)、それは一つの間違いです。 – Gregor

+0

これを基底Rで複製すると、印刷文で何が起こっているのか、そうでないのかを簡単に知ることができます。ちょうど覚えておいてください。あなたがここに見るものはすべて0である。 –

+0

はい@Gregor、あなたは正しい - 私は12を意味した。 – Statsanalyst

答えて

0

まず、HWコンポーネントレベル傾向シーズン、位置に挿入レベルの初期値を必要としていることを心に留めておく必要がある[0],トレンド[0]およびシーズン[0] ... シーズン[期間-1]。最初のシーズンコンポーネントは、ピリオドエレメントのベクトルであることに注意することが重要です。

HoltWinters関数は、時系列のI番目の値を推定し始め、それはレベル傾向シーズンの次の値を計算します。可変I0ベクターシーズンに次の空の位置に対応する次の空のベクターにおける位置傾向レベル、可変S0に相当します。ただI0 ++S0 ++のように、2回目からは

i0=1 
s0=period 

とに、これらを1つインクリメントします:最初の反復、I0とS0で

は、以下の値が割り当てられます。これらの変数を更新する方法は、変数iの関数で行われるため混乱しているようですが、それは正当な理由です。ステートメントは最初のものを含むすべての反復で同じです。

関連する問題