Keyword: 指数平滑化, ホルトウィンタース, 線形ホルト, 2重指数平滑化, Holt Winters
概要
本サンプルはC言語により指数平滑化による予測を行うプログラムです。 入力データとして11個の観察データと指数平滑パラメータ(α、γ、φ)を与え、5ステップ分の予測を行います。

以下のプログラム例では線形ホルト指数平滑化を利用して予測を行いますが、その他に単純指数平滑化、ブラウン2重指数平滑化、ホルトウィンタース乗法、ホルトウィンタース加法の各平滑化法にも対応しています。
※本サンプルはnAG Toolbox for MATLAB®が提供する関数 g13am()のExampleコードです。実行にはMATLAB®本体(他社製品)とnAG Toolbox for MATLAB®が必要です。
本サンプル及び関数の詳細情報はg13am のマニュアルページをご参照ください。
入力データ
mode = int32(2);
itype = int32(3);
p = int32(0);
param = [0.01;
1;
1];
y = [180;
135;
213;
181;
148;
204;
228;
225;
198;
200;
187];
k = int32(11);
init = [-1.666051209955092e-47;
4.853144920788553e-270];
nf = int32(5);
r = [1.910201800633982e-313;
-1.601103737937077e-47;
-1.678629904873684e-47;
-4.300360784598706e-39;
-0.09138826798201372;
-1.668172686220112e-47;
2.572155976556066e-306;
-1.601102994801293e-47;
4.940656458412465e-324;
2.514055054265363e-306;
-4.296977237061931e-39;
2.514055056853075e-306;
-4.300811189660317e-39];
[initOut, fv, fse, yhat, res, dv, ad, rOut, ifail] = g13am(mode, itype, p, param, y, k, init, nf, r)
- mode には初期値の与え方を指定しています。"2"は初期値が観測データから推定されることを意味します。
- itype には平滑化の手法を与えています。"3"は線形ホルト指数平滑化を意味します。
- p には季節次数を与えますが、線形ホルト指数平滑化ではこの値は参照されません。
- param には指数平滑化パラメータであるα(=0.01)、γ(=1.0)、φ(=1.0)を与えています。
- y には観察データの値を与えています。
- k には初期値の推定に使用する観察データ数 (=11)を与えています。
- init には平均とトレンドの初期値を与えています。
- nf には予測を行うステップ数 (=5)を与えています。
- r にはトレンドを与えています。
- 最後に本関数を呼び出す構文を指定しています。
出力結果
initOut =
168.0182
3.8000
fv =
213.8545
217.6851
221.5157
225.3462
229.1768
fse =
25.4733
25.4784
25.4899
25.5102
25.5420
yhat =
171.8182
175.7818
178.8480
183.0050
186.7805
189.8003
193.4920
197.7318
202.1719
206.2559
210.2565
res =
8.1818
-40.7818
34.1520
-2.0050
-38.7805
14.1997
34.5080
27.2682
-4.1719
-6.2559
-23.2565
dv =
25.4733
ad =
21.2328
rOut =
1.0e+03 *
2.4680
0
0.0000
0.0010
0
0.0010
0
7.1378
0.2336
0.2100
0.0038
0.0110
0
ifail =
0
- initOut は計算に使われた初期値を示しています。
- fv は5ステップ分の予測値を示しています。
- fse は上記の標準誤差を示しています。
- yhat は1ステップ予測を示しています。
- res は残差を示しています。
- dv は平均偏差を示しています。
- ad は絶対偏差を示しています。平均偏差と絶対偏差双方ともモデルの当てはまり具合を示しています。 小さい値であればあるほど当てはまりが良いことを示します。
- rOut は平滑化の現在の状態を示しています。
- ifail は関数がエラーを検知しなければ"0"を出力します。
