You are here: Symbol Reference > Dew Namespace > Dew.Stats Namespace > Classes > TMtxNonLinReg Class
Dew Stats for .NET
ContentsIndexHome
PreviousUpNext
TMtxNonLinReg Class

Performs nonlinear regression.

Dew_Stats_TMtxNonLinReg
Syntax
C#
Visual Basic
public class TMtxNonLinReg : TMtxComponent;

StatTools.cs

How to use TMtxNonLinReg component?

  1. Drop a crefTMtxNonLinReg component on the form.
  2. Define crefX the vector of independent variables.
  3. Define crefY the vector of dependent variables. Make sure that X and Y have the same length.
  4. Define initial estimates for crefB regression parameters.
  5. (Optionaly) define crefWeights. If you'll use weights, set crefUseWeights property to true.
  6. Define regression function.
  7. (Optionally) define the derivative procedure. If you don't define derivative procedure then the numeric approximation will be used to calculate the derivative at specific point.
  8. Define the optimization method. Depending on your function different methods will give better/worse results.
  9. (Optionally) define desired tolerance for result.
  10. Define the maximum number of steps for optimization method. Internal optimization method will stop when number of iterations exceeds MaxIter or internal minimum precision is within Tolerance.
  11. Verbose property, if assigned, stores Fun, evaluated at each iteration step. Optionally, you can also assign crefTOptControl object to the Verbose property. This allows the optimization procedure to be interrupted from another thread and optionally also allows logging and iteration count monitoring.

In case of performance problems consider using TMtxMultiNonLinReg. That component internally performs vectorized optimization process. It can also be used to speed-up nonlinear regression with only one independent variable by 10-20x.  

 

Results:  

  1. crefB : Regression coefficients estimates.
  2. crefYCalc : Fitted Y values.

In the following example we use the TMtxNonLinReg component to fit generated data to non-linear function B[0]/Power((1.0 + Exp(B[1]-B[2]*X)),1/B[3]). In this example exact derivate procedure is not used - algorithm uses numerical derivatives:

using Dew.Math; using Dew.Stats; using Dew.Stats.Units; using System; namespace Dew.Examples { private double Rat43(TVec b, double x) { return b[0] / Math.Pow((1.0 + Math.Exp(b[1]-b[2]*x)),1/b[3]); } private void Example(TMtxNonLinReg nlr) { // Load data - independent variable nlr.X.SetIt(false, new double[] {9.000, 14.000, 21.000, 28.000, 42.000, 57.000, 63.000, 70.000, 79.000}); // Load data - dependent variable nlr.Y.SetIt(false, new double[] {8.930, 10.800, 18.590, 22.330, 39.350, 56.110, 61.730, 64.620, 67.080}); // Initial estimates for regression coefficients nlr.B.SetIt(false, new double[] { 100, 10, 1, 1 }); // setup optimization parameters nlr.Tolerance = 1.0e-6; // 6 digits should do the trick nlr.GradTolerance = 1.0e-3; // 3 digits nlr.MaxIteration = 400; nlr.RegressFunction += Rat43; // regression function // Marquardt method nlr.OptMethod = TOptMethod.optMarquardt; nlr.Recalc(); // MtxNinLinReg->b now stores calculated regression parameter estimates } }
Copyright (c) 1999-2024 by Dew Research. All rights reserved.
What do you think about this topic? Send feedback!