SigmaLower: Double;
SigmaLower: double;
Свойство SigmaLower определяет нижнюю границу сигма.
Большинство реальных временных рядов содержит выбросы. Они могут исказить оценки сезонности и тренда. Метод «X11» дает возможность уменьшить влияние выбросов, исключив из рассмотрения значения, выходящие за определённый диапазон, либо преобразовав такие значения. Ширина диапазона задаётся нижней и верхней границей сигма (IMsCensus2Transform.SigmaUpper).
Для выполнения примера предполагается наличие в репозитории контейнера моделирования с идентификатором «MS» и базы данных временных рядов с идентификатором «TSDB». В контейнере моделирования должна присутствовать модель с идентификатором «MODEL_CENSUS2».
Добавьте ссылки на системные сборки: Cubes, Dimensions, Metabase, Ms, Stat.
Sub UserProc;
Var
MB: IMetabase;
ModelCont, RubrDescr: IMetabaseObjectDescriptor;
Model: IMsModel;
Transform: IMsFormulaTransform;
TransformVarables: IMsFormulaTransformVariables;
Stub: IVariableStub;
TransVar: IMsFormulaTransformVariable;
Tree: IMsFormulaTransformSlicesTree;
Slice: IMsFormulaTransformSlice;
Selector: IMsFormulaTransformSelector;
Formula: IMsFormula;
CENS: IMsCensus2Transform;
Expl: IMsFormulaTerm;
Av, W: Array Of Double;
Info: IMsFormulaTermInfo;
Begin
// Получаем текущий
репозиторий
MB := MetabaseClass.Active;
// Получаем контейнер
моделирования
ModelCont := MB.ItemById("MS");
// Получаем модель
Model := MB.ItemByIdNamespace("MODEL_CENSUS2",
ModelCont.Key).Edit As
IMsModel;
// Получаем объект
для настройки параметров модели
Transform := Model.Transform;
// Получаем объект
для работы с моделируемой переменной
TransformVarables
:= Transform.Outputs;
// Получаем базу данных
временных рядов (БДВР)
RubrDescr := Mb.ItemById("TSDB");
// Приводим полученную
БДВР к абстрактному источнику данных
Stub := RubrDescr.Bind
As IVariableStub;
// Используем БДВР
в качестве источника данных моделируемой переменной
TransVar := TransformVarables.Add(Stub);
// Задаем срез моделируемой
переменной
Tree := TransVar.SlicesTree(TransVar);
Slice := Tree.CreateSlice(1);
// Получаем настройки
модели для среза моделируемой переменной
Selector := Transform.CreateSelector;
Selector.Slice := Slice;
Formula := Transform.Transform(Selector);
// Задаем календарную
динамику расчета
Formula.Level := DimCalendarLevel.Month;
// Указываем метод
расчета: X11
Formula.Kind := MsFormulaKind.Census2;
// Получаем параметры
метода
CENS := Formula.Method
As IMsCensus2Transform;
// Получаем объект
для работы с выгружаемыми переменными
TransformVarables
:= Transform.Series;
// Очищаем коллекцию
выгружаемых переменных
TransformVarables.Clear;
// Указываем ряд,
в который будут выгружаться данные после априорной корректировки
TransVar := TransformVarables.Add(Stub);
Tree := TransVar.SlicesTree(TransVar);
Slice := Tree.CreateSlice(2);
Info := Transform.CreateTermInfo;
Info.Slice := Slice;
CENS.B1Term := Info;
// Указываем ряд,
в который будет выгружаться сезонная составляющая исходного ряда
TransVar := TransformVarables.Add(Stub);
Tree := TransVar.SlicesTree(TransVar);
Slice := Tree.CreateSlice(3);
Info := Transform.CreateTermInfo;
Info.Slice := Slice;
CENS.D10Term := Info;
// Указываем ряд,
в который будет выгружаться сезонная корректировка
TransVar := TransformVarables.Add(Stub);
Tree := TransVar.SlicesTree(TransVar);
Slice := Tree.CreateSlice(4);
Info := Transform.CreateTermInfo;
Info.Slice := Slice;
CENS.D11Term := Info;
// Указываем ряд,
в который будет выгружаться тренд-циклическая компонента ряда
TransVar := TransformVarables.Add(Stub);
Tree := TransVar.SlicesTree(TransVar);
Slice := Tree.CreateSlice(5);
Info := Transform.CreateTermInfo;
Info.Slice := Slice;
CENS.D12Term := Info;
// Указываем ряд,
в который будет выгружаться нерегулярная компонента ряда
TransVar := TransformVarables.Add(Stub);
Tree := TransVar.SlicesTree(TransVar);
Slice := Tree.CreateSlice(6);
Info := Transform.CreateTermInfo;
Info.Slice := Slice;
CENS.D13Term := Info;
// Задаем весовые
коэффициенты дней недели
W := New Double[7];
W[0]
:= 1.17;
W[1]
:= 1.00;
W[2]
:= 1.12;
W[3]
:= 1.10;
W[4]
:= 0.95;
W[5]
:= 0.98;
W[6]
:= 1.07;
CENS.DailyWeights := W;
//
Выводим наименование моделируемого ряда
Expl := CENS.Explained;
Debug.WriteLine(Expl.TermToText);
// Задаем метод обработки
пропусков
CENS.MissingData.Method
:= MissingDataMethod.PrevValue;
// Задаем скользящее
среднее
Av := New Double[12];
Av[0]
:= 0.02; Av[4] := 0.12;Av[8] := 0.01;
Av[1]
:= 0.1; Av[5] := 0.11; Av[9] := 0.7;
Av[2]
:= 0.2; Av[6] := 0.3; Av[10] := 0.4;
Av[3]
:= 0.5; Av[7] := 0.45; Av[11] := 0.3;
CENS.MovingAverage := Av;
// Задаем вид сезонности
CENS.Seasonality :=
SeasonalityType.Multiplicative;
// Задаем нижнюю и
верхнюю границы сигма
CENS.SigmaLower :=
1.5;
CENS.SigmaUpper := 2.5;
// Задаем тип поправки
на рабочие дни
CENS.TraidingDaysAdjustment
:= TraidingDaysAdj.Auto;
// Задаем поправку на праздничные дни
CENS.HolidayAdj := Census2HolidayAdjType.C2hatEaster;
// Используем скользящие интервалы
CENS.SlidingSpans := True;
// Сохраняем изменения
(Model As IMetabaseObject).Save;
End Sub UserProc;
В результате выполнения примера для модели «MODEL_CENSUS2» будут установлены новые параметры для расчета метода «X11», определены входные и выходные переменные. Модель будет рассчитана, в соответствующие переменные будут выгружены данные.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
ModelCont, RubrDescr: IMetabaseObjectDescriptor;
Model: IMsModel;
Transform: IMsFormulaTransform;
TransformVarables: IMsFormulaTransformVariables;
Stub: IVariableStub;
TransVar: IMsFormulaTransformVariable;
Tree: IMsFormulaTransformSlicesTree;
Slice: IMsFormulaTransformSlice;
Selector: IMsFormulaTransformSelector;
Formula: IMsFormula;
CENS: IMsCensus2Transform;
Expl: IMsFormulaTerm;
Av, W: Array Of Double;
Info: IMsFormulaTermInfo;
Begin
// Получаем текущий репозиторий
MB := Params.Metabase;
// Получаем контейнер моделирования
ModelCont := MB.ItemById["MS"];
// Получаем модель
Model := MB.ItemByIdNamespace["MODEL_CENSUS2", ModelCont.Key].Edit() As IMsModel;
// Получаем объект для настройки параметров модели
Transform := Model.Transform;
// Получаем объект для работы с моделируемой переменной
TransformVarables := Transform.Outputs;
// Получаем базу данных временных рядов (БДВР)
RubrDescr := Mb.ItemById["TSDB"];
// Приводим полученную БДВР к абстрактному источнику данных
Stub := RubrDescr.Bind() As IVariableStub;
// Используем БДВР в качестве источника данных моделируемой переменной
TransVar := TransformVarables.Add(Stub);
// Задаем срез моделируемой переменной
Tree := TransVar.SlicesTree[TransVar];
Slice := Tree.CreateSlice(1);
// Получаем настройки модели для среза моделируемой переменной
Selector := Transform.CreateSelector();
Selector.Slice := Slice;
Formula := Transform.Transform[Selector];
// Задаем календарную динамику расчета
Formula.Level := DimCalendarLevel.dclMonth;
// Указываем метод расчета: X11
Formula.Kind := MsFormulaKind.mfkCensus2;
// Получаем параметры метода
CENS := Formula.Method As IMsCensus2Transform;
// Получаем объект для работы с выгружаемыми переменными
TransformVarables := Transform.Series;
// Очищаем коллекцию выгружаемых переменных
TransformVarables.Clear();
// Указываем ряд, в который будут выгружаться данные после априорной корректировки
TransVar := TransformVarables.Add(Stub);
Tree := TransVar.SlicesTree[TransVar];
Slice := Tree.CreateSlice(2);
Info := Transform.CreateTermInfo();
Info.Slice := Slice;
CENS.B1Term := Info;
// Указываем ряд, в который будет выгружаться сезонная составляющая исходного ряда
TransVar := TransformVarables.Add(Stub);
Tree := TransVar.SlicesTree[TransVar];
Slice := Tree.CreateSlice(3);
Info := Transform.CreateTermInfo();
Info.Slice := Slice;
CENS.D10Term := Info;
// Указываем ряд, в который будет выгружаться сезонная корректировка
TransVar := TransformVarables.Add(Stub);
Tree := TransVar.SlicesTree[TransVar];
Slice := Tree.CreateSlice(4);
Info := Transform.CreateTermInfo();
Info.Slice := Slice;
CENS.D11Term := Info;
// Указываем ряд, в который будет выгружаться тренд-циклическая компонента ряда
TransVar := TransformVarables.Add(Stub);
Tree := TransVar.SlicesTree[TransVar];
Slice := Tree.CreateSlice(5);
Info := Transform.CreateTermInfo();
Info.Slice := Slice;
CENS.D12Term := Info;
// Указываем ряд, в который будет выгружаться нерегулярная компонента ряда
TransVar := TransformVarables.Add(Stub);
Tree := TransVar.SlicesTree[TransVar];
Slice := Tree.CreateSlice(6);
Info := Transform.CreateTermInfo();
Info.Slice := Slice;
CENS.D13Term := Info;
// Задаем весовые коэффициенты дней недели
W := New Double[7];
W[0] := 1.17;
W[1] := 1.00;
W[2] := 1.12;
W[3] := 1.10;
W[4] := 0.95;
W[5] := 0.98;
W[6] := 1.07;
CENS.DailyWeights := W;
// Выводим наименование моделируемого ряда
Expl := CENS.Explained;
System.Diagnostics.Debug.WriteLine(Expl.TermToText());
// Задаем метод обработки пропусков
CENS.MissingData.Method := MissingDataMethod.mdmPrevValue;
// Задаем скользящее среднее
Av := New Double[12];
Av[0] := 0.02; Av[4] := 0.12;Av[8] := 0.01;
Av[1] := 0.1; Av[5] := 0.11; Av[9] := 0.7;
Av[2] := 0.2; Av[6] := 0.3; Av[10] := 0.4;
Av[3] := 0.5; Av[7] := 0.45; Av[11] := 0.3;
CENS.MovingAverage := Av;
// Задаем вид сезонности
CENS.Seasonality := SeasonalityType.sstMultiplicative;
// Задаем нижнюю и верхнюю границы сигма
CENS.SigmaLower := 1.5;
CENS.SigmaUpper := 2.5;
// Задаем тип поправки на рабочие дни
CENS.TraidingDaysAdjustment := TraidingDaysAdj.tdaAuto;
// Задаем поправку на праздничные дни
CENS.HolidayAdj := Census2HolidayAdjType.C2hatEaster;
// Используем скользящие интервалы
CENS.SlidingSpans := True;
// Сохраняем изменения
(Model As IMetabaseObject).Save();
End Sub;
См. также: