program multiple_regression; uses SysUtils, Classes, Globals, MatrixUnit, RegressionUnit; var L: TStrings; xCols: IntDyneVec = nil; yCol: Integer; xData: TDblMatrix = nil; yData: TDblVector = nil; i, j: Integer; sa: TStringArray = nil; RegressionRes: TMultipleRegressionResults; Labels: StrDyneVec = nil; const W = 20; D = 3; procedure WriteMatrix(A: TDblMatrix; RowLabels, ColLabels: StrDyneVec); var i,j: Integer; n, m: Integer; begin MatSize(A, n,m); Write('':W); for j := 0 to High(ColLabels) do Write(ColLabels[j]:W); WriteLn; for i := 0 to n-1 do begin Write(RowLabels[i]:W); for j := 0 to m-1 do Write(A[i,j]:W:D); WriteLn; end; end; begin DefaultFormatSettings.DecimalSeparator := '.'; SetLength(xCols, 2); xCols[0] := 0; xCols[1] := 1; yCol := 5; SetLength(Labels, Length(xCols) + 1); Labels[High(Labels)] := 'Intercept'; L := TStringList.Create; try L.LoadFromFile('..\..\data\cansas.tab'); sa := L[0].Split(#9); for j := 0 to High(xCols) do Labels[j] := sa[xCols[j]]; SetLength(xData, L.Count-1, 2); SetLength(yData, L.Count-1); for i:=1 to L.Count-1 do begin sa := L[i].Split(#9); for j := 0 to High(xCols) do xData[i-1, xCols[j]] := StrToFloat(sa[xCols[j]]); yData[i-1] := StrToFloat(sa[yCol]); end; Write('Index':10); for j := 0 to High(xCols) do Write(Labels[j]:10); WriteLn(sa[yCol]:10); //WriteLn('Index':10, sa[0]:10, sa[1]:10, sa[yCol]:10); for i := 0 to High(yData) do begin Write(i:10); for j := 0 to High(xCols) do Write(xdata[i, j]:10:3); WriteLn(yData[i]:10:3); end; WriteLn; finally L.Free; end; MultipleRegression(xData, yData, 0.95, RegressionRes); for i := 0 to High(Labels) do WriteLn('B[' + Labels[i] + '] =':20, RegressionRes.Coeffs[i]:W:D); WriteLn; WriteLn('Variance-Covariance Matrix'); WriteMatrix(RegressionRes.VarCovar, Labels, Labels); ReadLn; end.