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

以下のプログラム例では線形ホルト指数平滑化を利用して予測を行いますが、その他に単純指数平滑化、ブラウン2重指数平滑化、ホルトウィンタース乗法、ホルトウィンタース加法の各平滑化法にも対応しています。
※本サンプルはnAG Fortranライブラリに含まれるルーチン g13amf()のExampleコードです。本サンプル及びルーチンの詳細情報はg13amf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本ルーチンの詳細はg13amf のマニュアルページを参照)| このデータをダウンロード |
G13AMF Example Program Data 2 3 11 5 : MODE,ITYPE,N,NF 180 135 213 181 148 204 228 225 198 200 187 : Y 0.01 1.0 1.0 : PARAM(1:3) (since ITYPE=3) 11 : K (since MODE=2)
- 1行目はタイトル行で読み飛ばされます。
- 2行目では初期値の与え方 (mode=2:観察データを用いた推定)、平滑化の手法 (itype=3:Linear Holt)、観察データ数 (n=11)、予測を行いステップ数 (nf=5)を与えます。コロン(:)以降は無視されます。
- 3行目で観察データの値(y)を与えます。コロン(:)以降は無視されます。
- 4行目では指数平滑化パラメータ(param)としてα(=0.01)、γ(=1.0)、φ(=1.0)を与えています。コロン(:)以降は無視されます。
- 5行目は初期値の推定に使用する観察データ数 (k=11)を与えています。コロン(:)以降は無視されます。
出力結果
(本ルーチンの詳細はg13amf のマニュアルページを参照)| この出力例をダウンロード |
G13AMF Example Program Results
Initial values used:
1 168.018
2 3.800
Mean Deviation = 0.2547E+02
Absolute Deviation = 0.2123E+02
Observed 1-Step
Period Values Forecast Residual
1 180.000 171.818 8.182
2 135.000 175.782 -40.782
3 213.000 178.848 34.152
4 181.000 183.005 -2.005
5 148.000 186.780 -38.780
6 204.000 189.800 14.200
7 228.000 193.492 34.508
8 225.000 197.732 27.268
9 198.000 202.172 -4.172
10 200.000 206.256 -6.256
11 187.000 210.256 -23.256
Forecast Standard
Period Values Errors
12 213.854 25.473
13 217.685 25.478
14 221.516 25.490
15 225.346 25.510
16 229.177 25.542
- 1行目はタイトルです
- 4〜5行目は計算に使われた初期値です。
- 7行目は平均偏差、8行目は絶対偏差で双方ともモデルの当てはまり具合を示しています。小さい値であればあるほど当てはまりが良いことを示します。
- 12行目〜22行目は観察値、1ステップ予測、及び残差を示します。
- 25行目〜29行目は5ステップ分の予測値とその標準誤差を示します。
ソースコード
(本ルーチンの詳細はg13amf のマニュアルページを参照)
※本サンプルソースコードは科学技術・統計計算ライブラリである「nAG Fortranライブラリ」のルーチンを呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
PROGRAM g13amfe
! G13AMF Example Program Text
! Mark 23 Release. nAG Copyright 2011.
! .. Use Statements ..
USE nag_library, ONLY : g13amf, nag_wp
! .. Implicit None Statement ..
IMPLICIT NONE
! .. Parameters ..
INTEGER, PARAMETER :: nin = 5, nout = 6
! .. Local Scalars ..
REAL (KIND=nag_wp) :: ad, dv
INTEGER :: i, ifail, itype, ival, k, mode, n, &
nf, p
! .. Local Arrays ..
REAL (KIND=nag_wp), ALLOCATABLE :: fse(:), fv(:), init(:), param(:), &
r(:), res(:), y(:), yhat(:)
! .. Executable Statements ..
WRITE (nout,*) 'G13AMF Example Program Results'
WRITE (nout,*)
! Skip headings in data file
READ (nin,*)
! Read in the initial arguments and check array sizes
READ (nin,*) mode, itype, n, nf
ALLOCATE (y(n),fv(nf),fse(nf),yhat(n),res(n))
! Read in data
READ (nin,*) y(1:n)
! Read in the ITYPE dependent arguments (skipping headings)
SELECT CASE (itype)
CASE (1)
! Single exponential smoothing
ALLOCATE (param(1))
READ (nin,*) param(1)
p = 0
ival = 1
CASE (2)
! Brown double exponential smoothing
ALLOCATE (param(2))
READ (nin,*) param(1), param(2)
p = 0
ival = 2
CASE (3)
! Linear holt smoothing
ALLOCATE (param(3))
READ (nin,*) param(1), param(2), param(3)
p = 0
ival = 2
CASE DEFAULT
! Additive or multiplicative Holt-Winter smoothing
ALLOCATE (param(4))
READ (nin,*) param(1), param(2), param(3), param(4), p
ival = p + 2
END SELECT
ALLOCATE (init(ival),r(p+13))
! Read in the MODE dependent arguments (skipping headings)
SELECT CASE (mode)
CASE (0)
! User supplied initial values
READ (nin,*) init(1:ival)
CASE (1)
! Continuing from a previously saved R
READ (nin,*) r(1:(p+13))
CASE (2)
! Initial values calculated from first K observations
READ (nin,*) k
END SELECT
! Call the library routine
ifail = 0
CALL g13amf(mode,itype,p,param,n,y,k,init,nf,fv,fse,yhat,res,dv,ad,r, &
ifail)
! Display output
WRITE (nout,*) 'Initial values used:'
WRITE (nout,99997) (i,init(i),i=1,ival)
WRITE (nout,*)
WRITE (nout,99999) 'Mean Deviation = ', dv
WRITE (nout,99999) 'Absolute Deviation = ', ad
WRITE (nout,*)
WRITE (nout,*) ' Observed 1-Step'
WRITE (nout,*) ' Period Values Forecast Residual'
WRITE (nout,*)
WRITE (nout,99998) (i,y(i),yhat(i),res(i),i=1,n)
WRITE (nout,*)
WRITE (nout,*) ' Forecast Standard'
WRITE (nout,*) ' Period Values Errors'
WRITE (nout,*)
WRITE (nout,99996) (n+i,fv(i),fse(i),i=1,nf)
99999 FORMAT (A,E12.4)
99998 FORMAT (I4,1X,F12.3,1X,F12.3,1X,F12.3)
99997 FORMAT (I4,1X,F12.3)
99996 FORMAT (I4,1X,F12.3,1X,F12.3)
END PROGRAM g13amfe
