ARIMA Models in F# QuickStart Sample
Illustrates how to work with ARIMA time series models using classes in the Numerics.NET.Statistics.TimeSeriesAnalysis namespace in F#.
View this sample in: C# Visual Basic IronPython
// Illustrates the use of the ArimaModel class to perform
// estimation and forecasting of ARIMA time series models..
#light
open System
open Numerics.NET
open Numerics.NET.Statistics
open Numerics.NET.Statistics.TimeSeriesAnalysis
// The license is verified at runtime. We're using a 30 day trial key here.
// For more information, see:
// https://numerics.net/trial-key
let licensed = 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:
let sunspots =
Vector.Create(
[|
100.8; 81.6; 66.5; 34.8; 30.6; 7.0; 19.8; 92.5;154.4;125.9;
84.8; 68.1; 38.5; 22.8; 10.2; 24.1; 82.9;132.0;130.9;118.1;
89.9; 66.6; 60.0; 46.9; 41.0; 21.3; 16.0; 6.4; 4.1; 6.8;
14.5; 34.0; 45.0; 43.1; 47.5; 42.2; 28.1; 10.1; 8.1; 2.5;
0.0; 1.4; 5.0; 12.2; 13.9; 35.4; 45.8; 41.1; 30.4; 23.9;
15.7; 6.6; 4.0; 1.8; 8.5; 16.6; 36.3; 49.7; 62.5; 67.0;
71.0; 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.0; 40.1; 61.5; 98.5;124.3; 95.9;
66.5; 64.5; 54.2; 39.0; 20.6; 6.7; 4.3; 22.8; 54.8; 93.8;
95.7; 77.2; 59.1; 44.0; 47.0; 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:
let model = ArimaModel(sunspots, 2, 1)
// The Fit methods fits 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.
printfn "Variable Value Std.Error t-stat p-Value"
for parameter in model.Parameters do
// Parameter objects have the following properties:
printfn "%-20s%10.5f%10.5f%8.2f %7.4f"
// Name, usually the name of the variable:
parameter.Name
// Estimated value of the parameter:
parameter.Value
// Standard error:
parameter.StandardError
// The value of the t statistic for the hypothesis that the parameter
// is zero.
parameter.Statistic
// Probability corresponding to the t statistic.
parameter.PValue
// The log-likelihood of the computed solution is also available:
printfn "Log-likelihood: %.4f" (model.LogLikelihood)
// as is the Akaike Information Criterion (AIC):
printfn "AIC: %.4f" (model.GetAkaikeInformationCriterion())
// and the Baysian Information Criterion (BIC):
printfn "AIC: %.4f" (model.GetBayesianInformationCriterion())
// The Forecast method can be used to predict the next value in the series...
let nextValue = model.Forecast()
printfn "One step ahead forecast: %.3f" nextValue
// or to predict a specified number of values:
let nextValues = model.Forecast(5)
printfn "First five forecasts: %s" (nextValues.ToString("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:
let model2 = 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 fits the model.
model2.Fit()
// The mean shows up as one of the parameters.
printfn "Variable Value Std.Error t-stat p-Value"
for parameter in model2.Parameters do
printfn "%-20s%10.5f%10.5f%8.2f %7.4f" parameter.Name parameter.Value
parameter.StandardError parameter.Statistic parameter.PValue
// We can also get the error variance:
printfn "Error variance: %.4f" model2.ErrorVariance
printfn "Log-likelihood: %.4f" (model2.LogLikelihood)
printfn "AIC: %.4f" (model2.GetAkaikeInformationCriterion())
printfn "BIC: %.4f" (model2.GetBayesianInformationCriterion())
printf "Press any key to exit."
Console.ReadLine() |> ignore