Example 2: Parameter estimation and outlier detection for an artificial time series

This example is an artificial realization of an \text{ARMA}(1,1) process via formula

Y_t-0.8Y_{t-1}=10.0+a_t+0.5a_{t-1},\, t=1,\ldots,300,
\{a_t\} Gaussian white noise, E[Y_t]=50.0. An additive outlier with \omega_1=4.5 was added at time point t=150, a temporary change outlier with \omega_2=3.0 was added at time point t=200.

using System;
using Imsl.Stat;

public class ARMAOutlierIdentificationEx2
{
    public static void Main(String[] args)
    {
        double resStdErr, aic;
        int[,] outlierStatistics;
        int numOutliers;
        double[] omegaWeights;
        int[] model = { 1, 1, 1, 0 };
        double[] outlierFreeSeries;
        double constant;
        double[] ar, ma;
        
        double[] series = {
         50.0000000, 50.2728081, 50.6242599, 51.0373917, 51.9317627, 50.3494759,
         51.6597252, 52.7004929, 53.5499802, 53.1673279, 50.2373505, 49.3373871,
         49.5516472, 48.6692696, 47.6606636, 46.8774185, 45.7315445, 45.6469727,
         45.9882355, 45.5216560, 46.0479660, 48.1958656, 48.6387749, 49.9055367,
         49.8077278, 47.7858467, 47.9386749, 49.7691956, 48.5425873, 49.1239853,
         49.8518791, 50.3320694, 50.9146347, 51.8772049, 51.8745689, 52.3394470,
         52.7273712, 51.4310036, 50.6727448, 50.8370399, 51.2843437, 51.8162918,
         51.6933670, 49.7038231, 49.0189247, 49.455703, 50.2718010, 49.9605980,
         51.3775749, 50.2285385, 48.2692299, 47.6495590, 49.2938499, 49.1924858,
         49.6449242, 50.0446815, 51.9972496, 54.2576981, 52.9835434, 50.4193535,
         50.3617897, 51.8276901, 53.1239929, 54.0682144, 54.9238319, 55.6877632,
         54.8896332, 54.0701065, 52.2754097, 52.2522354, 53.1248703, 51.1287193,
         50.5003815, 49.6504173, 47.2453079, 45.4555626, 45.8449707, 45.9765129,
         45.7682228, 45.2343674, 46.6496811, 47.0894432, 49.3368340, 50.8058052,
         49.9132500, 49.5893288, 48.2470627, 46.9779968, 45.6760864, 45.7070389,
         46.6158409, 47.5303612, 47.5630417, 47.0389214, 46.0352287, 45.8161545,
         45.7974396, 46.0015373, 45.3796463, 45.3461685, 47.6444016, 49.3327446,
         49.3810692, 50.2027817, 51.4567032, 52.3986320, 52.5819206, 52.7721825,
         52.6919098, 53.3274345, 55.1345940, 56.8962631, 55.7791634, 55.0616989,
         52.3551178, 51.3264084, 51.0968323, 51.1980476, 52.8001442, 52.0545082,
         50.8742943, 51.5150337, 51.2242050, 50.5033989, 48.7760124, 47.4179192,
         49.7319527, 51.3320541, 52.3918304, 52.4140434, 51.0845947, 49.6485748,
         50.6893463, 52.9840813, 53.3246994, 52.4568024, 51.9196091, 53.6683121,
         53.4555359, 51.7755814, 49.2915611, 49.8755112, 49.4546776, 48.6171913,
         49.9643021, 49.3766441, 49.2551308, 50.1021881, 51.0769119, 55.8328133,
         52.0212708, 53.4930801, 53.2147255, 52.2356453, 51.9648819, 52.1816330,
         51.9898071, 52.5623627, 51.0717278, 52.2431946, 53.6943054, 54.3752098,
         54.1492615, 53.8523254, 52.1093712, 52.3982697, 51.2405128, 50.3018112,
         51.3819618, 49.5479546, 47.5024452, 47.4447708, 47.8939056, 48.4070015,
         48.2440681, 48.7389755, 49.7309227, 49.1998024, 49.5798340, 51.1196213,
         50.6288414, 50.3971405, 51.6084099, 52.4564743, 51.6443901, 52.4080658,
         52.4643364, 52.6257210, 53.1604691, 51.9309731, 51.4137230, 52.1233368,
         52.9867249, 53.3180733, 51.9647636, 50.7947655, 52.3815842, 50.8353729,
         49.4136009, 52.8355217, 52.2234840, 51.1392517, 48.5245132, 46.8700218,
         46.1607285, 45.2324257, 47.4157829, 48.9989090, 49.6230736, 50.4352913,
         51.1652985, 50.2588654, 50.7820129, 51.0448799, 51.2880516, 49.6898804,
         49.0288200, 49.9338837, 48.2214432, 46.2103348, 46.9550171, 47.5595894,
         47.7176018, 48.4502945, 50.9816895, 51.6950073, 51.6973495, 52.1941261,
         51.8988075, 52.5617599, 52.0218391, 49.5236053, 47.9684906, 48.2445183,
         48.8275146, 49.7176971, 51.5649338, 52.5627213, 52.0182419, 50.9688835,
         51.5846901, 50.9486771, 48.8685837, 48.5600624, 48.4760094, 48.5348396,
         50.4187813, 51.2542381, 50.1872864, 50.4407692, 50.6222687, 50.4972000,
         51.0036087, 51.3367500, 51.7368202, 53.0463791, 53.6261253, 52.0728683,
         48.9740753, 49.3280830, 49.2733917, 49.8519020, 50.8562126, 49.5594254,
         49.6109200, 48.3785629, 48.0026474, 49.4874268, 50.1596375, 51.8059540,
         53.0288620, 51.3321075, 49.3114815, 48.7999306, 47.7201881, 46.3433914,
         46.5303612, 47.6294632, 48.6012459, 47.8567657, 48.0604057, 47.1352806,
         49.5724792, 50.5566483, 49.4182968, 50.5578079, 50.6883736, 50.6333389,
         51.9766159, 51.0595245, 49.3751640, 46.9667702, 47.1658173, 47.4411278,
         47.5360374, 48.9914742, 50.4747620, 50.2728043, 51.9117165, 53.7627792};
        
        ARMAOutlierIdentification armaOutlier = new ARMAOutlierIdentification(series);
        
        armaOutlier.RelativeError = 1.0e-5;
        armaOutlier.Compute(model);
        
        outlierFreeSeries = armaOutlier.GetOutlierFreeSeries();
        numOutliers = armaOutlier.NumberOfOutliers;
        outlierStatistics = armaOutlier.GetOutlierStatistics();
        omegaWeights = armaOutlier.GetOmegaWeights();
        constant = armaOutlier.Constant;
        ar = armaOutlier.GetAR();
        ma = armaOutlier.GetMA();
        resStdErr = armaOutlier.ResidualStandardError;
        aic = armaOutlier.AIC;
        
        Console.Out.WriteLine("\n\n   ARMA parameters:");
        Console.Out.WriteLine("constant:{0, 11:f6}", constant);
        Console.Out.WriteLine("ar[0]:{0,14:f6}", ar[0]);
        Console.Out.WriteLine("ma[0]:{0,14:f6}", ma[0]);
        Console.Out.WriteLine();
        Console.Out.WriteLine("Number of outliers:{0,3:d}", numOutliers);
        Console.Out.WriteLine();
        Console.Out.WriteLine("   Outlier statistics:");
        Console.Out.WriteLine("Time point      Outlier type");
        for (int i = 0; i < numOutliers; i++)
            Console.Out.WriteLine("{0,10:d}{1,18:d}", outlierStatistics[i,0],
                                   outlierStatistics[i,1]);
        Console.Out.WriteLine("\n   Omega statistics:");
        Console.Out.WriteLine("Time point      Omega");
        for (int i = 0; i < numOutliers; i++)
            Console.Out.WriteLine("{0,10:d}{1,11:f6}", outlierStatistics[i,0],
                                   omegaWeights[i]);
        Console.Out.WriteLine("\nRSE:{0,12:f6}", resStdErr);
        Console.Out.WriteLine("AIC:{0,12:f6}", aic);
    }
}

Output



   ARMA parameters:
constant:  10.829171
ar[0]:      0.785217
ma[0]:     -0.496449

Number of outliers:  2

   Outlier statistics:
Time point      Outlier type
       150                 1
       200                 3

   Omega statistics:
Time point      Omega
       150   4.477853
       200   3.381622

RSE:    1.007223
AIC: 1417.044262

Link to C# source.