OlsR(Input: ITimeSeries;
Period: IMsPeriod;
ConstantValue: Variant;
AROrder: Integer;
MAOrder: Integer;
Casewise: MsCasewise;
Explanatories: Array): Variant;
OlsR(Context: Prognoz.Platform.Interop.Fore.ForeRuntimeContext;
Input: Prognoz.Platform.Interop.Ms.ITimeSeries;
Period: Prognoz.Platform.Interop.Ms.IMsPeriod;
ConstantValue: object;
AROrder: integer;
MAOrder: integer;
Casewise: Prognoz.Platform.Interop.Ms.MsCasewise;
Explanatories: array of object): object;
Context. Контекст. Параметр используется только в Fore.NET;
Input. Моделируемая переменная;
Period. Период, на котором рассчитывается метод. Если значение параметра Null, то метод рассчитывается на всём временном периоде;
ConstantValue. Константа, используемая в расчетах;
AROrder. Порядок авторегрессии;
MAOrder. Порядок скользящего среднего;
Casewise. Метод обработки пропусков;
Explanatories. Объясняющие переменные.
Метод OlsR моделирует данные переменной с помощью линейной регрессии (оценка МНК). Расчет выполняется с помощью пакета R.
Используйте метод OlsR только при векторном режиме расчета.
Для использования данного метода в репозитории должна быть настроена интеграция с R. Подробнее о том, как можно настроить интеграцию вы можете узнать в разделе «Как настроить интеграцию с R?».
ConstantValue. Значение константы может быть задано пользователем, либо оценено автоматически. Для автоматической оценки значений используйте метод IModelling.Estimate. Если модель должна быть рассчитана без константы используйте метод IModelling.None.
Explanatories. Элементы, соответствующие переменным, указываются через запятую. Необходимо помнить, что число объясняющих переменных (m) должно удовлетворять неравенству: 0 < m < n-1 для модели с константой и 0 < m < n для модели без константы, где n - число наблюдений в моделируемой переменной.
Для выполнения примера предполагается наличие в репозитории контейнера моделирования с идентификатором «MS». В данном контейнере содержится модель с идентификатором «MODEL_D», рассчитываемая методом детерминированного уравнения и содержащая более одно входной переменной.
В репозитории должна быть настроена интеграция с R. Подробнее о том, как можно настроить интеграцию вы можете узнать в разделе «Как настроить интеграцию с R?».
Добавьте ссылки на системные сборки: Metabase, Ms.
Sub UserOlsR;
Var
Mb: IMetabase;
ModelSpace, ModelObj: IMetabaseObject;
Transf: IMsFormulaTransform;
Formula: IMsFormula;
Model: IMsModel;
Determ: IMsDeterministicTransform;
TransVar: IMsFormulaTransformVariable;
Slice: IMsFormulaTransformSlice;
TermInfo: IMsFormulaTermInfo;
Inp_1, Inp_2: 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_1 := TermInfo.TermInnerText;
// Получаем вторую входную переменную
TransVar := Transf.Inputs.Item(1);
Slice := TransVar.Slices.Item(0);
TermInfo := Transf.CreateTermInfo;
TermInfo.Slice := Slice;
// Задаем режим передачи переменной в расчет
TermInfo.Type := MsFormulaTermType.Pointwise;
// Получаем внутреннее представление переменной в виде текста
Inp_2 := TermInfo.TermInnerText;
// Получаем выражение расчета модели
Expr := Determ.Expression;
Expr.References := "Ms";
// Задаем выражение расчета модели
Expr.AsString := "OlsR(" + Inp_1 + ", SetPeriod(2000,2015), Estimate, 1," +
"1, MsCasewise.Yes, " + Inp_2 + ")";
// Проверяем корректность выражения
If Expr.Valid
// Если выражение задано корректно, то сохраняем модель
Then ModelObj.Save;
// Если выражение некорректное, то выводим сообщение в окно консоли
Else Debug.WriteLine("Модель не сохранена: ошибка в формуле");
End If;
End Sub UserOlsR;
После выполнения примера модель будет выполнять моделирование первой входной переменной с помощью линейной регрессии (оценка МНК) на заданном периоде. Значение константы будет оценено автоматически. Будет применена обработка пропусков методом Casewise. Расчет будет выполнятся с помощью пакета R.
Необходимые требования и результат выполнения примера 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_1, Inp_2: 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_1 := TermInfo.TermInnerText;
// Получаем вторую входную переменную
TransVar := Transf.Inputs.Item[1];
Slice := TransVar.Slices.Item[0];
TermInfo := Transf.CreateTermInfo();
TermInfo.Slice := Slice;
// Задаем режим передачи переменной в расчет
TermInfo.Type := MsFormulaTermType.mfttPointwise;
// Получаем внутреннее представление переменной в виде текста
Inp_2 := TermInfo.TermInnerText;
// Получаем выражение расчета модели
Expr := Determ.Expression;
Expr.References := "Ms";
// Задаем выражение расчета модели
Expr.AsString := "OlsR(" + Inp_1 + ", SetPeriod(2000,2015), Estimate, 1," +
"1, MsCasewise.Yes, " + Inp_2 + ")";
// Проверяем корректность выражения
If Expr.Valid
// Если выражение задано корректно, то сохраняем модель
Then ModelObj.Save();
// Если выражение некорректное, то выводим сообщение в окно консоли
Else System.Diagnostics.Debug.WriteLine("Модель не сохранена: ошибка в формуле");
End If;
End Sub;
Выражение 1:
OlsR({Чикаго - население[t]}, Null, None, 0, 0, MsCasewise.Yes, {Мехико - население[t]})
Результат: временной ряд «Чикаго - население» будет смоделирован методом линейной регрессии (оценка МНК) на всем периоде по следующим параметрам: константа не используется, порядки авторегрессии и скользящего среднего не заданы, объясняющая переменная - временной ряд «Мехико - население», выполняется обработка пропусков методом Casewise. Расчет выполняется с помощью пакета R.
Применение: можно использовать в формулах вычисляемых рядов базы данных временных рядов и в формулах моделей контейнера моделирования, являющегося дочерним по отношению к базе данных временных рядов.
Выражение 2:
OlsR(X1, SetPeriod(2000, 2015), Estimate, 1, 2, MsCasewise.Yes, X2, X3)
Результат: фактор «X1» будет смоделирован методом линейной регрессии (оценка МНК) по следующим параметрам: период расчета - 2000-2015, константа оценена методом IModelling.Estimate, порядок авторегрессии - «1», порядок скользящего среднего «2», объясняющие переменные - факторы «X2» и «X3», выполняется обработка пропусков методом Casewise. Расчет выполняется с помощью пакета R.
Применение: можно использовать в формулах моделей контейнера моделирования.
См. также:
IModelling | Метод наименьших квадратов | База данных временных рядов: калькулятор, Линейная регрессия | Контейнер моделирования: модель «Линейная регрессии (оценка МНК)», редактирование регрессора/формулы