ARMA: ISlARMA;
ARMA: Prognoz.Platform.Interop.Stat.SlARMA;
The ARMA property returns autoregression and moving average parameters.
By default autoregression and moving average parameters are not defined.
The AR order cannot be used for random effect model, that is, if ISmPooledModel.CrossSection = PooledModelCrossSectionType.RandomEffect.
The AM order cannot be used for a model of regression on panel data.
Add a link to the Stat system assembly.
Sub UserProc;
Var
PooledModel: ISmPooledModel;
yY: Array[6, 2] Of Double;
X1x, x2x: Array[7, 2] Of Double;
Coefficients: ICoefficients;
ARMA: ISlARMA;
i, j, Status, MPLastPoint, ForecastValue: Integer;
StandardError, Estimate, d1, d2: Array Of Double;
Begin
PooledModel := New SmPooledModel.Create;
// Explained values
yY[0, 0] := 20; yY[0, 1] := 17;
yY[1, 0] := 7; yY[1, 1] := Double.Nan;
yY[2, 0] := -50; YY[2, 1] := 21;
yY[3, 0] := 20; yY[3, 1] := 17;
yY[4, 0] := 25; yY[4, 1] := 7;
yY[5, 0] := -50; YY[5, 1] := 0.1;
PooledModel.Explained.Value := YY;
// Explanatory values
x1x[0, 0] := 4; x1x[0, 1] := -1.5;
x1x[1, 0] := 0.5; x1x[1, 1] := 5;
x1x[2, 0] := -2; x1x[2, 1] := 2.5;
x1x[3, 0] := 130; x1x[3, 1] := 131;
x1x[4, 0] := 141; x1x[4, 1] := Double.Nan;
x1x[5, 0] := 150; x1x[5, 1] := 151;
x1x[6, 0] := 160; x1x[6, 1] := 161;
PooledModel.Explanatories.Add.Value := x1x;
// Weights
x2x[0, 0] := 3; x2x[0, 1] := 0.5;
x2x[1, 0] := 6; x2x[1, 1] := 1;
x2x[2, 0] := 0.75; x2x[2, 1] := 2;
x2x[3, 0] := 230; x2x[3, 1] := 231;
x2x[4, 0] := 240; x2x[4, 1] := 241;
x2x[5, 0] := 250; x2x[5, 1] := 251;
x2x[6, 0] := 260; x2x[6, 1] := 261;
PooledModel.Weights := x2x;
// Sample period
PooledModel.ModelPeriod.FirstPoint := 2;
PooledModel.ModelPeriod.LastPoint := 5;
// Latest forecast point
PooledModel.Forecast.LastPoint := 7;
// Model type
PooledModel.CrossSection := PooledModelCrossSectionType.None;
// Missing data treatment
PooledModel.MissingData.Method := MissingDataMethod.SampleAverage;
// Parameters of autoregression and moving average
ARMA := PooledModel.ARMA;
ARMA.ParseAR("1");
// Run calculation and output obtained coefficients
Status := PooledModel.Execute;
Debug.WriteLine(PooledModel.Errors);
If Status = 0 Then
Coefficients := PooledModel.ModelCoefficients.Coefficients;
j := Coefficients.Estimate.Length;
Debug.WriteLine("Coefficient values:");
For i := 0 To j - 1 Do
Estimate := Coefficients.Estimate;
StandardError := Coefficients.StandardError;
Debug.WriteLine(" " + (i + 1).ToString + ": " + Estimate[i].ToString + ", " + StandardError[i].ToString);
End For;
Debug.WriteLine("=== Modeling series ===");
For i := 0 To PooledModel.Fitted.GetUpperBound(1) Do
d1 := PooledModel.Fitted;
d2 := PooledModel.Fitted;
Debug.WriteLine(" " + d1[i,0].ToString + " " + d2[i,1].ToString);
End For;
Debug.WriteLine("=== Residuals series ===");
For i := 0 To PooledModel.Residuals.GetUpperBound(1) Do
d1 := PooledModel.Residuals;
d2 := PooledModel.Residuals;
Debug.WriteLine(" " + d1[i,0].ToString + " " + d2[i,1].ToString);
End For;
Debug.WriteLine("=== Forecast series);
MPLastPoint := PooledModel.ModelPeriod.LastPoint;
ForecastValue := PooledModel.Forecast.Value.GetUpperBound(1);
For i := MPLastPoint To ForecastValue Do
d1 := PooledModel.Forecast.Value;
d2 := PooledModel.Forecast.Value;
Debug.WriteLine((i+1).ToString + ". " + d1[i,0].ToString + " " + d2[i,1].ToString);
End For;
End If;
End Sub UserProc;
After executing the example the panel data regression model with random effects is calculated; calculation results are displayed in the console window.
The requirements and result of the Fore.NET example execution match with those in the Fore example.
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
PooledModel: ISmPooledModel;
yY: Array[2, 6] Of Double;
X1x, x2x: Array[2, 7] Of Double;
Coefficients: ICoefficients;
ARMA: ISlARMA;
i, j, Status, MPLastPoint, ForecastValue: Integer;
StandardError, Estimate, d1, d2: System.Array;
Begin
PooledModel := New SmPooledModel.Create();
// Explained values
yY[0, 0] := 20; yY[1, 0] := 17;
yY[0, 1] := 7; yY[1, 1] := Double.Nan;
yY[0, 2] := -50; YY[1, 2] := 21;
yY[0, 3] := 20; yY[1, 3] := 17;
yY[0, 4] := 25; yY[1, 4] := 7;
yY[0, 5] := -50; YY[1, 5] := 0.1;
PooledModel.Explained.Value:=yY;
// Explanatory values
x1x[0, 0] := 4; x1x[1, 0] := -1.5;
x1x[0, 1] := 0.5; x1x[1, 1] := 5;
x1x[0, 2] := -2; x1x[1, 2] := 2.5;
x1x[0, 3] := 130; x1x[1, 3] := 131;
x1x[0, 4] := 141; x1x[1, 4] := Double.Nan;
x1x[0, 5] := 150; x1x[1, 5] := 151;
x1x[0, 6] := 160; x1x[1, 6] := 161;
PooledModel.Explanatories.Add().Value := x1x;
// Weights
x2x[0, 0] := 3; x2x[1, 0] := 0.5;
x2x[0, 1] := 6; x2x[1, 1] := 1;
x2x[0, 2] := 0.75; x2x[1, 2] := 2;
x2x[0, 3] := 230; x2x[1, 3] := 231;
x2x[0, 4] := 240; x2x[1, 4] := 241;
x2x[0, 5] := 250; x2x[1, 5] := 251;
x2x[0, 6] := 260; x2x[1, 6] := 261;
PooledModel.Weights := x2x;
// Sample period
PooledModel.ModelPeriod.FirstPoint := 2;
PooledModel.ModelPeriod.LastPoint := 5;
// Latest forecast point
PooledModel.Forecast.LastPoint := 7;
// Model type
PooledModel.CrossSection := PooledModelCrossSectionType.pmcstNone;
// Missing data treatment
PooledModel.MissingData.Method := MissingDataMethod.mdmSampleAverage;
// Parameters of autoregression and moving average
ARMA := PooledModel.ARMA;
ARMA.ParseAR("1", True);
// Run calculation and output obtained coefficients
Status := PooledModel.Execute();
System.Diagnostics.Debug.WriteLine(PooledModel.Errors);
If Status = 0 Then
Coefficients := PooledModel.ModelCoefficients.Coefficients;
j := Coefficients.Estimate.Length;
System.Diagnostics.Debug.WriteLine("Coefficient values:");
For i := 0 To j - 1 Do
Estimate := Coefficients.Estimate;
StandardError := Coefficients.StandardError;
System.Diagnostics.Debug.WriteLine(" " + (i + 1).ToString() + ": " + Estimate[i].ToString() + ", " + StandardError[i].ToString());
End For;
System.Diagnostics.Debug.WriteLine("=== Modeling series ===");
For i := 0 To PooledModel.Fitted.GetUpperBound(1) Do
d1 := PooledModel.Fitted;
d2 := PooledModel.Fitted;
System.Diagnostics.Debug.WriteLine(" " + d1[0,i].ToString() + " " + d2[1,i].ToString());
End For;
System.Diagnostics.Debug.WriteLine("=== Residuals series ===");
For i := 0 To PooledModel.Residuals.GetUpperBound(1) Do
d1 := PooledModel.Residuals;
d2 := PooledModel.Residuals;
System.Diagnostics.Debug.WriteLine(" " + d1[0,i].ToString() + " " + d2[1,i].ToString());
End For;
System.Diagnostics.Debug.WriteLine("=== Forecast series ===");
MPLastPoint := PooledModel.ModelPeriod.LastPoint;
ForecastValue := PooledModel.Forecast.Value.GetUpperBound(1);
For i := MPLastPoint To ForecastValue Do
d1 := PooledModel.Forecast.Value;
d2 := PooledModel.Forecast.Value;
System.Diagnostics.Debug.WriteLine((i+1).ToString() + ". " + d1[0,i].ToString() + " " + d2[1,i].ToString());
End For;
End If;
End Sub;
See also: