GDLTerms: ISlGDLTerms;
GDLTerms: Prognoz.Platform.Interop.Stat.ISlGDLTerms;
The GDLTerms property determines parameters for estimation of Koyck distributed lags.
The ISmLinearRegress.UseGDLTerms property determines whether to use Koyck distributed lags model.
To execute the example, add a link to the Stat system assembly.
Sub UserProc;
Var
lr: ISmLinearRegress;
y, x1, x3: Array[25] Of Double;
i: Integer;
init: Array[2] Of Double;
constant: IIntercept;
exp: ISlSeries;
GDLTerms: ISlGDLTerms;
coefs: ICoefficients;
Begin
// Set variable values
Y[0] := -0.22; X1[0]:=0.37; X3[0]:=-135;
Y[1] := -0.3; X1[1]:=0.19; X3[1]:=-135;
Y[2] := -0.34; X1[2]:=0.08; X3[2]:=-133;
Y[3] := -0.34; X1[3]:=0.08; X3[3]:=-129;
Y[4] := -0.34; X1[4]:=0.13; X3[4]:=-125;
Y[5] := -0.34; X1[5]:=0.21; X3[5]:=-123;
Y[6] := -0.3; X1[6]:=0.37; X3[6]:=-121;
Y[7] := -0.28; X1[7]:=0.43; X3[7]:=-117;
Y[8] := -0.22; X1[8]:=0.49; X3[8]:=-115;
Y[9] := -0.11; X1[9]:=0.55; X3[9]:=-112;
Y[10] := -0.04; X1[10]:=0.65; X3[10]:=-109;
Y[11] := -0.01; X1[11]:=0.73; X3[11]:=-106;
Y[12] := 0.06; X1[12] := 0.98; X3[12]:=-109;
Y[13] := 0.09; X1[13] := 1.1; X3[13]:=-109;
Y[14] := 0.17; X1[14] := 1.19; X3[14]:=-115;
Y[15] := 0.31; X1[15] := 1.26; X3[15]:=-117;
Y[16] := 0.37; X1[16] := 1.43; X3[16]:=-123;
Y[17] := 0.46; X1[17] := 1.62; X3[17]:=-123;
Y[18] := 0.57; X1[18] := 1.72; X3[18]:=-125;
Y[19] := 0.62; X1[19] := 1.77; X3[19]:=-129;
Y[20] := 0.62; X1[20] := 1.77; X3[20]:=-133;
Y[21] := 0.62; X1[21] := 1.77; X3[21]:=-135;
Y[22] := 0.62; X1[22] := 1.77; X3[22]:=-135;
Y[23] := 0.54; X1[23] := 1.72; X3[23]:=-135;
Y[24] := 0.58; X1[24] := 1.48; X3[24]:=-129;
// Create a method
lr := New SmLinearRegress.Create;
// Determine parameters of sample periods and forecasting
lr.ModelPeriod.FirstPoint := 0;
lr.ModelPeriod.LastPoint := 15;
lr.Forecast.LastPoint := 25;
// Determine constant parameters
constant := lr.ModelCoefficients.Intercept;
constant.Mode := InterceptMode.AutoEstimate;
// Set explained variable
lr.Explained.Value := y;
// Set explanatory variables
exp := lr.Explanatories;
exp.Add.Value := x1;
exp.Add.Value := x3;
// Set Koyck lag parameters
lr.UseGDLTerms := True;
GDLTerms := lr.GDLTerms;
// Determine maximum number of iterations
GDLTerms.MaxIteration := 300;
// Determine accuracy used in optimization
GDLTerms.Tolerance := 0.01;
// Use numeric derivatives
GDLTerms.UseAnalyticDeriv := False;
// Set initial coefficient values
init[0] := 0.011;
init[1] := 0.024;
GDLTerms.AllInitialValues := init;
// Execute method calculation
i := lr.Execute;
// Display results
If i = 0 Then
Debug.WriteLine("Constant value: " + constant.Estimate.ToString);
Debug.WriteLine("Modeling series:");
Debug.Indent;
For i := 0 To lr.Fitted.Length - 1 Do
Debug.WriteLine(lr.Fitted[i]);
End For;
Debug.Unindent;
Debug.WriteLine("Forecasting series:");
Debug.Indent;
For i := 0 To lr.Forecast.Value.Length - 1 Do
Debug.WriteLine(lr.Forecast.Value[i]);
End For;
Debug.Unindent;
coefs := lr.ModelCoefficients.Coefficients;
Debug.WriteLine("Coefficient values:");
Debug.Indent;
Debug.WriteLine("beta0_1: " + coefs.Estimate[0].ToString);
Debug.WriteLine("beta0_2: " + coefs.Estimate[1].ToString);
Debug.WriteLine("alpha: " + coefs.Estimate[2].ToString);
Debug.Unindent;
End If;
End Sub UserProc;
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
lr: ISmLinearRegress;
y, x1, x3: Array[25] Of Double;
i: Integer;
init: Array[2] Of Double;
constant: IIntercept;
exp: ISlSeries;
GDLTerms: ISlGDLTerms;
coefs: ICoefficients;
Begin
// Set variable values
Y[0] := -0.22; X1[0]:=0.37; X3[0]:=-135;
Y[1] := -0.3; X1[1]:=0.19; X3[1]:=-135;
Y[2] := -0.34; X1[2]:=0.08; X3[2]:=-133;
Y[3] := -0.34; X1[3]:=0.08; X3[3]:=-129;
Y[4] := -0.34; X1[4]:=0.13; X3[4]:=-125;
Y[5] := -0.34; X1[5]:=0.21; X3[5]:=-123;
Y[6] := -0.3; X1[6]:=0.37; X3[6]:=-121;
Y[7] := -0.28; X1[7]:=0.43; X3[7]:=-117;
Y[8] := -0.22; X1[8]:=0.49; X3[8]:=-115;
Y[9] := -0.11; X1[9]:=0.55; X3[9]:=-112;
Y[10] := -0.04; X1[10]:=0.65; X3[10]:=-109;
Y[11] := -0.01; X1[11]:=0.73; X3[11]:=-106;
Y[12] := 0.06; X1[12] := 0.98; X3[12]:=-109;
Y[13] := 0.09; X1[13] := 1.1; X3[13]:=-109;
Y[14] := 0.17; X1[14] := 1.19; X3[14]:=-115;
Y[15] := 0.31; X1[15] := 1.26; X3[15]:=-117;
Y[16] := 0.37; X1[16] := 1.43; X3[16]:=-123;
Y[17] := 0.46; X1[17] := 1.62; X3[17]:=-123;
Y[18] := 0.57; X1[18] := 1.72; X3[18]:=-125;
Y[19] := 0.62; X1[19] := 1.77; X3[19]:=-129;
Y[20] := 0.62; X1[20] := 1.77; X3[20]:=-133;
Y[21] := 0.62; X1[21] := 1.77; X3[21]:=-135;
Y[22] := 0.62; X1[22] := 1.77; X3[22]:=-135;
Y[23] := 0.54; X1[23] := 1.72; X3[23]:=-135;
Y[24] := 0.58; X1[24] := 1.48; X3[24]:=-129;
// Create a method
lr := New SmLinearRegress.Create();
// Determine parameters of sample periods and forecasting
lr.ModelPeriod.FirstPoint := 0;
lr.ModelPeriod.LastPoint := 15;
lr.Forecast.LastPoint := 25;
// Determine constant parameters
constant := lr.ModelCoefficients.Intercept;
constant.Mode := InterceptMode.imAutoEstimate;
// Set explained variable
lr.Explained.Value := y;
// Set explanatory variables
exp := lr.Explanatories;
exp.Add().Value := x1;
exp.Add().Value := x3;
// Set Koyck lag parameters
lr.UseGDLTerms := True;
GDLTerms := lr.GDLTerms;
// Determine maximum number of iterations
GDLTerms.MaxIteration := 300;
// Determine accuracy used in optimization
GDLTerms.Tolerance := 0.01;
// Use numeric derivatives
GDLTerms.UseAnalyticDeriv := False;
// Set initial coefficient values
init[0] := 0.011;
init[1] := 0.024;
GDLTerms.AllInitialValues := init;
// Execute method calculation
i := lr.Execute();
// Display results
If i = 0 Then
System.Diagnostics.Debug.WriteLine("Value of constant: " + constant.Estimate.ToString());
System.Diagnostics.Debug.WriteLine("Modeling series:");
System.Diagnostics.Debug.Indent();
For i := 0 To lr.Fitted.Length - 1 Do
System.Diagnostics.Debug.WriteLine(lr.Fitted.GetValue(i));
End For;
System.Diagnostics.Debug.Unindent();
System.Diagnostics.Debug.WriteLine("Forecasting series:");
System.Diagnostics.Debug.Indent();
For i := 0 To lr.Forecast.Value.Length - 1 Do
System.Diagnostics.Debug.WriteLine(lr.Forecast.Value.GetValue(i));
End For;
System.Diagnostics.Debug.Unindent();
coefs := lr.ModelCoefficients.Coefficients;
System.Diagnostics.Debug.WriteLine("Coefficient values:");
System.Diagnostics.Debug.Indent();
System.Diagnostics.Debug.WriteLine("beta0_1: " + coefs.Estimate.GetValue(0).ToString());
System.Diagnostics.Debug.WriteLine("beta0_2: " + coefs.Estimate.GetValue(1).ToString());
System.Diagnostics.Debug.WriteLine("alpha: " + coefs.Estimate.GetValue(2).ToString());
System.Diagnostics.Debug.Unindent();
End If;
End Sub;
After executing the example the console window displays results of linear regression model calculation (OLS estimation) using Koyck distributed lags: modeling explained series, forecasting series, and coefficient values.
See also: