You are here: Symbol Reference > Regress Namespace > Functions > Regress.MulLinRegress Function
Stats Master VCL
ContentsIndex
PreviousUpNext
Regress.MulLinRegress Function

Multivariante linear regression.

Pascal
procedure MulLinRegress(const Y: TVec; const A: TMtx; const b: TVec; const Weights: TVec; Constant: boolean = true; const YCalc: TVec = nil; const ATA: TMtx = nil; Method: TRegSolveMethod = regSolveLQR); overload;
Parameters 
Description 
Defines vector of dependant variable. 
Defines matrix of independant (also X) variables. 
Returns calculated regression coefficiens. 
Weights 
Defines weights (optional). 
Constant 
If true then intercept term b(0) will be included in calculations. If false, set intercept term b(0) to 0.0. 
YCalc 
Returns vector of calculated dependant variable, where YCalc = A*b
ATA 
Returns inverse matrix of normal equations i.e [A(T)*A]^-1
Method 
Use QR, SVD, or LU solver. Typically QR will yield best compromise between stability and performance. 

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 equation: 

y(k) = b(0) + b(1) * x(1,k) + b(2) * x(2,k) + ... 

i.e 

y = A * b. 

To calculate additional regression statistical values, use RegressTest routine.

The following example performs multiple linear regression.

Uses Regress, MtxExpr;
procedure Example;
var y,b,w,yhat, resid, bstd: Vector;
  A, ATA : Matrix;
  RegStat : TRegStats;
begin
  A.SetIt(4,2,false,[1.0, 2.0,
                    -3.2, 2.5,
                     8.0, -0.5,
                     -2.2, 1.8]); // independent variables

  w.SetIt(false,[1,2,2,1]); // weights
  y.SetIt(false,[-3.0, 0.25, 8.0, 5.5]); // dependent variables
  MulLinRegress(y,A,b,w,true,yhat,ATA); //do regression
  // b=(19.093757944, -2.0141843616, -10.082487055)
  RegressTest(y,yhat,ATA,RegStat,resid, bstd, true,w); // do basic regression stats
  // RegStat = (ResidualVar:0.037230395108; R2:0.99965713428;
  // AdjustedR2:0.99897140285; F:1457.7968725; SignifProb: 0.01851663347)
end;
#include "MtxExpr.hpp"
#include "Regress.hpp"
void _fastcall Example()
{
    sMatrix A,ATA;
    sVector y,b,w,yhat,residuals,bstdev;
    TRegStats rs;
    // independent variables
    A.SetIt(4,2,false,OPENARRAY(double,(1.0, 2.0,
              -3.2, 2.5,
               8.0,   -0.5,
               -2.2, 1.8)));
    w.SetIt(false,OPENARRAY(double,(1,2,2,1))); // weights
    y.SetIt(false,OPENARRAY(double,(-3.0, 0.25, 8.0, 5.5))); // dependent variables
    MulLinRegress(y,A,b,w,true,yhat,ATA); //do regression
    // b=(19.093757944, -2.0141843616, -10.082487055)
    RegressTest(y,yhat,ATA,rs,residuals,bstdev,true,w); // do basic regression stats
      // RegStat = (ResidualVar:0.037230395108; R2:0.99965713428;
      // AdjustedR2:0.99897140285; F:1457.7968725; SignifProb: 0.01851663347)
}
Examples on GitHub
Copyright (c) 1999-2025 by Dew Research. All rights reserved.
What do you think about this topic? Send feedback!