PeriodSeas: Integer;
PeriodSeas: Integer;
The PeriodSeas property determines seasonality period to calculate seasonal difference.
PeriodSeas is used to calculate autoregression and moving average in the ARIMA model.
This example creates and calculates a model taking into account seasonality period in data.
To execute the example, add a link to the Stat system assembly.
Sub UserProc;
Var
lr: ISmLinearRegress;
W: Array[50] Of Double;
ARMA: ISlARMA;
AR, MA: Array[1] Of Integer;
Inits: Array[2] Of Double;
res: Integer;
d: Double;
CoefficientsAR, CoefficientsMA: ICoefficients;
ModelCoefficients: IModelCoefficients;
Begin
lr := New SmLinearRegress.Create;
// explanatory series values
w[00] := 6209; w[10] := 7132; w[20] := 9907; w[30] := 14242;
w[01] := 6385; w[11] := 7137; w[21] := 10333; w[31] := 14704;
w[02] := 6752; w[12] := 7473; w[22] := 10863; w[32] := 13802;
w[03] := 6837; w[13] := 7722; w[23] := 11693; w[33] := 14197;
w[04] := 6495; w[14] := 8088; w[24] := 12242; w[34] := Double.Nan;
w[05] := 6907; w[15] := 8516; w[25] := 12227; w[35] := 15589;
w[06] := 7349; w[16] := 8941; w[26] := 12910; w[36] := 15932;
w[07] := 7213; w[17] := 9064; w[27] := 13049; w[37] := 16631;
w[08] := 7061; w[18] := 9380; w[28] := 13384; w[38] := Double.Nan;
w[09] := 7180; w[19] := 9746; w[29] := 14036; w[39] := 17758;
// sample period
lr.ModelPeriod.FirstPoint := 1;
lr.ModelPeriod.LastPoint := 30;
lr.Forecast.LastPoint := 38;
lr.MissingData.Method := MissingDataMethod.Casewise;
lr.Explained.Value := w;
ModelCoefficients := lr.ModelCoefficients;
// constant will be used in the model
ModelCoefficients.Intercept.Mode := InterceptMode.AutoEstimate;
ARMA := lr.ARMA;
// non-seasonal autoregression order
AR[0] := 1;
ARMA.OrderAR := AR;
// non-seasonal moving average order
MA[0] := 1;
ARMA.OrderMA := MA;
// seasonal autoregression initial approximations
Inits[0] := 0.0025;
ARMA.InitARSeas := Inits;
// seasonal moving average initial approximations
Inits[0] := 0.0035;
ARMA.InitMASeas := Inits;
// seasonal difference
ARMA.DiffSeas := 1;
// seasonal period
ARMA.PeriodSeas := 3;
// difference
ARMA.Diff := 3;
// coefficient estimation method
ARMA.EstimationApproach := ARMAEstimationApproach.MaximumLikelihood;
// calculate model
res := lr.Execute;
Debug.WriteLine(lr.Errors);
If (res = 0) Then
// constant
Debug.Write("Value of constant: ");
d := lr.ModelCoefficients.Intercept.Estimate;
Debug.WriteLine(d);
// non-seasonal autoregression coefficients
Debug.WriteLine("Non-seasonal autoregression coefficient estimations");
CoefficientsAR := ARMA.CoefficientsAR;
d := CoefficientsAR.Estimate[0];
Debug.WriteLine(" Value: " + d.ToString);
// non-seasonal moving average coefficients
Debug.WriteLine("Non-seasonal moving average coefficient estimations");
CoefficientsMA := ARMA.CoefficientsMA;
d := CoefficientsMA.Estimate[0];
Debug.WriteLine(" Value: " + d.ToString);
End If;
End Sub UserProc;
After executing the example a linear regression model with the following parameters is created:
Orders of non-seasonal autoregression and seasonal moving average.
Initial approximations of seasonal autoregression and seasonal moving average;
Difference, seasonal difference, seasonality period;
Coefficients are estimated with the maximum likelihood method.
The console window displays estimations of model coefficients.
No errors
Value of constant: -4,72264355524548
Non-seasonal autoregression coefficient estimations
Value: -0.16279813506560903
Non-seasonal moving average coefficient estimations
Value: -0.99999997820334707
This example creates and calculates a model taking into account seasonality period in data. The result of example execution matches the result of Fore Example execution.
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
lr: ISmLinearRegress;
W: Array[50] Of Double;
ARMA: ISlARMA;
AR, MA: Array[1] Of Integer;
Inits: Array[2] Of Double;
res: Integer;
d: string;
CoefficientsAR, CoefficientsMA: ICoefficients;
ModelCoefficients: IModelCoefficients;
Begin
lr := New SmLinearRegress.Create();
// explanatory series values
w[00] := 6209; w[10] := 7132; w[20] := 9907; w[30] := 14242;
w[01] := 6385; w[11] := 7137; w[21] := 10333; w[31] := 14704;
w[02] := 6752; w[12] := 7473; w[22] := 10863; w[32] := 13802;
w[03] := 6837; w[13] := 7722; w[23] := 11693; w[33] := 14197;
w[04] := 6495; w[14] := 8088; w[24] := 12242; w[34] := Double.Nan;
w[05] := 6907; w[15] := 8516; w[25] := 12227; w[35] := 15589;
w[06] := 7349; w[16] := 8941; w[26] := 12910; w[36] := 15932;
w[07] := 7213; w[17] := 9064; w[27] := 13049; w[37] := 16631;
w[08] := 7061; w[18] := 9380; w[28] := 13384; w[38] := Double.Nan;
w[09] := 7180; w[19] := 9746; w[29] := 14036; w[39] := 17758;
// sample period
lr.ModelPeriod.FirstPoint := 1;
lr.ModelPeriod.LastPoint := 30;
lr.Forecast.LastPoint := 38;
lr.MissingData.Method := MissingDataMethod.mdmCasewise;
lr.Explained.Value := w;
ModelCoefficients := lr.ModelCoefficients;
// constant will be used in the model
ModelCoefficients.Intercept.Mode := InterceptMode.imAutoEstimate;
ARMA := lr.ARMA;
// non-seasonal autoregression order
AR[0] := 1;
ARMA.OrderAR := AR;
// non-seasonal moving average order
MA[0] := 1;
ARMA.OrderMA := MA;
// seasonal autoregression initial approximations
Inits[0] := 0.0025;
ARMA.InitARSeas := Inits;
// seasonal moving average initial approximations
Inits[0] := 0.0035;
ARMA.InitMASeas := Inits;
// seasonal difference
ARMA.DiffSeas := 1;
// seasonal period
ARMA.PeriodSeas := 3;
// difference
ARMA.Diff := 3;
// coefficient estimation method
ARMA.EstimationApproach := ARMAEstimationApproach.armaeaMaximumLikelihood;
// calculate model
res := lr.Execute();
System.Diagnostics.Debug.WriteLine(lr.Errors);
If (res = 0) Then
// constant
System.Diagnostics.Debug.Write("Value of constant: ");
d := lr.ModelCoefficients.Intercept.Estimate.ToString();
System.Diagnostics.Debug.WriteLine(d);
// non-seasonal autoregression coefficients
System.Diagnostics.Debug.WriteLine("Non-seasonal autoregression coefficient estimations");
CoefficientsAR := ARMA.CoefficientsAR;
d := CoefficientsAR.Estimate.GetValue(0).ToString();
System.Diagnostics.Debug.WriteLine(" Value: " + d);
// non-seasonal moving average coefficients
System.Diagnostics.Debug.WriteLine("Non-seasonal moving average coefficient estimations");
CoefficientsMA := ARMA.CoefficientsMA;
d := CoefficientsMA.Estimate.GetValue(0).ToString();
System.Diagnostics.Debug.WriteLine(" Value: " + d);
End If;
End Sub;
See also: