指数平滑化モデルの時系列の実現値の生成

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

ホーム > 製品 > nAG数値計算ライブラリ > nAG Fortranライブラリ > サンプルソースコード集 > 指数平滑化モデルの時系列の実現値の生成

Keyword: 指数平滑化モデル, 時系列, 実現値

概要

本サンプルは指数平滑化モデルの時系列の実現値の生成を行うFortranによるサンプルプログラムです。 本サンプルは時系列の11個の観測値を読み込み、以下の式で示される指数平滑化モデルをフィットし、予測信頼区間を求めて出力します。

指数平滑化モデルのデータ 

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

入力データ

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

このデータをダウンロード
G05PMF Example Program Data 
1  1  1762543                               :: GENID,SUBID,SEED(1)
2 3 11 5 100 0.05                           :: MODE,ITYPE,N,NF,NSIM,ALPHA
180 135 213 181 148 204 228 225 198 200 187 :: Y
0.01 1.0 1.0                                :: PARAM
11                                          :: K

  • 1行目はタイトル行で読み飛ばされます。
  • 2行目に使用する生成器(genid=1:nAG基本生成器)、生成器に関する情報(subid=1:GENIDが1の場合この値は参照されません)、生成器の初期値(seed=1762543)を指定しています。
  • 3行目に前回の呼び出しから続行しているかどうか(mode=2:続行)、指数平滑化の手法(itype=3:Linear Holt平滑法)、時系列の区間の数(n=11)、時系列の終端を超えて必要な予測の数(nf=5)、シミュレーションの回数(nsim=100)、分位点(alpha=0.05)を指定しています。
  • 4行目に時系列(y)を指定しています。
  • 5行目に平滑化のためのパラメータparam ( αγφ )を指定しています。
  • 6行目に最初の何個の観測値で初期値を計算するか(k)を指定しています。

出力結果

(本ルーチンの詳細はg05pmf のマニュアルページを参照)
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

この出力例をダウンロード
 G05PMF Example Program Results

 Initial values used:
     168.018
       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

                                           Simulated CI         Simulated CI
 Obs.  Forecast      Estimated CI        (Gaussian Errors)    (Bootstrap Errors)
 12    213.854    163.928    263.781    161.431    258.001    173.073    248.363
 13    217.685    167.748    267.622    172.660    262.100    177.311    252.638
 14    221.516    171.556    271.475    169.259    263.107    179.344    256.921
 15    225.346    175.347    275.345    180.721    272.776    183.672    260.804
 16    229.177    179.115    279.238    184.790    263.591    186.398    264.173
  95.0% CIs were produced

  • 4~5行目に平均とトレンドの初期値が出力されています。
  • 7行目に平均偏差が出力されています。
  • 8行目に絶対偏差が出力されています。
  • 13~23行目に区間、観測値、1ステップ先の予測値、残差が出力されています。
  • 27~31行目に区間、予測値、推定信頼区間 、ガウス誤差を想定したシミュレーション信頼区間、ブートストラップ誤差を想定したシミュレーション信頼区間が出力されています。
  • 32行目に95%信頼区間が生成されたことが示されています。

ソースコード

(本ルーチンの詳細はg05pmf のマニュアルページを参照)

※本サンプルソースコードは科学技術・統計計算ライブラリである「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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174

このソースコードをダウンロード
    PROGRAM g05pmfe

!      G05PMF Example Program Text

!      Mark 23 Release. nAG Copyright 2011.

!      .. Use Statements ..
       USE nag_library, ONLY : g01amf, g01faf, g05kff, g05pmf, g13amf, nag_wp
!      .. Implicit None Statement ..
       IMPLICIT NONE
!      .. Parameters ..
       INTEGER, PARAMETER              :: lseed = 1, nin = 5, nout = 6
!      .. Local Scalars ..
       REAL (KIND=nag_wp)              :: ad, alpha, dv, tmp, var, z
       INTEGER                         :: en, genid, i, ifail, itype, k, le,   &
                                          linit, lparam, lr, lstate, mode, n,  &
                                          nf, nsim, p, smode, subid
!      .. Local Arrays ..
       REAL (KIND=nag_wp), ALLOCATABLE :: blim(:,:), bsim(:,:), e(:), fse(:),  &
                                          fv(:), glim(:,:), gsim(:,:),         &
                                          init(:), param(:), r(:), res(:),     &
                                          tsim1(:), tsim2(:), y(:), yhat(:)
       REAL (KIND=nag_wp)              :: q(2)
       INTEGER                         :: seed(lseed)
       INTEGER, ALLOCATABLE            :: state(:)
!      .. Executable Statements ..
       WRITE (nout,*) 'G05PMF Example Program Results'
       WRITE (nout,*)

!      Skip heading in data file
       READ (nin,*)

!      Read in the base generator information and seed
       READ (nin,*) genid, subid, seed(1)

!      Initial call to initialiser to get size of STATE array
       lstate = 0
       ALLOCATE (state(lstate))
       ifail = 0
       CALL g05kff(genid,subid,seed,lseed,state,lstate,ifail)

!      Reallocate STATE
       DEALLOCATE (state)
       ALLOCATE (state(lstate))

!      Initialize the generator to a repeatable sequence
       ifail = 0
       CALL g05kff(genid,subid,seed,lseed,state,lstate,ifail)

!      Read in the initial arguments and check array sizes
       READ (nin,*) mode, itype, n, nf, nsim, alpha

       SELECT CASE (itype)
       CASE (1)
          lparam = 1
          p = 0
          linit = 1
       CASE (2)
          lparam = 2
          p = 0
          linit = 2
       CASE (3)
          lparam = 3
          p = 0
          linit = 2
       CASE DEFAULT
          lparam = 4

!         Read in seasonal order
          READ (nin,*) p

          linit = p + 2
       END SELECT
       lr = 13 + p
!      Not using the E array for the bootstrap
       le = 0
       ALLOCATE (param(lparam),init(linit),r(lr),e(le),fv(nf),fse(nf),yhat(n), &
          res(n),blim(2,nf),glim(2,nf),tsim1(nf),tsim2(nf),gsim(nsim,nf), &
          bsim(nsim,nf),y(n))

!      Read in series to be smoothed
       READ (nin,*) y(1:n)

!      Read in parameters
       READ (nin,*) param(1:lparam)

!      Read in the MODE dependent arguments (skipping headings)
       SELECT CASE (mode)
       CASE (0)
!         User supplied initial values
          READ (nin,*) init(1:linit)
       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

!      Fit a smoothing model (parameter R in G05PMF and STATE in G13AMF
!      are in the same format)
       ifail = 0
       CALL g13amf(mode,itype,p,param,n,y,k,init,nf,fv,fse,yhat,res,dv,ad,r, &
          ifail)

!      Simulate forecast values from the model, and don't update R
       smode = 2
       var = dv*dv

!      Simulate NSIM forecasts
       DO i = 1, nsim
!         Not using E array for gaussian errors
          en = 0

!         Simulations assuming gaussian errors
          ifail = 0
          CALL g05pmf(smode,nf,itype,p,param,init,var,r,state,e,en,tsim1, &
             ifail)

!         For bootstrapping error, we are using RES from call to G13AMF as the
!         errors, and length of RES is N
          en = n

!         Bootstrapping errors
          ifail = 0
          CALL g05pmf(smode,nf,itype,p,param,init,0.0E0_nag_wp,r,state,res,en, &
             tsim2,ifail)

!         Copy and transpose the simulated values
          gsim(i,1:nf) = tsim1(1:nf)
          bsim(i,1:nf) = tsim2(1:nf)
       END DO

!      Calculate CI based on the quantiles for each simulated forecast
       q(1) = alpha/2.0E0_nag_wp
       q(2) = 1.0E0_nag_wp - q(1)
       DO i = 1, nf
          ifail = 0
          CALL g01amf(nsim,gsim(1,i),2,q,glim(1,i),ifail)
          ifail = 0
          CALL g01amf(nsim,bsim(1,i),2,q,blim(1,i),ifail)
       END DO

!      Display the forecast values and associated prediction intervals
       WRITE (nout,*) 'Initial values used:'
       WRITE (nout,99998) init(1:linit)
       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,99997) (i,y(i),yhat(i),res(i),i=1,n)
       WRITE (nout,*)
       WRITE (nout,*) '                                     ' // &
          '      Simulated CI         Simulated CI'
       WRITE (nout,*) 'Obs.  Forecast      Estimated CI   ' // &
          '     (Gaussian Errors)    (Bootstrap Errors)'
       z = g01faf('L',q(2),ifail)
       DO i = 1, nf
          tmp = z*fse(i)
          WRITE (nout,99996) n + i, fv(i), fv(i) - tmp, fv(i) + tmp, &
             glim(1,i), glim(2,i), blim(1,i), blim(2,i)
       END DO
       WRITE (nout,99995) 100.0E0_nag_wp*(1.0E0_nag_wp-alpha), &
          '% CIs were produced'

99999  FORMAT (A,E12.4)
99998  FORMAT (F12.3)
99997  FORMAT (I4,1X,F12.3,1X,F12.3,1X,F12.3)
99996  FORMAT (I3,7(1X,F10.3))
99995  FORMAT (1X,F5.1,A)
    END PROGRAM g05pmfe


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