IMsLinearEquationsTransform.ExternalEquations

Syntax

ExternalEquations: IMsModelList;

Description

The ExternalEquations property returns the collection of external models in the system.

Example

Executing the example requires that the repository contains a modeling container with the CONT_MODEL identifier. This container must include models with the MODEL and MODEL_EX identifiers, and variables with the X1, Y1, X2, and Y2 identifiers.

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

Sub UserProc;
Var
    Model, Model_ex: IMsModel;
    Desc: IMetabaseObjectDescriptor;
    obj: IMetabaseObject;
    ModelSpace: IMetabaseObjectDescriptor;
    mb: IMetabase;
    Equations: IMsLinearEquationsTransform;
    ExternalEquations: IMsModelList;
    Method: IMsMethod;
    X1, X2, Y1, Y2, XY2, XY1: IMsFormulaTransformVariable;
    Outputs, Inputs: IMsFormulaTransformVariables;
    Selector: IMsFormulaTransformSelector;
    Formula, f1, f2: IMsFormula;
    lr: IMsLinearRegressionTransform;
    CompositeTerm: IMsCompositeFormulaTerm;
    info: IMsFormulaTermInfo;
    Trans: IMsFormulaTransform;
    vY1, vY2, vX1, vX2: IMsVariable;
Begin
    mb := MetabaseClass.Active;
    ModelSpace := mb.ItemById("CONT_MODEL");
    Desc := mb.ItemByIdNamespace("MODEL", ModelSpace.Key);
    obj := Desc.Edit;
    Model := obj As IMsModel;
    Trans := Model.Transform;
    Outputs := Trans.Outputs;
    Outputs.Clear;
    Inputs := Trans.Inputs;
    Inputs.Clear;
    Trans.Kind := MsModelKind.LinearEquations;
    Method := Model.Transform.EquationsFormula.Method;
    Equations := Method As IMsLinearEquationsTransform;
    ExternalEquations := Equations.ExternalEquations;
    If ExternalEquations.Count > 0 Then
        ExternalEquations.Clear;
    End If;
    Model_ex := mb.ItemByIdNamespace("MODEL_EX", ModelSpace.Key).Bind As IMsModel;
    ExternalEquations.Add(Model_ex);
    Equations.MissingData.Method := MissingDataMethod.LinTrend;
// Endogenous variables
    vY1 := mb.ItemByIdNamespace("Y1", ModelSpace.Key).Bind As IMsVariable;
    vY2 := mb.ItemByIdNamespace("Y2", ModelSpace.Key).Bind As IMsVariable;
    vX1 := mb.ItemByIdNamespace("X1", ModelSpace.Key).Bind As IMsVariable;
    vX2 := mb.ItemByIdNamespace("X2", ModelSpace.Key).Bind As IMsVariable;
    Y1 := Outputs.Add(vY1 As IVariableStub);
    Y2 := Outputs.Add(vY2 As IVariableStub);
    X1 := Inputs.Add(vX1 As IVariableStub);
    X2 := Inputs.Add(vX2 As IVariableStub);
    XY2 := Inputs.Add(vY2 As IVariableStub);
    XY1 := Inputs.Add(vY1 As IVariableStub);
// First equation in system
    Selector := Model.Transform.CreateSelector;
    Selector.Slice := Y1.Slices.Add(Null);
    Trans := Model.Transform;
    Formula := Trans.Transform(Selector);
    Formula.Kind := MsFormulaKind.LinearRegression;
    lr := Formula.Method As IMsLinearRegressionTransform;
    lr.MissingData.Method := MissingDataMethod.PrevValue;
    lr.HasConstant := True;
    CompositeTerm := lr.Explanatories.Add;
    info := trans.CreateTermInfo;
    info.Slice := X1.Slices.Add(Null);
    CompositeTerm.Expression.AsString := info.TermInnerText;
    CompositeTerm := lr.Explanatories.Add;
    info := trans.CreateTermInfo;
    info.Slice := XY2.Slices.Add(Null);
    CompositeTerm.Expression.AsString := info.TermInnerText;
    f1 := Formula;
    Equations.EstimateSimultaneously(f1) := True;
    If Equations.IdentifiableState(f1) = MsEquationIdentifiableState.NonIdentifiable Then
        Debug.WriteLine(First equation is not identified);
    End If;
// Second equation in system
    Selector := Model.Transform.CreateSelector;
    Selector.Slice := Y2.Slices.Add(Null);
    Trans := Model.Transform;
    Formula := Trans.Transform(Selector);
    Formula.Kind := MsFormulaKind.LinearRegression;
    lr := Formula.Method As IMsLinearRegressionTransform;
    lr.HasConstant := False;
    CompositeTerm := lr.Explanatories.Add;
    info := trans.CreateTermInfo;
    info.Slice := X2.Slices.Add(Null);
    CompositeTerm.Expression.AsString := info.TermInnerText;
    CompositeTerm := lr.Explanatories.Add;
    info := trans.CreateTermInfo;
    info.Slice := XY1.Slices.Add(Null);
    CompositeTerm.Expression.AsString := info.TermInnerText;
    f2 := Formula;
    Equations.EstimateSimultaneously(f2) := True;
    If Equations.IdentifiableState(f2) = MsEquationIdentifiableState.NonIdentifiable Then
        Debug.WriteLine("the second equation is unidentified");
    End If;
    obj.Save;
End Sub UserProc;

After executing the example the system of simultaneous equations, containing two equations of linear regression and one external model, is created. Data about identifiability of the equations is displayed in the console window.

See also:

IMsLinearEquationsTransform