ArimaR(Input: ITimeSeries;
Period: IMsPeriod;
NotSeasonalIAR: Integer;
NotSeasonalIMA: Integer;
NotSeasonalDIFF: Integer;
ConstantValue: Variant;
[SeasonalAR: Integer = 0;]
[SeasonalMA: Integer = 0;]
[SeasonalDiff: Integer = 1;]
[SeasonalPeriod: Integer = 0;]
[MaxIteration: Integer = 500;]
[Precision: Double = 0.0001;]
[Casewise: MsCasewise
= 0]): Variant;
ArimaR(Input: Prognoz.Platform.Interop.Ms.ITimeSeries;
Period: Prognoz.Platform.Interop.Ms.IMsPeriod;
NotSeasonalIAR: integer;
NotSeasonalIMA: integer;
NotSeasonalDIFF: integer;
ConstantValue: object;
SeasonalAR: integer;
SeasonalMA: integer;
SeasonalDiff: integer;
SeasonalPeriod: integer;
MaxIteration: integer;
Precision: double;
Casewise:
Prognoz.Platform.Interop.Ms.MsCasewise;
Context: Prognoz.Platform.Interop.Fore.ForeRuntimeContext):
object;
Input. Моделируемая переменная;
Period. Период, на котором рассчитывается метод. Если значение параметра Null, то метод рассчитывается на всём временном периоде;
NotSeasonalIAR. Порядок несезонной авторегрессии;
NotSeasonalIMA. Порядок несезонного скользящего среднего;
NotSeasonalDIFF. Порядок несезонной разности;
ConstantValue. Константа, используемая в расчетах;
SeasonalAR. Порядок сезонной авторегрессии;
SeasonalMA. Порядок сезонного скользящего среднего;
SeasonalDiff. Порядок сезонной разности;
SeasonalPeriod. Продолжительность сезонного периода;
MaxIteration. Максимальное число итераций, за которое должен осуществляться поиск оптимального решения;
Precision. Точность вычислений;
Casewise. Метод обработки пропусков;
Context. Контекст. Параметр используется только в Fore.NET.
Метод ArimaR моделирует значения переменной методом ARIMA с помощью пакета R.
Для использования данного метода в репозитории должна быть настроена интеграция с R. Подробнее о том, как можно настроить интеграцию вы можете узнать в разделе «Как настроить интеграцию с R?».
ConstantValue. Значение константы может быть задано пользователем, либо оценено автоматически. Для автоматической оценки значений используйте метод IModelling.Estimate. Если модель должна быть рассчитана без константы используйте метод IModelling.None.
Для выполнения примера предполагается наличие в репозитории контейнера моделирования с идентификатором «MS». В данном контейнере содержится модель с идентификатором «MODEL_D», рассчитываемая методом детерминированного уравнения и содержащая хотя бы одну входную переменную.
В репозитории должна быть настроена интеграция с R. Подробнее о том, как можно настроить интеграцию вы можете узнать в разделе «Как настроить интеграцию с R?».
Добавьте ссылки на системные сборки: Metabase, Ms.
Sub UserArimaR;
Var
Mb: IMetabase;
ModelSpace, ModelObj: IMetabaseObject;
Transf: IMsFormulaTransform;
Formula: IMsFormula;
Model: IMsModel;
Determ: IMsDeterministicTransform;
TransVar: IMsFormulaTransformVariable;
Slice: IMsFormulaTransformSlice;
TermInfo: IMsFormulaTermInfo;
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;
// Получаем выражение расчета модели
Expr := Determ.Expression;
Expr.References := "Ms";
// Задаем выражение расчета модели
Expr.AsString := "ArimaR(" + TermInfo.TermInnerText + ", SetPeriod(" +
"""" + "01.01.2000" + """" + "," + """" + "01.01.2015" + """" +
"), 0, 1, 0, Estimate, 1, 1, 0, 1, 600, 0.001, MsCasewise.Yes)";
// Проверяем корректность выражения
If Expr.Valid
// Если выражение задано корректно, то сохраняем модель
Then ModelObj.Save;
// Если выражение некорректное, то выводим сообщение в окно консоли
Else Debug.WriteLine("Модель не сохранена: ошибка в формуле");
End If;
End Sub UserArimaR;
После выполнения примера модель будет рассчитывать значение первой входной переменной методом ARIMA. Для метода будут заданы: период расчета, порядки авторегрессии и скользящего среднего, константа будет оцениваться автоматически, пропуски будут обработаны методом «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;
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;
// Получаем выражение расчета модели
Expr := Determ.Expression;
Expr.References := "Ms";
// Задаем выражение расчета модели
Expr.AsString := "ArimaR(" + TermInfo.TermInnerText + ", SetPeriod(" +
"""" + "01.01.2000" + """" + "," + """" + "01.01.2015" + """" +
"), 0, 1, 0, Estimate, 1, 1, 0, 1, 600, 0.001, MsCasewise.Yes)";
// Проверяем корректность выражения
If Expr.Valid
// Если выражение задано корректно, то сохраняем модель
Then ModelObj.Save();
// Если выражение некорректное, то выводим сообщение в окно консоли
Else System.Diagnostics.Debug.WriteLine("Модель не сохранена: ошибка в формуле");
End If;
End Sub
Выражение 1:
ArimaR({Чикаго - население[t]}, SetPeriod(2000, 2015), 0, 1, 1, Estimate)
Результат: для временного ряда «Чикаго - население» будет рассчитан метод ARIMA по следующим параметрам: период расчета - 2000-2015, порядок несезонной авторегрессии - «0», порядок несезонного скользящего среднего - «1», порядок несезонной разности - «1», значение константы оценено автоматически при помощи метода IModelling.Estimate. Расчет выполняется с помощью пакета R.
Применение: можно использовать в формулах вычисляемых рядов базы данных временных рядов и в формулах моделей контейнера моделирования, основанных на атрибутах.
Выражение 2:
ArimaR(X1,Null, 0, 0, 1, 2.7, 0, 0, 1, 0, 500, 0.0001, MsCasewise.Yes)
Результат: для фактора «X1» будет рассчитан метод ARIMA по следующим параметрам: порядки несезонной авторегрессии и несезонного скользящего среднего не заданы, порядок несезонной разности - «1», значение константы - «2,7», пропуски будут обработаны методом «Casewise». Расчет выполняется с помощью пакета R.
Применение: можно использовать в формулах моделей контейнера моделирования, основанных на переменных.
См. также:
IModelling | Метод «ARIMA» | База данных временных рядов: калькулятор, ARIMA | Контейнер моделирования: модель «ARIMA», редактирование регрессора/формулы