LazStats: Inherit BNestAUnit from BasicStatsReportAndChartForm. Refactor. Add test data file from OpenStat samples. Refine ABCNestedUnit.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7866 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2020-11-13 17:49:49 +00:00
parent a6ac93ef34
commit 817793a779
8 changed files with 1077 additions and 847 deletions

View File

@ -71,4 +71,5 @@ correlation, means, standard deviations and confidence interval for each correla
167=Notes: This is a non-parametric analysis of ordinal data.\nIt is similar to a two-way Analysis of Variance but utilizes a chi-square statistic (H) for determining the significance of the row, column and interaction effects. The dependent value, if not initially rank data, may be obtained first by creating a new variable with the "transformation" procedure available under the "Variables" menu. The output of this procedure contains the results both of a "traditional" 2-way ANOVA as well as the SRH results.\nIt should be noted that the power of the SRH analysis is less than that of the traditional ANOVA. It is suggested that there be at least 5 or more cases in each cell and that the design is a balanced design of fixed levels.\nThe H statistic is obtained as the division of the sum of squares for an effect by the mean square of the total and the test is performed by a chi-squared probability with the degrees of freedom equal to the SS of the effect being tested. 167=Notes: This is a non-parametric analysis of ordinal data.\nIt is similar to a two-way Analysis of Variance but utilizes a chi-square statistic (H) for determining the significance of the row, column and interaction effects. The dependent value, if not initially rank data, may be obtained first by creating a new variable with the "transformation" procedure available under the "Variables" menu. The output of this procedure contains the results both of a "traditional" 2-way ANOVA as well as the SRH results.\nIt should be noted that the power of the SRH analysis is less than that of the traditional ANOVA. It is suggested that there be at least 5 or more cases in each cell and that the design is a balanced design of fixed levels.\nThe H statistic is obtained as the division of the sum of squares for an effect by the mean square of the total and the test is performed by a chi-squared probability with the degrees of freedom equal to the SS of the effect being tested.
168=This procedure lets you enter the number of observed values and the number of expected values for one or more categories.\nEnter the values as indicated and when finished, press the compute button. 168=This procedure lets you enter the number of observed values and the number of expected values for one or more categories.\nEnter the values as indicated and when finished, press the compute button.
169=Directions:\nFor independent groups data, first click the variable to be analyzed then click the variable containing group codes.\nFor dependent variables it is assumed the data for each pair of values are in a case.\nEnter the names of those two variables. 169=Directions:\nFor independent groups data, first click the variable to be analyzed then click the variable containing group codes.\nFor dependent variables it is assumed the data for each pair of values are in a case.\nEnter the names of those two variables.
170=Directions:\nThis analysis assumes that levels of Factor B are Nested within levels of Factor A. It is assumed that all factors are fixed level factors.\n\nThe variables for the group coding should be defined as integers. The dependent variable should be defined as a floating point variable. The number of cases for each ABC group should be equal and the number of B treatments in in each A level should be equal. The number of C treatment levels should be the same for each AB combination.\n\nClick the variable for each factor variable and the corresponding arrow to enter it in the edit box for that variable. Select the type of plot desired for the means (if any.) Click the Compute button to continue. 170=Directions:\nThis analysis assumes that levels of Factor B are nested within levels of Factor A. It is assumed that all factors are fixed level factors.\n\nThe variables for the group coding should be defined as integers. The dependent variable should be defined as a floating point variable. The number of cases for each ABC group should be equal and the number of B treatments in in each A level should be equal. The number of C treatment levels should be the same for each AB combination.\n\nClick the variable for each factor variable and the corresponding arrow to enter it in the edit box for that variable. Select the type of plot desired for the means (if any.) Click the Compute button to continue.
171=Directions: This analysis assumes that levels of Factor B are nested within levels of Factor A. Unless otherwise specified, it is assumed that Factors A and B are fixed level factors. If Factor B is a random variable, check the provided box to indicate this.\n\nThe number of cases for each B group should be equal and the number of B treatements in each A level should be equal.

View File

@ -0,0 +1,135 @@
27
3
A
VARIABLE 1
1
I
0
99999
L
B
VARIABLE 2
1
I
0
99999
L
Dep
VARIABLE 3
4
F
1
99999
L
Case 0
A
B
Dep
Case 1
1
1
1.00
Case 2
1
1
3.00
Case 3
1
1
4.00
Case 4
1
2
2.00
Case 5
1
2
3.00
Case 6
1
2
5.00
Case 7
1
3
3.00
Case 8
1
3
3.00
Case 9
1
3
6.00
Case 10
2
4
2.00
Case 11
2
4
4.00
Case 12
2
4
5.00
Case 13
2
5
3.00
Case 14
2
5
4.00
Case 15
2
5
5.00
Case 16
2
6
4.00
Case 17
2
6
5.00
Case 18
2
6
6.00
Case 19
3
7
3.00
Case 20
3
7
3.00
Case 21
3
7
5.00
Case 22
3
8
4.00
Case 23
3
8
5.00
Case 24
3
8
6.00
Case 25
3
9
6.00
Case 26
3
9
6.00
Case 27
3
9
7.00

View File

@ -0,0 +1,28 @@
A B Dep
1 1 1.00
1 1 3.00
1 1 4.00
1 2 2.00
1 2 3.00
1 2 5.00
1 3 3.00
1 3 3.00
1 3 6.00
2 4 2.00
2 4 4.00
2 4 5.00
2 5 3.00
2 5 4.00
2 5 5.00
2 6 4.00
2 6 5.00
2 6 6.00
3 7 3.00
3 7 3.00
3 7 5.00
3 8 4.00
3 8 5.00
3 8 6.00
3 9 6.00
3 9 6.00
3 9 7.00

View File

@ -1,7 +1,7 @@
inherited ABCNestedForm: TABCNestedForm inherited ABCNestedForm: TABCNestedForm
Left = 383 Left = 441
Height = 481 Height = 481
Top = 191 Top = 202
Width = 843 Width = 843
Caption = 'Three-Factor Nested ANOVA' Caption = 'Three-Factor Nested ANOVA'
ClientHeight = 481 ClientHeight = 481

View File

@ -123,8 +123,9 @@ implementation
{$R *.lfm} {$R *.lfm}
uses uses
Math,
TAChartUtils, TACustomSource, TALegend, TASeries, TAChartUtils, TACustomSource, TALegend, TASeries,
Utils, Math, MathUnit, MatrixUnit, GridProcs, ChartFrameUnit; Utils, MathUnit, MatrixUnit, GridProcs, ChartFrameUnit;
{ TABCNestedForm } { TABCNestedForm }
@ -140,6 +141,9 @@ begin
MeansPage.PageIndex := 1; MeansPage.PageIndex := 1;
FChartFrame.Chart.Margins.Bottom := 0; FChartFrame.Chart.Margins.Bottom := 0;
FChartFrame.Chart.BottomAxis.AxisPen.Visible := true;
FChartFrame.Chart.BottomAxis.ZPosition := 1;
FChartFrame.Chart.BottomAxis.Grid.Visible := false;
AddComboboxToToolbar(FChartFrame.ChartToolbar, 'Plots:', FChartCombobox); AddComboboxToToolbar(FChartFrame.ChartToolbar, 'Plots:', FChartCombobox);
FChartCombobox.OnSelect := @SelectPlot; FChartCombobox.OnSelect := @SelectPlot;
@ -391,78 +395,7 @@ begin
Result := true; Result := true;
end; end;
(*
SetLength(ColNoSelected, 4);
ACol := -1;
BCol := -1;
CCol := -1;
YCol := -1;
MinA := MaxInt;
MaxA := -MaxInt;
MinB := MaxInt;
MaxB := -MaxInt;
MinC := MaxInt;
MaxC := -MaxInt;
for i := 1 to NoVariables do
begin
strvalue := Trim(OS3MainFrm.DataGrid.Cells[i,0]);
if FactorAEdit.Text = strvalue then
begin
ACol := i;
ColNoSelected[0] := i;
end;
if FactorBEdit.Text = strvalue then
begin
BCol := i;
ColNoSelected[1] := i;
end;
if FactorCEdit.Text = strvalue then
begin
CCol := i;
ColNoSelected[2] := i;
end;
if DepEdit.Text = strvalue then
begin
YCol := i;
ColNoSelected[3] := i;
end;
end;
if (ACol = -1) or (BCol = -1) or (CCol = -1) or (YCol = -1) then
begin
MessageDlg('Select a variable for each entry box.', mtError, [mbOK], 0);
exit;
end;
// get number of levels for Factors
for i := 1 to NoCases do
begin
cellstring := Trim(OS3MainFrm.DataGrid.Cells[ACol,i]);
group := round(StrToFloat(cellstring));
if (group > MaxA) then MaxA := group;
if (group < MinA) then MinA := group;
cellstring := Trim(OS3MainFrm.DataGrid.Cells[BCol,i]);
group := round(StrToFLoat(cellstring));
if (group > MaxB) then MaxB := group;
if (group < MinB) then MinB := group;
cellstring := Trim(OS3MainFrm.DataGrid.Cells[CCol,i]);
group := round(StrToFLoat(cellstring));
if (group > MaxC) then MaxC := group;
if (group < MinC) then MinC := group;
end;
NoALevels := MaxA - MinA + 1;
NoBLevels := MaxB - MinB + 1;
NoCLevels := MaxC - MinC + 1;
Result := true;
end;
*)
{ Allocates memory for all arrays needed. Setting the dynamic arrays to nil
before allocation automatically resets the array contents. }
procedure TABCNestedForm.GetMemory; procedure TABCNestedForm.GetMemory;
begin begin
SS := CubeCreate(NoBLevels, NoALevels, NoCLevels); SS := CubeCreate(NoBLevels, NoALevels, NoCLevels);
@ -503,12 +436,10 @@ VAR
Aindex, Bindex, Cindex, i, j, k: integer; Aindex, Bindex, Cindex, i, j, k: integer;
YValue, YValueSqr: double; YValue, YValueSqr: double;
begin begin
// clear memory // Accumulate sums and sums of squared values
SSTot := 0.0; SSTot := 0.0;
SumSqrTot := 0.0; SumSqrTot := 0.0;
TotN := 0; TotN := 0;
// Accumulate sums and sums of squared values
for i := 0 to High(DepValues) do for i := 0 to High(DepValues) do
begin begin
AIndex := round(AValues[i]) - MinA; AIndex := round(AValues[i]) - MinA;
@ -637,51 +568,69 @@ begin
lReport.Add(''); lReport.Add('');
lReport.Add('CELL MEANS'); lReport.Add('CELL MEANS');
lReport.Add('A LEVEL BLEVEL CLEVEL MEAN STD.DEV.'); lReport.Add('-----------------------------------------------------');
lReport.Add('A LEVEL B LEVEL C LEVEL MEAN STD.DEV. ');
lReport.Add('------- ------- ------- ---------- ----------');
for i := 0 to NoALevels-1 do for i := 0 to NoALevels-1 do
for j := 0 to NoBLevels-1 do for j := 0 to NoBLevels-1 do
for k := 0 to NoCLevels-1 do for k := 0 to NoCLevels-1 do
if CellCount[j,i,k] > 0 then if CellCount[j,i,k] > 0 then
lReport.Add('%5d %5d %5d %10.4f %10.4f', [i+MinA, j+MinB, k+MinC, CellMeans[j,i,k], CellSDs[j,i,k]]); lReport.Add('%5d %5d %5d %10.3f %10.3f', [i+MinA, j+MinB, k+MinC, CellMeans[j,i,k], CellSDs[j,i,k]]);
lReport.Add('-----------------------------------------------------');
lReport.Add(''); lReport.Add('');
lReport.Add('A MARGIN MEANS'); lReport.Add('A MARGIN MEANS');
lReport.Add('A LEVEL MEAN STD.DEV.'); lReport.Add('---------------------------------');
lReport.Add('A LEVEL MEAN STD.DEV. ');
lReport.Add('------- ---------- ----------');
for i := 0 to NoALevels-1 do for i := 0 to NoALevels-1 do
lReport.Add('%5d %10.3f %10.3f', [i+MinA, AMeans[i], ASDs[i]]); lReport.Add('%5d %10.3f %10.3f', [i+MinA, AMeans[i], ASDs[i]]);
lReport.Add('---------------------------------');
lReport.Add(''); lReport.Add('');
lReport.Add('B MARGIN MEANS'); lReport.Add('B MARGIN MEANS');
lReport.Add('B LEVEL MEAN STD.DEV.'); lReport.Add('---------------------------------');
lReport.Add('B LEVEL MEAN STD.DEV. ');
lReport.Add('------- ---------- ----------');
for i := 0 to NoBLevels-1 do for i := 0 to NoBLevels-1 do
if BCount[i] > 0 then if BCount[i] > 0 then
lReport.Add('%5d %10.3f %10.3f', [i+MinB, BMeans[i], BSDs[i]]); lReport.Add('%5d %10.3f %10.3f', [i+MinB, BMeans[i], BSDs[i]]);
lReport.Add('---------------------------------');
lReport.Add(''); lReport.Add('');
lReport.Add('C MARGIN MEANS'); lReport.Add('C MARGIN MEANS');
lReport.Add('C LEVEL MEAN STD.DEV.'); lReport.Add('---------------------------------');
lReport.Add('C LEVEL MEAN STD.DEV. ');
lReport.Add('------- ---------- ----------');
for i := 0 to NoCLevels-1 do for i := 0 to NoCLevels-1 do
if CCount[i] > 0 then if CCount[i] > 0 then
lReport.Add('%5d %10.3f %10.3f', [i+MinC, CMeans[i], CSDs[i]]); lReport.Add('%5d %10.3f %10.3f', [i+MinC, CMeans[i], CSDs[i]]);
lReport.Add('---------------------------------');
lReport.Add(''); lReport.Add('');
lReport.Add('AB MARGIN MEANS'); lReport.Add('AB MARGIN MEANS');
lReport.Add('A LEVEL B LEVEL MEAN STD.DEV.'); lReport.Add('-------------------------------------------');
lReport.Add('A LEVEL B LEVEL MEAN STD.DEV. ');
lReport.Add('------- ------- ---------- ----------');
for i := 0 to NoALevels-1 do for i := 0 to NoALevels-1 do
for j := 0 to NoBLevels-1 do for j := 0 to NoBLevels-1 do
if ABCount[i,j] > 0 then if ABCount[i,j] > 0 then
lReport.Add('%5d %5D %10.3f %10.3f', [i+MinA, j+MinB, ABMeans[i,j], ABSDs[i,j]]); lReport.Add('%5d %5d %10.3f %10.3f', [i+MinA, j+MinB, ABMeans[i,j], ABSDs[i,j]]);
lReport.Add('-------------------------------------------');
lReport.Add(''); lReport.Add('');
lReport.Add('AC MARGIN MEANS'); lReport.Add('AC MARGIN MEANS');
lReport.Add('A LEVEL C LEVEL MEAN STD.DEV.'); lReport.Add('-------------------------------------------');
lReport.Add('A LEVEL C LEVEL MEAN STD.DEV. ');
lReport.Add('------- ------- ---------- ----------');
for i := 0 to NoALevels-1 do for i := 0 to NoALevels-1 do
for j := 0 to NoCLevels-1 do for j := 0 to NoCLevels-1 do
if ACCount[i,j] > 0 then if ACCount[i,j] > 0 then
lReport.Add('%5d %5D %10.3f %10.3f',[i+MinA, j+MinC, ACMeans[i,j], ACSDs[i,j]]); lReport.Add('%5d %5d %10.3f %10.3f',[i+MinA, j+MinC, ACMeans[i,j], ACSDs[i,j]]);
lReport.Add('-------------------------------------------');
lReport.Add(''); lReport.Add('');
lReport.Add('GRAND MEAN = %10.3f', [TotMean]); lReport.Add('GRAND MEAN: %10.3f', [TotMean]);
lReport.Add(''); lReport.Add('');
FMeansReportFrame.DisplayReport(lReport); FMeansReportFrame.DisplayReport(lReport);
@ -805,7 +754,7 @@ begin
lReport.Add('Factor C: %s', [FactorCEdit.Text]); lReport.Add('Factor C: %s', [FactorCEdit.Text]);
lReport.Add(''); lReport.Add('');
lReport.Add('ANOVA TABLE'); lReport.Add('ANOVA TABLE');
lReport.Add('------------------------------------------------------------'); lReport.Add('-------------------------------------------------------------');
lReport.Add('SOURCE D.F. SS MS F PROB. '); lReport.Add('SOURCE D.F. SS MS F PROB. ');
lReport.Add('--------- ---- ---------- ---------- --------- ---------'); lReport.Add('--------- ---- ---------- ---------- --------- ---------');
@ -831,7 +780,7 @@ begin
lReport.Add('w.cells %4d %10.3f %10.3f', [dfwcell, SSW, MSW]); lReport.Add('w.cells %4d %10.3f %10.3f', [dfwcell, SSW, MSW]);
lReport.Add('Total %4d %10.3f', [dftotal, SSTot]); lReport.Add('Total %4d %10.3f', [dftotal, SSTot]);
lReport.Add('------------------------------------------------------------'); lReport.Add('-------------------------------------------------------------');
FReportFrame.DisplayReport(lReport); FReportFrame.DisplayReport(lReport);

View File

@ -196,30 +196,6 @@ begin
FStyles := TChartStyles.Create(FChartFrame); FStyles := TChartStyles.Create(FChartFrame);
AddComboboxToToolbar(FChartFrame.ChartToolbar, 'Plots:', FChartCombobox); AddComboboxToToolbar(FChartFrame.ChartToolbar, 'Plots:', FChartCombobox);
{
panel := TPanel.Create(FChartFrame.ChartToolbar);
lbl := TLabel.Create(panel);
lbl.Parent := panel;
lbl.Caption := 'Plots:';
FChartCombobox := TCombobox.Create(panel);
FChartCombobox.Parent := panel;
FChartCombobox.Style := csDropdownList;
FChartCombobox.DropdownCount := 24;
FChartCombobox.Items.Clear;
FChartCombobox.Constraints.MinWidth := 300;
lbl.AnchorSideLeft.Side := asrTop;
lbl.AnchorSideLeft.Control := panel;
lbl.AnchorSideTop.Side := asrCenter;
lbl.AnchorSideTop.Control := FChartCombobox;
FChartCombobox.AnchorSideLeft.Control := lbl;
FChartCombobox.AnchorSideLeft.Side := asrBottom;
FChartCombobox.BorderSpacing.Left := 6;
FChartCombobox.BorderSpacing.Around := 2;
panel.Parent := FChartFrame.ChartToolbar;
panel.AutoSize := true;
panel.BevelInner := bvNone;
panel.BevelOuter := bvNone;
}
FChartFrame.Chart.Margins.Bottom := 0; FChartFrame.Chart.Margins.Bottom := 0;
PageControl.ActivePageIndex := 0; PageControl.ActivePageIndex := 0;

View File

@ -1,370 +1,330 @@
object BNestedAForm: TBNestedAForm inherited BNestedAForm: TBNestedAForm
Left = 768 Left = 768
Height = 498 Height = 432
Top = 238 Top = 238
Width = 488 Width = 544
AutoSize = True
Caption = 'Factor B Nested in Factor A Analysis of Variance' Caption = 'Factor B Nested in Factor A Analysis of Variance'
ClientHeight = 498 ClientHeight = 432
ClientWidth = 488 ClientWidth = 544
OnActivate = FormActivate inherited ParamsPanel: TPanel
OnCreate = FormCreate Height = 416
OnShow = ResetBtnClick Width = 315
Position = poMainFormCenter ClientHeight = 416
LCLVersion = '2.0.10.0' ClientWidth = 315
object Label1: TLabel inherited CloseBtn: TButton
AnchorSideLeft.Control = Owner Left = 260
AnchorSideTop.Control = Memo1 Top = 391
AnchorSideTop.Side = asrBottom TabOrder = 15
Left = 8 end
Height = 15 inherited ComputeBtn: TButton
Top = 114 Left = 176
Width = 100 Top = 391
BorderSpacing.Left = 8 TabOrder = 14
BorderSpacing.Top = 16 end
Caption = 'Available Variables:' inherited ResetBtn: TButton
ParentColor = False Left = 114
Top = 391
TabOrder = 13
end
inherited HelpBtn: TButton
Tag = 171
Left = 55
Top = 391
TabOrder = 12
end
inherited ButtonBevel: TBevel
Top = 375
Width = 315
end
object AInBtn: TBitBtn[5]
AnchorSideLeft.Control = ParamsPanel
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = DepOutBtn
AnchorSideTop.Side = asrBottom
Left = 144
Height = 26
Top = 96
Width = 26
BorderSpacing.Top = 24
Images = MainDataModule.ImageList
ImageIndex = 1
OnClick = AInBtnClick
Spacing = 0
TabOrder = 4
end
object AOutBtn: TBitBtn[6]
AnchorSideLeft.Control = ParamsPanel
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = AInBtn
AnchorSideTop.Side = asrBottom
Left = 144
Height = 26
Top = 126
Width = 26
BorderSpacing.Top = 4
Images = MainDataModule.ImageList
ImageIndex = 0
OnClick = AOutBtnClick
Spacing = 0
TabOrder = 5
end
object BInBtn: TBitBtn[7]
AnchorSideLeft.Control = ParamsPanel
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = AOutBtn
AnchorSideTop.Side = asrBottom
Left = 144
Height = 26
Top = 176
Width = 26
BorderSpacing.Top = 24
Images = MainDataModule.ImageList
ImageIndex = 1
OnClick = BInBtnClick
Spacing = 0
TabOrder = 7
end
object BOutBtn: TBitBtn[8]
AnchorSideLeft.Control = ParamsPanel
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = BInBtn
AnchorSideTop.Side = asrBottom
Left = 144
Height = 26
Top = 206
Width = 26
BorderSpacing.Top = 4
Images = MainDataModule.ImageList
ImageIndex = 0
OnClick = BOutBtnClick
Spacing = 0
TabOrder = 8
end
object DepInBtn: TBitBtn[9]
AnchorSideLeft.Control = ParamsPanel
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = VarList
Left = 144
Height = 26
Top = 16
Width = 26
Images = MainDataModule.ImageList
ImageIndex = 1
OnClick = DepInBtnClick
Spacing = 0
TabOrder = 1
end
object DepOutBtn: TBitBtn[10]
AnchorSideLeft.Control = ParamsPanel
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = DepInBtn
AnchorSideTop.Side = asrBottom
Left = 144
Height = 26
Top = 46
Width = 26
BorderSpacing.Top = 4
Images = MainDataModule.ImageList
ImageIndex = 0
OnClick = DepOutBtnClick
Spacing = 0
TabOrder = 2
end
object Label1: TLabel[11]
AnchorSideLeft.Control = ParamsPanel
AnchorSideTop.Control = ParamsPanel
Left = 0
Height = 15
Top = 0
Width = 100
Caption = 'Available Variables:'
ParentColor = False
end
object VarList: TListBox[12]
AnchorSideLeft.Control = ParamsPanel
AnchorSideTop.Control = Label1
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = AInBtn
AnchorSideBottom.Control = PlotOptionsGroup
Left = 0
Height = 279
Top = 16
Width = 138
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Top = 1
BorderSpacing.Right = 6
BorderSpacing.Bottom = 8
ItemHeight = 0
MultiSelect = True
OnDblClick = VarListDblClick
OnSelectionChange = VarListSelectionChange
TabOrder = 0
end
object Label2: TLabel[13]
AnchorSideLeft.Control = AInBtn
AnchorSideLeft.Side = asrBottom
AnchorSideBottom.Control = ACodesEdit
Left = 170
Height = 15
Top = 100
Width = 88
Anchors = [akLeft, akBottom]
BorderSpacing.Bottom = 2
Caption = 'Factor A Variable'
ParentColor = False
end
object Label3: TLabel[14]
AnchorSideLeft.Control = BCodesEdit
AnchorSideBottom.Control = BCodesEdit
Left = 176
Height = 15
Top = 180
Width = 115
Anchors = [akLeft, akBottom]
BorderSpacing.Bottom = 2
Caption = 'Factor B (Nested in A)'
ParentColor = False
end
object Label4: TLabel[15]
AnchorSideLeft.Control = DepEdit
AnchorSideBottom.Control = DepEdit
Left = 176
Height = 15
Top = 20
Width = 102
Anchors = [akLeft, akBottom]
BorderSpacing.Bottom = 2
Caption = 'Dependent Variable'
ParentColor = False
end
object ACodesEdit: TEdit[16]
AnchorSideLeft.Control = AInBtn
AnchorSideLeft.Side = asrBottom
AnchorSideRight.Control = ParamsPanel
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = AOutBtn
AnchorSideBottom.Side = asrBottom
Left = 176
Height = 23
Top = 117
Width = 139
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Left = 6
BorderSpacing.Bottom = 12
ReadOnly = True
TabOrder = 6
Text = 'ACodesEdit'
end
object BCodesEdit: TEdit[17]
AnchorSideLeft.Control = BInBtn
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ParamsPanel
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = BOutBtn
AnchorSideBottom.Side = asrBottom
Left = 176
Height = 23
Top = 197
Width = 139
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Left = 6
BorderSpacing.Bottom = 12
ReadOnly = True
TabOrder = 9
Text = 'BCodesEdit'
end
object DepEdit: TEdit[18]
AnchorSideLeft.Control = DepInBtn
AnchorSideLeft.Side = asrBottom
AnchorSideRight.Control = ParamsPanel
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = DepOutBtn
AnchorSideBottom.Side = asrBottom
Left = 176
Height = 23
Top = 37
Width = 139
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Left = 6
BorderSpacing.Bottom = 12
ReadOnly = True
TabOrder = 3
Text = 'DepEdit'
end
object RandomBChk: TCheckBox[19]
AnchorSideLeft.Control = BCodesEdit
AnchorSideTop.Control = BCodesEdit
AnchorSideTop.Side = asrBottom
Left = 176
Height = 19
Top = 232
Width = 136
Caption = 'B is random, not fixed'
TabOrder = 10
end
object PlotOptionsGroup: TGroupBox[20]
AnchorSideLeft.Control = ParamsPanel
AnchorSideBottom.Control = ButtonBevel
Left = 0
Height = 72
Top = 303
Width = 106
Anchors = [akLeft, akBottom]
AutoSize = True
Caption = 'Plot options'
ClientHeight = 52
ClientWidth = 102
TabOrder = 11
object ShowPlotsChk: TCheckBox
AnchorSideLeft.Control = PlotOptionsGroup
AnchorSideTop.Control = PlotOptionsGroup
Left = 12
Height = 19
Top = 6
Width = 78
BorderSpacing.Left = 12
BorderSpacing.Top = 6
BorderSpacing.Right = 12
Caption = 'Show plots'
Checked = True
OnChange = ShowPlotsChkChange
State = cbChecked
TabOrder = 0
end
object Plot3DChk: TCheckBox
AnchorSideLeft.Control = ShowPlotsChk
AnchorSideTop.Control = ShowPlotsChk
AnchorSideTop.Side = asrBottom
Left = 32
Height = 19
Top = 25
Width = 34
BorderSpacing.Left = 20
BorderSpacing.Bottom = 8
Caption = '3D'
OnChange = Plot3DChkChange
TabOrder = 1
end
end
end end
object Label2: TLabel inherited ParamsSplitter: TSplitter
AnchorSideLeft.Control = AInBtn Left = 327
AnchorSideLeft.Side = asrBottom Height = 432
AnchorSideBottom.Control = ACodes
Left = 266
Height = 15
Top = 138
Width = 88
Anchors = [akLeft, akBottom]
BorderSpacing.Left = 8
BorderSpacing.Bottom = 2
Caption = 'Factor A Variable'
ParentColor = False
end end
object Label3: TLabel inherited PageControl: TPageControl
AnchorSideLeft.Control = BInBtn Left = 336
AnchorSideLeft.Side = asrBottom Height = 416
AnchorSideBottom.Control = BCodes Width = 200
Left = 266 TabIndex = 2
Height = 15 inherited ReportPage: TTabSheet
Top = 222 Caption = 'ANOVA Results'
Width = 115 end
Anchors = [akLeft, akBottom] object MeansPage: TTabSheet[1]
BorderSpacing.Left = 8 Caption = 'Means'
BorderSpacing.Bottom = 2 end
Caption = 'Factor B (Nested in A)' inherited ChartPage: TTabSheet[2]
ParentColor = False Caption = 'Plots'
end end
object Label4: TLabel
AnchorSideLeft.Control = DepInBtn
AnchorSideLeft.Side = asrBottom
AnchorSideBottom.Control = DepEdit
Left = 266
Height = 15
Top = 317
Width = 102
Anchors = [akLeft, akBottom]
BorderSpacing.Left = 8
BorderSpacing.Bottom = 2
Caption = 'Dependent Variable'
ParentColor = False
end
object VarList: TListBox
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Label1
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = AInBtn
AnchorSideBottom.Control = OptionsBox
Left = 9
Height = 239
Top = 130
Width = 213
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 9
BorderSpacing.Top = 1
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
ItemHeight = 0
MultiSelect = True
OnSelectionChange = VarListSelectionChange
TabOrder = 0
end
object AInBtn: TBitBtn
AnchorSideLeft.Control = Owner
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = VarList
Left = 230
Height = 28
Top = 130
Width = 28
Images = MainDataModule.ImageList
ImageIndex = 1
OnClick = AInBtnClick
Spacing = 0
TabOrder = 1
end
object AOutBtn: TBitBtn
AnchorSideLeft.Control = Owner
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = AInBtn
AnchorSideTop.Side = asrBottom
Left = 230
Height = 28
Top = 162
Width = 28
BorderSpacing.Top = 4
Images = MainDataModule.ImageList
ImageIndex = 0
OnClick = AOutBtnClick
Spacing = 0
TabOrder = 2
end
object BInBtn: TBitBtn
AnchorSideLeft.Control = Owner
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = AOutBtn
AnchorSideTop.Side = asrBottom
Left = 230
Height = 28
Top = 214
Width = 28
BorderSpacing.Top = 24
Images = MainDataModule.ImageList
ImageIndex = 1
OnClick = BInBtnClick
Spacing = 0
TabOrder = 4
end
object BOutBtn: TBitBtn
AnchorSideLeft.Control = Owner
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = BInBtn
AnchorSideTop.Side = asrBottom
Left = 230
Height = 28
Top = 246
Width = 28
BorderSpacing.Top = 4
Images = MainDataModule.ImageList
ImageIndex = 0
OnClick = BOutBtnClick
Spacing = 0
TabOrder = 5
end
object DepInBtn: TBitBtn
AnchorSideLeft.Control = Owner
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = RandomBChk
AnchorSideTop.Side = asrBottom
Left = 230
Height = 28
Top = 309
Width = 28
BorderSpacing.Top = 8
Images = MainDataModule.ImageList
ImageIndex = 1
OnClick = DepInBtnClick
Spacing = 0
TabOrder = 8
end
object DepOutBtn: TBitBtn
AnchorSideLeft.Control = Owner
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = DepInBtn
AnchorSideTop.Side = asrBottom
Left = 230
Height = 28
Top = 341
Width = 28
BorderSpacing.Top = 4
Images = MainDataModule.ImageList
ImageIndex = 0
OnClick = DepOutBtnClick
Spacing = 0
TabOrder = 9
end
object ACodes: TEdit
AnchorSideLeft.Control = AInBtn
AnchorSideLeft.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = AOutBtn
AnchorSideBottom.Side = asrBottom
Left = 266
Height = 23
Top = 155
Width = 214
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Left = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 12
ReadOnly = True
TabOrder = 3
Text = 'ACodes'
end
object BCodes: TEdit
AnchorSideLeft.Control = BInBtn
AnchorSideLeft.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = BOutBtn
AnchorSideBottom.Side = asrBottom
Left = 266
Height = 23
Top = 239
Width = 214
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Left = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 12
ReadOnly = True
TabOrder = 6
Text = 'BCodes'
end
object ResetBtn: TButton
AnchorSideRight.Control = ComputeBtn
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 275
Height = 25
Top = 465
Width = 54
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Left = 12
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'Reset'
OnClick = ResetBtnClick
TabOrder = 12
end
object ComputeBtn: TButton
AnchorSideRight.Control = CloseBtn
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 337
Height = 25
Top = 465
Width = 76
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'Compute'
OnClick = ComputeBtnClick
TabOrder = 13
end
object CloseBtn: TButton
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 421
Height = 25
Top = 465
Width = 55
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 12
BorderSpacing.Bottom = 8
Caption = 'Close'
ModalResult = 11
TabOrder = 14
end
object DepEdit: TEdit
AnchorSideLeft.Control = DepInBtn
AnchorSideLeft.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = DepOutBtn
AnchorSideBottom.Side = asrBottom
Left = 266
Height = 23
Top = 334
Width = 214
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Left = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 12
ReadOnly = True
TabOrder = 10
Text = 'DepEdit'
end
object OptionsBox: TRadioGroup
AnchorSideLeft.Control = Owner
AnchorSideBottom.Control = ButtonBevel
Left = 8
Height = 72
Top = 377
Width = 466
Anchors = [akLeft, akBottom]
AutoFill = True
AutoSize = True
BorderSpacing.Left = 8
Caption = 'OptionsBox'
ChildSizing.LeftRightSpacing = 12
ChildSizing.TopBottomSpacing = 6
ChildSizing.HorizontalSpacing = 16
ChildSizing.VerticalSpacing = 2
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 2
ClientHeight = 52
ClientWidth = 462
Columns = 2
Items.Strings = (
'Plot means using 2D Horizontal Bars'
'Plot means using 3D Horizontal Bars'
'Plot means using 2D Vertical Bars'
'Plot means using 3D Vertical Bars'
)
TabOrder = 11
end
object RandomBChk: TCheckBox
AnchorSideLeft.Control = BCodes
AnchorSideTop.Control = BOutBtn
AnchorSideTop.Side = asrBottom
Left = 266
Height = 19
Top = 282
Width = 136
BorderSpacing.Top = 8
Caption = 'B is random, not fixed'
TabOrder = 7
end
object Memo1: TLabel
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 8
Height = 90
Top = 8
Width = 472
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
Caption = 'Directions: This analysis assumes that levels of Factor B are Nested within levels of Factor A. Unless otherwise specified, it is assumed that Factors A and B are fixed level factors. If Factor B is a random variable, check the provided box to indicate this.'#13#10#13#10'The number of cases for each B group should be equal and the number of B treatements in each A level should be equal.'
ParentColor = False
WordWrap = True
end
object ButtonBevel: TBevel
AnchorSideLeft.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = CloseBtn
Left = 0
Height = 8
Top = 449
Width = 488
Anchors = [akLeft, akRight, akBottom]
Shape = bsBottomLine
end end
end end