Lazstats: Less hints and warnings.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7917 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2020-12-02 23:51:03 +00:00
parent 013f93a05f
commit ed98904144
4 changed files with 81 additions and 76 deletions

View File

@ -1,41 +1,41 @@
inherited ABCLogLinearForm: TABCLogLinearForm
Left = 596
Height = 408
Height = 414
Top = 216
Width = 854
HelpType = htKeyword
HelpKeyword = 'html/html/AxBxCLogLinear.htm'
Caption = 'Log Linear Analysis for AxBxC Classification Table'
ClientHeight = 408
ClientHeight = 414
ClientWidth = 854
inherited ParamsPanel: TPanel
Height = 392
Height = 398
Width = 376
ClientHeight = 392
ClientHeight = 398
ClientWidth = 376
inherited CloseBtn: TButton
Left = 321
Top = 367
Top = 373
TabOrder = 5
end
inherited ComputeBtn: TButton
Left = 237
Top = 367
Top = 373
TabOrder = 4
end
inherited ResetBtn: TButton
Left = 175
Top = 367
Top = 373
TabOrder = 3
end
inherited HelpBtn: TButton
Tag = 101
Left = 116
Top = 367
Top = 373
TabOrder = 2
end
inherited ButtonBevel: TBevel
Top = 351
Top = 357
Width = 376
end
object FileFromGrp: TRadioGroup[5]
@ -77,10 +77,10 @@ inherited ABCLogLinearForm: TABCLogLinearForm
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = ButtonBevel
Left = 0
Height = 284
Height = 290
Top = 67
Width = 376
PageIndex = 1
PageIndex = 0
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Top = 16
TabOrder = 1
@ -140,7 +140,7 @@ inherited ABCLogLinearForm: TABCLogLinearForm
AnchorSideBottom.Control = Page1
AnchorSideBottom.Side = asrBottom
Left = 0
Height = 292
Height = 290
Top = 0
Width = 166
Anchors = [akTop, akLeft, akRight, akBottom]
@ -460,6 +460,6 @@ inherited ABCLogLinearForm: TABCLogLinearForm
end
inherited ParamsSplitter: TSplitter
Left = 388
Height = 408
Height = 414
end
end

View File

@ -9,7 +9,7 @@ interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs,
ExtCtrls, StdCtrls, Buttons, Grids,
MainUnit, Globals, DataProcs, BasicStatsReportFormUnit;
MainUnit, Globals, BasicStatsReportFormUnit;
type
@ -69,16 +69,14 @@ type
var Total: double; Model: integer; AReport: TStrings);
procedure Iterate(
Nrows, Ncols, Nslices: integer;
const Data: DblDyneCube;
const RowMarg, ColMarg, SliceMarg: DblDyneVec;
var Total: double;
const Expected: DblDyneCube;
const NewRowMarg, NewColMarg, NewSliceMarg: DblDyneVec;
var NewTotal: double);
procedure PrintTable(Nrows, Ncols, Nslices: integer;
const Data: DblDyneCube; const RowMarg, ColMarg, SliceMarg: DblDyneVec;
Total: double; AReport: TStrings);
AReport: TStrings);
procedure PrintLamdas(Nrows,Ncols,Nslices: integer;
const CellLambdas: DblDyneQuad; mu: double; AReport: TStrings);
procedure PrintMatrix(const X: DblDyneMat;
@ -358,7 +356,7 @@ begin
// print observed matrix
astr := 'Observed Frequencies';
lReport.Add(astr);
PrintTable(Nrows,Ncols,Nslices,Data,RowMarg,ColMarg,SliceMarg,Total, lReport);
PrintTable(Nrows,Ncols,Nslices,Data,RowMarg,ColMarg,SliceMarg, lReport);
lReport.Add('');
// Print sub-matrices
@ -388,16 +386,23 @@ procedure TABCLogLinearForm.ModelEffect(
Model: integer;
AReport: TStrings);
var
i, j, k: integer;
CellLambdas : DblDyneQuad;
LogData, Expected : DblDyneCube;
Title, astr : string;
NewRowMarg,NewColMarg,NewSliceMarg : DblDyneVec;
LogRowMarg, LogColMarg, LogSliceMarg : DblDyneVec;
NewTotal: double = 0.0;
ABLogs, ACLogs, BCLogs : DblDyneMat;
LogTotal, mu, Ysqr : double;
DF : integer;
i, j, k: integer;
CellLambdas: DblDyneQuad = nil;
LogData: DblDyneCube = nil;
Expected: DblDyneCube = nil;
Title, astr : string;
NewRowMarg: DblDyneVec = nil;
NewColMarg: DblDyneVec = nil;
NewSliceMarg: DblDyneVec = nil;
LogRowMarg: DblDyneVec = nil;
LogColMarg: DblDyneVec = nil;
LogSliceMarg: DblDyneVec = nil;
NewTotal: double = 0.0;
ABLogs: DblDyneMat = nil;
ACLogs: DblDyneMat = nil;
BCLogs: DblDyneMat = nil;
LogTotal, mu, Ysqr: double;
DF: integer;
begin
// Get expected values for chosen model
SetLength(Expected,Nrows+1, Ncols+1, Nslices+1);
@ -425,8 +430,8 @@ begin
if Model = 2 then // independence
begin
Title := 'Model of Independence';
Iterate(Nrows, Ncols, Nslices, Data, RowMarg, ColMarg, SliceMarg,
Total, Expected, NewRowMarg, NewColMarg, NewSliceMarg, NewTotal);
Iterate(Nrows, Ncols, Nslices, RowMarg, ColMarg, SliceMarg,
Expected, NewRowMarg, NewColMarg, NewSliceMarg, NewTotal);
end;
if Model = 3 then // no AB effect
@ -437,6 +442,7 @@ begin
for k := 1 to Nslices do
Expected[i,j,k] := AC[i,k] * BC[j,k] / SliceMarg[k];
end;
if Model = 4 then // no AC effect
begin
Title := 'No AC Effect';
@ -445,6 +451,7 @@ begin
for k := 1 to Nslices do
Expected[i,j,k] := AB[i,j] * BC[j,k] / ColMarg[j];
end;
if Model = 5 then // no BC effect
begin
Title := 'No BC Effect';
@ -453,6 +460,7 @@ begin
for k := 1 to Nslices do
Expected[i,j,k] := AB[i,j] * AC[i,k] / RowMarg[i];
end;
if Model = 6 then // no C effect
begin
Title := 'Model of No Slice (C) effect';
@ -607,13 +615,12 @@ begin
astr := 'Expected Frequencies';
AReport.Add(astr);
PrintTable(Nrows,Ncols,Nslices,Expected,NewRowMarg,NewColMarg,
NewSliceMarg,NewTotal, AReport);
PrintTable(Nrows,Ncols,Nslices,Expected,NewRowMarg,NewColMarg, NewSliceMarg,AReport);
AReport.Add('');
astr := 'Log Frequencies';
AReport.Add(astr);
PrintTable(Nrows,Ncols,Nslices,LogData,LogRowMarg,LogColMarg,LogSliceMarg,LogTotal, AReport);
PrintTable(Nrows,Ncols,Nslices,LogData,LogRowMarg,LogColMarg,LogSliceMarg,AReport);
AReport.Add('');
AReport.Add('======================================================================');
@ -660,20 +667,18 @@ end;
procedure TABCLogLinearForm.Iterate(
Nrows, Ncols, Nslices: integer;
const Data: DblDyneCube; const RowMarg, ColMarg, SliceMarg: DblDyneVec;
var Total: double;
const RowMarg, ColMarg, SliceMarg: DblDyneVec;
const Expected: DblDyneCube; const NewRowMarg, NewColMarg, NewSliceMarg: DblDyneVec;
var NewTotal: double);
Label Step;
var
Aprevious : DblDyneCube;
i, j, k : integer;
delta : double;
difference : double;
Aprevious: DblDyneCube = nil;
i, j, k: integer;
delta: double;
difference: double;
begin
SetLength(Aprevious,Nrows+1,Ncols+1,Nslices+1);
SetLength(Aprevious ,Nrows+1,Ncols+1,Nslices+1);
delta := 0.1;
difference := 0.0;
for i := 1 to Nrows do newrowmarg[i] := 0.0;
@ -753,30 +758,32 @@ Step:
end;
Aprevious := nil;
end;
//-------------------------------------------------------------------
procedure TABCLogLinearForm.PrintTable(
Nrows, Ncols, Nslices: integer;
const Data: DblDyneCube; const RowMarg, ColMarg, SliceMarg: DblDyneVec;
Total: double;
AReport: TStrings);
var
i, j, k: integer;
begin
AReport.Add(' A B C VALUE ');
AReport.Add(' A B C VALUE');
for i := 1 to Nrows do
for j := 1 to Ncols do
for k := 1 to Nslices do
AReport.Add('%3d %3d %3d %8.3f', [i, j, k, Data[i,j,k]]);
AReport.Add('%3d %3d %3d %8.3f', [i, j, k, Data[i,j,k]]);
AReport.Add('');
AReport.Add('Totals for Dimension A');
for i := 1 to Nrows do
AReport.Add('Row %d %8.3f', [i, RowMarg[i]]);
AReport.Add('');
AReport.Add('Totals for Dimension B');
for j := 1 to Ncols do
AReport.Add('Col %d %8.3f', [j, ColMarg[j]]);
AReport.Add('');
AReport.Add('Totals for Dimension C');
for k := 1 to Nslices do
AReport.Add('Slice %d %8.3f', [k, SliceMarg[k]]);
@ -851,8 +858,6 @@ end;
procedure TABCLogLinearForm.Reset;
var
i: integer;
begin
inherited;

View File

@ -1,4 +1,4 @@
object LogLinScreenFrm: TLogLinScreenFrm
object LogLinScreenForm: TLogLinScreenForm
Left = 417
Height = 379
Top = 130

View File

@ -21,9 +21,9 @@ uses
type
{ TLogLinScreenFrm }
{ TLogLinScreenForm }
TLogLinScreenFrm = class(TForm)
TLogLinScreenForm = class(TForm)
Bevel1: TBevel;
Bevel2: TBevel;
HelpBtn: TButton;
@ -115,16 +115,16 @@ type
end;
var
LogLinScreenFrm: TLogLinScreenFrm;
LogLinScreenForm: TLogLinScreenForm;
implementation
uses
Math, LCLIntf, LCLType, Utils;
{ TLogLinScreenFrm }
{ TLogLinScreenForm }
procedure TLogLinScreenFrm.ResetBtnClick(Sender: TObject);
procedure TLogLinScreenForm.ResetBtnClick(Sender: TObject);
var
i : integer;
begin
@ -135,13 +135,13 @@ begin
UpdateMinMaxGrid;
end;
procedure TLogLinScreenFrm.SelectListSelectionChange(Sender: TObject;
procedure TLogLinScreenForm.SelectListSelectionChange(Sender: TObject;
User: boolean);
begin
UpdateBtnStates;
end;
procedure TLogLinScreenFrm.InBtnClick(Sender: TObject);
procedure TLogLinScreenForm.InBtnClick(Sender: TObject);
var
i: integer;
begin
@ -160,7 +160,7 @@ begin
UpdateBtnStates;
end;
procedure TLogLinScreenFrm.FormActivate(Sender: TObject);
procedure TLogLinScreenForm.FormActivate(Sender: TObject);
var
w: Integer;
begin
@ -185,24 +185,24 @@ begin
FAutoSized := true;
end;
procedure TLogLinScreenFrm.FormCreate(Sender: TObject);
procedure TLogLinScreenForm.FormCreate(Sender: TObject);
begin
Assert(OS3MainFrm <> nil);
end;
procedure TLogLinScreenFrm.FormShow(Sender: TObject);
procedure TLogLinScreenForm.FormShow(Sender: TObject);
begin
ResetBtnClick(Self);
end;
procedure TLogLinScreenFrm.HelpBtnClick(Sender: TObject);
procedure TLogLinScreenForm.HelpBtnClick(Sender: TObject);
begin
if ContextHelpForm = nil then
Application.CreateForm(TContextHelpForm, ContextHelpForm);
ContextHelpForm.HelpMessage((Sender as TButton).Tag);
end;
procedure TLogLinScreenFrm.AllBtnClick(Sender: TObject);
procedure TLogLinScreenForm.AllBtnClick(Sender: TObject);
var
i: integer;
begin
@ -213,7 +213,7 @@ begin
UpdateMinMaxGrid;
end;
procedure TLogLinScreenFrm.ComputeBtnClick(Sender: TObject);
procedure TLogLinScreenForm.ComputeBtnClick(Sender: TObject);
var
ArraySize : integer;
N : integer;
@ -607,7 +607,7 @@ begin
end;
end;
procedure TLogLinScreenFrm.OutBtnClick(Sender: TObject);
procedure TLogLinScreenForm.OutBtnClick(Sender: TObject);
var
i: integer;
begin
@ -626,7 +626,7 @@ begin
UpdateMinMaxGrid;
end;
procedure TLogLinScreenFrm.Screen(var NVAR: integer; var MP: integer;
procedure TLogLinScreenForm.Screen(var NVAR: integer; var MP: integer;
var MM: integer; var NTAB: integer; var TABLE: DblDyneVec;
var DIM: IntDyneVec; var GSQ: DblDyneVec; var DGFR: IntDyneVec;
var PART: DblDyneMat; var MARG: DblDyneMat; var DFS: IntDyneMat;
@ -775,7 +775,7 @@ begin
end; // 200 CONTINUE
end;
procedure TLogLinScreenFrm.CONF(var N: integer; var M: integer;
procedure TLogLinScreenForm.CONF(var N: integer; var M: integer;
var MP: integer; var MM: integer; var ISET: IntDyneVec; var JSET: IntDyneVec;
var IP: IntDyneMat; var IM: IntDyneMat; var NP: integer);
Label 100, 120;
@ -824,12 +824,12 @@ begin
GOTO 120;
end;
procedure TLogLinScreenFrm.CountVarChkChange(Sender: TObject);
procedure TLogLinScreenForm.CountVarChkChange(Sender: TObject);
begin
UpdateMinMaxGrid;
end;
procedure TLogLinScreenFrm.COMBO(var ISET: IntDyneVec; N, M: Integer;
procedure TLogLinScreenForm.COMBO(var ISET: IntDyneVec; N, M: Integer;
var LAST: boolean);
label 100, 110, 130, 150;
VAR
@ -879,7 +879,7 @@ begin
end; //160 CONTINUE
end;
procedure TLogLinScreenFrm.EVAL(var IAR: IntDyneMat; NC, NV, IBEG, NVAR,
procedure TLogLinScreenForm.EVAL(var IAR: IntDyneMat; NC, NV, IBEG, NVAR,
MAX: integer; var CONFIG: IntDyneMat; var DIM: IntDyneVec; var DF: integer);
VAR I, J, K, KK, L : integer;
// SUBROUTINE EVAL(IAR, NC, NV, IBEG, NVAR, MAX, CONFIG, DIM, DF)
@ -913,7 +913,7 @@ begin
end; // 110 CONTINUE
end;
procedure TLogLinScreenFrm.RESET(var FIT: DblDyneVec; NTAB: Integer; AVG: Double
procedure TLogLinScreenForm.RESET(var FIT: DblDyneVec; NTAB: Integer; AVG: Double
);
VAR I : integer;
@ -933,7 +933,7 @@ begin
end; // 100 CONTINUE
end;
procedure TLogLinScreenFrm.LIKE(var GSQ: Double; var FIT: DblDyneVec;
procedure TLogLinScreenForm.LIKE(var GSQ: Double; var FIT: DblDyneVec;
var TABLE: DblDyneVec; NTAB: integer);
VAR I : integer;
ZERO, TWO : Double;
@ -959,7 +959,7 @@ begin
GSQ := TWO * GSQ;
end;
procedure TLogLinScreenFrm.LOGFIT(NVAR, NTAB, NCON: integer;
procedure TLogLinScreenForm.LOGFIT(NVAR, NTAB, NCON: integer;
var DIM: IntDyneVec; var CONFIG: IntDyneMat; var TABLE: DblDyneVec;
var FIT: DblDyneVec; var SIZE: IntDyneVec; var COORD: IntDyneVec;
var X: DblDyneVec; var Y: DblDyneVec);
@ -1070,7 +1070,7 @@ begin
end; // 230 CONTINUE
end;
procedure TLogLinScreenFrm.MaxCombos(NumDims: integer; out MM, MP: integer);
procedure TLogLinScreenForm.MaxCombos(NumDims: integer; out MM, MP: integer);
var
combos: integer;
i,j: integer;
@ -1096,7 +1096,7 @@ begin
end;
end;
function TLogLinScreenFrm.ArrayPosition(NumDims: integer;
function TLogLinScreenForm.ArrayPosition(NumDims: integer;
const Data: DblDyneVec; const Subscripts, DimSize: IntDyneVec): integer;
var
Pos : integer;
@ -1121,7 +1121,7 @@ begin
PriorSizes := nil;
end;
procedure TLogLinScreenFrm.Marginals(NumDims, ArraySize: integer;
procedure TLogLinScreenForm.Marginals(NumDims, ArraySize: integer;
const Indexes: IntDyneMat; const Data: DblDyneVec; const Margins: IntDyneMat);
var
i, j, category: integer;
@ -1136,14 +1136,14 @@ begin
end;
end;
procedure TLogLinScreenFrm.UpdateBtnStates;
procedure TLogLinScreenForm.UpdateBtnStates;
begin
InBtn.Enabled := AnySelected(VarList);
OutBtn.Enabled := AnySelected(SelectList);
AllBtn.Enabled := VarList.Items.Count > 0;
end;
procedure TLogLinScreenFrm.UpdateMinMaxGrid;
procedure TLogLinScreenForm.UpdateMinMaxGrid;
var
NumDims, j: Integer;
begin
@ -1161,7 +1161,7 @@ begin
end;
end;
procedure TLogLinScreenFrm.VarListSelectionChange(Sender: TObject; User: boolean);
procedure TLogLinScreenForm.VarListSelectionChange(Sender: TObject; User: boolean);
begin
UpdateBtnStates;
end;