You've already forked lazarus-ccr
101 lines
2.0 KiB
ObjectPascal
101 lines
2.0 KiB
ObjectPascal
![]() |
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.
|
||
|
|