|
Dew Stats for .NET
|
General non-linear regression.
public int NLinRegress(TVec X, TVec Y, TRegressFun RegFun, TDeriveProc DeriveProc, TVec B, TOptMethod Method, ref TOptStopReason StopReason, TVec Weights, TVec YCalc, bool SoftSearch, int MaxIter, double Tol, double GradTol, TStrings Verbose);
|
Parameters |
Description |
|
X |
Vector of dependent variable. |
|
Y |
Vector of independent variable. |
|
RegFun |
Regression function. |
|
DeriveProc |
Procedure to calculate the derivatives of RegFun. You can define the exact derivative or use routine as numerical approximation. |
|
B |
Holds initial estimate for regression parameters. After the call to NLinRegress b returns calculated regression parameters. |
|
StopReason |
Returns why regression parameters search stopped (see MtxVec.hlp TOptStopReason type to learn more about different stop reasons). |
|
Weights |
Weights (optional). |
|
YCalc |
Returns calculated values (optional). |
|
SoftSearch |
If true, internal line search algoritm will use soft line search method. Set this parameter to true if you're using numerical approximation for derivative. If this parameter is set to false, internal line search algorithm will use exact line search method. Set this parameter to false if you're using *exact* derivative. |
|
MaxIter |
Maximum allowed numer of allowed iterations. |
|
Tol |
Desired regression parameters tolerance. |
|
GradTol |
Minimum allowed gradient C-Norm. |
|
OptMethod |
Defines which optimization method will be used to find regression parameters (see MtxVec.hlp TOptMethod type to learn more about this). |
Number of iterations needed to calculate regression parameters with specified tolerance.
The routine fits equations to data by minimizing the sum of squared residuals :
SS = Sum [y(k) - ycalc(k)]^2 ,
where y(k) and ycalc(k) are respectively the observed and calculated value of the dependent variable for observation k. ycalc(k) is a function of the regression parameters b(0), b(1) ... Here the observed values obey the following (non-linear) equation:
y(k) = RegFun[x(k), b(0), b(1), ... ]
Y = RegFun[X,b(0),b(1), ...]
where RegFun is the regression function and b(0),..b(i) are the regression parameters.
The following example uses data from NIST study involving circular interference transmittance. The response variable is transmittance, and the predictor variable is wavelength. First we setup the regression function Eckerle4 with three regression parameters (b0,b1,b2). Then we setup data and specify initial estimate for regression parameters (see below):
using Dew.Math; using Dew.Math.Tee; using Dew.Stats.Units; using Dew.Stats; namespace Dew.Examples { // function definition private double Eckerle4(TVec B, double x) { double sqrterm = (x-B[2])/B[1])*(x-B[2])/B[1]); return B[0]/B[1] * Exp(-0.5*(sqrterm)); } private void Example() { Vector x = new Vector(0); Vector y = new Vector(0); Vector b = new Vector(0); Vector yhat = new Vector(0); TOptStopReason StopReason; x.SetIt(false,new double[] {400.0, 405.0, 410.0, 415.0, 420.0, 425.0, 430.0, 435.0, 436.5, 438.0, 439.5, 441.0, 442.5, 444.0, 445.5, 447.0, 448.5, 450.0, 451.5, 453.0, 454.5, 456.0, 457.5, 459.0, 460.5, 462.0, 463.5, 465.0, 470.0, 475.0, 480.0, 485.0, 490.0, 495.0, 500.0}); y.SetIt(false,new double[] {0.0001575, 0.0001699, 0.0002350, 0.0003102, 0.0004917, 0.0008710, 0.0017418, 0.0046400, 0.0065895, 0.0097302, 0.0149002, 0.0237310, 0.0401683, 0.0712559, 0.1264458, 0.2073413, 0.2902366, 0.3445623, 0.3698049, 0.3668534, 0.3106727, 0.2078154, 0.1164354, 0.0616764, 0.0337200, 0.0194023, 0.0117831, 0.0074357, 0.0022732, 0.0008800, 0.0004579, 0.0002345, 0.0001586, 0.0001143, 0.0000710}); b.SetIt(false,new douible[] {1.0, 10.0, 500.0}); // initial estimates Regress.NLinRegress(x,y,Eckerle4,null,b,optMarquardt, out StopReason, null,yhat,false,300,1e-8,1e-10); TeeChart.DrawValues(x,y,Series1,false); // draw data TeeChart.DrawValues(x,yhat,Series2,false); // draw fitted value } }
|
What do you think about this topic? Send feedback!
|
|
Copyright (c) 1999-2010 by Dew Research. All rights reserved.
|