IModelling.TslsR

Синтаксис Fore

TslsR(Input: ITimeSeries;
      Period: IMsPeriod;
      ConstantValue: Variant;
      Casewise: MsCasewise;
      Explanatories: Array): Variant;

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

TslsR(Context: Prognoz.Platform.Interop.Fore.ForeRuntimeContext;
      Input: Prognoz.Platform.Interop.Ms.ITimeSeries;
      Period: Prognoz.Platform.Interop.Ms.IMsPeriod;
      ConstantValue: object;
      Casewise: Prognoz.Platform.Interop.Ms.MsCasewise;
      Explanatories: array of object): object;

Параметры

Context. Контекст. Параметр используется только в Fore.NET;

Input. Моделируемая переменная;

Period. Период, на котором рассчитывается метод. Если значение параметра Null, то метод рассчитывается на всём временном периоде;

ConstantValue. Константа, используемая в расчетах;

Casewise. Метод обработки пропусков;

Explanatories. Экзогенные и инструментальные переменные.

Описание

Метод TslsR моделирует данные переменной с помощью линейной регрессии (оценка методом инструментальных переменных). Расчет выполняется с помощью пакета R.

Комментарии

Используйте метод TslsR только при векторном режиме расчета.

Для использования данного метода в репозитории должна быть настроена интеграция с R. Подробнее о том, как можно настроить интеграцию вы можете узнать в разделе «Как настроить интеграцию с R?».

ConstantValue. Значение константы может быть задано пользователем, либо оценено автоматически. Для автоматической оценки значений используйте метод IModelling.Estimate. Если модель должна быть рассчитана без константы используйте метод IModelling.None.

Explanatories. Экзогенные и инструментальные переменные указываются через запятую. Для разделения данных видов переменных используйте значение Null. Количество инструментальных переменных должно быть больше или равно количество экзогенных переменных.

Пример Fore

Для выполнения примера предполагается наличие в репозитории контейнера моделирования с идентификатором «MS». В данном контейнере содержится модель с идентификатором «MODEL_D», рассчитываемая методом детерминированного уравнения и содержащая более двух входных переменных.

В репозитории должна быть настроена интеграция с R. Подробнее о том, как можно настроить интеграцию вы можете узнать в разделе «Как настроить интеграцию с R?».

Добавьте ссылки на системные сборки: Metabase, Ms.

Sub UserTslsR;
Var
    Mb: IMetabase;
    ModelSpace, ModelObj: IMetabaseObject;
    Transf: IMsFormulaTransform;
    Formula: IMsFormula;
    Model: IMsModel;
    Determ: IMsDeterministicTransform;
    TransVar: IMsFormulaTransformVariable;
    Slice: IMsFormulaTransformSlice;
    TermInfo: IMsFormulaTermInfo;
    Inp, Instr, Exogen: String;
    Expr: IExpression;
Begin
    // Получаем репозиторий
    Mb := MetabaseClass.Active;
    // Получаем контейнер моделирования
    ModelSpace := Mb.ItemById("MS").Bind;
    // Получаем модель
    ModelObj := Mb.ItemByIdNamespace("MODEL_D", ModelSpace.Key).Edit;
    Model := ModelObj As IMsModel;
    // Получаем параметры расчета модели
    Transf := Model.Transform;
    Formula := Transf.FormulaItem(0);
    Determ := Formula.Method As IMsDeterministicTransform;
    // Получаем первую входную переменную
    TransVar := Transf.Inputs.Item(0);
    Slice := TransVar.Slices.Item(0);
    TermInfo := Transf.CreateTermInfo;
    TermInfo.Slice := Slice;
    // Задаем режим передачи переменной в расчет
    TermInfo.Type := MsFormulaTermType.Pointwise;
    // Получаем внутреннее представление переменной в виде текста
    Inp := TermInfo.TermInnerText;
    // Получаем вторую входную переменную.
    // Она будет использоваться в качестве экзогенной переменной.
    TransVar := Transf.Inputs.Item(1);
    Slice := TransVar.Slices.Item(0);
    TermInfo := Transf.CreateTermInfo;
    TermInfo.Slice := Slice;
    // Задаем режим передачи переменной в расчет
    TermInfo.Type := MsFormulaTermType.Pointwise;
    // Получаем внутреннее представление переменной в виде текста
    Exogen := TermInfo.TermInnerText;
    // Получаем третью входную переменную.
    // Она будет использоваться в качестве инструментальной переменной.
    TransVar := Transf.Inputs.Item(2);
    Slice := TransVar.Slices.Item(0);
    TermInfo := Transf.CreateTermInfo;
    TermInfo.Slice := Slice;
    // Задаем режим передачи переменной в расчет
    TermInfo.Type := MsFormulaTermType.Pointwise;
    // Получаем внутреннее представление переменной в виде текста
    Instr := TermInfo.TermInnerText;
    // Получаем выражение расчета модели
    Expr := Determ.Expression;
    Expr.References := "Ms;Stat";
    // Задаем выражение расчета модели
    Expr.AsString := "TslsR(" + Inp + ", SetPeriod(2000,2015), Estimate," +
        "MsCasewise.Yes, " + Exogen + ", Null, " + Instr + ")";
    // Проверяем корректность выражения
    If Expr.Valid
        // Если выражение задано корректно, то сохраняем модель
        Then ModelObj.Save;
        // Если выражение некорректное, то выводим сообщение в окно консоли 
        Else Debug.WriteLine("Модель не сохранена: ошибка в формуле");
    End If;
End Sub UserTslsR;

После выполнения примера модель будет выполнять моделирование первой входной переменной с помощью линейной регрессии (оценка методом инструментальных переменных). Значение константы оценивается автоматически, применяется обработка пропусков методом Casewise. Расчет выполняется с помощью пакета R.

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.ForeSystem;

Public Shared Sub Main(Params: StartParams);
Var
    Mb: IMetabase;
    ModelSpace, ModelObj: IMetabaseObject;
    Transf: IMsFormulaTransform;
    Formula: IMsFormula;
    Model: IMsModel;
    Determ: IMsDeterministicTransform;
    TransVar: IMsFormulaTransformVariable;
    Slice: IMsFormulaTransformSlice;
    TermInfo: IMsFormulaTermInfo;
    Inp, Instr, Exogen: String;
    Expr: IExpression;
Begin
    // Получаем репозиторий
    Mb := Params.Metabase;
    // Получаем контейнер моделирования
    ModelSpace := Mb.ItemById["MS"].Bind();
    // Получаем модель
    ModelObj := Mb.ItemByIdNamespace["MODEL_D", ModelSpace.Key].Edit();
    Model := ModelObj As IMsModel;
    // Получаем параметры расчета модели
    Transf := Model.Transform;
    Formula := Transf.FormulaItem[0];
    Determ := Formula.Method As IMsDeterministicTransform;
    // Получаем первую входную переменную
    TransVar := Transf.Inputs.Item[0];
    Slice := TransVar.Slices.Item[0];
    TermInfo := Transf.CreateTermInfo();
    TermInfo.Slice := Slice;
    // Задаем режим передачи переменной в расчет
    TermInfo.Type := MsFormulaTermType.mfttPointwise;
    // Получаем внутреннее представление переменной в виде текста
    Inp := TermInfo.TermInnerText;
    // Получаем вторую входную переменную.
    // Она будет использоваться в качестве экзогенной переменной.
    TransVar := Transf.Inputs.Item[1];
    Slice := TransVar.Slices.Item[0];
    TermInfo := Transf.CreateTermInfo();
    TermInfo.Slice := Slice;
    // Задаем режим передачи переменной в расчет
    TermInfo.Type := MsFormulaTermType.mfttPointwise;
    // Получаем внутреннее представление переменной в виде текста
    Exogen := TermInfo.TermInnerText;
    // Получаем третью входную переменную.
    // Она будет использоваться в качестве инструментальной переменной.
    TransVar := Transf.Inputs.Item[2];
    Slice := TransVar.Slices.Item[0];
    TermInfo := Transf.CreateTermInfo();
    TermInfo.Slice := Slice;
    // Задаем режим передачи переменной в расчет
    TermInfo.Type := MsFormulaTermType.mfttPointwise;
    // Получаем внутреннее представление переменной в виде текста
    Instr := TermInfo.TermInnerText;
    // Получаем выражение расчета модели
    Expr := Determ.Expression;
    Expr.References := "Ms;Stat";
    // Задаем выражение расчета модели
    Expr.AsString := "TslsR(" + Inp + ", SetPeriod(2000,2015), Estimate," +
        "MsCasewise.Yes, " + Exogen + ", Null, " + Instr + ")";
    // Проверяем корректность выражения
    If Expr.Valid
        // Если выражение задано корректно, то сохраняем модель
        Then ModelObj.Save();
        // Если выражение некорректное, то выводим сообщение в окно консоли 
        Else System.Diagnostics.Debug.WriteLine("Модель не сохранена: ошибка в формуле");
    End If;
End Sub;

Пример использования в выражениях

Выражение 1:

Tsls({Brazil|BCA},Estimate,"","",MsCasewise.Yes,{China|BCA},Null,{Japan|BCA})

TslsR({Чикаго - население[t]}, Null, Estimate, MsCasewise.No, {Мехико - уровень безработицы[t]}, Null, {Анкоридж - население[t]})

Результат: временной ряд «Чикаго - население» будет смоделирован на всем временной периоде методом линейной регрессии (оценка методом инструментальных переменных) по следующим параметрам: значение константы оценивается автоматически, экзогенная переменная - временной ряд «Мехико - уровень безработицы», инструментальная переменная - временной ряд «Анкоридж - население», обработка пропусков не применяется. Расчет выполняется с помощью пакета R.

Применение: можно использовать в формулах вычисляемых рядов базы данных временных рядов и в формулах моделей контейнера моделирования, являющегося дочерним по отношению к базе данных временных рядов.

Выражение 2:

TslsR(X1, SetPeriod(2000, 2015), None, MsCasewise.Yes, X4, Null, X2, X3)

Результат: фактор «X1» будет смоделирован методом линейной регрессии (оценка методом инструментальных переменных) по следующим параметрам: период расчета - 2000-2015, константа не задана, экзогенная переменная - фактор «X4», инструментальные переменные - факторы «X2» и «X3», применяется обработка пропусков методом Casewise. Расчет выполняется с помощью пакета R.

Применение: можно использовать в формулах моделей контейнера моделирования.

См. также:

IModelling | Метод инструментальных переменных | База данных временных рядов: калькулятор | Контейнер моделирования: модель «Линейная регрессия (оценка методом инструментальных переменных)», редактирование регрессора/формулы