ISmLinearRegress.GDLTerms

Синтаксис Fore

GDLTerms: ISlGDLTerms;

Синтаксис Fore.NET

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

Описание

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

Комментарии

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

Пример Fore

Для выполнения примера добавьте ссылку на системную сборку 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;

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

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

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 | Модель геометрически распределенных лагов