Creating a Model with Variables Being Repository Objects

Contents

Description

Requirements

Example

Description

Consider the example of creating a model by variables being the object repository, which is used to calculate linear regression (OLS estimation) method.

Requirements

Executing the example requires that the repository contains a modeling container with the MS_DEFAULT identifier. This modeling container must contain variables with OUTPUT_VARIABLE and FACTOR_VARIABLE identifiers.

Add links to the Cubes, Dimensions, Metabase, Ms, Stat system assemblies.

Example

Sub ModelVariable;
Var
    Mb: IMetabase;
    CrInf: IMetabaseObjectCreateInfo;
    Model: IMsModel;
    Transform: IMsFormulaTransform;
    TransformVarables: IMsFormulaTransformVariables;
    Stub: IVariableStub;
    TransVar: IMsFormulaTransformVariable;
    Tree: IMsFormulaTransformSlicesTree;
    Slice: IMsFormulaTransformSlice;
    Selector: IMsFormulaTransformSelector;
    Formula: IMsFormula;
    Linear: IMsLinearRegressionTransform;
    Ar: Array[0..1Of Integer;
    TermInfo: IMsFormulaTermInfo;
    Period: IMsModelPeriod;
Begin
    Mb := MetabaseClass.Active;
    // Specify basic parameters of the model as a repository object
    CrInf := Mb.CreateCreateInfo;
    CrInf.ClassId := MetabaseObjectClass.KE_CLASS_MSMODEL;
    // Specify model identifier
    CrInf.Id := Mb.GenerateId("MODEL_LINEAR_REGRESSION", Mb.ItemById("MS_DEFAULT").Key);
    // Specify model name
    CrInf.Name := "Model of linear regression";
    // Specify modeling container which will contain the model
    CrInf.Parent := Mb.ItemById("MS_DEFAULT");
    // Create a model
    Model := Mb.CreateObject(CrInf).Edit As IMsModel;
    // Get object to set up model parameters
    Transform := Model.Transform;
    // Get object to work with output variable
    TransformVarables := Transform.Outputs;
    // Cast the OUTPUT_VARIABLE variable to the abstract data source
    Stub := Mb.ItemByIdNamespace("OUTPUT_VARIABLE", Mb.GetObjectKeyById("MS_DEFAULT")).Bind As IVariableStub;
    // Use the OUTPUT_VARIABLE variable as the output variable
    TransVar := TransformVarables.Add(Stub);
    // Specify output variable slice
    Tree := TransVar.SlicesTree(TransVar);
    Slice := Tree.CreateSlice(1);
    // Get model settings for output variable slice
    Selector := Transform.CreateSelector;
    Selector.Slice := Slice;
    Formula := Transform.Transform(Selector);
    // Specify the Linear Regression (OLS Estimation) calculation method
    Formula.Kind := MsFormulaKind.LinearRegression;
    // Set the calendar frequency of calculation
    Formula.Level := DimCalendarLevel.Year;
    // Get the object to set up linear regression
    Linear := Formula.Method As IMsLinearRegressionTransform;
    // Determine autoregression order
    Ar[0] := 2;
    Ar[1] := 4;
    Linear.ARMA.OrderAR := Ar;
    // Do not use the constant
    Linear.ConstantMode := InterceptMode.None;
    // Cast the FACTOR_VARIABLE variable to the abstract data source
    Stub := Mb.ItemByIdNamespace("FACTOR_VARIABLE", Mb.GetObjectKeyById("MS_DEFAULT")).Bind As IVariableStub;
    // Add the FACTOR_VARIABLE variable to the model as the factor
    TransVar := Transform.Inputs.Add(Stub);
    Tree := TransVar.SlicesTree(TransVar);
    Slice := Tree.CreateSlice(1);
    // Get the factor as an expression element
    TermInfo := Transform.CreateTermInfo;
    TermInfo.Slice := Slice;
    // Specify linear regression calculation formula
    Linear.Explanatories.Add.Expression.AsString := TermInfo.TermInnerText;
    // Specify model calculation periods
    Period := Transform.Period;
    Period.IdentificationStartDate := DateTime.ComposeDay(200011);
    Period.IdentificationEndDate := DateTime.ComposeDay(20141231);
    Period.ForecastStartDate := DateTime.ComposeDay(201511);
    Period.ForecastEndDate := DateTime.ComposeDay(20201231);
    // Save the model to the repository
    (Model As IMetabaseObject).Save;
End Sub ModelVariable;

See also:

Examples | IMsModel