ISmLinearRegress.GDLTerms

Синтаксис

GDLTerms: ISlGDLTerms;

GDLTerms: Prognoz.Platform.Interop.Stat.ISlGDLTerms;

Описание

Свойство GDLTerms определяет параметры расчёта распределенных лагов Койка.

Комментарии

Использовать ли модель распределенных лагов Койка, определяет свойство ISmLinearRegress.UseGDLTerms.

Пример

Для выполнения примера добавьте ссылку на системную сборку Stat.

Sub UserProc;
Var
    lr: ISmLinearRegress;
    y, x1, x3: Array[25Of Double;
    i: Integer;
    init: Array[2Of Double;
    constant: IIntercept;
    exp: ISlSeries;
    GDLTerms: ISlGDLTerms;
    coefs: ICoefficients;
Begin

    // Задаём значения переменных
    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;

    // Создаем метод
    lr := New SmLinearRegress.Create;
    // Определяем параметры периодов идентификации и прогнозирования
    lr.ModelPeriod.FirstPoint := 0;
    lr.ModelPeriod.LastPoint := 15;
    lr.Forecast.LastPoint := 25;
    // Определяем параметры константы
    constant := lr.ModelCoefficients.Intercept;
    constant.Mode := InterceptMode.AutoEstimate;
    // Задаем объясняемую переменную
    lr.Explained.Value := y;
    // Задаем объясняющие переменные
    exp := lr.Explanatories;
    exp.Add.Value := x1;
    exp.Add.Value := x3;
    // Задаем параметры лагов Койка
    lr.UseGDLTerms := True;
    GDLTerms := lr.GDLTerms;
    // Определяем максимальное число итераций
    GDLTerms.MaxIteration := 300;
    // Определяем точность, используемую при оптимизации
    GDLTerms.Tolerance := 0.01;
    // Используем численные производные
    GDLTerms.UseAnalyticDeriv := False;
    // Задаем начальные значения коэффициентов
    init[0] := 0.011;
    init[1] := 0.024;
    GDLTerms.AllInitialValues := init;
    // Выполняем расчёт метода
    i := lr.Execute;

    // Выводим результаты
    If i = 0 Then
        Debug.WriteLine("Значение константы: " + constant.Estimate.ToString);
        Debug.WriteLine("Модельный ряд:");
        Debug.Indent;
        For i := 0 To lr.Fitted.Length - 1 Do
            Debug.WriteLine(lr.Fitted[i]);
        End For;
        Debug.Unindent;
        Debug.WriteLine("Прогнозный ряд:");
        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("Значение коэффициентов:");
        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[25Of Double;
    i: Integer;
    init: Array[2Of Double;
    constant: IIntercept;
    exp: ISlSeries;
    GDLTerms: ISlGDLTerms;
    coefs: ICoefficients;
Begin

    // Задаём значения переменных
    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;

    // Создаем метод
    lr := New SmLinearRegress.Create();
    // Определяем параметры периодов идентификации и прогнозирования
    lr.ModelPeriod.FirstPoint := 0;
    lr.ModelPeriod.LastPoint := 15;
    lr.Forecast.LastPoint := 25;
    // Определяем параметры константы
    constant := lr.ModelCoefficients.Intercept;
    constant.Mode := InterceptMode.imAutoEstimate;
    // Задаем объясняемую переменную
    lr.Explained.Value := y;
    // Задаем объясняющие переменные
    exp := lr.Explanatories;
    exp.Add().Value := x1;
    exp.Add().Value := x3;
    // Задаем параметры лагов Койка
    lr.UseGDLTerms := True;
    GDLTerms := lr.GDLTerms;
    // Определяем максимальное число итераций
    GDLTerms.MaxIteration := 300;
    // Определяем точность, используемую при оптимизации
    GDLTerms.Tolerance := 0.01;
    // Используем численные производные
    GDLTerms.UseAnalyticDeriv := False;
    // Задаем начальные значения коэффициентов
    init[0] := 0.011;
    init[1] := 0.024;
    GDLTerms.AllInitialValues := init;
    // Выполняем расчёт метода
    i := lr.Execute();

    // Выводим результаты
    If i = 0 Then
        System.Diagnostics.Debug.WriteLine("Значение константы: " + constant.Estimate.ToString());
        System.Diagnostics.Debug.WriteLine("Модельный ряд:");
        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("Прогнозный ряд:");
        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("Значение коэффициентов:");
        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;

В результате выполнения примера в окно консоли будут выведены результаты расчета модели линейной регрессии (оценка МНК), использующей распределенные лаги Койка: модельный объясняемый ряд, прогнозный ряд и значения коэффициентов.

См. также:

ISmLinearRegress | Модель геометрически распределенных лагов