TS_OUTLIER_FORECAST

Computes forecasts, associated probability limits and Ψ weights for an outlier contaminated time series.

Required Arguments

W — Array of length NOBS containing the outlier free time series. (Input)

RESIDUAL — Array of length NOBS containing the residuals of the outlier free time series determined from routine TS_OUTLIER_IDENTIFICATION. (Input)

NOUTLIERS — The number of outliers in W, determined from routine TS_OUTLIER_IDENTIFICATION. (Input)

IOUTLIERSTATS — Array of size NOUTLIERS by 2 containing outlier statistics from routine TS_OUTLIER_IDENTIFICATION. (Input).
The first column contains the time at which the outlier was observed () and the second column contains an identifier indicating the type of outlier observed. Outlier types fall into one of five categories:

IOUTLIERSTATS

Category

0

Innovational Outliers (IO)

1

Additive Outliers (AO)

2

Level Shift Outliers (LS)

3

Temporary Change Outliers (TC)

4

Unable to Identify (UI)

If NOUTLIERS = 0 this array is ignored.

OMEGA — Array of length NOUTLIERS containing the omega weights for the outliers determined through routine TS_OUTLIER_IDENTIFICATION. (Input)

DELTA — The dynamic dampening effect parameter used in the outlier detection,
0.0 < DELTA < 1.0. (Input)

MODEL — Array of length four containing estimates for p, q, s and d in MODEL(1), MODEL(2), MODEL(3) and MODEL(4), respectively. (Input)

PARAMS — Array of length 1+p+q containing the estimated constant, AR and MA parameters as output from routine TS_OUTLIER_IDENTIFICATION. (Input)

MXLEAD — Maximum lead time for forecasts. (Input)
The forecasts are taken at origin , the time point of the last observed value in the series, for lead times 1, 2,…, MXLEAD.
MXLEAD must be greater than zero.

FCST — An array of size MXLEAD by 3 containing the forecasted values for the outlier contaminated series in the first column. The second column contains the deviations from each forecast that give the 100(1‑ALPHA)% probability limits, and the third column contains the weights of the infinite order moving average form of the model. (Output)

Optional Arguments

NOBS — Number of observations in the time series W. (Input)
Default: NOBS = size (W).

ALPHA — Value in the exclusive interval (0,1) used to specify the 100(1‑ALPHA)% probability limits of the forecast. (Input)
Default: ALPHA = 0.05

OUTFREEFCST — An MXLEAD by 3 array containing the forecasted values for the original outlier free series in the first column. The second column contains standard errors for these forecasts, and the third column contains the weights of the infinite order moving average form of the model. (Output)

FORTRAN 90 Interface

Generic: CALL TS_OUTLIER_FORECAST (W, RESIDUAL, NOUTLIERS, IOUTLIERSTATS, OMEGA, DELTA, MODEL, PARAMS, MXLEAD, FCST [])

Specific: The specific interface names are S_TS_OUTLIER_FORECAST and D_TS_OUTLIER_FORECAST.

Description

Consider the following model for a given outlier contaminated univariate time series :

 

For an explanation of the notation, see the “Description” section for TS_OUTLIER_IDENTIFICATION. It follows from the formula above that the Box-Jenkins forecast at origin t for lead time , , can be computed as:

 

 

Therefore, computation of the forecasts for is done in two steps:

  1. Computation of the forecasts for the outlier free series .

  2. Computation of the forecasts for the original series by adding the multiple outlier effects to the forecasts for .

Step 1 above:

Since

 

where

 

the Box-Jenkins forecast at origin for lead time , , can be computed recursively as:

 

Here,

 

and

 

Step 2 above:

The formulas for Lj(B) for the different types of outliers are as follows:


Innovational outliers (IO)

Additive outliers (AO)

Level shifts (LS)

Temporary changes (TC)

Assuming the outlier occurs at time point tj, the outlier impact is therefore:


Innovational outliers (IO)


Additive outliers (AO)


Level shifts (LS)


Temporary changes (TC)

From these formulas, the forecasts can be computed easily.

The percent probability limits for and are given by

 

where is the percentile of the standard normal distribution, is an estimate of the variance of the random shocks (returned from routine TS_OUTLIER_IDENTIFICATION), and the weights are the coefficients in

 

For a detailed explanation of these concepts, see Chapter 5: “Forecasting”, Box, Jenkins and Reinsel (1994).

Example

This example is a realization of an ARMA(2,1) process described by the model , a Gaussian white noise process.

Outliers were artificially added to the outlier free series at time points (level shift, ) and (additive outlier, ), resulting in the outlier contaminated series . For both series, forecasts were determined for time points and compared with the actual values of the series.

 

USE TS_OUTLIER_IDENTIFICATION_INT

USE TS_OUTLIER_FORECAST_INT

USE WRRRL_INT

USE UMACH_INT

 

IMPLICIT NONE

 

real(kind(1e0)), dimension(290) :: w = (/ &

41.6699982,41.6699982,42.0752144,42.6123962,43.6161919,42.1932831, &

43.1055450,44.3518715,45.3961258,45.0790215,41.8874397,40.2159805, &

40.2447319,39.6208458,38.6873589,37.9272423,36.8718872,36.8310852, &

37.4524879,37.3440933,37.9861374,40.3810501,41.3464622,42.6495285, &

42.6096764,40.3134537,39.7971268,41.5401535,40.7160759,41.0363541, &

41.8171883,42.4190292,43.0318832,43.9968109,44.0419617,44.3225212, &

44.6082611,43.2199631,42.0419197,41.9679718,42.4926224,43.2091255, &

43.2512283,41.2301674,40.1057358,40.4510574,41.5329170,41.5678177, &

43.0090141,42.1592140,39.9234505,38.8394127,40.4319878,40.8679352, &

41.4551926,41.9756317,43.9878922,46.5736389,45.5939293,42.4487762, &

41.5325394,42.8830910,44.5771217,45.8541985,46.8249474,47.5686378, &

46.6700745,45.4120026,43.2305107,42.7635345,43.7112923,42.0768661, &

41.1835632,40.3352280,37.9761467,35.9550056,36.3212509,36.9925880, &

37.2625008,37.0040665,38.5232544,39.4119797,41.8316803,43.7091446, &

42.9381447,42.1066780,40.3771248,38.6518707,37.0550499,36.9447708, &

38.1017685,39.4727097,39.8670387,39.3820763,38.2180786,37.7543488, &

37.7265244,38.0290642,37.5531158,37.4685936,39.8233147,42.0480766, &

42.4053535,43.0117416,44.1289330,45.0393829,45.1114540,45.0086479, &

44.6560631,45.0278931,46.7830849,48.7649765,47.7991905,46.5339661, &

43.3679199,41.6420822,41.2694893,41.5959740,43.5330009,43.3643608, &

42.1471291,42.5552788,42.4521446,41.7629128,39.9476891,38.3217010, &

40.5318718,42.8811569,44.4796944,44.6887932,43.1670265,41.2226143, &

41.8330154,44.3721924,45.2697029,44.4174194,43.5068550,44.9793015, &

45.0585403,43.2746620,40.3317070,40.3880501,40.2627106,39.6230278, &

41.0305252,40.9262009,40.8326912,41.7084885,42.9038048,45.8650513, &

46.5231590,47.9916115,47.8463135,46.5921936,45.8854408,45.9130440, &

45.7450371,46.2964249,44.9394569,45.8141251,47.5284042,48.5527802, &

48.3950577,47.8753052,45.8880005,45.7086983,44.6174774,43.5567932, &

44.5891113,43.1778679,40.9405632,40.6206894,41.3330421,42.2759552, &

42.4744949,43.0719833,44.2178459,43.8956337,44.1033440,45.6241455, &

45.3724861,44.9167595,45.9180603,46.9077835,46.1666603,46.6013489, &

46.6592331,46.7291603,47.1908340,45.9784355,45.1215782,45.6791115, &

46.7379875,47.3036957,45.9968834,44.4669495,45.7734680,44.6315041, &

42.9911766,46.3842583,43.7214432,43.5276833,41.3946495,39.7013168, &

39.1033401,38.5292892,41.0096245,43.4535828,44.6525154,45.5725899, &

46.2815285,45.2766647,45.3481712,45.5039482,45.6745682,44.0144806, &

42.9305000,43.6785469,42.2500534,40.0007210,40.4477005,41.4432716, &

42.0058670,42.9357758,45.6758842,46.8809929,46.8601494,47.0449791, &

46.5420647,46.8939934,46.2963371,43.5479164,41.3864059,41.4046364, &

42.3037987,43.6223717,45.8602371,47.3016396,46.8632469,45.4651413, &

45.6275482,44.9968376,42.7558670,42.0218239,41.9883728,42.2571678, &

44.3708687,45.7483635,44.8832512,44.7945862,44.8922577,44.7409401, &

45.1726494,45.5686874,45.9946709,47.3151054,48.0654068,46.4817467, &

42.8618279,42.4550323,42.5791168,43.4230957,44.7787971,43.8317108, &

43.6481781,42.4183960,41.8426285,43.3475227,44.4749908,46.3498306, &

47.8599319,46.2449913,43.6044006,42.4563484,41.2715340,39.8492508, &

39.9997292,41.4410820,42.9388237,42.5687332,42.6384087,41.7088661, &

43.9399033,45.4284401,44.4558411,45.1761856,45.3489113,45.1892662, &

46.3754730,45.6082802 /)

 

integer :: i, nout

integer, dimension(4) :: model

integer :: noutliers, nobs=280, mxlead=10

integer, dimension(:,:), pointer :: outlierstat

real(kind(1e0)), dimension(:), pointer :: omega

real(kind(1e0)) :: delta = 0.7, res_sigma, aic

real(kind(1e0)), dimension(280) :: x, residual

real(kind(1e0)), dimension(10,4) :: forecast_table

real(kind(1e0)), dimension(10,3) :: fcst, outfreefcst

real(kind(1e0)), dimension(4) :: params

character (len = 10) :: fmt

character (len = 20), dimension(5) :: clabel

character (len = 4), dimension(10) :: rlabel

 

fmt = '(F11.4)'

clabel(1) = ' '

clabel(2) = 'Orig. series'

clabel(3) = 'forecast'

clabel(4) = 'prob. limits'

clabel(5) = 'psi weights'

 

rlabel = (/ ' 1',' 2',' 3',' 4',' 5',' 6',' 7',' 8',' 9','10' /)

 

model = (/ 2,1,1,0 /)

 

CALL TS_OUTLIER_IDENTIFICATION (model, w, x, NOBS=nobs, DELTA=delta, &

RELERR=1.0e-5, RESIDUAL=residual, &

RESSIGMA=res_sigma, NOUTLIERS=noutliers, &

IOUTLIERSTATS=outlierstat, OMEGA=omega, &

PARAMS=params, AIC=aic)

 

CALL UMACH(2, nout)

WRITE (nout,*) 'ARMA parameters:'

DO i=1, 1+model(1)+model(2)

WRITE (nout,*) i,' ', params(i)

END DO

 

WRITE (nout,*)

WRITE (nout,*) 'Number of outliers: ', noutliers

WRITE (nout,*)

WRITE (nout,*) 'Outlier statistics: '

WRITE (nout,FMT="(T2, A, T22, A)") 'Time point','Outlier type'

DO i=1,noutliers

WRITE (nout,FMT="(T2, I10, T22, I12)") outlierstat(i,1), outlierstat(i,2)

END DO

 

WRITE (nout,*)

WRITE (nout,*) 'RSE: ', res_sigma

WRITE (nout,*) 'AIC: ', aic

WRITE (nout,*)

 

CALL TS_OUTLIER_FORECAST (x, residual, noutliers, outlierstat, &

omega, delta, model, params, mxlead, fcst, &

NOBS=nobs, OUTFREEFCST=outfreefcst)

 

forecast_table(1:mxlead,1) = w(281:290)

forecast_table(1:mxlead,2:4) = fcst(1:mxlead,1:3)

 

CALL WRRRL ('* * * Forecast Table for outlier contaminated series * * *',&

forecast_table, rlabel, clabel, FMT=fmt)

 

forecast_table(1:mxlead,1) = w(281:290) - 2.5

forecast_table(1:mxlead,2:4) = outfreefcst(1:mxlead,1:3)

 

WRITE (nout,*)

 

clabel(2) = 'Outlier free series'

CALL WRRRL ('* * * Forecast Table for outlier free series * * *', &

forecast_table, RLABEL, CLABEL, FMT=fmt)

END

Output

 

ARMA parameters:

1 8.837544

2 0.9461826

3 -0.1512835

4 -0.5606939

 

Number of outliers: 2

 

Outlier statistics:

Time point Outlier type

150 2

200 1

 

RSE: 1.0042976

AIC: 1323.6127

 

* * * Forecast Table for outlier contaminated series * * *

Orig. series forecast prob. limits psi weights

1 42.6384 42.3113 1.9684 1.5069

2 41.7089 42.7868 3.5598 1.2745

3 43.9399 43.2756 4.3550 0.9779

4 45.4284 43.6662 4.7615 0.7325

5 44.4558 43.9618 4.9750 0.5451

6 45.1762 44.1825 5.0894 0.4050

7 45.3489 44.3465 5.1514 0.3007

8 45.1893 44.4683 5.1853 0.2233

9 46.3755 44.5588 5.2039 0.1658

10 45.6083 44.6259 5.2141 0.1231

 

* * * Forecast Table for outlier free series * * *

Outlier free forecast prob. limits psi weights

series

1 40.1384 40.5805 1.9684 1.5069

2 39.2089 41.0560 3.5598 1.2745

3 41.4399 41.5449 4.3550 0.9779

4 42.9284 41.9355 4.7615 0.7325

5 41.9558 42.2311 4.9750 0.5451

6 42.6762 42.4517 5.0894 0.4050

7 42.8489 42.6158 5.1514 0.3007

8 42.6893 42.7376 5.1853 0.2233

9 43.8755 42.8281 5.2039 0.1658

10 43.1083 42.8952 5.2141 0.1231