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