
Tramo is an efficient tool for the detection of outliers. We describe below the steps for processing an automatic outliers detection and for analysing the likelihood of the last observation(s) (TERROR-like).
Predefined outliers are:
Note that it is also possible to define new kinds of outliers (see User-defined outliers detection)
References:
- NbbUtilities.dll
- NbbTs.dll
- NbbTramoSeats.dll
Code:
using Nbb.TimeSeries.SimpleTS;
using Nbb.TramoSeats;...
// External trade statistics: exports
double[] data =
{
9568.3,9920.3,11353.5,9247.5,10114.2,10763.1,8456.1,8071.6,10328,10551.4,10186.1,8821.6,
9841.3,10233.6,10794.6,10289.3,10513.4,10607.6,9707.4,8103.5,10982.6,11836.9,10517.5,9810.5,
10374.8,10855.3,11671.3,11901.2,10846.4,11917.5,11362.8,9314.5,12605.9,12815.1,11254.5,11111.8,
11282.9,11554.5,12935.6,12146.3,11615.3,13214.8,11735.5,9522.3,12694.8,12317.6,11450,11380.9,
10604.6,10972.2,13331.5,11733.1,11284.7,13295.8,11881.4,10374.2,13828,13490.5,13092.2,13184.4,
12398.4,13882.3,15861.5,13286.1,15634.9,14211,13646.8,12224.6,15916.4,16535.9,15796,14418.6,
15044.5,14944.2,16754.8,14254,15454.9,15644.8,14568.3,12520.2,14803,15873.2,14755.3,12875.1,
14291.1,14205.3,15859.4,15258.9,15498.6,15106.5,15023.6,12083,15761.3,16943,15070.3,13659.6,
14768.9,14725.1,15998.1,15370.6,14956.9,15469.7,15101.8,11703.7,16283.6,16726.5,14968.9,14861,
14583.3,15305.8,17903.9,16379.4,15420.3,17870.5,15912.8,13866.5,17823.2,17872,17420.4,16704.4,
15991.5,16583.6,19123.4,17838.8,17335.3,19026.9,16428.6,15337.4,19379.8,18070.5,19563,18190.6,
17658,18437.9,21510.4,17111,19732.7,20221.8
};
TS series = new TS(TSFrequency.Monthly, 1995, 0, data);// Creation of the specification.
TramoSpecification spec = new TramoSpecification();
// Initialisation of the OutliersDetection part.
spec.OutliersDetection.AO = true;
spec.OutliersDetection.LS = true;
spec.OutliersDetection.SO = true;
// The threshold for the outliers detection, as defined in Tramo. Set to 0 to use the predefined value, that depends on the length of the series)
spec.OutliersDetection.VA = 3;// Other initialisation... (for instance)
spec.ModelIdentification.IsEnabled = true;
Tramo tramo = new Tramo();
tramo.Specification = spec;
tramo.Process(series);// iterating through the outliers collection
foreach (OutlierEstimation outlier in tramo.OutliersEstimation())
{
String desc = outlier.Code;
TSPeriod period = series.Domain[outlier.Position];
double value = outlier.Value;
double tstat = outlier.TStat;
}// TERROR-like.
// drop the last n observations
int n = 3;
TS truncatedseries = series.Drop(0, 3);
tramo.Process(truncatedseries);
// drop the last n observations
TramoForecast fcast=tramo.Forecast(n);for (int i = 0; i < n; ++i)
{
double lastobs = series[series.Domain.Count - n + i];if (tramo.UsedSpecification.Transformation.Option == DataTransformation.Log)
lastobs = Math.Log(lastobs);// relative prediction error
double error = (lastobs - fcast.Forecast(i)) / fcast.ForecastStdev(i);
}