LazStats: Inherit HierarchUnit from BasicStatsReportAndChartUnit. Use TAChart.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7871 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2020-11-15 23:31:39 +00:00
parent a79a11251f
commit 3c8055a908
9 changed files with 627 additions and 519 deletions

View File

@ -453,7 +453,7 @@
<Unit43>
<Filename Value="forms\analysis\correlation\autocorunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="AutoCorrFrm"/>
<ComponentName Value="AutoCorrForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="AutoCorUnit"/>
@ -581,7 +581,7 @@
<Unit59>
<Filename Value="forms\analysis\multivariate\hierarchunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="HierarchFrm"/>
<ComponentName Value="HierarchForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="HierarchUnit"/>

View File

@ -1,4 +1,4 @@
object AutoCorrFrm: TAutoCorrFrm
object AutoCorrForm: TAutoCorrForm
Left = 456
Height = 459
Top = 145
@ -13,20 +13,20 @@ object AutoCorrFrm: TAutoCorrFrm
OnCreate = FormCreate
OnShow = FormShow
Position = poMainFormCenter
LCLVersion = '2.1.0.0'
LCLVersion = '2.0.10.0'
object GroupBox1: TGroupBox
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
Left = 8
Height = 68
Top = 8
Width = 137
Width = 126
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
Caption = 'The series is code in:'
ClientHeight = 48
ClientWidth = 133
ClientWidth = 122
TabOrder = 0
object ColBtn: TRadioButton
AnchorSideLeft.Control = GroupBox1
@ -34,9 +34,9 @@ object AutoCorrFrm: TAutoCorrFrm
Left = 16
Height = 19
Top = 0
Width = 99
Width = 94
BorderSpacing.Left = 16
Caption = 'A Grid Column'
Caption = 'a grid column'
Checked = True
OnClick = ColBtnClick
TabOrder = 0
@ -49,11 +49,11 @@ object AutoCorrFrm: TAutoCorrFrm
Left = 16
Height = 19
Top = 21
Width = 109
Width = 73
BorderSpacing.Top = 2
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'A row of the grid'
Caption = 'a grid row'
OnClick = RowBtnClick
TabOrder = 1
end
@ -62,7 +62,7 @@ object AutoCorrFrm: TAutoCorrFrm
AnchorSideLeft.Control = GroupBox1
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Owner
Left = 169
Left = 158
Height = 68
Top = 8
Width = 275
@ -216,7 +216,7 @@ object AutoCorrFrm: TAutoCorrFrm
OnClick = HelpBtnClick
TabOrder = 4
end
object Bevel1: TBevel
object ButtonBevel: TBevel
AnchorSideLeft.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
@ -233,7 +233,7 @@ object AutoCorrFrm: TAutoCorrFrm
AnchorSideTop.Control = GroupBox2
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Panel2
AnchorSideBottom.Control = Bevel1
AnchorSideBottom.Control = ButtonBevel
Left = 8
Height = 326
Top = 84

View File

@ -9,19 +9,18 @@ unit AutoCorUnit;
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, ExtCtrls, Buttons,
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, Buttons,
MainUnit, FunctionsLib, OutputUnit, Globals, GraphLib, DataProcs, MatrixLib,
PointsUnit, DifferenceUnit,
ContextHelpUnit;
type
{ TAutoCorrFrm }
{ TAutoCorrForm }
TAutoCorrFrm = class(TForm)
TAutoCorrForm = class(TForm)
AlphaEdit: TEdit;
Bevel1: TBevel;
ButtonBevel: TBevel;
Bevel2: TBevel;
HelpBtn: TButton;
Panel1: TPanel;
@ -107,17 +106,19 @@ type
end;
var
AutoCorrFrm: TAutoCorrFrm;
AutoCorrForm: TAutoCorrForm;
implementation
{$R *.lfm}
uses
Math,
MathUnit, MoveAvgUnit, AutoPlotUnit, PolynomialUnit, ExpSmoothUnit, FFTUnit;
{ TAutoCorrFrm }
{ TAutoCorrForm }
procedure TAutoCorrFrm.ResetBtnClick(Sender: TObject);
procedure TAutoCorrForm.ResetBtnClick(Sender: TObject);
var
i: integer;
begin
@ -159,12 +160,12 @@ begin
UpdateBtnStates;
end;
procedure TAutoCorrFrm.CloseBtnClick(Sender: TObject);
procedure TAutoCorrForm.CloseBtnClick(Sender: TObject);
begin
Close;
end;
procedure TAutoCorrFrm.RowBtnClick(Sender: TObject);
procedure TAutoCorrForm.RowBtnClick(Sender: TObject);
var
i: integer;
begin
@ -176,7 +177,7 @@ begin
OnlyCasesBtn.Caption := 'Only Columns From:';
end;
procedure TAutoCorrFrm.FormActivate(Sender: TObject);
procedure TAutoCorrForm.FormActivate(Sender: TObject);
var
w: Integer;
begin
@ -199,25 +200,25 @@ begin
FAutoSized := true;
end;
procedure TAutoCorrFrm.FormCreate(Sender: TObject);
procedure TAutoCorrForm.FormCreate(Sender: TObject);
begin
Assert(OS3MainFrm <> nil);
if PointsFrm = nil then Application.CreateForm(TPointsFrm, PointsFrm);
end;
procedure TAutoCorrFrm.FormShow(Sender: TObject);
procedure TAutoCorrForm.FormShow(Sender: TObject);
begin
ResetBtnClick(nil);
end;
procedure TAutoCorrFrm.HelpBtnClick(Sender: TObject);
procedure TAutoCorrForm.HelpBtnClick(Sender: TObject);
begin
if ContextHelpForm = nil then
Application.CreateForm(TContextHelpForm, ContextHelpForm);
ContextHelpForm.HelpMessage((Sender as TButton).Tag);
end;
procedure TAutoCorrFrm.ComputeBtnClick(Sender: TObject);
procedure TAutoCorrForm.ComputeBtnClick(Sender: TObject);
var
X, Y, count, covzero, mean: double;
uplimit, lowlimit, varresid, StdErr, lAlpha: double;
@ -682,7 +683,7 @@ begin
end;
end;
procedure TAutoCorrFrm.ColBtnClick(Sender: TObject);
procedure TAutoCorrForm.ColBtnClick(Sender: TObject);
var
i: integer;
begin
@ -694,7 +695,7 @@ begin
OnlyCasesBtn.Caption := 'Only Cases From:';
end;
procedure TAutoCorrFrm.InBtnClick(Sender: TObject);
procedure TAutoCorrForm.InBtnClick(Sender: TObject);
var
index: integer;
begin
@ -707,7 +708,7 @@ begin
end;
end;
procedure TAutoCorrFrm.OutBtnClick(Sender: TObject);
procedure TAutoCorrForm.OutBtnClick(Sender: TObject);
begin
if DepVarEdit.Text <> '' then
begin
@ -717,7 +718,7 @@ begin
end;
end;
procedure TAutoCorrFrm.Four1(var data: DblDyneVec; nn: longword; isign: integer);
procedure TAutoCorrForm.Four1(var data: DblDyneVec; nn: longword; isign: integer);
var
n, mmax, m, j, istep, i: longword;
wtemp, wr, wpr, wpi, wi, theta: double;
@ -780,7 +781,7 @@ begin
end;
end;
procedure TAutoCorrFrm.RealFt(var data: DblDyneVec; n: longword; isign: integer);
procedure TAutoCorrForm.RealFt(var data: DblDyneVec; n: longword; isign: integer);
var
i,i1,i2,i3,i4,np3 : integer; // was: longword;
c1,c2,h1r,h1i,h2r,h2i : double;
@ -836,7 +837,7 @@ begin
end;
end;
procedure TAutoCorrFrm.Fourier(var data: DblDyneVec; n, npts: integer);
procedure TAutoCorrForm.Fourier(var data: DblDyneVec; n, npts: integer);
var
nmin, m, mo2, i, k, j: integer;
yn, y1, rn1, fac, cnst: double;
@ -893,7 +894,7 @@ begin
y := nil;
end;
procedure TAutoCorrFrm.PolyFit(const pts: DblDyneVec; var avg: DblDyneVec;
procedure TAutoCorrForm.PolyFit(const pts: DblDyneVec; var avg: DblDyneVec;
NoPts, Order: integer);
var
X: DblDyneMat;
@ -1012,13 +1013,13 @@ begin
X := nil;
end;
procedure TAutoCorrFrm.UpdateBtnStates;
procedure TAutoCorrForm.UpdateBtnStates;
begin
InBtn.Enabled := (VarList.ItemIndex > -1) and (DepVarEdit.Text = '');
OutBtn.Enabled := (DepVarEdit.Text <> '');
end;
procedure TAutoCorrFrm.VarListSelectionChange(Sender: TObject; User: boolean);
procedure TAutoCorrForm.VarListSelectionChange(Sender: TObject; User: boolean);
begin
UpdateBtnStates;
end;
@ -1026,7 +1027,7 @@ end;
{ Routines called from ComputeBtnClick }
function TAutoCorrFrm.CalcMean(const Pts: DblDyneVec; NoPts: Integer): Double;
function TAutoCorrForm.CalcMean(const Pts: DblDyneVec; NoPts: Integer): Double;
var
i: Integer;
begin
@ -1036,7 +1037,7 @@ begin
Result := Result / NoPts;
end;
procedure TAutoCorrFrm.ExponentialSmooth(var Pts: DblDyneVec; NoPts: Integer);
procedure TAutoCorrForm.ExponentialSmooth(var Pts: DblDyneVec; NoPts: Integer);
var
F: TExpSmoothFrm;
noProj: Integer;
@ -1117,7 +1118,7 @@ begin
end;
end;
procedure TAutoCorrFrm.FourierSmooth(var Pts: DblDyneVec; NoPts: Integer);
procedure TAutoCorrForm.FourierSmooth(var Pts: DblDyneVec; NoPts: Integer);
var
F: TFFTFrm;
avg: DblDyneVec;
@ -1194,7 +1195,7 @@ begin
end;
end;
procedure TAutoCorrFrm.GetPts(var Pts: DblDyneVec; var NoPts: Integer;
procedure TAutoCorrForm.GetPts(var Pts: DblDyneVec; var NoPts: Integer;
Depvar: Integer);
var
i: Integer;
@ -1241,7 +1242,7 @@ begin
end;
end;
procedure TAutoCorrFrm.MovingAverage(var Pts: DblDyneVec; NoPts: Integer);
procedure TAutoCorrForm.MovingAverage(var Pts: DblDyneVec; NoPts: Integer);
var
F: TMoveAvgFrm;
i, j: Integer;
@ -1346,7 +1347,7 @@ begin
end;
end;
procedure TAutoCorrFrm.PlotDifferencesForLag(var Pts: DblDyneVec; NoPts: Integer);
procedure TAutoCorrForm.PlotDifferencesForLag(var Pts: DblDyneVec; NoPts: Integer);
var
F: TDifferenceFrm;
lag: Integer;
@ -1415,7 +1416,7 @@ begin
end;
end;
procedure TAutoCorrFrm.PolynomialSmooth(var Pts: DblDyneVec; NoPts: Integer);
procedure TAutoCorrForm.PolynomialSmooth(var Pts: DblDyneVec; NoPts: Integer);
var
F: TPolynomialFrm;
noProj: Integer;
@ -1494,7 +1495,7 @@ begin
end;
end;
procedure TAutoCorrFrm.RemoveMeans(var Pts: DblDyneVec; NoPts: Integer; AMean: Double);
procedure TAutoCorrForm.RemoveMeans(var Pts: DblDyneVec; NoPts: Integer; AMean: Double);
var
i: Integer;
begin
@ -1503,8 +1504,5 @@ begin
end;
initialization
{$I autocorunit.lrs}
end.

View File

@ -13,7 +13,7 @@ object DiscrimFrm: TDiscrimFrm
OnCreate = FormCreate
OnShow = FormShow
Position = poMainFormCenter
LCLVersion = '2.1.0.0'
LCLVersion = '2.0.10.0'
object ResetBtn: TButton
AnchorSideRight.Control = ComputeBtn
AnchorSideBottom.Control = Owner
@ -73,7 +73,7 @@ object DiscrimFrm: TDiscrimFrm
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
AnchorSideRight.Control = Panel2
AnchorSideBottom.Control = Bevel1
AnchorSideBottom.Control = ButtonBevel
Left = 8
Height = 400
Top = 8
@ -371,7 +371,7 @@ object DiscrimFrm: TDiscrimFrm
TabOrder = 6
end
end
object Bevel1: TBevel
object ButtonBevel: TBevel
AnchorSideLeft.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
@ -387,7 +387,7 @@ object DiscrimFrm: TDiscrimFrm
AnchorSideTop.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Bevel1
AnchorSideBottom.Control = ButtonBevel
Left = 412
Height = 408
Top = 0

View File

@ -17,7 +17,7 @@ type
{ TDiscrimFrm }
TDiscrimFrm = class(TForm)
Bevel1: TBevel;
ButtonBevel: TBevel;
Panel1: TPanel;
Panel2: TPanel;
ResetBtn: TButton;

View File

@ -1,84 +1,59 @@
object HierarchFrm: THierarchFrm
inherited HierarchForm: THierarchForm
Left = 415
Height = 319
Height = 437
Top = 211
Width = 442
Width = 717
HelpType = htKeyword
HelpKeyword = 'html/HierarchicalAnalysis.htm'
AutoSize = True
Caption = 'Hierarchical Cluster Analysis'
ClientHeight = 319
ClientWidth = 442
OnActivate = FormActivate
OnCreate = FormCreate
OnShow = FormShow
Position = poMainFormCenter
LCLVersion = '2.1.0.0'
object Label1: TLabel
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
Left = 8
Height = 15
Top = 8
Width = 97
BorderSpacing.Left = 8
BorderSpacing.Top = 8
Caption = 'Available Variables'
ParentColor = False
ClientHeight = 437
ClientWidth = 717
inherited ParamsPanel: TPanel
Height = 421
ClientHeight = 421
inherited CloseBtn: TButton
Top = 396
TabOrder = 8
end
object Label2: TLabel
AnchorSideLeft.Control = PredList
AnchorSideTop.Control = Owner
Left = 228
Height = 15
Top = 8
Width = 97
BorderSpacing.Top = 8
Caption = 'Predictor Variables'
ParentColor = False
inherited ComputeBtn: TButton
Top = 396
TabOrder = 7
end
object VarList: TListBox
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Label1
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = PredIn
AnchorSideBottom.Control = Bevel1
Left = 8
Height = 245
Top = 25
Width = 176
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 8
BorderSpacing.Top = 2
BorderSpacing.Right = 8
ItemHeight = 0
MultiSelect = True
OnSelectionChange = VarListSelectionChange
TabOrder = 0
inherited ResetBtn: TButton
Top = 396
TabOrder = 6
end
object PredIn: TBitBtn
inherited HelpBtn: TButton
Top = 396
TabOrder = 5
end
inherited ButtonBevel: TBevel
Top = 380
end
object PredIn: TBitBtn[5]
AnchorSideLeft.Control = ParamsPanel
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = VarList
AnchorSideRight.Control = GroupBox1
Left = 192
Height = 28
Top = 25
Width = 28
Anchors = [akTop, akRight]
BorderSpacing.Right = 8
AnchorSideRight.Control = OptionsGroup
Left = 132
Height = 26
Top = 17
Width = 26
Images = MainDataModule.ImageList
ImageIndex = 1
OnClick = PredInClick
Spacing = 0
TabOrder = 1
end
object PredOut: TBitBtn
AnchorSideLeft.Control = PredIn
object PredOut: TBitBtn[6]
AnchorSideLeft.Control = ParamsPanel
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = PredIn
AnchorSideTop.Side = asrBottom
Left = 192
Height = 28
Top = 57
Width = 28
Left = 132
Height = 26
Top = 47
Width = 26
BorderSpacing.Top = 4
Images = MainDataModule.ImageList
ImageIndex = 0
@ -86,46 +61,87 @@ object HierarchFrm: THierarchFrm
Spacing = 0
TabOrder = 2
end
object PredList: TListBox
AnchorSideLeft.Control = GroupBox1
AnchorSideTop.Control = Label2
object Label1: TLabel[7]
AnchorSideLeft.Control = ParamsPanel
AnchorSideTop.Control = ParamsPanel
Left = 0
Height = 15
Top = 0
Width = 97
Caption = 'Available Variables'
ParentColor = False
end
object Label2: TLabel[8]
AnchorSideLeft.Control = PredList
AnchorSideTop.Control = ParamsPanel
Left = 164
Height = 15
Top = 0
Width = 97
Caption = 'Predictor Variables'
ParentColor = False
end
object VarList: TListBox[9]
AnchorSideLeft.Control = ParamsPanel
AnchorSideTop.Control = Label1
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = GroupBox1
Left = 228
Height = 62
Top = 25
Width = 206
AnchorSideRight.Control = PredIn
AnchorSideBottom.Control = OptionsGroup
Left = 0
Height = 180
Top = 17
Width = 126
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Top = 2
BorderSpacing.Right = 8
BorderSpacing.Right = 6
BorderSpacing.Bottom = 8
ItemHeight = 0
MultiSelect = True
OnDblClick = VarListDblClick
OnSelectionChange = VarListSelectionChange
TabOrder = 0
end
object PredList: TListBox[10]
AnchorSideLeft.Control = PredIn
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Label2
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ParamsPanel
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = VarList
AnchorSideBottom.Side = asrBottom
Left = 164
Height = 180
Top = 17
Width = 127
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 6
BorderSpacing.Top = 2
ItemHeight = 0
MultiSelect = True
OnDblClick = PredListDblClick
OnSelectionChange = VarListSelectionChange
TabOrder = 3
end
object GroupBox1: TGroupBox
AnchorSideLeft.Control = PredIn
AnchorSideLeft.Side = asrBottom
object OptionsGroup: TGroupBox[11]
AnchorSideLeft.Control = ParamsPanel
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Bevel1
Left = 228
AnchorSideBottom.Control = ButtonBevel
Left = 0
Height = 175
Top = 95
Width = 206
Anchors = [akRight, akBottom]
Top = 205
Width = 226
Anchors = [akLeft, akBottom]
AutoSize = True
BorderSpacing.Right = 8
Caption = 'Options'
ClientHeight = 155
ClientWidth = 202
ClientWidth = 222
TabOrder = 4
object STDChk: TCheckBox
AnchorSideLeft.Control = GroupBox1
AnchorSideTop.Control = GroupBox1
AnchorSideLeft.Control = OptionsGroup
AnchorSideTop.Control = OptionsGroup
Left = 12
Height = 19
Top = 2
@ -139,16 +155,17 @@ object HierarchFrm: THierarchFrm
AnchorSideLeft.Control = STDChk
AnchorSideTop.Control = STDChk
AnchorSideTop.Side = asrBottom
Left = 12
Left = 32
Height = 19
Top = 23
Width = 123
BorderSpacing.Left = 20
BorderSpacing.Top = 2
Caption = 'Replace Grid Values'
TabOrder = 1
end
object StatsChk: TCheckBox
AnchorSideLeft.Control = GroupBox1
AnchorSideLeft.Control = OptionsGroup
AnchorSideTop.Control = ReplaceChk
AnchorSideTop.Side = asrBottom
Left = 12
@ -161,7 +178,7 @@ object HierarchFrm: THierarchFrm
TabOrder = 2
end
object PlotChk: TCheckBox
AnchorSideLeft.Control = GroupBox1
AnchorSideLeft.Control = OptionsGroup
AnchorSideTop.Control = StatsChk
AnchorSideTop.Side = asrBottom
Left = 12
@ -174,20 +191,20 @@ object HierarchFrm: THierarchFrm
TabOrder = 3
end
object MaxGrpsChk: TCheckBox
AnchorSideLeft.Control = GroupBox1
AnchorSideLeft.Control = OptionsGroup
AnchorSideTop.Control = PlotChk
AnchorSideTop.Side = asrBottom
Left = 12
Height = 19
Top = 86
Width = 141
Width = 148
BorderSpacing.Left = 12
BorderSpacing.Top = 2
Caption = 'Maximum No. Groups:'
Caption = 'Max Number of Groups:'
TabOrder = 4
end
object MembersChk: TCheckBox
AnchorSideLeft.Control = GroupBox1
AnchorSideLeft.Control = OptionsGroup
AnchorSideTop.Control = MaxGrpsChk
AnchorSideTop.Side = asrBottom
Left = 12
@ -200,7 +217,7 @@ object HierarchFrm: THierarchFrm
TabOrder = 6
end
object VarChk: TCheckBox
AnchorSideLeft.Control = GroupBox1
AnchorSideLeft.Control = OptionsGroup
AnchorSideTop.Control = MembersChk
AnchorSideTop.Side = asrBottom
Left = 12
@ -218,10 +235,10 @@ object HierarchFrm: THierarchFrm
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = MaxGrpsChk
AnchorSideTop.Side = asrCenter
Left = 157
Left = 164
Height = 23
Top = 84
Width = 37
Width = 50
Alignment = taRightJustify
BorderSpacing.Left = 4
BorderSpacing.Right = 8
@ -229,71 +246,24 @@ object HierarchFrm: THierarchFrm
Text = 'MaxGrps'
end
end
object ResetBtn: TButton
AnchorSideRight.Control = ComputeBtn
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 233
Height = 25
Top = 286
Width = 54
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'Reset'
OnClick = ResetBtnClick
TabOrder = 5
end
object ComputeBtn: TButton
AnchorSideRight.Control = CloseBtn
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 295
Height = 25
Top = 286
Width = 76
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'Compute'
OnClick = ComputeBtnClick
TabOrder = 6
inherited ParamsSplitter: TSplitter
Height = 437
end
object CloseBtn: TButton
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 379
Height = 25
Top = 286
Width = 55
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'Close'
ModalResult = 11
TabOrder = 7
inherited PageControl: TPageControl
Height = 421
Width = 397
ActivePage = StatsPage
inherited ReportPage: TTabSheet
Caption = 'Results'
end
object StatsPage: TTabSheet[1]
Caption = 'Descriptive Stats'
TabVisible = False
end
inherited ChartPage: TTabSheet[2]
Caption = 'Groups Count vs. Errors Plot'
TabVisible = False
end
object Bevel1: TBevel
AnchorSideLeft.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = CloseBtn
Left = 0
Height = 8
Top = 270
Width = 442
Anchors = [akLeft, akRight, akBottom]
Shape = bsBottomLine
end
end

View File

@ -1,25 +1,27 @@
// Sample file for testing: cansas.laz, use all variiables.
// WARNING: THE OUTPUT OF THIS FORM DOES NOT AGREE WITH THE SAME FORM OF
// OPENSTAT OR STATS4U
unit HierarchUnit;
{$mode objfpc}{$H+}
{$DEFINE OLD_PLOT}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, Buttons, ExtCtrls,
MainUnit, OutputUnit, Globals, MatrixLib, GraphLib, DataProcs;
Classes, SysUtils, Forms, Controls, Graphics, Dialogs,
StdCtrls, Buttons, ExtCtrls, ComCtrls,
{$IFDEF OLD_PLOT} GraphLib, {$ENDIF}
MainUnit, Globals, MatrixLib, ReportFrameUnit, BasicStatsReportAndChartFormUnit;
type
{ THierarchFrm }
{ THierarchForm }
THierarchFrm = class(TForm)
Bevel1: TBevel;
ResetBtn: TButton;
ComputeBtn: TButton;
CloseBtn: TButton;
THierarchForm = class(TBasicStatsReportAndChartForm)
MaxGrps: TEdit;
STDChk: TCheckBox;
ReplaceChk: TCheckBox;
@ -27,117 +29,111 @@ type
PlotChk: TCheckBox;
MaxGrpsChk: TCheckBox;
MembersChk: TCheckBox;
StatsPage: TTabSheet;
VarChk: TCheckBox;
GroupBox1: TGroupBox;
OptionsGroup: TGroupBox;
PredIn: TBitBtn;
PredOut: TBitBtn;
Label1: TLabel;
Label2: TLabel;
PredList: TListBox;
VarList: TListBox;
procedure ComputeBtnClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure PredInClick(Sender: TObject);
procedure PredListDblClick(Sender: TObject);
procedure PredOutClick(Sender: TObject);
procedure ResetBtnClick(Sender: TObject);
procedure VarListDblClick(Sender: TObject);
procedure VarListSelectionChange(Sender: TObject; {%H-}User: boolean);
private
{ private declarations }
FAutoSized: Boolean;
procedure UpdateBtnStates;
FStatsReportFrame: TReportFrame;
procedure Plot_GroupCount_Error(const AGrpCount, AError: DblDyneVec;
ADataCount: Integer);
procedure ShowDescriptiveStats(const AMeans, AVars, AStdDevs: DblDyneVec;
ANumCols, ANumCases: Integer; const AVarLabels: StrDyneVec);
protected
procedure AdjustConstraints; override;
procedure Compute; override;
procedure UpdateBtnStates; override;
function Validate(out AMsg: String; out AControl: TWincontrol): Boolean; override;
public
{ public declarations }
constructor Create(AOwner: TComponent); override;
procedure Reset; override;
end;
var
HierarchFrm: THierarchFrm;
HierarchForm: THierarchForm;
implementation
{$R *.lfm}
uses
Math, Utils;
TAChartUtils, TACustomSeries,
Utils, DataProcs, ChartFrameUnit;
{ THierarchFrm }
procedure THierarchFrm.ResetBtnClick(Sender: TObject);
var
i: integer;
{ THierarchForm }
constructor THierarchForm.Create(AOwner: TComponent);
begin
VarList.Clear;
PredList.Clear;
StdChk.Checked := false;
ReplaceChk.Checked := false;
StatsChk.Checked := false;
PlotChk.Checked := false;
MaxGrpsChk.Checked := false;
VarChk.Checked := false;
MaxGrps.Text := '';
for i := 1 to NoVariables do
VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
UpdateBtnStates;
end;
inherited;
procedure THierarchFrm.FormActivate(Sender: TObject);
var
w: Integer;
begin
if FAutoSized then
exit;
InitToolbar(FReportFrame.ReportToolbar, tpTop);
FReportFrame.ClearBorderSpacings;
w := MaxValue([ResetBtn.Width, ComputeBtn.Width, CloseBtn.Width]);
ResetBtn.Constraints.MinWidth := w;
ComputeBtn.Constraints.MinWidth := w;
CloseBtn.Constraints.MinWidth := w;
VarList.Constraints.MinWidth := PredList.Width;
FStatsReportFrame := TReportFrame.Create(self);
FStatsReportFrame.Parent := StatsPage;
FStatsReportFrame.Align := alClient;
StatsPage.PageIndex := 1;
Constraints.MinWidth := Width;
Constraints.MinHeight := Height;
FAutoSized := true;
end;
procedure THierarchFrm.FormCreate(Sender: TObject);
begin
Assert(OS3MainFrm <> nil);
{$IFDEF OLD_PLOTS}
if GraphFrm = nil then
Application.CreateForm(TGraphFrm, GraphFrm);
{$ENDIF}
PageControl.ActivePageIndex := 0;
end;
procedure THierarchFrm.FormShow(Sender: TObject);
procedure THierarchForm.AdjustConstraints;
begin
ResetBtnClick(self);
inherited;
ParamsPanel.Constraints.MinWidth := 4*CloseBtn.Width + 3*CloseBtn.BorderSpacing.Left;
ParamsPanel.Constraints.MinHeight := PredOut.Top + PredOut.Height +
VarList.BorderSpacing.Bottom + OptionsGroup.Height +
ButtonBevel.Height + CloseBtn.Height;
end;
procedure THierarchFrm.ComputeBtnClick(Sender: TObject);
procedure THierarchForm.Compute;
label next1;
var
varlabels, rowlabels : StrDyneVec;
cellstring : string;
varLabels: StrDyneVec = nil;
rowLabels: StrDyneVec = nil;
w2: IntDyneVec = nil;
k4: IntDyneVec = nil;
k5: IntDyneVec = nil;
L1: IntDyneVec = nil;
ColSelected: IntDyneVec = nil;
W: DblDyneVec = nil;
XAxis: DblDyneVec = nil;
YAxis: DblDyneVec = nil;
means: DblDyneVec = nil;
variances: DblDyneVec = nil;
stddevs: DblDyneVec = nil;
Distance : DblDyneMat = nil;
cellstring: string;
i, j, k, k1, k3, L, w3, n3, n4, n5, M, col, count: integer;
GrpCnt, Nrows, Ncols, NoSelected: integer;
w2, k4, k5, L1 : IntDyneVec;
ColSelected : IntDyneVec = nil;
X, Y, d1, x1, MaxError : double;
W, XAxis, YAxis, means, variances, stddevs : DblDyneVec;
Distance : DblDyneMat = nil;
X, Y, d1, x1, MaxError: double;
lReport: TStrings;
begin
if MaxGrpsChk.Checked then
begin
if MaxGrps.Text = '' then
begin
MessageDlg('Maximum number of groups not specified.', mtError, [mbOK], 0);
exit;
end;
if not TryStrToInt(MaxGrps.Text, k1) or (k1 < 1) then
begin
Messagedlg('No valid number of groups given.', mtError, [mbOK], 0);
exit;
end;
end;
MaxError := 0.0;
GrpCnt := 0;
NoSelected := PredList.Items.Count;
@ -157,9 +153,10 @@ begin
SetLength(varlabels,NoSelected);
SetLength(rowlabels,NoCases);
SetLength(ColSelected,NoSelected);
Ncols := NoSelected;
Nrows := NoCases;
for i := 0 to Ncols - 1 do
nCols := NoSelected;
nRows := NoCases;
for i := 0 to nCols - 1 do
begin
cellstring := PredList.Items.Strings[i];
for j := 1 to NoVariables do
@ -191,7 +188,7 @@ begin
Ncols := NoCases;
Nrows := NoSelected;
//Get labels of selected variables
for i := 0 to Nrows - 1 do
for i := 0 to nRows - 1 do
begin
cellstring := PredList.Items.Strings[i];
for j := 1 to NoVariables do
@ -207,23 +204,29 @@ begin
varlabels[i] := IntToStr(i);
end;
if MembersChk.Checked then k3 := 1 else k3 := 0;
if MaxGrpsChk.Checked then
k1 := StrToInt(MaxGrps.Text);
for j := 0 to Ncols-1 do
if MembersChk.Checked then
k3 := 1
else
k3 := 0;
for j := 0 to nCols-1 do
begin
means[j] := 0.0;
variances[j] := 0.0;
stddevs[j] := 0.0;
end;
if VarChk.Checked = false then
if not VarChk.Checked then
begin
// Get labels of rows
// for i := 1 to Nrows do rowlabels[i-1] := MainFrm.Grid.Cells[0,i];
// Get data into the distance matrix
count := 0;
for i := 1 to Nrows do
for i := 1 to nRows do
begin
if (not GoodRecord(i,NoSelected,ColSelected)) then continue;
count := count + 1;
@ -243,31 +246,38 @@ begin
// Get data into the distance matrix
count := 0;
for i := 1 to Nrows do // actually grid column in this case
for i := 0 to nRows-1 do // actually grid column in this case
begin
// if (not GoodRecord(i,NoSelected,ColSelected)) then continue;
count := count + 1;
for j := 1 to Ncols do // actually grid rows in this case
for j := 0 to Ncols-1 do // actually grid rows in this case
begin
// if (not GoodRecord(j,NoSelected,ColSelected)) then continue;
col := ColSelected[i-1];
X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col,j]));
means[j-1] := means[j-1] + X;
variances[j-1] := variances[j-1] + (X * X);
Distance[i-1,j-1] := X;
col := ColSelected[i];
X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col, j+1]));
means[j] := means[j] + X;
variances[j] := variances[j] + (X * X);
Distance[i, j] := X;
end;
end;
end;
// Calculate means and standard deviations of variables
for j := 0 to Ncols-1 do
for j := 0 to nCols-1 do
begin
variances[j] := variances[j] - (means[j] * means[j] / count);
variances[j] := variances[j] / (count - 1);
variances[j] := (variances[j] - sqr(means[j]) / count) / (count - 1);
stddevs[j] := sqrt(variances[j]);
means[j] := means[j] / count;
end;
// Report descriptive statistics
if StatsChk.Checked then
begin
StatsPage.TabVisible := true;
ShowDescriptiveStats(means, variances, stddevs, nCols, count, varlabels);
end else
StatsPage.TabVisible := false;
// Ready the output form
lReport := TStringList.Create;
try
@ -276,33 +286,24 @@ begin
lReport.Add('Number of objects to cluster: %d on %d variables.', [Nrows, Ncols]);
lReport.Add('');
if StatsChk.Checked then
begin
DynVectorPrint(means, Ncols, 'Variable Means', varlabels, count, lReport);
DynVectorPrint(variances, Ncols, 'Variable Variances', varlabels, count, lReport);
DynVectorPrint(stddevs, Ncols, 'Variable Standard Deviations', varlabels, count, lReport);
lReport.Add(DIVIDER);
lReport.Add('');
end;
// Standardize the distance scores if elected
if StdChk.Checked then
begin
for j := 0 to Ncols-1 do
for i := 0 to Nrows-1 do
for j := 0 to nCols-1 do
for i := 0 to nRows-1 do
Distance[i,j] := (Distance[i,j] - means[j]) / stddevs[j];
end;
// replace original values in grid with z scores if elected
if ReplaceChk.Checked then
begin
for i := 1 to Nrows do
for i := 0 to nRows-1 do
begin
if not GoodRecord(i,NoSelected,ColSelected) then continue;
for j := 1 to Ncols do
if not GoodRecord(i+1, NoSelected, ColSelected) then continue;
for j := 0 to nCols-1 do
begin
col := ColSelected[j-1];
OS3MainFrm.DataGrid.Cells[col,i] := Format('%6.4f', [Distance[i-1,j-1]]);
col := ColSelected[j];
OS3MainFrm.DataGrid.Cells[col, i+1] := Format('%6.4f', [Distance[i, j]]);
end;
end;
end;
@ -327,14 +328,10 @@ begin
// Now, group the cases for maximum groups down
if MaxGrpsChk.Checked then
begin
k1 := StrToInt(MaxGrps.Text);
n3 := Nrows;
end else
begin
k1 := StrToInt(MaxGrps.Text)
else
k1 := 2;
n3 := Nrows;
end;
n3 := nRows;
// Initialize group membership and group-n vectors
for i := 0 to Nrows-1 do
@ -346,11 +343,15 @@ begin
// Locate optimal combination, if more than 2 groups remain
next1:
n3 := n3 - 1;
if (n3 > 1) then
begin
//repeat;
// n3 := n3 - 1;
x1 := 100000000000.0;
for i := 1 to Nrows do
begin
@ -374,9 +375,10 @@ next1:
n4 := w2[L-1];
n5 := w2[M-1];
XAxis[GrpCnt] := n3;
YAxis[GrpCnt] := x1;
GrpCnt := GrpCnt + 1;
XAxis[GrpCnt-1] := n3;
YAxis[GrpCnt-1] := x1;
if (x1 > MaxError) then MaxError := x1;
lReport.Add('%2.d groups after combining group %2.d (n = %2.d) and group %2.d (n = %2.d), error: %7.3f', [n3, L, n4, M, n5, x1]);
@ -406,10 +408,13 @@ next1:
end;
end;
w2[L-1] := w3;
if (n3 > k1) then goto next1;
if (n3 > k1) then
//Continue;
goto next1;
// print group memberships of all objects, if optioned
for i := 1 to Nrows do
// Print group memberships of all objects, if optioned
lReport.Add('');
for i := 1 to nRows do
begin
if (k5[i-1] = i) then
begin
@ -431,13 +436,19 @@ next1:
end; // end if
end; // end if
end; // next i
lReport.Add('');
goto next1;
//until n3 = 2;
end; // end if
DisplayReport(lReport);
FReportFrame.DisplayReport(lReport);
if PlotChk.Checked then
begin
ChartPage.TabVisible := true;
Plot_GroupCount_Error(XAxis, YAxis, GrpCnt);
{$IFDEF OLD_PLOTS}
SetLength(GraphFrm.Ypoints,1,GrpCnt);
SetLength(GraphFrm.Xpoints,1,GrpCnt);
for i := 1 to GrpCnt do
@ -458,30 +469,38 @@ next1:
GraphFrm.BackColor := clCream;
GraphFrm.ShowBackWall := true;
GraphFrm.ShowModal;
end;
{$ENDIF}
end else
ChartPage.TabVisible := false;
finally
lReport.Free;
ColSelected := nil;
rowlabels := nil;
varlabels := nil;
Distance := nil;
stddevs := nil;
variances := nil;
means := nil;
YAxis := nil;
XAxis := nil;
W := nil;
L1 := nil;
k5 := nil;
k4 := nil;
w2 := nil;
GraphFrm.Xpoints := nil;
GraphFrm.Ypoints := nil;
end;
end;
procedure THierarchFrm.PredInClick(Sender: TObject);
procedure THierarchForm.Plot_GroupCount_Error(const AGrpCount, AError: DblDyneVec;
ADataCount: Integer);
var
ser: TChartSeries;
i: Integer;
begin
FChartFrame.Clear;
FChartFrame.SetTitle('Number of Groups vs. Grouping Error');
FChartFrame.SetXTitle('Number of Groups');
FChartFrame.SetYTitle('Grouping Error');
ser := FChartFrame.PlotXY(ptSymbols, nil, nil, nil, nil, '', DATA_COLORS[0]);
for i := 0 to ADataCount-1 do
ser.AddXY(i, AError[i], Format('%.0f', [AGrpCount[i]]));
FChartFrame.Chart.BottomAxis.Marks.Source := ser.Source;
FChartFrame.Chart.BottomAxis.Marks.Style := smsLabel;
FChartFrame.Chart.Legend.Visible := false;
end;
procedure THierarchForm.PredInClick(Sender: TObject);
var
i: integer;
begin
@ -499,7 +518,22 @@ begin
UpdateBtnStates;
end;
procedure THierarchFrm.PredOutClick(Sender: TObject);
procedure THierarchForm.PredListDblClick(Sender: TObject);
var
index: Integer;
begin
index := PredList.ItemIndex;
if index > -1 then
begin
VarList.Items.Add(PredList.Items[index]);
PredList.Items.Delete(index);
UpdateBtnStates;
end;
end;
procedure THierarchForm.PredOutClick(Sender: TObject);
var
i: integer;
begin
@ -517,19 +551,125 @@ begin
UpdateBtnStates;
end;
procedure THierarchFrm.UpdateBtnStates;
procedure THierarchForm.Reset;
var
i: integer;
begin
inherited;
if FStatsReportFrame <> nil then
FStatsReportFrame.Clear;
VarList.Clear;
for i := 1 to NoVariables do
VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
PredList.Clear;
StdChk.Checked := false;
ReplaceChk.Checked := false;
StatsChk.Checked := false;
PlotChk.Checked := false;
MaxGrpsChk.Checked := false;
VarChk.Checked := false;
MaxGrps.Clear;
UpdateBtnStates;
end;
procedure THierarchForm.ShowDescriptiveStats(const AMeans, AVars, AStdDevs: DblDyneVec;
ANumCols, ANumCases: Integer; const AVarLabels: StrDyneVec);
var
lReport: TStrings;
begin
lReport := TStringList.Create;
try
DynVectorPrint(AMeans, ANumCols, 'Variable Means', AVarLabels, ANumCases, lReport);
lReport.Add(DIVIDER_SMALL_AUTO);
lReport.Add('');
DynVectorPrint(AVars, ANumCols, 'Variable Variances', AVarLabels, ANumCases, lReport);
lReport.Add(DIVIDER_SMALL_AUTO);
lReport.Add('');
DynVectorPrint(AStdDevs, ANumCols, 'Variable Standard Deviations', AVarLabels, ANumCases, lReport);
FStatsReportFrame.DisplayReport(lReport);
finally
lReport.Free;
end;
end;
procedure THierarchForm.UpdateBtnStates;
begin
inherited;
if FStatsReportFrame <> nil then
FStatsReportFrame.UpdateBtnStates;
PredIn.Enabled := AnySelected(VarList);
PredOut.Enabled := AnySelected(PredList);
end;
procedure THierarchFrm.VarListSelectionChange(Sender: TObject; User: boolean);
function THierarchForm.Validate(out AMsg: String; out AControl: TWincontrol): Boolean;
var
n: Integer;
begin
Result := false;
if PredList.Items.Count = 0 then
begin
AMsg := 'No Predictor Variables selected.';
AControl := VarList;
exit;
end;
if MaxGrpsChk.Checked then
begin
if MaxGrps.Text = '' then
begin
AMsg := 'Maximum number of groups not specified.';
AControl := MaxGrps;
exit;
end;
if not TryStrToInt(MaxGrps.Text, n) or (n < 1) then
begin
AMsg := 'No valid number of groups given.';
AControl := MaxGrps;
exit;
end;
end;
Result := true;
end;
procedure THierarchForm.VarListDblClick(Sender: TObject);
var
index: Integer;
s: String;
begin
index := VarList.ItemIndex;
if index > -1 then
begin
PredList.Items.Add(VarList.Items[index]);
VarList.Items.Delete(index);
UpdateBtnStates;
end;
end;
procedure THierarchForm.VarListSelectionChange(Sender: TObject; User: boolean);
begin
UpdateBtnStates;
end;
initialization
{$I hierarchunit.lrs}
end.

View File

@ -599,23 +599,23 @@ object OS3MainFrm: TOS3MainFrm
OnClick = mnuAnalysisComp_LatinSquaresClick
end
end
object mnuAnalysisCorrel: TMenuItem
object mnuAnalysisCorr: TMenuItem
Caption = 'Correlation'
object mnuAnalysisCorrel_ProductMoment: TMenuItem
object mnuAnalysisCorr_ProductMoment: TMenuItem
Caption = 'Product-Moment'
OnClick = mnuAnalysisCorrel_ProductMomentClick
OnClick = mnuAnalysisCorr_ProductMomentClick
end
object mnuAnalysisCorrel_Partial: TMenuItem
object mnuAnalysisCorr_Partial: TMenuItem
Caption = 'Partial, Semipartial'
OnClick = mnuAnalysisCorrel_PartialClick
OnClick = mnuAnalysisCorr_PartialClick
end
object mnuAnalysisCorrel_AutoCorr: TMenuItem
object mnuAnalysisCorr_AutoCorr: TMenuItem
Caption = 'Autocorrelation'
OnClick = mnuAnalysisCorrel_AutoCorrClick
OnClick = mnuAnalysisCorr_AutoCorrClick
end
object mnuAnalysisCorrel_Canonical: TMenuItem
object mnuAnalysisCorr_Canonical: TMenuItem
Caption = 'Canonical'
OnClick = mnuAnalysisCorrel_CanonicalClick
OnClick = mnuAnalysisCorr_CanonicalClick
end
end
object mnuAnalysisMultReg: TMenuItem

View File

@ -85,11 +85,11 @@ type
mnuAnalysisComp_WithinAnova: TMenuItem;
// Menu "Analysis" > "Correlation"
mnuAnalysisCorrel: TMenuItem;
mnuAnalysisCorrel_ProductMoment: TMenuItem;
mnuAnalysisCorrel_Partial: TMenuItem;
mnuAnalysisCorrel_AutoCorr: TMenuItem;
mnuAnalysisCorrel_Canonical: TMenuItem;
mnuAnalysisCorr: TMenuItem;
mnuAnalysisCorr_ProductMoment: TMenuItem;
mnuAnalysisCorr_Partial: TMenuItem;
mnuAnalysisCorr_AutoCorr: TMenuItem;
mnuAnalysisCorr_Canonical: TMenuItem;
// Menu "Analysis" > "Descriptive"
mnuAnalysisDescr: TMenuItem;
@ -351,10 +351,10 @@ type
procedure mnuAnalysisComp_WithinAnovaClick(Sender: TObject);
// Menu "Analysis" > "Correlation"
procedure mnuAnalysisCorrel_AutoCorrClick(Sender: TObject);
procedure mnuAnalysisCorrel_CanonicalClick(Sender: TObject);
procedure mnuAnalysisCorrel_PartialClick(Sender: TObject);
procedure mnuAnalysisCorrel_ProductMomentClick(Sender: TObject);
procedure mnuAnalysisCorr_AutoCorrClick(Sender: TObject);
procedure mnuAnalysisCorr_CanonicalClick(Sender: TObject);
procedure mnuAnalysisCorr_PartialClick(Sender: TObject);
procedure mnuAnalysisCorr_ProductMomentClick(Sender: TObject);
// Menu "Analysis" > "Descriptive"
procedure mnuAnalysisDescr_BoxPlotClick(Sender: TObject);
@ -768,9 +768,9 @@ end;
// Menu "Analysis" > "Multivariate" > "Hierarchical Analysis"
procedure TOS3MainFrm.mnuAnalysisMulti_HierarchicalClick(Sender: TObject);
begin
if HierarchFrm = nil then
Application.CreateForm(THierarchFrm, HierarchFrm);
HierarchFrm.ShowModal;
if HierarchForm = nil then
Application.CreateForm(THierarchForm, HierarchForm);
HierarchForm.Show;
end;
// Menu "Analysis" > "Multivariate" > "Path analysis"
@ -1665,7 +1665,7 @@ end;
{ "Correlation" commands }
// Menu "Correlation" > "Product-Moment"
procedure TOS3MainFrm.mnuAnalysisCorrel_ProductMomentClick(Sender: TObject);
procedure TOS3MainFrm.mnuAnalysisCorr_ProductMomentClick(Sender: TObject);
begin
if RMatForm = nil then
Application.CreateForm(TRMatForm, RMatForm);
@ -1673,7 +1673,7 @@ begin
end;
// Menu "Correlation" > "Partial, Semipartial"
procedure TOS3MainFrm.mnuAnalysisCorrel_PartialClick(Sender: TObject);
procedure TOS3MainFrm.mnuAnalysisCorr_PartialClick(Sender: TObject);
begin
if PartialsForm = nil then
Application.CreateForm(TPartialsForm, PartialsForm);
@ -1681,15 +1681,15 @@ begin
end;
// Menu "Correlation" > "Autocorrelation"
procedure TOS3MainFrm.mnuAnalysisCorrel_AutoCorrClick(Sender: TObject);
procedure TOS3MainFrm.mnuAnalysisCorr_AutoCorrClick(Sender: TObject);
begin
if AutoCorrFrm = nil then
Application.CreateForm(TAutoCorrFrm, AutoCorrFrm);
AutocorrFrm.Show;
if AutoCorrForm = nil then
Application.CreateForm(TAutoCorrForm, AutoCorrForm);
AutocorrForm.Show;
end;
// Menu "Correlation" > "Canonical"
procedure TOS3MainFrm.mnuAnalysisCorrel_CanonicalClick(Sender: TObject);
procedure TOS3MainFrm.mnuAnalysisCorr_CanonicalClick(Sender: TObject);
begin
if CanonicalForm = nil then
Application.CreateForm(TCanonicalForm, CanonicalForm);