ARIMA Models in Visual Basic QuickStart Sample
Illustrates how to work with ARIMA time series models using classes in the Numerics.NET.Statistics.TimeSeriesAnalysis namespace in Visual Basic.
View this sample in: C# F# IronPython
Option Infer On
Imports Numerics.NET.DataAnalysis
Imports Numerics.NET
Imports Numerics.NET.Statistics.TimeSeriesAnalysis
' Illustrates the use of the ArimaModel class to perform
' estimation and forecasting of ARIMA time series models.
Module ArimaModels
Sub Main()
' The license is verified at runtime. We're using
' a 30 day trial key here. For more information, see
' https://numerics.net/trial-key
Numerics.NET.License.Verify("64542-18980-57619-62268")
' This QuickStart Sample fits an ARMA(2,1) model and
' an ARIMA(0,1,1) model to sunspot data.
' The time series data is stored in a numerical variable:
Dim sunspots = Vector.Create(
100.8, 81.6, 66.5, 34.8, 30.6, 7, 19.8, 92.5,
154.4, 125.9, 84.8, 68.1, 38.5, 22.8, 10.2, 24.1, 82.9,
132, 130.9, 118.1, 89.9, 66.6, 60, 46.9, 41, 21.3, 16,
6.4, 4.1, 6.8, 14.5, 34, 45, 43.1, 47.5, 42.2, 28.1, 10.1,
8.1, 2.5, 0, 1.4, 5, 12.2, 13.9, 35.4, 45.8, 41.1, 30.4,
23.9, 15.7, 6.6, 4, 1.8, 8.5, 16.6, 36.3, 49.7, 62.5, 67,
71, 47.8, 27.5, 8.5, 13.2, 56.9, 121.5, 138.3, 103.2,
85.8, 63.2, 36.8, 24.2, 10.7, 15, 40.1, 61.5, 98.5, 124.3,
95.9, 66.5, 64.5, 54.2, 39, 20.6, 6.7, 4.3, 22.8, 54.8,
93.8, 95.7, 77.2, 59.1, 44, 47, 30.5, 16.3, 7.3, 37.3,
73.9)
' ARMA models (no differencing) are constructed from
' the variable containing the time series data, and the
' AR and MA orders. The following constructs an ARMA(2,1)
' model:
Dim model As New ArimaModel(sunspots, 2, 1)
' The Fit methods fit the model.
model.Fit()
' The model's Parameters collection contains the fitted values.
' For an ARIMA(p,d,q) model, the first p parameters are the
' auto-regressive parameters. The last q parametere are the
' moving average parameters.
Console.WriteLine("Variable Value Std.Error t-stat p-Value")
For Each param As Parameter(Of Double) In model.Parameters
' Parameter objects have the following properties:
' - Name, usually the name of the variable:
' - Estimated value of the param:
' - Standard error:
' - The value of the t statistic for the hypothesis that the param
' is zero.
' - Probability corresponding to the t statistic.
Console.WriteLine("{0,-20}{1,10:F5}{2,10:F5}{3,8:F2} {4,7:F4}",
param.Name,
param.Value,
param.StandardError,
param.Statistic,
param.PValue)
Next
' The log-likelihood of the computed solution is also available:
Console.WriteLine($"Log-likelihood: {model.LogLikelihood:F4}")
' as is the Akaike Information Criterion (AIC):
Console.WriteLine($"AIC: {model.GetAkaikeInformationCriterion():F4}")
' and the Baysian Information Criterion (BIC):
Console.WriteLine($"AIC: {model.GetBayesianInformationCriterion():F4}")
' The Forecast method can be used to predict the next value in the series...
Dim nextValue As Double = model.Forecast()
Console.WriteLine($"One step ahead forecast: {nextValue:F3}")
' or to predict a specified number of values:
Dim nextValues = model.Forecast(5)
Console.WriteLine($"First five forecasts: {nextValues:F3}")
' An integrated model (with differencing) is constructed
' by supplying the degree of differencing. Note the order
' of the orders is the traditional one for an ARIMA(p,d,q)
' model (p, d, q).
' The following constructs an ARIMA(0,1,1) model:
Dim model2 As New ArimaModel(sunspots, 0, 1, 1)
' By default, the mean is assumed to be zero for an integrated model.
' We can override this by setting the EstimateMean property to true:
model2.EstimateMean = True
' The Fit methods fit the model.
model2.Fit()
' The mean shows up as one of the parameters.
Console.WriteLine("Variable Value Std.Error t-stat p-Value")
For Each param As Parameter(Of Double) In model2.Parameters
Console.WriteLine("{0,-20}{1,10:F5}{2,10:F5}{3,8:F2} {4,7:F4}",
param.Name,
param.Value,
param.StandardError,
param.Statistic,
param.PValue)
Next
' We can also get the error variance:
Console.WriteLine($"Error variance: {model2.ErrorVariance:F4}")
Console.WriteLine($"Log-likelihood: {model2.LogLikelihood:F4}")
Console.WriteLine($"AIC: {model2.GetAkaikeInformationCriterion():F4}")
Console.WriteLine($"BIC: {model2.GetBayesianInformationCriterion():F4}")
Console.WriteLine("Press Enter key to continue.")
Console.ReadLine()
End Sub
End Module