LazStats: Inherit SingleLinkUnit from BasicStatsReportAndChartFormUnit. Some refactoring.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7893 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2020-11-20 22:33:31 +00:00
parent 972eb626d4
commit db8138802d
5 changed files with 605 additions and 719 deletions

View File

@ -1005,7 +1005,7 @@
<Unit112>
<Filename Value="forms\analysis\multivariate\singlelinkunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="SingleLinkFrm"/>
<ComponentName Value="SingleLinkForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="SingleLinkUnit"/>

View File

@ -6,6 +6,7 @@
unit ANCOVAUnit;
{$mode objfpc}{$H+}
{$WARN 6058 off : Call to subroutine "$1" marked as inline is not inlined}
{.$DEFINE ANCOVA_DEBUG}
interface
@ -1044,7 +1045,7 @@ end;
procedure TAncovaForm.GenCovInteracts;
var
i, j, l, m, vect1col, vect2col, col: integer;
i, j, k, m, vect1col, vect2col, col: integer;
value: double;
labelstr, cell1, cell2: string;
startcol, endcol, novectors, oldnovars: integer;
@ -1064,9 +1065,9 @@ begin
vect1col := Block[i-1,2];
for j := firstblock to lastblock do
begin
for l := 1 to Block[j-1,4] do
for k := 1 to Block[j-1,4] do
begin
vect2col := Block[j-1,2] + l - 1; // first vector col. of B
vect2col := Block[j-1,2] + k - 1; // first vector col. of B
col := col + 1;
novectors := novectors + 1;
NoTestVecs := NoTestVecs + 1;
@ -1350,7 +1351,7 @@ end;
procedure TAncovaForm.SelectPlot(Sender: TObject);
var
fixedIdx, i: Integer;
fixedIdx: Integer;
isAdjusted: Boolean;
ser: TChartSeries;
clr: TColor;

View File

@ -1,106 +1,41 @@
object SingleLinkFrm: TSingleLinkFrm
inherited SingleLinkForm: TSingleLinkForm
Left = 579
Height = 284
Height = 364
Top = 362
Width = 409
Width = 715
HelpType = htKeyword
HelpKeyword = 'html/SingleLinkClustering.htm'
AutoSize = True
Caption = 'Single Linkage Cluster Analysis'
ClientHeight = 284
ClientWidth = 409
OnActivate = FormActivate
OnCreate = FormCreate
OnShow = FormShow
Position = poMainFormCenter
LCLVersion = '2.1.0.0'
object ResetBtn: TButton
AnchorSideRight.Control = ComputeBtn
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 200
Height = 25
Top = 251
Width = 54
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'Reset'
OnClick = ResetBtnClick
TabOrder = 1
end
object ComputeBtn: TButton
AnchorSideRight.Control = CloseBtn
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 262
Height = 25
Top = 251
Width = 76
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'Compute'
OnClick = ComputeBtnClick
TabOrder = 2
end
object CloseBtn: TButton
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 346
Height = 25
Top = 251
Width = 55
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'Close'
ModalResult = 11
TabOrder = 3
end
object Bevel1: TBevel
AnchorSideLeft.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = CloseBtn
Left = 0
Height = 8
Top = 235
Width = 409
Anchors = [akLeft, akRight, akBottom]
Shape = bsBottomLine
end
object Panel1: TPanel
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Bevel1
Left = 8
Height = 219
Top = 8
Width = 393
Anchors = [akTop, akLeft, akRight, akBottom]
AutoSize = True
BorderSpacing.Around = 8
BevelOuter = bvNone
ClientHeight = 219
ClientWidth = 393
TabOrder = 0
object Label1: TLabel
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = Panel1
ClientHeight = 364
ClientWidth = 715
inherited ParamsPanel: TPanel
Height = 348
Width = 315
ClientHeight = 348
ClientWidth = 315
inherited CloseBtn: TButton
Left = 260
Top = 323
end
inherited ComputeBtn: TButton
Left = 176
Top = 323
end
inherited ResetBtn: TButton
Left = 114
Top = 323
end
inherited HelpBtn: TButton
Left = 55
Top = 323
end
inherited ButtonBevel: TBevel
Top = 307
Width = 315
end
object Label1: TLabel[5]
AnchorSideLeft.Control = ParamsPanel
AnchorSideTop.Control = ParamsPanel
Left = 0
Height = 15
Top = 0
@ -108,220 +43,175 @@ object SingleLinkFrm: TSingleLinkFrm
Caption = 'Available Variables'
ParentColor = False
end
object VarList: TListBox
AnchorSideLeft.Control = Panel1
object VarList: TListBox[6]
AnchorSideLeft.Control = ParamsPanel
AnchorSideTop.Control = Label1
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = VarInBtn
AnchorSideBottom.Control = Panel1
AnchorSideBottom.Side = asrBottom
AnchorSideBottom.Control = OptionsGroup
Left = 0
Height = 202
Height = 189
Top = 17
Width = 174
Width = 138
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Top = 2
BorderSpacing.Right = 8
BorderSpacing.Right = 6
BorderSpacing.Bottom = 8
ItemHeight = 0
OnDblClick = VarListDblClick
OnSelectionChange = VarListSelectionChange
TabOrder = 0
TabOrder = 4
end
object Label2: TLabel
object Label2: TLabel[7]
AnchorSideLeft.Control = VarSelEdit
AnchorSideTop.Control = VarInBtn
AnchorSideRight.Control = VarSelEdit
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = VarSelEdit
Left = 218
Height = 15
Top = 31
Width = 175
Anchors = [akLeft, akRight, akBottom]
Left = 176
Height = 30
Top = 17
Width = 139
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Bottom = 2
Caption = 'Variable Selected for Analysis'
ParentColor = False
WordWrap = True
end
object VarInBtn: TBitBtn
AnchorSideLeft.Control = Panel1
object VarInBtn: TBitBtn[8]
AnchorSideLeft.Control = ParamsPanel
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = VarList
Left = 182
Height = 28
Left = 144
Height = 26
Top = 17
Width = 28
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
}
Width = 26
Images = MainDataModule.ImageList
ImageIndex = 1
OnClick = VarInBtnClick
Spacing = 0
TabOrder = 1
TabOrder = 5
end
object VarOutBtn: TBitBtn
AnchorSideLeft.Control = Panel1
object VarOutBtn: TBitBtn[9]
AnchorSideLeft.Control = ParamsPanel
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = VarInBtn
AnchorSideTop.Side = asrBottom
Left = 182
Height = 28
Top = 49
Width = 28
Left = 144
Height = 26
Top = 47
Width = 26
BorderSpacing.Top = 4
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
}
Images = MainDataModule.ImageList
ImageIndex = 0
OnClick = VarOutBtnClick
Spacing = 0
TabOrder = 2
TabOrder = 6
end
object VarSelEdit: TEdit
object VarSelEdit: TEdit[10]
AnchorSideLeft.Control = VarInBtn
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Label2
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Panel1
AnchorSideRight.Control = ParamsPanel
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = VarOutBtn
AnchorSideBottom.Side = asrBottom
Left = 218
Left = 176
Height = 23
Top = 48
Width = 175
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Left = 8
Top = 49
Width = 139
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 6
BorderSpacing.Top = 2
BorderSpacing.Bottom = 6
BorderSpacing.Bottom = 12
ReadOnly = True
TabOrder = 3
TabOrder = 7
Text = 'VarSelEdit'
end
object OptionsGroup: TGroupBox
AnchorSideLeft.Control = VarInBtn
AnchorSideTop.Control = VarOutBtn
object OptionsGroup: TGroupBox[11]
AnchorSideLeft.Control = ParamsPanel
AnchorSideTop.Side = asrBottom
Left = 182
Height = 135
Top = 93
Width = 178
AnchorSideBottom.Control = ButtonBevel
Left = 0
Height = 93
Top = 214
Width = 305
Anchors = [akLeft, akBottom]
AutoSize = True
BorderSpacing.Top = 16
Caption = 'Analysis Options:'
ChildSizing.LeftRightSpacing = 12
ChildSizing.TopBottomSpacing = 6
ChildSizing.VerticalSpacing = 2
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
ClientHeight = 115
ClientWidth = 174
TabOrder = 4
object StdChkBox: TCheckBox
ChildSizing.ControlsPerLine = 2
ClientHeight = 73
ClientWidth = 301
TabOrder = 8
object StandardizeChk: TCheckBox
Left = 12
Height = 19
Top = 6
Width = 150
Caption = 'Standardize Variable'
OnChange = StandardizeChkChange
TabOrder = 0
end
object RepChkBox: TCheckBox
object ReplaceChk: TCheckBox
Left = 162
Height = 19
Top = 6
Width = 127
Caption = 'Replace Grid Values'
Enabled = False
TabOrder = 1
end
object CombinationsChk: TCheckBox
Left = 12
Height = 19
Top = 27
Width = 150
Caption = 'Replace Grid Values'
TabOrder = 1
end
object DescChkBox: TCheckBox
Left = 12
Height = 19
Top = 48
Width = 150
Caption = 'Show Each Combination'
TabOrder = 2
end
object PlotChkBox: TCheckBox
Left = 12
object PlotChk: TCheckBox
Left = 162
Height = 19
Top = 69
Width = 150
Caption = 'Groups Vs Error Plot'
Top = 27
Width = 127
Caption = 'Groups vs. Error Plot'
TabOrder = 3
end
object DendoChk: TCheckBox
object DendogramChk: TCheckBox
Left = 12
Height = 19
Top = 90
Top = 48
Width = 150
Caption = 'Dendogram Plot'
TabOrder = 4
end
end
end
inherited ParamsSplitter: TSplitter
Left = 327
Height = 364
end
inherited PageControl: TPageControl
Left = 336
Height = 348
Width = 371
TabOrder = 1
inherited ReportPage: TTabSheet
Caption = 'Results'
end
inherited ChartPage: TTabSheet
Caption = 'Groups vs Error Plot'
end
object CombinationsPage: TTabSheet[2]
Caption = 'Combinations'
TabVisible = False
end
object DendogramPage: TTabSheet[3]
Caption = 'Dendogram'
TabVisible = False
end
end
end

View File

@ -2168,9 +2168,9 @@ end;
// Menu "Analysis" > "Multivariate" > "Single Link Clustering"
procedure TOS3MainFrm.mnuAnalysisMulti_SingleLinkClick(Sender: TObject);
begin
if SingleLinkFrm = nil then
Application.CreateForm(TSingleLinkFrm, SingleLinkFrm);
SingleLinkFrm.ShowModal;
if SingleLinkForm = nil then
Application.CreateForm(TSingleLinkForm, SingleLinkForm);
SingleLinkForm.Show;
end;
// Menu "Analysis" > "Multivariate" > "MANOVA / Discriminant Function"