IModelling.InterpolateP

Синтаксис Fore

InterpolateP(Input: ITimeSeries;
             TargetFrequency: MsFrequency;
             Pattern: ITimeSeries;
             [PatternType: MsPatternType = 0;]
             [Period: IMsPeriod = Null]): Variant;

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

InterpolateP(Input: Prognoz.Platform.Interop.Ms.TimeSeries;
             TargetFrequency: Prognoz.Platform.Interop.Ms.MsFrequency;
             Pattern: Prognoz.Platform.Interop.Ms.TimeSeries;
             PatternType: Prognoz.Platform.Interop.Ms.MsPatternType;
             Context: Prognoz.Platform.Interop.Fore.ForeRuntimeContext;
             Period: Prognoz.Platform.Interop.Ms.IMsPeriod): object;

Параметры

Input. Исходная переменная;

TargetFrequency. Результирующая динамика;

Pattern. Шаблонная переменная, по которой будет выполняться интерполяция. Должна содержать результирующую динамику;

PatternType. Вид шаблона, по которому производится интерполяция. Необязательный параметр. Значение по умолчанию MsPatternType.Average - среднее по элементам;

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

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

Описание

Метод InterpolateP осуществляет интерполяцию по шаблону значений переменной.

Комментарии

Для определения исходной динамики для переменной Input используйте свойство IMsFormulaTransformSlice.Level.

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

Пример дезагрегации данных с недельной на дневную динамику

Пример Fore

Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS». В данном контейнере содержится модель детерминированного уравнения с идентификатором «MODEL_D» (годовая динамика). Данная модель должна содержать несколько факторов. Каждый фактор должен содержать годовую и квартальную динамику.

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

Sub UserProc;
Var
    Mb: IMetabase;
    ModelSpace, ModelObj: IMetabaseObject;
    Transf: IMsFormulaTransform;
    Formula: IMsFormula;
    Model: IMsModel;
    Determ: IMsDeterministicTransform;
    TransVar: IMsFormulaTransformVariable;
    Slice: IMsFormulaTransformSlice;
    InputTerm, PatternTerm: IMsFormulaTermInfo;
    Expr: IExpression;
Begin
    Mb := MetabaseClass.Active;
    ModelSpace := Mb.ItemById("CONT_MODEL").Bind;
    ModelObj := Mb.ItemByIdNamespace("M_DETERM", 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);
    InputTerm := Transf.CreateTermInfo;
    InputTerm.Slice := Slice;
    TransVar := Transf.Inputs.Item(1);
    Slice := TransVar.Slices.Item(0);
    PatternTerm := Transf.CreateTermInfo;
    Slice.Level := DimCalendarLevel.Quarter;
    PatternTerm.Slice := Slice;
    Expr := Determ.Expression;
    Expr.References := "Ms";
    Expr.AsString := "InterpolateP(" + InputTerm.TermInnerText + ",MsFrequency.Quarterly," +
        PatternTerm.TermInnerText + ",MsPatternType.First,SetPeriod(" +
        """" + "01.01.2000" + """" + "," + """" + "01.01.2015" + """" + "))";
    If Expr.Valid
        Then ModelObj.Save;
        Else Debug.WriteLine("Модель не сохранена: ошибка в формуле");
   End If;
End Sub UserProc;

После выполнения примера модель будет интерполировать данные первой входной переменной с годовой динамики на квартальную на периоде с 2000 по 2015 год. Для интерполяции будет использоваться шаблон, заданный второй входной переменной.

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Dimensions;
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;
    InputTerm, PatternTerm: 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];
    InputTerm := Transf.CreateTermInfo();
    InputTerm.Slice := Slice;
    TransVar := Transf.Inputs.Item[1];
    Slice := TransVar.Slices.Item[0];
    PatternTerm := Transf.CreateTermInfo();
    Slice.Level := DimCalendarLevel.dclQuarter;
    PatternTerm.Slice := Slice;
    Expr := Determ.Expression;
    Expr.References := "Ms";
    Expr.AsString := "InterpolateP(" + InputTerm.TermInnerText + ",MsFrequency.Quarterly," +
        PatternTerm.TermInnerText + ",MsPatternType.First,SetPeriod(" +
        """" + "01.01.2000" + """" + "," + """" + "01.01.2015" + """" + "))";
    If Expr.Valid
        Then ModelObj.Save();
        Else System.Diagnostics.Debug.WriteLine("Модель не сохранена: ошибка в формуле");
    End If;
End Sub;

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

Выражение 1:

InterpolateP({Brazil|BCA[t]},MsFrequency.Quarterly,{China|BCA[t]})

Результат: данные ряда Brazil|BCA будут дезагрегированы на квартальную динамику по шаблону, заданному рядом China|BCA на всём временном периоде.

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

Выражение 2:

InterpolateP(X1,MsFrequency.Monthly,X2,MsPatternType.Last, SetPeriod("01.01.2000","01.01.2015"))

Результат: данные фактора X1 будут дезагрегированы на месячную динамику по последнему элементу шаблона, заданного фактором X2 на периоде с 2000 по 2015 год.

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

См. также:

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