指数平滑化による予測

Fortranによるサンプルソースコード : 使用ルーチン名:g13amf

Keyword: 指数平滑化, ホルトウィンタース, 線形ホルト, 2重指数平滑化, Holt Winters

概要

本サンプルはFortranにより指数平滑化による予測を行うプログラムです。 入力データとして11個の観察データと指数平滑パラメータ(α、γ、φ)を与え、5ステップ分の予測を行います。 

指数平滑化による予測例

以下のプログラム例では線形ホルト指数平滑化を利用して予測を行いますが、その他に単純指数平滑化、ブラウン2重指数平滑化、ホルトウィンタース乗法、ホルトウィンタース加法の各平滑化法にも対応しています。

※本サンプルはnAG Fortranライブラリに含まれるルーチン g13amf()のExampleコードです。本サンプル及びルーチンの詳細情報はg13amf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで

入力データ

(本ルーチンの詳細はg13amf のマニュアルページを参照)
1
2
3
4
5

このデータをダウンロード
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 のマニュアルページを参照)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

この出力例をダウンロード
 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ライブラリ」のルーチンを呼び出します。
サンプルのコンパイル及び実行方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106

このソースコードをダウンロード
    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


関連情報
© 日本ニューメリカルアルゴリズムズグループ株式会社 2025
Privacy Policy  /  Trademarks