You've already forked lazarus-ccr
LazStats: Refactor data preparation in WLSUnit.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7775 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -73,6 +73,10 @@ type
|
|||||||
Means, StdDevs, BetaWeights: DblDyneVec;
|
Means, StdDevs, BetaWeights: DblDyneVec;
|
||||||
StdErrEst: double; NoIndepVars: integer);
|
StdErrEst: double; NoIndepVars: integer);
|
||||||
|
|
||||||
|
function PrepareData(out ADepCol, ANumIndepCols: Integer;
|
||||||
|
out AIndepCols: IntDyneVec; out AWeightCol: Integer;
|
||||||
|
out ARowLabels: StrDyneVec): Boolean;
|
||||||
|
|
||||||
procedure WriteDescriptiveReport(AMemo: TMemo;
|
procedure WriteDescriptiveReport(AMemo: TMemo;
|
||||||
const ARegressionResults: TBivariateRegressionResults;
|
const ARegressionResults: TBivariateRegressionResults;
|
||||||
const XLabel, YLabel: String);
|
const XLabel, YLabel: String);
|
||||||
@ -167,22 +171,12 @@ var
|
|||||||
BtTests: DblDyneVec = nil;
|
BtTests: DblDyneVec = nil;
|
||||||
tProbs: DblDyneVec = nil;
|
tProbs: DblDyneVec = nil;
|
||||||
PrintDesc: boolean = true;
|
PrintDesc: boolean = true;
|
||||||
ColNoSelected: IntDyneVec = nil;
|
|
||||||
predicted: Double;
|
predicted: Double;
|
||||||
lReport: TStrings;
|
lReport: TStrings;
|
||||||
StdErrEst: Double = 0.0;
|
StdErrEst: Double = 0.0;
|
||||||
R2: Double = 0.0;
|
R2: Double = 0.0;
|
||||||
errorcode: Boolean = false;
|
errorcode: Boolean = false;
|
||||||
C: TWinControl;
|
|
||||||
msg: String;
|
|
||||||
begin
|
begin
|
||||||
if not Validate(msg, C) then
|
|
||||||
begin
|
|
||||||
C.SetFocus;
|
|
||||||
ErrorMsg(msg);
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
PrintDesc := true;
|
PrintDesc := true;
|
||||||
|
|
||||||
SetLength(Means, NoVariables + 2);
|
SetLength(Means, NoVariables + 2);
|
||||||
@ -193,53 +187,17 @@ begin
|
|||||||
SetLength(BStdErrs, NoVariables + 2);
|
SetLength(BStdErrs, NoVariables + 2);
|
||||||
SetLength(Bttests, NoVariables + 2);
|
SetLength(Bttests, NoVariables + 2);
|
||||||
SetLength(tprobs, NoVariables + 2);
|
SetLength(tprobs, NoVariables + 2);
|
||||||
SetLength(RowLabels, NoVariables + 2);
|
// SetLength(RowLabels, NoVariables + 2);
|
||||||
SetLength(IndepCols, NoVariables + 2);
|
// SetLength(IndepCols, NoVariables + 2);
|
||||||
SetLength(ColNoSelected, 2);
|
// SetLength(ColNoSelected, 2);
|
||||||
|
|
||||||
lReport := TStringList.Create;
|
lReport := TStringList.Create;
|
||||||
try
|
try
|
||||||
NCases := NoCases;
|
NCases := NoCases;
|
||||||
NoIndep := IndVarList.Items.Count;
|
// NoIndep := IndVarList.Items.Count;
|
||||||
|
|
||||||
// wp: This SetLength crashes...
|
if not PrepareData(depCol, NoIndep, indepCols, wghtCol, RowLabels) then
|
||||||
// SetLength(IndepCols, NoIndep+1); // +1 because the dep col will be stuffed in there, too
|
|
||||||
// SetLength(RowLabels, NoIndep);
|
|
||||||
|
|
||||||
depCol := GetVariableIndex(OS3MainFrm.DataGrid, DepVarEdit.Text);
|
|
||||||
wghtCol := GetVariableIndex(OS3MainFrm.DataGrid, WeightVarEdit.Text);
|
|
||||||
for i := 0 to NoIndep-1 do
|
|
||||||
begin
|
|
||||||
IndepCols[i] := GetVariableIndex(OS3MainFrm.DataGrid, IndVarList.Items[i]);
|
|
||||||
if IndepCols[i] = -1 then begin
|
|
||||||
ErrorMsg('Dependent variable %s not found.', [IndVarList.Items[i]]);
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
RowLabels[i] := IndVarList.Items[i];
|
|
||||||
end;
|
|
||||||
|
|
||||||
{
|
|
||||||
WghtCol := 0;
|
|
||||||
for i := 0 to NoVariables - 1 do
|
|
||||||
begin
|
|
||||||
if (OS3MainFrm.DataGrid.Cells[i+1,0] = DepVarEdit.Text) then DepCol := i+1;
|
|
||||||
if (OS3MainFrm.DataGrid.Cells[i+1,0] = WeightVarEdit.Text) then WghtCol := i+1;
|
|
||||||
for j := 0 to Noindep - 1 do
|
|
||||||
begin
|
|
||||||
if (OS3MainFrm.DataGrid.Cells[i+1,0] = IndVarList.Items.Strings[j]) then
|
|
||||||
begin
|
|
||||||
IndepCols[j] := i+1;
|
|
||||||
RowLabels[j] := IndVarList.Items.Strings[j];
|
|
||||||
end;
|
|
||||||
end; // next j
|
|
||||||
end; // next i
|
|
||||||
|
|
||||||
if (DepCol = 0) then
|
|
||||||
begin
|
|
||||||
ErrorMsg('No dependent variable selected.');
|
|
||||||
exit;
|
exit;
|
||||||
end;
|
|
||||||
}
|
|
||||||
|
|
||||||
{ wp: I think this is not correct: The column index is the last one in this
|
{ wp: I think this is not correct: The column index is the last one in this
|
||||||
call. And why is row 0 checked?
|
call. And why is row 0 checked?
|
||||||
@ -808,6 +766,51 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function TWLSFrm.PrepareData(out ADepCol, ANumIndepCols: Integer;
|
||||||
|
out AIndepCols: IntDyneVec; out AWeightCol: Integer;
|
||||||
|
out ARowLabels: StrDyneVec): Boolean;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
msg: String;
|
||||||
|
C: TWinControl;
|
||||||
|
begin
|
||||||
|
Result := false;
|
||||||
|
AIndepCols := nil;
|
||||||
|
ARowLabels := nil;
|
||||||
|
|
||||||
|
if not Validate(msg, C) then
|
||||||
|
begin
|
||||||
|
C.SetFocus;
|
||||||
|
ErrorMsg(msg);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
ANumIndepCols := IndVarList.Items.Count;
|
||||||
|
ADepCol := GetVariableIndex(OS3MainFrm.DataGrid, DepVarEdit.Text);
|
||||||
|
AWeightCol := GetVariableIndex(OS3MainFrm.DataGrid, WeightVarEdit.Text);
|
||||||
|
|
||||||
|
// The IndepCols store also other variables, in addition to the "real"
|
||||||
|
// independent variables. Until I know how this works, this array must be
|
||||||
|
// over-dimensions.
|
||||||
|
// ARowLabels alike.
|
||||||
|
SetLength(AIndepCols, NoVariables + 2);
|
||||||
|
SetLength(ARowLabels, NoVariables);
|
||||||
|
|
||||||
|
for i := 0 to ANumIndepCols-1 do
|
||||||
|
begin
|
||||||
|
AIndepCols[i] := GetVariableIndex(OS3MainFrm.DataGrid, IndVarList.Items[i]);
|
||||||
|
if AIndepCols[i] = -1 then
|
||||||
|
begin
|
||||||
|
ErrorMsg('Dependent variable %s not found.', [IndVarList.Items[i]]);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
ARowLabels[i] := IndVarList.Items[i];
|
||||||
|
end;
|
||||||
|
|
||||||
|
Result := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TWLSFrm.Reset;
|
procedure TWLSFrm.Reset;
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
@ -964,7 +967,7 @@ var
|
|||||||
begin
|
begin
|
||||||
lReport := TStringList.Create;
|
lReport := TStringList.Create;
|
||||||
try
|
try
|
||||||
{
|
{ not needed - requires too much space
|
||||||
lReport.Add('Data file: %s', [OS3MainFrm.FileNameEdit.Text]);
|
lReport.Add('Data file: %s', [OS3MainFrm.FileNameEdit.Text]);
|
||||||
lReport.Add('');
|
lReport.Add('');
|
||||||
lReport.Add('Variables:');
|
lReport.Add('Variables:');
|
||||||
|
Reference in New Issue
Block a user