This example is a realization of an
process described by the model
a Gaussian White noise process. An additive outlier with
was added at time point
, a temporary change outlier with
was added at time point
.
Outliers were artificially added to the outlier free series
at time points
(level shift with
) and
(additive outlier with
), resulting in the outlier contaminated series
. For both series, forecasts were determined for time points
and compared with the actual values of the series.
import com.imsl.stat.*;
import java.util.*;
public class ARMAOutlierIdentificationEx3
{
public static void main(String args[]) throws Exception {
double resStdErr, aic;
int[][] outlierStatistics;
int numOutliers;
int[] model = new int[4];
double constant;
double[] ar, ma;
int nForecast = 10;
double[] outlierContaminatedForecast;
double[] outlierFreeForecast;
double[] probabilityLimits;
double[] psiWeights;
double[] outlierContaminatedSeries ={
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};
// Actual values of the outlier contaminated series for
// t = 181,...,190
double[] exactForecastOutlierContaminatedSeries = {
42.6384087,41.7088661,43.9399033,45.4284401,44.4558411,45.1761856,
45.3489113,45.1892662, 46.3754730,45.6082802 };
// Actual values of the outlier free series for
// t = 181,...,190. This are the values of the outlier contaminated
// series - 2.5
double[] exactForecastOutlierFreeSeries = {
40.1384087,39.2088661,41.4399033,42.9284401,41.9558411,42.6761856,
42.8489113,42.6892662, 43.8754730,43.1082802 };
model[0] = 2;
model[1] = 1;
model[2] = 1;
model[3] = 0;
ARMAOutlierIdentification armaOutlier =
new ARMAOutlierIdentification(outlierContaminatedSeries);
armaOutlier.setRelativeError(1.0e-5);
armaOutlier.compute(model);
armaOutlier.computeForecasts(nForecast);
numOutliers = armaOutlier.getNumberOfOutliers();
outlierStatistics = armaOutlier.getOutlierStatistics();
constant = armaOutlier.getConstant();
ar = armaOutlier.getAR();
ma = armaOutlier.getMA();
resStdErr = armaOutlier.getResidualStandardError();
aic = armaOutlier.getAIC();
outlierContaminatedForecast = armaOutlier.getForecast();
outlierFreeForecast = armaOutlier.getOutlierFreeForecast();
probabilityLimits = armaOutlier.getDeviations();
psiWeights = armaOutlier.getPsiWeights();
System.out.printf("%n%n ARMA parameters:%n");
System.out.printf(Locale.ENGLISH, "constant: %9.6f%n", constant);
System.out.printf(Locale.ENGLISH, "ar[0]: %12.6f%n", ar[0]);
System.out.printf(Locale.ENGLISH, "ar[1]: %12.6f%n", ar[1]);
System.out.printf(Locale.ENGLISH, "ma[0]: %12.6f%n%n", ma[0]);
System.out.printf("Number of outliers: %d%n%n", numOutliers);
System.out.printf(" Outlier statistics:%n");
System.out.printf("Time point%8sOutlier type%n", " ");
for (int i = 0; i < numOutliers; i++)
System.out.printf("%10d%20d%n", outlierStatistics[i][0],
outlierStatistics[i][1]);
System.out.printf(Locale.ENGLISH, "%nRSE:%9.6f%n", resStdErr);
System.out.printf(Locale.ENGLISH, "AIC:%12.6f%n%n", aic);
System.out.printf("%5s* * * Forecast Table for outlier "
+ "contaminated series * * *%n%n", " ");
System.out.printf("%10sExact%5sforecast%6slimits%9spsi%n",
" ", " ", " ", " ");
for (int i = 0; i < nForecast; i++)
System.out.printf(Locale.ENGLISH, "%7s%8.4f%13.4f%12.4f%12.4f%n",
" ",
exactForecastOutlierContaminatedSeries[i],
outlierContaminatedForecast[i],
probabilityLimits[i],
psiWeights[i]);
System.out.printf("%n%n%5s* * * Forecast Table for outlier "+
"free series * * *%n%n", " ");
System.out.printf("%10sExact%5sforecast%6slimits%9spsi%n",
" ", " ", " ", " ");
for (int i = 0; i < nForecast; i++)
System.out.printf(Locale.ENGLISH, "%7s%8.4f%13.4f%12.4f%12.4f%n",
" ",
exactForecastOutlierFreeSeries[i],
outlierFreeForecast[i],
probabilityLimits[i],
psiWeights[i]);
}
}
ARMA parameters:
constant: 8.891421
ar[0]: 0.944052
ar[1]: -0.150404
ma[0]: -0.558928
Number of outliers: 2
Outlier statistics:
Time point Outlier type
150 2
200 1
RSE: 1.004306
AIC: 1323.617443
* * * Forecast Table for outlier contaminated series * * *
Exact forecast limits psi
42.6384 42.3158 1.9684 1.5030
41.7089 42.7933 3.5535 1.2685
43.9399 43.2822 4.3430 0.9715
45.4284 43.6718 4.7453 0.7263
44.4558 43.9662 4.9560 0.5396
45.1762 44.1854 5.0686 0.4002
45.3489 44.3482 5.1294 0.2966
45.1893 44.4688 5.1625 0.2198
46.3755 44.5582 5.1806 0.1629
45.6083 44.6245 5.1906 0.1207
* * * Forecast Table for outlier free series * * *
Exact forecast limits psi
40.1384 40.5904 1.9684 1.5030
39.2089 41.0679 3.5535 1.2685
41.4399 41.5567 4.3430 0.9715
42.9284 41.9464 4.7453 0.7263
41.9558 42.2407 4.9560 0.5396
42.6762 42.4600 5.0686 0.4002
42.8489 42.6227 5.1294 0.2966
42.6893 42.7434 5.1625 0.2198
43.8755 42.8328 5.1806 0.1629
43.1083 42.8991 5.1906 0.1207
Link to Java source.