IMsNonLinearRegressionTransform.OptimizationMethod

Syntax

OptimizationMethod: NLSOptimizationMethod;

Description

The OptimizationMethod property determines the optimization method in use.

Comments

By default, the Levenberg-Marquardt method is used, that is, OptimizationMethod = NLSOptimizationMethod.LevenbergMarquardt.

Example

Executing the example requires that the repository contains a modeling container with the MS identifier containing a model with the MODEL_NONLINEAR identifier calculated by the Non-Linear Regression (Non-Linear Least-Squares Method Estimation) method.

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

Sub UserProc;
Var
    mb: IMetabase;
    MsKey: Integer;
    Model: IMsModel;
    Transform: IMsFormulaTransform;
    NonLinear: IMsNonLinearRegressionTransform;
    InitAprox: Array Of Double;
    i: Double;
    Calc: IMsModelCalculation;
    OutputVar: IMsFormulaTransformVariable;
    Coord: IMsFormulaTransformCoord;
    CoefData: Array Of Double;
    Coef: Array Of String;
    j: Integer;
    ConstCoeff: ISlConstCoefficients;
    MCalc: IMsMethodCalculation;
    Result: IMsFormulaTerm;
    ResultData: Array Of Double;

Begin
    // Get current repository
    mb := MetabaseClass.Active;
    // Get modelling container key
    MsKey := mb.GetObjectKeyById("MS");
    // Get the model
    Model := mb.ItemByIdNamespace("MODEL_NONLINEAR", MsKey).Edit As IMsModel;
    // Get model parameters
    Transform := Model.Transform;
    // Get calculation method parameters
    NonLinear := Transform.FormulaItem(0).Method As IMsNonLinearRegressionTransform;
    // Set significance of confidence limits
    NonLinear.ConfidenceLevel := 0.90;
    // Add a new coefficient to model equation
    NonLinear.Expression.AsString := "(" + NonLinear.Expression.AsString + ") * A1";
    // Get array of initial approximations
    InitAprox := NonLinear.InitApproximation;
    // Set new values of initial approximations
    For Each i In InitAprox Do
        i := i + 0.01;
    End For;
    // Do not use initial values by default
    NonLinear.UseDefaultInitValues := False;
    // Set maximum number of iterations,
    // for which optimal values of coefficients are calculated
    NonLinear.MaxIteration := 600;
    // Set missing data treatment method
    NonLinear.MissingData.Method := MissingDataMethod.LinTrend;
    // Set optimization method
    NonLinear.OptimizationMethod := NLSOptimizationMethod.QuasiNewton;
    // Set calculation accuracy
    NonLinear.Tolerance := 0.0002;
    // Use analytical derivatives
    NonLinear.UseDerivatives := True;
    // Create model calculation settings
    Calc := Model.CreateCalculation;
    // Set calculation periods
    Calc.Period.IdentificationStartDate := DateTime.Parse("01.01.1990");
    Calc.Period.IdentificationEndDate := DateTime.Parse("01.01.2010");
    Calc.Period.ForecastStartDate := DateTime.Parse("01.01.2011");
    Calc.Period.ForecastEndDate := DateTime.Parse("01.01.2017");
    // Get output variable
    OutputVar := Transform.Outputs.Item(0);

    // Get output variable parameters required for model calculation
    Coord := Transform.CreateCoord(OutputVar);
    // Identify model coefficients   
    NonLinear.Identify(Calc As IMsMethodCalculation, Coord);
    // Get identifier coefficients 
    CoefData := NonLinear.CoefficientsData(Coord);
    // If coefficients are not saved, save them
    If Not NonLinear.IsCoefficientsSaved(Coord) Then
        NonLinear.CoefficientsData(Coord) := CoefData;
    End If;
    // Get coefficient names
    Coef := NonLinear.Coefficients;
    // Output names, values and summary statistics of coefficients in the console window  
    Debug.WriteLine("Values and standard coefficient error");
    For j := 0 To CoefData.Length - 1 Do
        // Output name, value of coefficient
        Debug.Write("    " + Coef[j] + ": " + CoefData[j].ToString);
        // Get summary statistics of coefficient
        ConstCoeff := NonLinear.StatCoefficients(Coord, Coef[j]);
        // Output standard coefficient error
        Debug.WriteLine("; " + ConstCoeff.StandardError.ToString);
    End For;
    // Get output series

    Result := NonLinear.Result;
    // Create method calculation parameters
    MCalc := Transform.CreateCalculation;
    // Set calculation periods   
    MCalc.Period.IdentificationStartDate := DateTime.Parse("01.01.1990");
    MCalc.Period.IdentificationEndDate := DateTime.Parse("01.01.2010");
    MCalc.Period.ForecastStartDate := DateTime.Parse("01.01.2011");
    MCalc.Period.ForecastEndDate := DateTime.Parse("01.01.2017");
    // Get output series data
    ResultData := Result.Serie(MCalc);
    // Display output series values in the console window
    Debug.WriteLine("Output series values");
    For Each i In ResultData Do
        Debug.WriteLine("    " + i.ToString);
    End For;
    // Save changes in the model
    (Model As IMetabaseObject).Save;
End Sub UserProc;

After executing the example the model parameters are changed, the console window displays values and standard error of model coefficients and model series.

See also:

IMsNonLinearRegressionTransform