Add(Slice: IMsFormulaTransformSlice): IMsFormulaTerm;
Slice. Data slice in the variable, to which the term will refer.
The Add method adds a new term to the collection.
Executing the example requires that the repository contains the KONT_MODEL modeling container. This container contains a modeling problem with the NEW_NONLINREG identifier that uses the non-linear regression method for calculation.
Add links to the Metabase and Ms system assemblies.
Sub UserProc;
Var
MB: IMetabase;
CrInf: IMetabaseObjectCreateInfo;
MObj: IMetabaseObject;
Model: IMsModel;
Trans: IMsFormulaTransform;
VarTrans: IMsFormulaTransformVariable;
Tree: IMsFormulaTransformSlicesTree;
Slice: IMsFormulaTransformSlice;
Selector: IMsFormulaTransformSelector;
Formula: IMsFormula;
NonLinear: IMsNonLinearRegressionTransform;
Varr: IMsVariable;
TransVar: IMsFormulaTransformVariable;
TermX1: IMsFormulaTerm;
s: String;
Begin
MB := MetabaseClass.Active;
//create a model
CrInf := Mb.CreateCreateInfo;
CrInf.ClassId := MetabaseObjectClass.KE_CLASS_MSMODEL;
CrInf.Id := "New_NonLinReg";
CrInf.Name := "New_NonLinReg";
CrInf.Parent := Mb.ItemById("KONT_MODEL");
CrInf.Permanent := False;
MObj := Mb.CreateObject(CrInf).Edit;
Model := MObj As IMsModel;
Trans := Model.Transform;
//add an output variable
Varr := MB.ItemByIdNamespace("Var_1",MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Model.Output.Add(Varr);
VarTrans := Trans.Outputs.Item(0);
Tree := VarTrans.SlicesTree(VarTrans);
Slice := Tree.CreateSlice(1);
Selector := Model.Transform.CreateSelector;
Selector.Slice := Slice;
Formula := Model.Transform.Transform(Selector);
Formula.Kind := MsFormulaKind.NonLinearRegression;
NonLinear := Formula.Method As IMsNonLinearRegressionTransform;
//add a factor
Varr := MB.ItemByIdNamespace("Var_Factor",MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Model.Input.Add(Varr);
TransVar := Model.Transform.Inputs.Item(0);
//Compare term with slice in variable
TermX1 := NonLinear.Operands.Add(TransVar.SlicesTree(VarTrans).CreateSlice(1));
//change term parameters
TermX1.Inversion := MsInversion.DLog;
TermX1.InversionLag :=MsInversionLag.PrecidingYear;
TermX1.UpdateSlice(TermX1.Slice,"-1");
//create an equation
s := "A0+"+ Trans.SliceToTerm(TermX1.Slice, TermX1.Lag.AsString) + "/10 ";
NonLinear.Expression.AsString:= s;
MObj.Save;
End Sub UserProc;
After executing the example, a new model is created in the modeling container. The output variable and one factor are added to the created model. To make the equation, create the term that refers to the slice of the first input variable. The way of initial transformation of data and lag is changed for the term. The non-linear regression method will be used for model calculation.
See also: