Ms > Интерфейсы сборки Ms > IModelling > IModelling.InterpolateP
InterpolateP(Input: ITimeSeries;
TargetFrequency:
MsFrequency;
Pattern:
ITimeSeries;
[PatternType:
MsPatternType = 0;]
[Period:
IMsPeriod = Null]): Variant;
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.
При дезагрегации данных учитываются настройки календарной динамики: смещение начала периода относительно его начала/конца.
Пример дезагрегации
данных с недельной на дневную динамику
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «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.
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 | Методы интерполяции | База данных временных рядов: калькулятор, Интерполяция | Контейнер моделирования: модель «Интерполяция», редактирование регрессора/формулы