Keyword: 自己回帰和分移動平均, ARIMA, 時系列, フィルタリング
概要
本サンプルは自己回帰和分移動平均(ARIMA)モデルによる時系列のフィルタリングを行うFortranによるサンプルプログラムです。 本サンプルは長さ296の時系列データを読み込み、またARIMAモデル(4,0,2,0,0,0,0)とARIMAフィルタリングモデル(3,0,0,0,0,0,0)を読み込み、2つの後方予測とフィルタリングされた時系列を出力します。
※本サンプルはnAG Fortranライブラリに含まれるルーチン g13baf() のExampleコードです。本サンプル及びルーチンの詳細情報は g13baf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本ルーチンの詳細はg13baf のマニュアルページを参照)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
このデータをダウンロード |
G13BAF Example Program Data 296 :: NX 4 0 2 0 0 0 0 :: MRX 0.000 :: CX 53.8 53.6 53.5 53.5 53.4 53.1 52.7 52.4 52.2 52.0 52.0 52.4 53.0 54.0 54.9 56.0 56.8 56.8 56.4 55.7 55.0 54.3 53.2 52.3 51.6 51.2 50.8 50.5 50.0 49.2 48.4 47.9 47.6 47.5 47.5 47.6 48.1 49.0 50.0 51.1 51.8 51.9 51.7 51.2 50.0 48.3 47.0 45.8 45.6 46.0 46.9 47.8 48.2 48.3 47.9 47.2 47.2 48.1 49.4 50.6 51.5 51.6 51.2 50.5 50.1 49.8 49.6 49.4 49.3 49.2 49.3 49.7 50.3 51.3 52.8 54.4 56.0 56.9 57.5 57.3 56.6 56.0 55.4 55.4 56.4 57.2 58.0 58.4 58.4 58.1 57.7 57.0 56.0 54.7 53.2 52.1 51.6 51.0 50.5 50.4 51.0 51.8 52.4 53.0 53.4 53.6 53.7 53.8 53.8 53.8 53.3 53.0 52.9 53.4 54.6 56.4 58.0 59.4 60.2 60.0 59.4 58.4 57.6 56.9 56.4 56.0 55.7 55.3 55.0 54.4 53.7 52.8 51.6 50.6 49.4 48.8 48.5 48.7 49.2 49.8 50.4 50.7 50.9 50.7 50.5 50.4 50.2 50.4 51.2 52.3 53.2 53.9 54.1 54.0 53.6 53.2 53.0 52.8 52.3 51.9 51.6 51.6 51.4 51.2 50.7 50.0 49.4 49.3 49.7 50.6 51.8 53.0 54.0 55.3 55.9 55.9 54.6 53.5 52.4 52.1 52.3 53.0 53.8 54.6 55.4 55.9 55.9 55.2 54.4 53.7 53.6 53.6 53.2 52.5 52.0 51.4 51.0 50.9 52.4 53.5 55.6 58.0 59.5 60.0 60.4 60.5 60.2 59.7 59.0 57.6 56.4 55.2 54.5 54.1 54.1 54.4 55.5 56.2 57.0 57.3 57.4 57.0 56.4 55.9 55.5 55.3 55.2 55.4 56.0 56.5 57.1 57.3 56.8 55.6 55.0 54.1 54.3 55.3 56.4 57.2 57.8 58.3 58.6 58.8 58.8 58.6 58.0 57.4 57.0 56.4 56.3 56.4 56.4 56.0 55.2 54.0 53.0 52.0 51.6 51.6 51.1 50.4 50.0 50.0 52.0 54.0 55.1 54.5 52.8 51.4 50.8 51.2 52.0 52.8 53.8 54.5 54.9 54.9 54.8 54.4 53.7 53.3 52.8 52.6 52.6 53.0 54.3 56.0 57.0 58.0 58.6 58.5 58.3 57.8 57.3 57.0 :: End of Y 2.420 -2.380 1.160 -0.230 0.310 -0.470 :: PARX 3 0 0 0 0 0 0 :: MR 1.970 -1.370 0.340 :: PAR
- 1行目はタイトル行で読み飛ばされます。
- 2行目に時系列データ点の合計数(nx)を指定しています。
- 3行目にARIMAモデルの次数ベクトル(mrx)を指定しています。
- 4行目に時系列データの期待値(cx)を指定しています。
- 5~31行目に時系列データ(y)を指定しています。
- 32行目に4つのφパラメータ、2つのθパラメータ(parx)を指定しています。
- 33行目にフィルタリングARIMAモデルの次数(mr)を指定しています。
- 34行目にフィルタリングモデルの引数(par)を指定しています。
出力結果
(本ルーチンの詳細はg13baf のマニュアルページを参照)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
この出力例をダウンロード |
G13BAF Example Program Results Original Filtered Backforecasts y-series series -2 49.9807 3.4222 -1 52.6714 3.0809 Filtered Filtered Filtered Filtered series series series series 1 2.9813 2 2.7803 3 3.7057 4 3.2450 5 3.0760 6 3.0070 7 3.0610 8 3.1720 9 3.1170 10 3.0360 11 3.2580 12 3.4520 13 3.3320 14 3.6980 15 3.3140 16 3.8070 17 3.3330 18 2.9580 19 3.2800 20 3.0960 21 3.2270 22 3.0830 23 2.6410 24 3.1870 25 2.9910 26 3.1110 27 2.8460 28 3.0240 29 2.7030 30 2.6130 31 2.8060 32 2.9560 33 2.8170 34 2.8950 35 2.8510 36 2.9160 37 3.2530 38 3.3050 39 3.1830 40 3.3760 41 2.9730 42 2.8610 43 3.0490 44 2.8420 45 2.3190 46 2.3660 47 2.9410 48 2.3810 49 3.3420 50 2.9340 51 3.1800 52 2.9230 53 2.6470 54 2.8860 55 2.5310 56 2.6200 57 3.4170 58 3.4940 59 3.2590 60 3.1310 61 3.1420 62 2.6710 63 2.8990 64 2.8180 65 3.2150 66 2.8800 67 2.9610 68 2.8800 69 3.0020 70 2.8930 71 3.1210 72 3.2210 73 3.2040 74 3.5360 75 3.7520 76 3.5630 77 3.7260 78 3.1560 79 3.6310 80 2.9380 81 3.1480 82 3.4490 83 3.1400 84 3.7380 85 4.1200 86 3.1540 87 3.7480 88 3.3280 89 3.3640 90 3.3400 91 3.3950 92 3.0720 93 3.0050 94 2.8520 95 2.7810 96 3.1950 97 3.2490 98 2.6370 99 3.0080 100 3.2410 101 3.5570 102 3.2080 103 3.0880 104 3.3980 105 3.1660 106 3.1960 107 3.2460 108 3.2870 109 3.1590 110 3.2620 111 2.7280 112 3.4130 113 3.2190 114 3.6750 115 3.8550 116 4.0100 117 3.5380 118 3.8440 119 3.4660 120 3.0640 121 3.4780 122 3.1140 123 3.5300 124 3.2400 125 3.3630 126 3.2610 127 3.3020 128 3.1150 129 3.3280 130 2.8730 131 3.0800 132 2.8390 133 2.6570 134 3.0260 135 2.4580 136 3.2600 137 2.8380 138 3.2150 139 3.1140 140 3.1050 141 3.1400 142 2.9100 143 3.1370 144 2.7500 145 3.1160 146 3.0680 147 2.8590 148 3.3840 149 3.5500 150 3.4160 151 3.1770 152 3.3390 153 3.0190 154 3.1780 155 3.0110 156 3.1940 157 3.2680 158 3.0500 159 2.8060 160 3.1850 161 3.0560 162 3.2690 163 2.7940 164 3.0900 165 2.7100 166 2.7890 167 2.9510 168 3.2440 169 3.2570 170 3.4360 171 3.4450 172 3.3780 173 3.3520 174 3.9180 175 2.9190 176 3.1780 177 2.2580 178 3.5150 179 2.8010 180 3.6030 181 3.2610 182 3.5300 183 3.3270 184 3.4420 185 3.5240 186 3.2720 187 3.1110 188 2.8240 189 3.2330 190 3.1500 191 3.5710 192 3.0810 193 2.7820 194 2.9040 195 3.2350 196 2.7970 197 3.1320 198 3.1680 199 4.5210 200 2.6650 201 4.6870 202 3.9470 203 3.2220 204 3.3410 205 3.9950 206 3.4820 207 3.3630 208 3.4550 209 3.2950 210 2.6910 211 3.4600 212 2.9440 213 3.4400 214 3.1830 215 3.4200 216 3.4100 217 4.0550 218 2.9990 219 3.8250 220 3.1340 221 3.5010 222 3.0430 223 3.2660 224 3.3660 225 3.2650 226 3.3720 227 3.2880 228 3.5470 229 3.6840 230 3.3100 231 3.6790 232 3.1780 233 2.9360 234 2.7910 235 3.8020 236 2.6100 237 4.1690 238 3.7460 239 3.4560 240 3.3910 241 3.5820 242 3.6220 243 3.4870 244 3.5770 245 3.4240 246 3.3960 247 3.1220 248 3.4300 249 3.4580 250 3.0280 251 3.7660 252 3.3770 253 3.2470 254 3.0180 255 2.9720 256 2.8000 257 3.2040 258 2.8020 259 3.4100 260 3.1680 261 2.4600 262 2.8810 263 3.1750 264 3.1740 265 4.8640 266 3.0600 267 2.9600 268 2.2530 269 2.5620 270 3.3150 271 3.3480 272 3.5900 273 3.2560 274 3.2320 275 3.6160 276 3.1700 277 3.2890 278 3.1200 279 3.3300 280 2.9910 281 2.9420 282 3.4070 283 2.8720 284 3.3470 285 3.1920 286 3.4880 287 4.0680 288 3.7550 289 3.0510 290 3.9680 291 3.3900 292 3.1380 293 3.6170 294 3.1700 295 3.4150 296 3.4830
- 5~6行目に元の時系列について後方予測した時系列の値とフィルタリングされた時系列の値が出力されています。
- 10~83行目にフィルタリングされた時系列が出力されています。
ソースコード
(本ルーチンの詳細はg13baf のマニュアルページを参照)
※本サンプルソースコードは科学技術・統計計算ライブラリである「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
このソースコードをダウンロード |
PROGRAM g13bafe ! G13BAF Example Program Text ! Mark 23 Release. nAG Copyright 2011. ! .. Use Statements .. USE nag_library, ONLY : g13ajf, g13baf, nag_wp ! .. Implicit None Statement .. IMPLICIT NONE ! .. Parameters .. INTEGER, PARAMETER :: nin = 5, nout = 6 ! .. Local Scalars .. REAL (KIND=nag_wp) :: cx, cy, rms INTEGER :: i, idd, ifail, ifv, ii, ij, ipar, & iqxd, ist, iw, nb, nmr, npar, nparx, & nst, nwa, nx, ny, pp, qp, sy ! .. Local Arrays .. REAL (KIND=nag_wp), ALLOCATABLE :: b(:), fsd(:), fva(:), par(:), & parx(:), st(:), w(:), wa(:), x(:), & y(:) INTEGER :: isf(4), mrx(7) INTEGER, ALLOCATABLE :: mr(:) ! .. Intrinsic Functions .. INTRINSIC max, min, mod ! .. Executable Statements .. WRITE (nout,*) 'G13BAF Example Program Results' WRITE (nout,*) ! Skip heading in data file READ (nin,*) ! Read in the problem size READ (nin,*) nx ! Read univariate ARIMA for series READ (nin,*) mrx(1:7) READ (nin,*) cx ! Calculate number of backforecasts required iqxd = mrx(3) + mrx(6)*mrx(7) IF (iqxd/=0) THEN nmr = 14 ELSE nmr = 7 END IF ! Back forecasts will be stored in first IQXD elements ! of Y, the series will be stored in last NX elements of ! Y, so calculate start point for the series sy = iqxd + 1 ! Calculate length of series with back forecasts ny = nx + iqxd ALLOCATE (y(ny),mr(nmr)) ! Read in the series into the end of Y READ (nin,*) y(sy:ny) ! Get back forecasts if required IF (iqxd/=0) THEN ! Calculate number of parameters in ARIMA model nparx = mrx(1) + mrx(3) + mrx(4) + mrx(6) ist = mrx(4) + mrx(7) + mrx(2) + mrx(5) + mrx(3) + & max(mrx(1),mrx(6)*mrx(7)) ifv = max(1,iqxd) qp = mrx(6)*mrx(7) + mrx(3) pp = mrx(4)*mrx(7) + mrx(1) iw = 6*nx + 5*nparx + qp*(qp+11) + 3*pp + 7 ALLOCATE (parx(nparx),x(nx),st(ist),fva(ifv),fsd(ifv),w(iw)) ! Read in initial values READ (nin,*) parx(1:nparx) ! Reverse series x(nx:1:-1) = y(sy:ny) ! Possible sign reversal for ARIMA constant idd = mrx(2) + mrx(5) IF (mod(idd,2)/=0) THEN cx = -cx END IF ! Calculate back forecasts ifail = 0 CALL g13ajf(mrx,parx,nparx,cx,1,x,nx,rms,st,ist,nst,iqxd,fva,fsd, & ifv,isf,w,iw,ifail) ! Move back forecasts into Y, in reverse order y(1:iqxd) = fva(iqxd:1:-1) ! Reverse sign for ARIMA constant back again IF (mod(idd,2)/=0) THEN cx = -cx END IF END IF ! Read model by which to filter series READ (nin,*) mr(1:7) ! Calculate NPAR ipar = mr(1) + mr(3) + mr(4) + mr(6) npar = ipar + nparx ALLOCATE (par(npar)) ! Read in initial parameter values READ (nin,*) par(1:ipar) IF (iqxd/=0) THEN ! Move ARIMA series into MR mr(8:14) = mrx(1:7) ! Move parameters of ARIMA for Y into PAR par((ipar+1):(ipar+nparx)) = parx(1:nparx) END IF ! Move constant cy = cx ! Set parameters for call to filter routine G13BAF IF (nmr==14) THEN nwa = mr(3) + mr(6)*mr(7) + mr(8) + mr(9) + (mr(11)+mr(12))*mr(14) nwa = nwa*(nwa+2) nb = ny + max(mr(3)+mr(6)*mr(7),mr(1)+mr(2)+(mr(4)+mr(5))*mr(7)) ELSE nwa = 1 nb = ny END IF ALLOCATE (wa(nwa),b(nb)) ! Filter series by call to G13BAF ifail = 0 CALL g13baf(y,ny,mr,nmr,par,npar,cy,wa,nwa,b,nb,ifail) ! Display results IF (iqxd/=0) THEN WRITE (nout,*) ' Original Filtered' WRITE (nout,*) 'Backforecasts y-series series' ij = -iqxd DO i = 1, iqxd WRITE (nout,99999) ij, y(i), b(i) ij = ij + 1 END DO WRITE (nout,*) END IF WRITE (nout,*) & ' Filtered Filtered Filtered Filtered' WRITE (nout,*) & ' series series series series' DO i = iqxd + 1, ny, 4 WRITE (nout,99998) (ii-iqxd,b(ii),ii=i,min(ny,i+3)) END DO 99999 FORMAT (1X,I8,F17.4,F15.4) 99998 FORMAT (1X,I5,F9.4,I7,F9.4,I7,F9.4,I7,F9.4) END PROGRAM g13bafe