From deadd252614f70f40b5b636a0374d915884bb2e2 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Mon, 16 Nov 2020 11:01:57 +0000 Subject: [PATCH] LazStats: Repeating to add original source (having connectivity problems) git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7880 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../lazstats/source_orig/ABCLogLinUnit.lfm | 574 ++++ .../lazstats/source_orig/ABCLogLinUnit.lrs | 472 +++ .../lazstats/source_orig/ABCLogLinUnit.pas | 995 ++++++ .../lazstats/source_orig/ABRANOVAUNIT.PAS | 956 ++++++ .../lazstats/source_orig/ABRANOVAUNIT.lfm | 418 +++ .../lazstats/source_orig/ABRANOVAUNIT.lrs | 347 +++ .../lazstats/source_orig/AJKLogLinUnit.pas | 980 ++++++ .../lazstats/source_orig/ANCOVAUNIT.PAS | 1154 +++++++ .../lazstats/source_orig/ANCOVAUNIT.lfm | 445 +++ .../lazstats/source_orig/ANCOVAUNIT.lrs | 353 +++ .../lazstats/source_orig/ANOVATESTS.PAS | 545 ++++ .../lazstats/source_orig/AUTOCORUNIT.PAS | 1204 ++++++++ .../lazstats/source_orig/AUTOCORUNIT.lfm | 448 +++ .../lazstats/source_orig/AUTOCORUNIT.lrs | 189 ++ .../lazstats/source_orig/AUTOPLOTUNIT.PAS | 214 ++ .../lazstats/source_orig/AUTOPLOTUNIT.lfm | 46 + .../lazstats/source_orig/AUTOPLOTUNIT.lrs | 15 + .../lazstats/source_orig/AXSANOVAUNIT.PAS | 902 ++++++ .../lazstats/source_orig/AXSANOVAUNIT.lfm | 312 ++ .../lazstats/source_orig/AXSANOVAUNIT.lrs | 241 ++ .../lazstats/source_orig/AboutUnit.lfm | 84 + .../lazstats/source_orig/AboutUnit.lrs | 28 + .../lazstats/source_orig/AboutUnit.pas | 43 + .../lazstats/source_orig/BACKREGUNIT.PAS | 409 +++ .../lazstats/source_orig/BACKREGUNIT.lfm | 376 +++ .../lazstats/source_orig/BACKREGUNIT.lrs | 256 ++ .../lazstats/source_orig/BESTREGUNIT.PAS | 710 +++++ .../lazstats/source_orig/BESTREGUNIT.lfm | 398 +++ .../lazstats/source_orig/BESTREGUNIT.lrs | 261 ++ .../lazstats/source_orig/BINOMIALUNIT.PAS | 166 + .../lazstats/source_orig/BINOMIALUNIT.lfm | 106 + .../lazstats/source_orig/BINOMIALUNIT.lrs | 30 + .../lazstats/source_orig/BLKANOVAUNIT.PAS | 2742 +++++++++++++++++ .../lazstats/source_orig/BLKANOVAUNIT.lfm | 730 +++++ .../lazstats/source_orig/BLKANOVAUNIT.lrs | 512 +++ .../lazstats/source_orig/BLKMREGUNIT.PAS | 478 +++ .../lazstats/source_orig/BLKMREGUNIT.lfm | 406 +++ .../lazstats/source_orig/BLKMREGUNIT.lrs | 263 ++ .../lazstats/source_orig/BlankUnit.lfm | 56 + .../lazstats/source_orig/BlankUnit.pas | 388 +++ .../lazstats/source_orig/abcnestedunit.lfm | 542 ++++ .../lazstats/source_orig/abcnestedunit.lrs | 468 +++ .../lazstats/source_orig/abcnestedunit.pas | 952 ++++++ .../lazstats/source_orig/anovatestsunit.pas | 653 ++++ .../lazstats/source_orig/avglinkunit.lfm | 71 + .../lazstats/source_orig/avglinkunit.lrs | 25 + .../lazstats/source_orig/avglinkunit.pas | 504 +++ .../lazstats/source_orig/bartletttestunit.lfm | 253 ++ .../lazstats/source_orig/bartletttestunit.lrs | 145 + .../lazstats/source_orig/bartletttestunit.pas | 208 ++ .../lazstats/source_orig/blankfrmunit.lfm | 65 + .../lazstats/source_orig/blankfrmunit.lrs | 20 + .../lazstats/source_orig/blankfrmunit.pas | 84 + .../lazstats/source_orig/bnestaunit.lfm | 435 +++ .../lazstats/source_orig/bnestaunit.lrs | 359 +++ .../lazstats/source_orig/bnestaunit.pas | 540 ++++ .../lazstats/source_orig/boxplotunit.lfm | 134 + .../lazstats/source_orig/boxplotunit.lrs | 35 + .../lazstats/source_orig/boxplotunit.pas | 676 ++++ .../lazstats/source_orig/breakdownunit.lfm | 302 ++ .../lazstats/source_orig/breakdownunit.lrs | 242 ++ .../lazstats/source_orig/breakdownunit.pas | 559 ++++ .../lazstats/source_orig/bubbleplotunit.lfm | 553 ++++ .../lazstats/source_orig/bubbleplotunit.lrs | 460 +++ .../lazstats/source_orig/bubbleplotunit.pas | 592 ++++ 65 files changed, 28129 insertions(+) create mode 100644 applications/lazstats/source_orig/ABCLogLinUnit.lfm create mode 100644 applications/lazstats/source_orig/ABCLogLinUnit.lrs create mode 100644 applications/lazstats/source_orig/ABCLogLinUnit.pas create mode 100644 applications/lazstats/source_orig/ABRANOVAUNIT.PAS create mode 100644 applications/lazstats/source_orig/ABRANOVAUNIT.lfm create mode 100644 applications/lazstats/source_orig/ABRANOVAUNIT.lrs create mode 100644 applications/lazstats/source_orig/AJKLogLinUnit.pas create mode 100644 applications/lazstats/source_orig/ANCOVAUNIT.PAS create mode 100644 applications/lazstats/source_orig/ANCOVAUNIT.lfm create mode 100644 applications/lazstats/source_orig/ANCOVAUNIT.lrs create mode 100644 applications/lazstats/source_orig/ANOVATESTS.PAS create mode 100644 applications/lazstats/source_orig/AUTOCORUNIT.PAS create mode 100644 applications/lazstats/source_orig/AUTOCORUNIT.lfm create mode 100644 applications/lazstats/source_orig/AUTOCORUNIT.lrs create mode 100644 applications/lazstats/source_orig/AUTOPLOTUNIT.PAS create mode 100644 applications/lazstats/source_orig/AUTOPLOTUNIT.lfm create mode 100644 applications/lazstats/source_orig/AUTOPLOTUNIT.lrs create mode 100644 applications/lazstats/source_orig/AXSANOVAUNIT.PAS create mode 100644 applications/lazstats/source_orig/AXSANOVAUNIT.lfm create mode 100644 applications/lazstats/source_orig/AXSANOVAUNIT.lrs create mode 100644 applications/lazstats/source_orig/AboutUnit.lfm create mode 100644 applications/lazstats/source_orig/AboutUnit.lrs create mode 100644 applications/lazstats/source_orig/AboutUnit.pas create mode 100644 applications/lazstats/source_orig/BACKREGUNIT.PAS create mode 100644 applications/lazstats/source_orig/BACKREGUNIT.lfm create mode 100644 applications/lazstats/source_orig/BACKREGUNIT.lrs create mode 100644 applications/lazstats/source_orig/BESTREGUNIT.PAS create mode 100644 applications/lazstats/source_orig/BESTREGUNIT.lfm create mode 100644 applications/lazstats/source_orig/BESTREGUNIT.lrs create mode 100644 applications/lazstats/source_orig/BINOMIALUNIT.PAS create mode 100644 applications/lazstats/source_orig/BINOMIALUNIT.lfm create mode 100644 applications/lazstats/source_orig/BINOMIALUNIT.lrs create mode 100644 applications/lazstats/source_orig/BLKANOVAUNIT.PAS create mode 100644 applications/lazstats/source_orig/BLKANOVAUNIT.lfm create mode 100644 applications/lazstats/source_orig/BLKANOVAUNIT.lrs create mode 100644 applications/lazstats/source_orig/BLKMREGUNIT.PAS create mode 100644 applications/lazstats/source_orig/BLKMREGUNIT.lfm create mode 100644 applications/lazstats/source_orig/BLKMREGUNIT.lrs create mode 100644 applications/lazstats/source_orig/BlankUnit.lfm create mode 100644 applications/lazstats/source_orig/BlankUnit.pas create mode 100644 applications/lazstats/source_orig/abcnestedunit.lfm create mode 100644 applications/lazstats/source_orig/abcnestedunit.lrs create mode 100644 applications/lazstats/source_orig/abcnestedunit.pas create mode 100644 applications/lazstats/source_orig/anovatestsunit.pas create mode 100644 applications/lazstats/source_orig/avglinkunit.lfm create mode 100644 applications/lazstats/source_orig/avglinkunit.lrs create mode 100644 applications/lazstats/source_orig/avglinkunit.pas create mode 100644 applications/lazstats/source_orig/bartletttestunit.lfm create mode 100644 applications/lazstats/source_orig/bartletttestunit.lrs create mode 100644 applications/lazstats/source_orig/bartletttestunit.pas create mode 100644 applications/lazstats/source_orig/blankfrmunit.lfm create mode 100644 applications/lazstats/source_orig/blankfrmunit.lrs create mode 100644 applications/lazstats/source_orig/blankfrmunit.pas create mode 100644 applications/lazstats/source_orig/bnestaunit.lfm create mode 100644 applications/lazstats/source_orig/bnestaunit.lrs create mode 100644 applications/lazstats/source_orig/bnestaunit.pas create mode 100644 applications/lazstats/source_orig/boxplotunit.lfm create mode 100644 applications/lazstats/source_orig/boxplotunit.lrs create mode 100644 applications/lazstats/source_orig/boxplotunit.pas create mode 100644 applications/lazstats/source_orig/breakdownunit.lfm create mode 100644 applications/lazstats/source_orig/breakdownunit.lrs create mode 100644 applications/lazstats/source_orig/breakdownunit.pas create mode 100644 applications/lazstats/source_orig/bubbleplotunit.lfm create mode 100644 applications/lazstats/source_orig/bubbleplotunit.lrs create mode 100644 applications/lazstats/source_orig/bubbleplotunit.pas diff --git a/applications/lazstats/source_orig/ABCLogLinUnit.lfm b/applications/lazstats/source_orig/ABCLogLinUnit.lfm new file mode 100644 index 000000000..a81eb567c --- /dev/null +++ b/applications/lazstats/source_orig/ABCLogLinUnit.lfm @@ -0,0 +1,574 @@ +object ABCLogLinearFrm: TABCLogLinearFrm + Left = 122 + Height = 434 + Top = 170 + Width = 699 + Caption = 'Log Linear Analysis for AxBxC Classification Table' + ClientHeight = 434 + ClientWidth = 699 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 343 + Height = 14 + Top = 40 + Width = 64 + Caption = 'No. of Rows:' + ParentColor = False + end + object Label2: TLabel + Left = 464 + Height = 14 + Top = 36 + Width = 62 + Caption = 'No. of Cols.:' + ParentColor = False + end + object Label3: TLabel + Left = 230 + Height = 14 + Top = 71 + Width = 63 + Caption = 'Row Variable' + ParentColor = False + end + object Label4: TLabel + Left = 230 + Height = 14 + Top = 151 + Width = 77 + Caption = 'Column Variable' + ParentColor = False + end + object Label5: TLabel + Left = 231 + Height = 14 + Top = 232 + Width = 63 + Caption = 'Slice Variable' + ParentColor = False + end + object Label6: TLabel + Left = 230 + Height = 14 + Top = 312 + Width = 93 + Caption = 'Frequency Variable' + ParentColor = False + end + object Label7: TLabel + Left = 584 + Height = 14 + Top = 30 + Width = 64 + Caption = 'No. of Slices:' + ParentColor = False + end + object FileFromGrp: TRadioGroup + Left = 6 + Height = 57 + Top = 5 + Width = 176 + AutoFill = True + Caption = 'Enter Data From:' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 39 + ClientWidth = 172 + Items.Strings = ( + 'File Data in the Main Grid' + 'Data Entered on this Form' + ) + OnClick = FileFromGrpClick + TabOrder = 0 + end + object VarList: TListBox + Left = 8 + Height = 309 + Top = 66 + Width = 173 + ItemHeight = 0 + TabOrder = 1 + end + object RowInBtn: TBitBtn + Left = 192 + Height = 28 + Top = 72 + Width = 31 + 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 + } + NumGlyphs = 0 + OnClick = RowInBtnClick + TabOrder = 2 + end + object RowOutBtn: TBitBtn + Left = 192 + Height = 28 + Top = 104 + Width = 31 + 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 + } + NumGlyphs = 0 + OnClick = RowOutBtnClick + TabOrder = 3 + end + object ColInBtn: TBitBtn + Left = 192 + Height = 28 + Top = 152 + Width = 31 + 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 + } + NumGlyphs = 0 + OnClick = ColInBtnClick + TabOrder = 4 + end + object ColOutBtn: TBitBtn + Left = 192 + Height = 28 + Top = 184 + Width = 31 + 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 + } + NumGlyphs = 0 + OnClick = ColOutBtnClick + TabOrder = 5 + end + object SliceBtnIn: TBitBtn + Left = 192 + Height = 28 + Top = 232 + Width = 31 + 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 + } + NumGlyphs = 0 + OnClick = SliceBtnInClick + TabOrder = 6 + end + object SliceBtnOut: TBitBtn + Left = 191 + Height = 28 + Top = 264 + Width = 31 + 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 + } + NumGlyphs = 0 + OnClick = SliceBtnOutClick + TabOrder = 7 + end + object FreqInBtn: TBitBtn + Left = 192 + Height = 28 + Top = 312 + Width = 31 + 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 + } + NumGlyphs = 0 + OnClick = FreqInBtnClick + TabOrder = 8 + end + object FreqOutBtn: TBitBtn + Left = 192 + Height = 28 + Top = 344 + Width = 31 + 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 + } + NumGlyphs = 0 + OnClick = FreqOutBtnClick + TabOrder = 9 + end + object NRowsEdit: TEdit + Left = 409 + Height = 21 + Top = 26 + Width = 43 + OnKeyPress = NRowsEditKeyPress + TabOrder = 10 + Text = 'NRowsEdit' + end + object NColsEdit: TEdit + Left = 528 + Height = 21 + Top = 26 + Width = 47 + OnKeyPress = NColsEditKeyPress + TabOrder = 11 + Text = 'NColsEdit' + end + object Grid: TStringGrid + Left = 343 + Height = 310 + Top = 62 + Width = 346 + ColCount = 2 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing, goTabs, goSmoothScroll] + RowCount = 2 + TabOrder = 12 + end + object RowVarEdit: TEdit + Left = 230 + Height = 21 + Top = 87 + Width = 107 + TabOrder = 13 + Text = 'RowVarEdit' + end + object ColVarEdit: TEdit + Left = 231 + Height = 21 + Top = 168 + Width = 107 + TabOrder = 14 + Text = 'Edit3' + end + object SliceVarEdit: TEdit + Left = 230 + Height = 21 + Top = 248 + Width = 107 + TabOrder = 15 + Text = 'Edit3' + end + object FreqVarEdit: TEdit + Left = 230 + Height = 21 + Top = 328 + Width = 107 + TabOrder = 16 + Text = 'Edit3' + end + object ResetBtn: TButton + Left = 8 + Height = 27 + Top = 387 + Width = 73 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 17 + end + object CancelBtn: TButton + Left = 109 + Height = 27 + Top = 387 + Width = 73 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 18 + end + object ComputeBtn: TButton + Left = 343 + Height = 27 + Top = 387 + Width = 73 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 19 + end + object ReturnBtn: TButton + Left = 448 + Height = 27 + Top = 387 + Width = 73 + Caption = 'Return' + ModalResult = 1 + TabOrder = 20 + end + object NslicesEdit: TEdit + Left = 647 + Height = 21 + Top = 24 + Width = 39 + OnKeyPress = NslicesEditKeyPress + TabOrder = 21 + Text = 'NslicesEdit' + end + object HelpBtn: TButton + Tag = 101 + Left = 224 + Height = 27 + Top = 387 + Width = 73 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 22 + end +end diff --git a/applications/lazstats/source_orig/ABCLogLinUnit.lrs b/applications/lazstats/source_orig/ABCLogLinUnit.lrs new file mode 100644 index 000000000..5f87d56d2 --- /dev/null +++ b/applications/lazstats/source_orig/ABCLogLinUnit.lrs @@ -0,0 +1,472 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TABCLogLinearFrm','FORMDATA',[ + 'TPF0'#16'TABCLogLinearFrm'#15'ABCLogLinearFrm'#4'Left'#2'z'#6'Height'#3#178#1 + +#3'Top'#3#170#0#5'Width'#3#187#2#7'Caption'#6'2Log Linear Analysis for AxBxC' + +' Classification Table'#12'ClientHeight'#3#178#1#11'ClientWidth'#3#187#2#6'O' + +'nShow'#7#8'FormShow'#10'LCLVersion'#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'L' + +'eft'#3'W'#1#6'Height'#2#14#3'Top'#2'('#5'Width'#2'@'#7'Caption'#6#12'No. of' + +' Rows:'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#208#1#6'Height' + +#2#14#3'Top'#2'$'#5'Width'#2'>'#7'Caption'#6#13'No. of Cols.:'#11'ParentColo' + +'r'#8#0#0#6'TLabel'#6'Label3'#4'Left'#3#230#0#6'Height'#2#14#3'Top'#2'G'#5'W' + +'idth'#2'?'#7'Caption'#6#12'Row Variable'#11'ParentColor'#8#0#0#6'TLabel'#6 + +'Label4'#4'Left'#3#230#0#6'Height'#2#14#3'Top'#3#151#0#5'Width'#2'M'#7'Capti' + +'on'#6#15'Column Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'Left' + +#3#231#0#6'Height'#2#14#3'Top'#3#232#0#5'Width'#2'?'#7'Caption'#6#14'Slice V' + +'ariable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label6'#4'Left'#3#230#0#6'Height' + +#2#14#3'Top'#3'8'#1#5'Width'#2']'#7'Caption'#6#18'Frequency Variable'#11'Par' + +'entColor'#8#0#0#6'TLabel'#6'Label7'#4'Left'#3'H'#2#6'Height'#2#14#3'Top'#2 + +#30#5'Width'#2'@'#7'Caption'#6#14'No. of Slices:'#11'ParentColor'#8#0#0#11'T' + +'RadioGroup'#11'FileFromGrp'#4'Left'#2#6#6'Height'#2'9'#3'Top'#2#5#5'Width'#3 + +#176#0#8'AutoFill'#9#7'Caption'#6#16'Enter Data From:'#28'ChildSizing.LeftRi' + +'ghtSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.Enlarge' + +'Horizontal'#7#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVertical'#7 + +#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScale' + +'Childs'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.' + +'Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine' + +#2#1#12'ClientHeight'#2''''#11'ClientWidth'#3#172#0#13'Items.Strings'#1#6#26 + +'File Data in the Main Grid'#6#25'Data Entered on this Form'#0#7'OnClick'#7 + +#16'FileFromGrpClick'#8'TabOrder'#2#0#0#0#8'TListBox'#7'VarList'#4'Left'#2#8 + +#6'Height'#3'5'#1#3'Top'#2'B'#5'Width'#3#173#0#10'ItemHeight'#2#0#8'TabOrder' + +#2#1#0#0#7'TBitBtn'#8'RowInBtn'#4'Left'#3#192#0#6'Height'#2#28#3'Top'#2'H'#5 + +'Width'#2#31#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0 + +'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0 + +#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)' + +#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190 + +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255 + +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139 + +'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160 + +#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255 + +#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128 + +#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199 + +'t'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150 + +#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255 + +#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255 + +#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255 + +'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163 + +'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247 + +';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187 + +'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnCl' + +'ick'#7#13'RowInBtnClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#9'RowOutBtn'#4'Left' + +#3#192#0#6'Height'#2#28#3'Top'#2'h'#5'Width'#2#31#10'Glyph.Data'#10':'#4#0#0 + +'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0 + +#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h' + +#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255 + +';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255 + +#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152 + +#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255 + +#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!' + +'c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216 + +#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142 + +#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255 + +'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't' + +#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199 + +'t'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't' + +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14'RowOutBtnClick'#8'TabO' + +'rder'#2#3#0#0#7'TBitBtn'#8'ColInBtn'#4'Left'#3#192#0#6'Height'#2#28#3'Top'#3 + +#152#0#5'Width'#2#31#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0 + +'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0 + +#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^' + +#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195 + +'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255 + +#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255 + +#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255 + +']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145 + +'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#13'ColInBtnClick'#8'TabOrder'#2#4#0#0#7'TBitBtn'#9'Col' + +'OutBtn'#4'Left'#3#192#0#6'Height'#2#28#3'Top'#3#184#0#5'Width'#2#31#10'Glyp' + +'h.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0 + +#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)' + +#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134 + +#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203 + +#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190 + +'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127 + +#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255 + +#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135 + +#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255 + +#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14 + +'ColOutBtnClick'#8'TabOrder'#2#5#0#0#7'TBitBtn'#10'SliceBtnIn'#4'Left'#3#192 + +#0#6'Height'#2#28#3'Top'#3#232#0#5'Width'#2#31#10'Glyph.Data'#10':'#4#0#0'6' + +#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0 + +#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169 + +'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255 + ,'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255 + +#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161 + +#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198 + +#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196 + +#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255 + +#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149 + +#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P' + +#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195 + +'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255 + +'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#15'SliceBtnInClick'#8'TabOrder' + +#2#6#0#0#7'TBitBtn'#11'SliceBtnOut'#4'Left'#3#191#0#6'Height'#2#28#3'Top'#3#8 + +#1#5'Width'#2#31#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0 + +#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0 + +#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153 + +'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V' + +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255 + +'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195 + +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255 + +#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135 + +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#16'SliceBtnOutClick'#8'TabOrder'#2#7#0#0#7'TBitBtn'#9 + +'FreqInBtn'#4'Left'#3#192#0#6'Height'#2#28#3'Top'#3'8'#1#5'Width'#2#31#10'Gl' + +'yph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0 + +#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$' + +#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X' + +#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B' + +#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255 + +#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165 + +#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201 + +#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140 + +'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255 + +#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154 + +#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194 + +#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h' + +#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\' + +#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/' + +'x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14'FreqInBtnClick' + +#8'TabOrder'#2#8#0#0#7'TBitBtn'#10'FreqOutBtn'#4'Left'#3#192#0#6'Height'#2#28 + +#3'Top'#3'X'#1#5'Width'#2#31#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0 + +#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0 + +'d'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V' + +#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217 + +'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193 + +#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255 + +#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157 + +#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195 + +#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0 + +#255#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255 + +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144 + +#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|' + +#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153 + +'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#15'FreqOutBtnClick'#8'TabOrder'#2#9#0#0 + +#5'TEdit'#9'NRowsEdit'#4'Left'#3#153#1#6'Height'#2#21#3'Top'#2#26#5'Width'#2 + +'+'#10'OnKeyPress'#7#17'NRowsEditKeyPress'#8'TabOrder'#2#10#4'Text'#6#9'NRow' + +'sEdit'#0#0#5'TEdit'#9'NColsEdit'#4'Left'#3#16#2#6'Height'#2#21#3'Top'#2#26#5 + +'Width'#2'/'#10'OnKeyPress'#7#17'NColsEditKeyPress'#8'TabOrder'#2#11#4'Text' + +#6#9'NColsEdit'#0#0#11'TStringGrid'#4'Grid'#4'Left'#3'W'#1#6'Height'#3'6'#1#3 + +'Top'#2'>'#5'Width'#3'Z'#1#8'ColCount'#2#2#7'Options'#11#15'goFixedVertLine' + +#15'goFixedHorzLine'#10'goVertLine'#10'goHorzLine'#13'goRangeSelect'#9'goEdi' + +'ting'#6'goTabs'#14'goSmoothScroll'#0#8'RowCount'#2#2#8'TabOrder'#2#12#0#0#5 + ,'TEdit'#10'RowVarEdit'#4'Left'#3#230#0#6'Height'#2#21#3'Top'#2'W'#5'Width'#2 + +'k'#8'TabOrder'#2#13#4'Text'#6#10'RowVarEdit'#0#0#5'TEdit'#10'ColVarEdit'#4 + +'Left'#3#231#0#6'Height'#2#21#3'Top'#3#168#0#5'Width'#2'k'#8'TabOrder'#2#14#4 + +'Text'#6#5'Edit3'#0#0#5'TEdit'#12'SliceVarEdit'#4'Left'#3#230#0#6'Height'#2 + +#21#3'Top'#3#248#0#5'Width'#2'k'#8'TabOrder'#2#15#4'Text'#6#5'Edit3'#0#0#5'T' + +'Edit'#11'FreqVarEdit'#4'Left'#3#230#0#6'Height'#2#21#3'Top'#3'H'#1#5'Width' + +#2'k'#8'TabOrder'#2#16#4'Text'#6#5'Edit3'#0#0#7'TButton'#8'ResetBtn'#4'Left' + +#2#8#6'Height'#2#27#3'Top'#3#131#1#5'Width'#2'I'#7'Caption'#6#5'Reset'#7'OnC' + +'lick'#7#13'ResetBtnClick'#8'TabOrder'#2#17#0#0#7'TButton'#9'CancelBtn'#4'Le' + +'ft'#2'm'#6'Height'#2#27#3'Top'#3#131#1#5'Width'#2'I'#7'Caption'#6#6'Cancel' + +#11'ModalResult'#2#2#8'TabOrder'#2#18#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3 + +'W'#1#6'Height'#2#27#3'Top'#3#131#1#5'Width'#2'I'#7'Caption'#6#7'Compute'#7 + +'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#19#0#0#7'TButton'#9'ReturnBtn' + +#4'Left'#3#192#1#6'Height'#2#27#3'Top'#3#131#1#5'Width'#2'I'#7'Caption'#6#6 + +'Return'#11'ModalResult'#2#1#8'TabOrder'#2#20#0#0#5'TEdit'#11'NslicesEdit'#4 + +'Left'#3#135#2#6'Height'#2#21#3'Top'#2#24#5'Width'#2''''#10'OnKeyPress'#7#19 + +'NslicesEditKeyPress'#8'TabOrder'#2#21#4'Text'#6#11'NslicesEdit'#0#0#7'TButt' + +'on'#7'HelpBtn'#3'Tag'#2'e'#4'Left'#3#224#0#6'Height'#2#27#3'Top'#3#131#1#5 + +'Width'#2'I'#7'Caption'#6#4'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2 + +#22#0#0#0 +]); diff --git a/applications/lazstats/source_orig/ABCLogLinUnit.pas b/applications/lazstats/source_orig/ABCLogLinUnit.pas new file mode 100644 index 000000000..ffe53a97e --- /dev/null +++ b/applications/lazstats/source_orig/ABCLogLinUnit.pas @@ -0,0 +1,995 @@ +unit ABCLogLinUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + ExtCtrls, StdCtrls, Buttons, Grids, Math, OutPutUnit, MainUnit, + FunctionsLib, Globals, DataProcs, contexthelpunit; + +type + + { TABCLogLinearFrm } + + TABCLogLinearFrm = class(TForm) + HelpBtn: TButton; + RowInBtn: TBitBtn; + RowOutBtn: TBitBtn; + ColInBtn: TBitBtn; + ColOutBtn: TBitBtn; + SliceBtnIn: TBitBtn; + SliceBtnOut: TBitBtn; + FreqInBtn: TBitBtn; + FreqOutBtn: TBitBtn; + NslicesEdit: TEdit; + Label7: TLabel; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + NRowsEdit: TEdit; + NColsEdit: TEdit; + RowVarEdit: TEdit; + ColVarEdit: TEdit; + SliceVarEdit: TEdit; + FreqVarEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + Label6: TLabel; + Grid: TStringGrid; + VarList: TListBox; + FileFromGrp: TRadioGroup; + procedure ColInBtnClick(Sender: TObject); + procedure ColOutBtnClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure FileFromGrpClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure FreqInBtnClick(Sender: TObject); + procedure FreqOutBtnClick(Sender: TObject); + procedure NColsEditKeyPress(Sender: TObject; var Key: char); + procedure NRowsEditKeyPress(Sender: TObject; var Key: char); + procedure NslicesEditKeyPress(Sender: TObject; var Key: char); + procedure ResetBtnClick(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure RowInBtnClick(Sender: TObject); + procedure RowOutBtnClick(Sender: TObject); + procedure SliceBtnInClick(Sender: TObject); + procedure SliceBtnOutClick(Sender: TObject); + private + { private declarations } + procedure ModelEffect(Nrows,Ncols,Nslices : integer; + VAR Data : DblDyneCube; + VAR RowMarg : DblDyneVec; + VAR ColMarg : DblDyneVec; + VAR SliceMarg : DblDyneVec; + VAR AB : DblDyneMat; + VAR AC : DblDyneMat; + VAR BC : DblDyneMat; + VAR Total : double; + Model : integer); + procedure Iterate(Nrows, Ncols, Nslices : integer; + VAR Data : DblDyneCube; + VAR RowMarg : DblDyneVec; + VAR ColMarg : DblDyneVec; + VAR SliceMarg : DblDyneVec; + VAR Total : double; + VAR Expected : DblDyneCube; + VAR NewRowMarg : DblDyneVec; + VAR NewColMarg : DblDyneVec; + VAR NewSliceMarg : DblDyneVec; + VAR NewTotal : double); + procedure PrintTable(Nrows, Ncols, Nslices : integer; + VAR Data : DblDyneCube; + VAR RowMarg : DblDyneVec; + VAR ColMarg : DblDyneVec; + VAR SliceMarg : DblDyneVec; + Total : double); + procedure PrintLamdas(Nrows,Ncols,Nslices : integer; + Var CellLambdas : DblDyneQuad; + mu : double); + procedure PrintMatrix(VAR X : DblDyneMat; + Nrows, Ncols: integer; + Title : string); + + public + { public declarations } + end; + +var + ABCLogLinearFrm: TABCLogLinearFrm; + +implementation + +{ TABCLogLinearFrm } + +procedure TABCLogLinearFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + Grid.ColCount := 4; + Grid.RowCount := 2; + Grid.Cells[0,0] := 'ROW'; + Grid.Cells[1,0] := 'COL'; + Grid.Cells[2,0] := 'SLICE'; + Grid.Cells[3,0] := 'FREQ.'; + VarList.Clear; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + RowVarEdit.Text := ''; + ColVarEdit.Text := ''; + SliceVarEdit.Text := ''; + FreqVarEdit.Text := ''; + NRowsEdit.Text := ''; + NColsEdit.Text := ''; + NSlicesEdit.Text := ''; + VarList.Visible := false; + RowInBtn.Visible := false; + RowOutBtn.Visible := false; + ColInBtn.Visible := false; + ColOutBtn.Visible := false; + SliceBtnIn.Visible := false; + SliceBtnOut.Visible := false; + FreqInBtn.Visible := false; + FreqOutBtn.Visible := false; + Label1.Visible := false; + Label2.Visible := false; + Label3.Visible := false; + Label4.Visible := false; + Label5.Visible := false; + Label6.Visible := false; + Label7.Visible := false; + RowVarEdit.Visible := false; + ColVarEdit.Visible := false; + SliceVarEdit.Visible := false; + FreqVarEdit.Visible := false; + NRowsEdit.Visible := false; + NColsEdit.Visible := false; + NSlicesEdit.Visible := false; + Grid.Visible := false; +end; + +procedure TABCLogLinearFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TABCLogLinearFrm.RowInBtnClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + RowVarEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + RowOutBtn.Visible := true; + RowInBtn.Visible := false; +end; + +procedure TABCLogLinearFrm.RowOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(RowVarEdit.Text); + RowInBtn.Visible := true; + RowOutBtn.Visible := false; + RowVarEdit.Text := ''; +end; + +procedure TABCLogLinearFrm.SliceBtnInClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + SliceVarEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + SliceBtnOut.Visible := true; + SliceBtnIn.Visible := false; +end; + +procedure TABCLogLinearFrm.SliceBtnOutClick(Sender: TObject); +begin + VarList.Items.Add(SliceVarEdit.Text); + SliceBtnIn.Visible := true; + SliceBtnOut.Visible := false; + FreqVarEdit.Text := ''; +end; + +procedure TABCLogLinearFrm.FileFromGrpClick(Sender: TObject); +begin + if FileFromGrp.ItemIndex = 0 then // file from main form + begin + VarList.Visible := true; + RowInBtn.Visible := true; + RowOutBtn.Visible := false; + ColInBtn.Visible := true; + ColOutBtn.Visible := false; + SliceBtnIn.Visible := true; + SliceBtnOut.Visible := false; + FreqInBtn.Visible := true; + FreqOutBtn.Visible := false; + Label4.Visible := true; + Label5.Visible := true; + Label6.Visible := true; + Label3.Visible := true; + RowVarEdit.Visible := true; + ColVarEdit.Visible := true; + SliceVarEdit.Visible := true; + FreqVarEdit.Visible := true; + Label1.Visible := false; + Label2.Visible := false; + Label7.Visible := false; + NRowsEdit.Visible := false; + NColsEdit.Visible := false; + NSlicesEdit.Visible := false; + Grid.Visible := false; + end; + if FileFromGrp.ItemIndex = 1 then // data from this form + begin + VarList.Visible := false; + RowInBtn.Visible := false; + RowOutBtn.Visible := false; + ColInBtn.Visible := false; + ColOutBtn.Visible := false; + SliceBtnIn.Visible := false; + SliceBtnOut.Visible := false; + FreqInBtn.Visible := false; + FreqOutBtn.Visible := false; + Label4.Visible := false; + Label5.Visible := false; + Label6.Visible := false; + Label3.Visible := false; + RowVarEdit.Visible := false; + ColVarEdit.Visible := false; + SliceVarEdit.Visible := false; + FreqVarEdit.Visible := false; + Label1.Visible := true; + Label2.Visible := true; + Label7.Visible := true; + NRowsEdit.Visible := true; + NColsEdit.Visible := true; + NSlicesEdit.Visible := true; + Grid.Visible := true; + end; +end; + +procedure TABCLogLinearFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(Self); +end; + +procedure TABCLogLinearFrm.FreqInBtnClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + FreqVarEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + FreqOutBtn.Visible := true; + FreqInBtn.Visible := false; +end; + +procedure TABCLogLinearFrm.FreqOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(FreqVarEdit.Text); + FreqInBtn.Visible := true; + FreqOutBtn.Visible := false; + FreqVarEdit.Text := ''; +end; + +procedure TABCLogLinearFrm.NColsEditKeyPress(Sender: TObject; var Key: char); +begin + if ord(Key) = 13 then NslicesEdit.SetFocus; +end; + +procedure TABCLogLinearFrm.NRowsEditKeyPress(Sender: TObject; var Key: char); +begin + if ord(Key) = 13 then NcolsEdit.SetFocus; +end; + +procedure TABCLogLinearFrm.NslicesEditKeyPress(Sender: TObject; var Key: char); +var + i, j, k, row : integer; + Nslices, Ncols, Nrows : integer; +begin + if ord(Key) = 13 then + begin + Nrows := StrToInt(NrowsEdit.Text); + Ncols := StrToInt(NcolsEdit.Text); + Nslices := StrToInt(NslicesEdit.Text); + Grid.RowCount := Nrows * Ncols * Nslices + 1; + row := 1; + for k := 1 to Nslices do + begin + for j := 1 to Ncols do + begin + for i := 1 to Nrows do + begin + Grid.Cells[0,row] := IntToStr(i); + Grid.Cells[1,row] := IntToStr(j); + Grid.Cells[2,row] := IntToStr(k); + row := row + 1; + end; + end; + end; + Grid.SetFocus; + end; +end; + +procedure TABCLogLinearFrm.ColInBtnClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + ColVarEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + ColOutBtn.Visible := true; + ColInBtn.Visible := false; +end; + +procedure TABCLogLinearFrm.ColOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(ColVarEdit.Text); + ColInBtn.Visible := true; + ColOutBtn.Visible := false; + ColVarEdit.Text := ''; +end; + +procedure TABCLogLinearFrm.ComputeBtnClick(Sender: TObject); +var + i, j, k, row, col, slice, Nrows, Ncols, Nslices : integer; + Data : DblDyneCube; + AB, AC, BC : DblDyneMat; + RowMarg, ColMarg, SliceMarg : DblDyneVec; + Total : double; + arraysize : integer; + Model : integer; + astr, Title : string; + RowCol, ColCol, SliceCol, Fcol : integer; + GridPos : IntDyneVec; + value : integer; + Fx : double; +begin + Nrows := 0; + Ncols := 0; + Nslices := 0; + Total := 0.0; + + if FileFromGrp.ItemIndex = 0 then // mainfrm input + begin + SetLength(GridPos,4); + for i := 1 to NoVariables do + begin + if RowVarEdit.Text = OS3MainFrm.DataGrid.Cells[i,0] then GridPos[0] := i; + if ColVarEdit.Text = OS3MainFrm.DataGrid.Cells[i,0] then GridPos[1] := i; + if SliceVarEdit.Text = OS3MainFrm.DataGrid.Cells[i,0] then GridPos[2] := i; + if FreqVarEdit.Text = OS3MainFrm.DataGrid.Cells[i,0] then GridPos[3] := i; + end; + // get no. of rows, columns and slices + for i := 1 to OS3MainFrm.DataGrid.RowCount - 1 do + begin + value := StrToInt(OS3MainFrm.DataGrid.Cells[GridPos[0],i]); + if value > Nrows then Nrows := value; + value := StrToInt(OS3MainFrm.DataGrid.Cells[GridPos[1],i]); + if value > Ncols then Ncols := value; + value := StrToInt(OS3MainFrm.DataGrid.Cells[GridPos[2],i]); + if value > Nslices then Nslices := value; + end; + SetLength(AB,Nrows+1,Ncols+1); + SetLength(AC,Nrows+1,Nslices+1); + SetLength(BC,Ncols+1,Nslices+1); + SetLength(Data,Nrows+1,Ncols+1,Nslices+1); + SetLength(RowMarg,Nrows+1); + SetLength(ColMarg,Ncols+1); + SetLength(SliceMarg,Nslices+1); + + for i := 1 to Nrows do + for j := 1 to Ncols do + AB[i,j] := 0.0; + for i := 1 to Nrows do + for k := 1 to Nslices do + AC[i,k] := 0.0; + for j := 1 to Ncols do + for k := 1 to Nslices do + BC[j,k] := 0.0; + arraysize := Nrows * Ncols * Nslices; + // Get data + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + Data[i,j,k] := 0.0; + rowcol := GridPos[0]; + colcol := GridPos[1]; + slicecol := GridPos[2]; + Fcol := GridPos[3]; + for i := 1 to OS3MainFrm.DataGrid.RowCount - 1 do + begin + if Not GoodRecord(i, 4, GridPos) then continue; + row := StrToInt(OS3MainFrm.DataGrid.Cells[rowcol,i]); + col := StrToInt(OS3MainFrm.DataGrid.Cells[colcol,i]); + slice := StrToInt(OS3MainFrm.DataGrid.Cells[slicecol,i]); + Fx := StrToInt(OS3MainFrm.DataGrid.Cells[Fcol,i]); + Data[row,col,slice] := Data[row,col,slice] + Fx; + Total := Total + Fx; + RowMarg[row] := RowMarg[row] + Fx; + ColMarg[col] := ColMarg[col] + Fx; + SliceMarg[slice] := SliceMarg[slice] + Fx; + AB[row,col] := AB[row,col] + Fx; + AC[row,slice] := AC[row,slice] + Fx; + BC[col,slice] := BC[col,slice] + Fx; + end; + GridPos := nil; + end; + + if FileFromGrp.ItemIndex = 1 then // form input + begin + Nrows := StrToInt(NrowsEdit.Text); + Ncols := StrToInt(NcolsEdit.Text); + Nslices := StrToInt(NslicesEdit.Text); + SetLength(AB,Nrows+1,Ncols+1); + SetLength(AC,Nrows+1,Nslices+1); + SetLength(BC,Ncols+1,Nslices+1); + SetLength(Data,Nrows+1,Ncols+1,Nslices+1); + SetLength(RowMarg,Nrows+1); + SetLength(ColMarg,Ncols+1); + SetLength(SliceMarg,Nslices+1); + + for i := 1 to Nrows do + for j := 1 to Ncols do + AB[i,j] := 0.0; + for i := 1 to Nrows do + for k := 1 to Nslices do + AC[i,k] := 0.0; + for j := 1 to Ncols do + for k := 1 to Nslices do + BC[j,k] := 0.0; + arraysize := Nrows * Ncols * Nslices; + + // get data + for i := 1 to arraysize do + begin + row := StrToInt(Grid.Cells[0,i]); + col := StrToInt(Grid.Cells[1,i]); + slice := StrToInt(Grid.Cells[2,i]); + Data[row,col,slice] := StrToInt(Grid.Cells[3,i]); + AB[row,col] := AB[row,col] + Data[row,col,slice]; + AC[row,slice] := AC[row,slice] + Data[row,col,slice]; + BC[col,slice] := BC[col,slice] + Data[row,col,slice]; + Total := Total + Data[row,col,slice]; + RowMarg[row] := RowMarg[row] + Data[row,col,slice]; + ColMarg[col] := ColMarg[col] + Data[row,col,slice]; + SliceMarg[slice] := SliceMarg[slice] + Data[row,col,slice]; + end; + end; + + // print heading of output + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Log-Linear Analysis of a Three Dimension Table'); + OutPutFrm.RichEdit.Lines.Add(''); + + // print observed matrix + astr := 'Observed Frequencies'; + OutPutFrm.RichEdit.Lines.Add(astr); + PrintTable(Nrows,Ncols,Nslices,Data,RowMarg,ColMarg,SliceMarg,Total); + OutPutFrm.RichEdit.Lines.Add(''); + + // Print sub-matrices + Title := 'Sub-matrix AB'; + PrintMatrix(AB,Nrows,Ncols,Title); + Title := 'Sub-matrix AC'; + PrintMatrix(AC,Nrows,Nslices,Title); + Title := 'Sub-matrix BC'; + PrintMatrix(BC,Ncols,Nslices,Title); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + + for Model := 1 to 9 do + ModelEffect(Nrows,Ncols,Nslices,Data,RowMarg,ColMarg, + SliceMarg,AB,AC,BC,Total,Model); + SliceMarg := nil; + ColMarg := nil; + RowMarg := nil; + Data := nil; + BC := nil; + AC := nil; + AB := nil; +end; + +procedure TABCLogLinearFrm.ModelEffect(Nrows,Ncols,Nslices : integer; + VAR Data : DblDyneCube; + VAR RowMarg : DblDyneVec; + VAR ColMarg : DblDyneVec; + VAR SliceMarg : DblDyneVec; + VAR AB : DblDyneMat; + VAR AC : DblDyneMat; + VAR BC : DblDyneMat; + VAR Total : double; + Model : integer); +var + i, j, k, l : integer; + CellLambdas : DblDyneQuad; + LogData, Expected : DblDyneCube; + Title, astr : string; + NewRowMarg,NewColMarg,NewSliceMarg : DblDyneVec; + LogRowMarg, LogColMarg, LogSliceMarg : DblDyneVec; + NewTotal : double; + ABLogs, ACLogs, BCLogs : DblDyneMat; + LogTotal, mu, ModelTotal, Ysqr : double; + DF : integer; + +begin + // Get expected values for chosen model + SetLength(Expected,Nrows+1,Ncols+1,Nslices+1); + SetLength(NewRowMarg,Nrows+1); + SetLength(NewColMarg,Ncols+1); + SetLength(NewSliceMarg,Nslices+1); + SetLength(LogRowMarg,Nrows+1); + SetLength(LogColMarg,Ncols+1); + SetLength(LogSliceMarg,Nslices+1); + SetLength(ABLogs,Nrows+1,Ncols+1); + SetLength(ACLogs,Nrows+1,Nslices+1); + SetLength(BCLogs,Ncols+1,Nslices+1); + SetLength(LogData,Nrows+1,Ncols+1,Nslices+1); + SetLength(CellLambdas,Nrows+1,Ncols+1,Nslices+1,8); + + if Model = 1 then // Saturated model + begin + Title := 'Saturated Model'; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + Expected[i,j,k] := Data[i,j,k]; + end; + + if Model = 2 then // independence + begin + Title := 'Model of Independence'; + Iterate(Nrows,Ncols,Nslices,Data,RowMarg,ColMarg,SliceMarg,Total, + Expected,NewRowMarg,NewColMarg,NewSliceMarg,NewTotal); + end; + + if Model = 3 then // no AB effect + begin + Title := 'No AB Effect'; + for i := 1 to Nrows do + for j := 1 to Ncols do + 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'; + for i := 1 to Nrows do + for j := 1 to Ncols do + 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'; + for i := 1 to Nrows do + for j := 1 to Ncols do + 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'; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + Expected[i,j,k] := (RowMarg[i] / Total) * + (ColMarg[j] / Total) * (Total / Nslices); + end; + + if Model = 7 then // no B effect + begin + Title := 'Model of no Column (B) effect'; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + Expected[i,j,k] := (RowMarg[i] / Total) * + (SliceMarg[k] / Total) * (Total / Ncols); + end; + + if Model = 8 then // no A effect + begin + Title := 'Model of no Row (A) effect'; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + Expected[i,j,k] := (ColMarg[j] / Total) * + (SliceMarg[k] / Total) * (Total / Nrows); + end; + + if Model = 9 then // Equiprobability Model + begin + Title := 'Equi-probability Model'; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + Expected[i,j,k] := Total / + (Nrows * NCols * Nslices); + end; + LogTotal := 0.0; + for i := 1 to Nrows do + begin + NewRowMarg[i] := 0.0; + LogRowMarg[i] := 0.0; + end; + for j := 1 to Ncols do + begin + NewColMarg[j] := 0.0; + LogColMarg[j] := 0.0; + end; + for k := 1 to Nslices do + begin + NewSliceMarg[k] := 0.0; + LogSliceMarg[k] := 0.0; + end; + + for i := 1 to Nrows do + for j := 1 to Ncols do + ABLogs[i,j] := 0.0; + + for i := 1 to Nrows do + for k := 1 to Nslices do + ACLogs[i,k] := 0.0; + + for j := 1 to Ncols do + for k := 1 to Nslices do + BCLogs[j,k] := 0.0; + + for i := 1 to Nrows do + begin + for j := 1 to Ncols do + begin + for k := 1 to Nslices do + begin + NewRowMarg[i] := NewRowMarg[i] + Expected[i,j,k]; + NewColMarg[j] := NewColMarg[j] + Expected[i,j,k]; + NewSliceMarg[k] := NewSliceMarg[k] + Expected[i,j,k]; + end; + end; + end; + + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + LogData[i,j,k] := ln(Expected[i,j,k]); + + for i := 1 to Nrows do + begin + for j := 1 to Ncols do + begin + for k := 1 to Nslices do + begin + LogRowMarg[i] := LogRowMarg[i] + LogData[i,j,k]; + LogColMarg[j] := LogColMarg[j] + LogData[i,j,k]; + LogSliceMarg[k] := LogSliceMarg[k] + LogData[i,j,k]; + ABLogs[i,j] := ABLogs[i,j] + LogData[i,j,k]; + ACLogs[i,k] := ACLogs[i,k] + LogData[i,j,k]; + BCLogs[j,k] := BCLogs[j,k] + LogData[i,j,k]; + LogTotal := LogTotal + LogData[i,j,k]; + end; + end; + end; + + for i := 1 to Nrows do LogRowMarg[i] := LogRowMarg[i] / (Ncols * Nslices); + for j := 1 to Ncols do LogColMarg[j] := LogColMarg[j] / (Nrows * Nslices); + for k := 1 to Nslices do LogSliceMarg[k] := LogSliceMarg[k] / (Ncols * Nrows); + LogTotal := LogTotal / (Ncols * Nrows * Nslices); + for i := 1 to Nrows do + for j := 1 to Ncols do + ABLogs[i,j] := ABLogs[i,j] / Nslices; + for i := 1 to Nrows do + for k := 1 to Nslices do + ACLogs[i,k] := ACLogs[i,k] / Ncols; + for j := 1 to Ncols do + for k := 1 to Nslices do + BCLogs[j,k] := BCLogs[j,k] / Nrows; + + for i := 1 to Nrows do + begin + for j := 1 to Ncols do + begin + for k := 1 to Nslices do + begin + CellLambdas[i,j,k,1] := LogRowMarg[i] - LogTotal; + CellLambdas[i,j,k,2] := LogColMarg[j] - LogTotal; + CellLambdas[i,j,k,3] := LogSliceMarg[k] - LogTotal; + CellLambdas[i,j,k,4] := ABLogs[i,j] - LogRowMarg[i] + - LogColMarg[j] + LogTotal; + CellLambdas[i,j,k,5] := ACLogs[i,k] - LogRowMarg[i] + - LogSliceMarg[k] + LogTotal; + CellLambdas[i,j,k,6] := BCLogs[j,k] - LogColMarg[j] + - LogSliceMarg[k] + LogTotal; + CellLambdas[i,j,k,7] := LogData[i,j,k] + LogRowMarg[i] + + LogColMarg[j] + LogSliceMarg[k] + - ABLogs[i,j] - ACLogs[i,k] + - BCLogs[j,k] - LogTotal; + end; + end; + end; + mu := LogTotal; + + // Get Y square for model + Ysqr := 0.0; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + Ysqr := Ysqr + (Data[i,j,k] * ln(Data[i,j,k] / Expected[i,j,k])); + Ysqr := 2.0 * Ysqr; + + OutPutFrm.RichEdit.Lines.Add(Title); + OutPutFrm.RichEdit.Lines.Add(''); + + astr := 'Expected Frequencies'; + OutPutFrm.RichEdit.Lines.Add(astr); + PrintTable(Nrows,Ncols,Nslices,Expected,NewRowMarg,NewColMarg, + NewSliceMarg,NewTotal); + OutPutFrm.RichEdit.Lines.Add(''); + + astr := 'Log Frequencies'; + OutPutFrm.RichEdit.Lines.Add(astr); + PrintTable(Nrows,Ncols,Nslices,LogData,LogRowMarg,LogColMarg,LogSliceMarg,LogTotal); + OutPutFrm.RichEdit.Lines.Add(''); + + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + astr := 'Cell Parameters'; + OutPutFrm.RichEdit.Lines.Add(astr); + PrintLamdas(Nrows,Ncols,Nslices,CellLambdas, mu); + OutPutFrm.RichEdit.Lines.Add(''); + + astr := 'G squared statistic for model fit = ' + format('%6.3f',[Ysqr]); + case Model of + 1 : DF := 0; // saturated + 2 : DF := Nrows * Ncols * Nslices - Nrows - Ncols - Nslices + 2; // independence + 3 : DF := Nslices * (Nrows - 1) * (Ncols - 1); //no AB effect + 4 : DF := Ncols * (Nrows - 1) * (Nslices - 1); // no AC effect + 5 : DF := Nrows * (Ncols - 1) * (Nslices - 1); // no BC effect + 6 : DF := Nrows * Ncols * Nslices - Nrows - Ncols + 1; // no C effect + 7 : DF := Nrows * Ncols * Nslices - Nrows - Nslices + 1; // no B effect + 8 : DF := Nrows * Ncols * Nslices - Ncols - Nslices + 1; // no A effect + 9 : DF := Nrows * Ncols * Nslices - 1; // Equiprobability + end; + astr := astr + ' D.F. = ' + IntToStr(DF); + OutPutFrm.RichEdit.Lines.Add(astr); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + CellLambdas := nil; + LogData := nil; + BCLogs := nil; + ACLogs := nil; + ABLogs := nil; + LogSliceMarg := nil; + LogColMarg := nil; + LogRowMarg := nil; + NewSliceMarg := nil; + NewColMarg := nil; + NewRowMarg := nil; + Expected := nil; +end; +//------------------------------------------------------------------- + +procedure TABCLogLinearFrm.Iterate(Nrows, Ncols, Nslices : integer; + VAR Data : DblDyneCube; + VAR RowMarg : DblDyneVec; + VAR ColMarg : DblDyneVec; + VAR SliceMarg : DblDyneVec; + VAR Total : double; + VAR Expected : DblDyneCube; + VAR NewRowMarg : DblDyneVec; + VAR NewColMarg : DblDyneVec; + VAR NewSliceMarg : DblDyneVec; + VAR NewTotal : double); + +Label Step; +var + Aprevious : DblDyneCube; + i, j, k : integer; + delta : double; + difference : double; + +begin + SetLength(Aprevious,Nrows+1,Ncols+1,Nslices+1); + delta := 0.1; + difference := 0.0; + for i := 1 to Nrows do newrowmarg[i] := 0.0; + for j := 1 to Ncols do newcolmarg[j] := 0.0; + for k := 1 to Nslices do newslicemarg[k] := 0.0; + + // initialize expected values + for i := 1 to Nrows do + begin + for j := 1 to Ncols do + begin + for k := 1 to Nslices do + begin + expected[i,j,k] := 1.0; + Aprevious[i,j,k] := 1.0; + end; + end; + end; + +Step: + // step 1: initialize new row margins and calculate expected value + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + newrowmarg[i] := newrowmarg[i] + expected[i,j,k]; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + expected[i,j,k] := (RowMarg[i] / newrowmarg[i]) * expected[i,j,k]; + + // step 2: initialize new col margins and calculate expected values + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + newcolmarg[j] := newcolmarg[j] + expected[i,j,k]; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + expected[i,j,k] := (ColMarg[j] / newcolmarg[j]) * expected[i,j,k]; + + // step 3: initialize new slice margins and calculate expected values + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + newslicemarg[k] := newslicemarg[k] + expected[i,j,k]; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + expected[i,j,k] := (SliceMarg[k] / newslicemarg[k]) * expected[i,j,k]; + + // step 4: check for change and quit if smaller than delta + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + if abs(APrevious[i,j,k]-expected[i,j,k]) > difference then + difference := abs(APrevious[i,j,k]-expected[i,j,k]); + + if difference < delta then + begin + newtotal := 0.0; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + newtotal := newtotal + expected[i,j,k]; + exit; + end + else begin + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + APrevious[i,j,k] := expected[i,j,k]; + for i := 1 to Nrows do newrowmarg[i] := 0.0; + for j := 1 to Ncols do newcolmarg[j] := 0.0; + for k := 1 to Nslices do newslicemarg[k] := 0.0; + difference := 0.0; + goto step; + end; + Aprevious := nil; +end; +//------------------------------------------------------------------- + +procedure TABCLogLinearFrm.PrintTable(Nrows, Ncols, Nslices : integer; + VAR Data : DblDyneCube; + VAR RowMarg : DblDyneVec; + VAR ColMarg : DblDyneVec; + VAR SliceMarg : DblDyneVec; + Total : double); +var + astr : string; + i, j,k : integer; +begin + astr := ' A B C VALUE '; + for i := 1 to Nrows do + begin + for j := 1 to Ncols do + begin + for k := 1 to Nslices do + begin + astr := format('%3d %3d %3d %8.3f',[i,j,k,Data[i,j,k]]); + OutPutFrm.RichEdit.Lines.Add(astr); + end; + end; + end; + astr := 'Totals for Dimension A'; + OutPutFrm.RichEdit.Lines.Add(astr); + for i := 1 to Nrows do + begin + astr := format('Row %d %8.3f',[i,RowMarg[i]]); + OutPutFrm.RichEdit.Lines.Add(astr); + end; + astr := 'Totals for Dimension B'; + OutPutFrm.RichEdit.Lines.Add(astr); + for j := 1 to Ncols do + begin + astr := format('Col %d %8.3f',[j,ColMarg[j]]); + OutPutFrm.RichEdit.Lines.Add(astr); + end; + astr := 'Totals for Dimension C'; + OutPutFrm.RichEdit.Lines.Add(astr); + for k := 1 to Nslices do + begin + astr := format('Slice %d %8.3f',[k,SliceMarg[k]]); + OutPutFrm.RichEdit.Lines.Add(astr); + end; +end; +//------------------------------------------------------------------- + +procedure TABCLogLinearFrm.PrintLamdas(Nrows,Ncols,Nslices : integer; + Var CellLambdas : DblDyneQuad; + mu : double); +var + i, j, k, l : integer; + astr : string; +begin + astr := 'ROW COL SLICE MU LAMBDA A LAMBDA B LAMBDA C'; + OutPutFrm.RichEdit.Lines.Add(astr); + astr := ' LAMBDA AB LAMBDA AC LAMBDA BC LAMBDA ABC'; + OutPutFrm.RichEdit.Lines.Add(astr); + OutPutFrm.RichEdit.Lines.Add(''); + for i := 1 to Nrows do + begin + for j := 1 to Ncols do + begin + for k := 1 to Nslices do + begin + astr := format('%3d %3d %3d ',[i,j,k]); + astr := astr + format(' %8.3f ',[mu]); + for l := 1 to 3 do + astr := astr + format(' %8.3f ',[CellLambdas[i,j,k,l]]); + OutPutFrm.RichEdit.Lines.Add(astr); + astr := ' '; + for l := 4 to 7 do + astr := astr + format(' %8.3f ',[CellLambdas[i,j,k,l]]); + OutPutFrm.RichEdit.Lines.Add(astr); + OutPutFrm.RichEdit.Lines.Add(''); + end; + end; + end; +end; +//------------------------------------------------------------------- + +procedure TABCLogLinearFrm.PrintMatrix(VAR X : DblDyneMat; + Nrows, Ncols: integer; + Title : string); +Label loop; +var +i, j : integer; +first, last : integer; +astr : string; + +begin + OutPutFrm.RichEdit.Lines.Add(Title); + OutPutFrm.RichEdit.Lines.Add(''); + first := 1; + last := Ncols; + if last > 6 then last := 6; +loop: + astr := 'ROW/COL'; + for j := first to last do astr := astr + format(' %3d ',[j]); + OutPutFrm.RichEdit.Lines.Add(astr); + for i := 1 to Nrows do + begin + astr := format(' %3d ',[i]); + for j := first to last do astr := astr + format(' %8.3f ',[X[i,j]]); + OutPutFrm.RichEdit.Lines.Add(astr); + end; + if last < Ncols then + begin + first := last + 1; + last := Ncols; + if last > 6 then last := 6; + goto loop; + end; + OutPutFrm.RichEdit.Lines.Add(''); +end; + +initialization + {$I abcloglinunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/ABRANOVAUNIT.PAS b/applications/lazstats/source_orig/ABRANOVAUNIT.PAS new file mode 100644 index 000000000..f8f9d9735 --- /dev/null +++ b/applications/lazstats/source_orig/ABRANOVAUNIT.PAS @@ -0,0 +1,956 @@ +unit ABRAnovaUnit; + +{$mode objfpc}{$H+} + +interface + +uses + contexthelpunit,Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, MainUnit, OutPutUnit, FunctionsLib, GraphLib, Globals, + DataProcs, MatrixLib; + +type + + { TABRAnovaFrm } + + TABRAnovaFrm = class(TForm) + AInBtn: TBitBtn; + AOutBtn: TBitBtn; + BInBtn: TBitBtn; + BOutBtn: TBitBtn; + CInBtn: TBitBtn; + COutBtn: TBitBtn; + ACodes: TEdit; + BCodes: TEdit; + HelpBtn: TButton; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + TestChk: TCheckBox; + PlotChk: TCheckBox; + GroupBox1: TGroupBox; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + CList: TListBox; + VarList: TListBox; + procedure AInBtnClick(Sender: TObject); + procedure AOutBtnClick(Sender: TObject); + procedure BInBtnClick(Sender: TObject); + procedure BOutBtnClick(Sender: TObject); + procedure CInBtnClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure COutBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + ColNoSelected : IntDyneVec; + ACol, BCol, NoSelected, MinA, MaxA, MinB, MaxB, NoAGrps, NoBGrps : integer; + group, MaxRows, MaxCols, TotalN, NinGrp : integer; + SubjTot, GrandTotal, SumXSqr : double; + DFA, DFB, DFC, DFAB, DFAC, DFBC, DFABC, DFBetween : double; + DFerrorBetween, DFWithin, DFerrorWithin : double; + SSA, SSB, SSC, SSAB, SSAC, SSBC, SSABC, SSBetweenSubjects : double; + SSerrorBetween, SSWithinSubjects, SSerrorWithin : double; + MSA, MSB, MSC, MSAB, MSAC, MSBC, MSABC, MSerrorBetween, MSerrorWithin : double; + FA, FB, FC, FAB, FAC, FBC, FABC : double; + ProbA, ProbB, ProbC, ProbAB, ProbAC, ProbBC, ProbABC : double; + Acnt, Bcnt, Ccnt : IntDyneVec; + ASums, BSums, CSums, SumPSqr : DblDyneVec; + ABSums, ACSums, BCSums, AMatrix, PooledMat : DblDyneMat; + ABCSums : DblDyneCube; + ABCNcnt : IntDyneCube; + RowLabels, ColLabels : StrDyneVec; + selected : integer; + + procedure InitData(Sender: TObject); + procedure GetData(Sender: TObject); + procedure Calculate(Sender: TObject); + procedure Summarize(Sender: TObject); + procedure MeansReport(Sender: TObject); + procedure BoxTests(Sender: TObject); + procedure GraphMeans(Sender: TObject); + procedure CleanUp(Sender: TObject); + + public + { public declarations } + end; + +var + ABRAnovaFrm: TABRAnovaFrm; + +implementation + +{ TABRAnovaFrm } + +procedure TABRAnovaFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + VarList.Items.Clear; + CList.Items.Clear; + ACodes.Text := ''; + BCodes.Text := ''; + AinBtn.Visible := true; + AOutBtn.Visible := false; + BInBtn.Visible := true; + BOutBtn.Visible := false; + CInBtn.Visible := true; + COutBtn.Visible := false; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + PlotChk.Checked := false; + TestChk.Checked := false; +end; + +procedure TABRAnovaFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TABRAnovaFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TABRAnovaFrm.AInBtnClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + ACodes.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + AinBtn.Visible := false; + AOutBtn.Visible := true; +end; + +procedure TABRAnovaFrm.AOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(ACodes.Text); + ACodes.Text := ''; + AinBtn.Visible := true; + AOutBtn.Visible := false; +end; + +procedure TABRAnovaFrm.BInBtnClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + BCodes.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + BInBtn.Visible := false; + BOutBtn.Visible := true; +end; + +procedure TABRAnovaFrm.BOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(BCodes.Text); + BCodes.Text := ''; + BInBtn.Visible := true; + BOutBtn.Visible := false; +end; + +procedure TABRAnovaFrm.CInBtnClick(Sender: TObject); +VAR i, index : integer; +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + CList.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + COutBtn.Visible := true; +end; + +procedure TABRAnovaFrm.ComputeBtnClick(Sender: TObject); +begin + InitData(self); + GetData(self); + Calculate(self); + Summarize(self); + MeansReport(self); + if TestChk.Checked then BoxTests(self); + if PlotChk.Checked then GraphMeans(self); + CleanUp(self); +end; + +procedure TABRAnovaFrm.COutBtnClick(Sender: TObject); +VAR index : integer; +begin + index := CList.ItemIndex; + if index < 0 then + begin + COutBtn.Visible := false; + exit; + end; + VarList.Items.Add(CList.Items.Strings[index]); + CList.Items.Delete(index); +end; + +procedure TABRAnovaFrm.InitData(Sender: TObject); +var + cellstring : string; + i, j, k : integer; + +begin + SetLength(ColNoSelected,NoVariables); + ACol := 0; + BCol := 0; + for i := 1 to NoVariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[i,0]; + if (cellstring = ACodes.Text) then ACol := i; + if (cellstring = BCodes.Text) then BCol := i; + end; + if ( (ACol = 0) or (BCol = 0)) then + begin + ShowMessage('ERROR! Select a variable for the A and B Variable Codes.'); + exit; + end; + NoSelected := CList.Items.Count; + MinA := 10000; + MaxA := -10000; + MinB := 10000; + MaxB := -10000; + for i := 1 to NoCases do + begin + if NOT ValidValue(i,ACol) then continue; + 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]); + if Not ValidValue(i,BCol) then continue; + group := round(StrToFLoat(cellstring)); + if (group > MaxB) then MaxB := group; + if (group < MinB) then MinB := group; + end; + NoAGrps := MaxA - MinA + 1; + NoBGrps := MaxB - MinB + 1; + MaxRows := NoAGrps * NoBGrps; + MaxCols := NoSelected; + if (NoBGrps > NoSelected) then MaxCols := NoBGrps; + if (MaxCols > MaxRows) then MaxRows := MaxCols; + + // allocate storage for arrays + SetLength(ASums,NoAGrps); + SetLength(Bsums,NoBGrps); + SetLength(Csums,NoCases); + SetLength(ABSums,NoAGrps,NoBGrps); + SetLength(ACSums,NoAGrps,NoSelected); + SetLength(BCSums,NoBGrps,NoSelected); + SetLength(AMatrix,MaxRows,MaxRows); + SetLength(SumPSqr,NoCases); + SetLength(Acnt,NoAGrps); + SetLength(Bcnt,NoBGrps); + SetLength(Ccnt,MaxRows); + SetLength(RowLabels,NoSelected); + SetLength(ColLabels,NoSelected); + SetLength(ABCSums,NoAGrps,NoBGrps,NoSelected); + SetLength(ABCNcnt,NoAGrps,NoBGrps,NoSelected); + // initialize arrays + for i := 0 to NoAGrps-1 do + begin + ASums[i] := 0.0; + Acnt[i] := 0; + for j := 0 to NoBGrps-1 do + begin + ABSums[i,j] := 0.0; + for k := 0 to NoSelected-1 do + begin + ABCSums[i,j,k] := 0.0; + ABCNcnt[i,j,k] := 0; + end; + end; + for j := 0 to NoSelected-1 do + begin + ACSums[i,j] := 0.0; + end; + end; + for i := 0 to NoBGrps-1 do + begin + BSums[i] := 0.0; + Bcnt[i] := 0; + for j := 0 to NoSelected-1 do + begin + BCSums[i,j] := 0.0; + end; + end; + for i := 0 to NoSelected-1 do + begin + CSums[i] := 0.0; + Ccnt[i] := 0; + end; + for i := 0 to NoCases-1 do SumPSqr[i] := 0.0; + GrandTotal := 0.0; + TotalN := 0; + SumXSqr := 0.0; +end; + +procedure TABRAnovaFrm.GetData(Sender: TObject); +var + i, j, SubjA, SubjB : integer; + cellstring : string; + X : double; + +begin + for i := 0 to NoSelected - 1 do + begin + cellstring := CList.Items.Strings[i]; + for j := 1 to NoVariables do + begin + if (OS3MainFrm.DataGrid.Cells[j,0] = cellstring) then ColNoSelected[i] := j; + end; + end; + ColNoSelected[NoSelected] := ACol; + ColNoSelected[NoSelected+1] := BCol; + selected := NoSelected + 2; + // read data and store sums + for i := 1 to NoCases do + begin + if not GoodRecord(i,selected,ColNoSelected) then continue; + SubjA := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[ACol,i]))); + SubjA := SubjA - MinA + 1; + SubjB := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[BCol,i]))); + SubjB := SubjB - MinB + 1; + SubjTot := 0.0; + for j := 1 to NoSelected do + begin + X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[ColNoSelected[j-1],i])); + SubjTot := SubjTot + X; + SumXSqr := SumXSqr + (X * X); + ABCSums[SubjA-1,SubjB-1,j-1] := ABCSums[SubjA-1,SubjB-1,j-1] + X; + ABCNcnt[SubjA-1,SubjB-1,j-1] := ABCNcnt[SubjA-1,SubjB-1,j-1] + 1; + Acnt[SubjA-1] := Acnt[SubjA-1] + 1; + Bcnt[SubjB-1] := Bcnt[SubjB-1] + 1; + Ccnt[j-1] := Ccnt[j-1] + 1; + TotalN := TotalN + 1; + end; + SumPSqr[i-1] := SumPSqr[i-1] + (SubjTot * SubjTot); + GrandTotal := GrandTotal + SubjTot; + NinGrp := ABCNcnt[0,0,0]; + end; +end; + +procedure TABRAnovaFrm.Calculate(Sender: TObject); +var + SumA, SumB, SumC, SumAB, SumAC, SumBC, SumABC : double; + Term1, Term2, Term3, Term4, Term5, Term6, Term7, Term8, Term9, Term10 : double; + i, j, k, CountA, CountB, CountC, CountAB, CountAC, CountBC : integer; + +begin + Term1 := (GrandTotal * GrandTotal) / TotalN; + Term2 := SumXSqr; + Term3 := 0.0; + for i := 1 to NoAGrps do + begin + SumA := 0.0; + countA := countA + Acnt[i-1]; + for j := 1 to NoBGrps do + for k := 1 to NoSelected do SumA := SumA + ABCSums[i-1,j-1,k-1]; + ASums[i-1] := ASums[i-1] + SumA; + Term3 := Term3 + (SumA * SumA); + end; + Term3 := Term3 / (NinGrp * NoBGrps * NoSelected); + + Term4 := 0; + for j := 1 to NoBGrps do + begin + SumB := 0.0; + CountB := CountB + Bcnt[j-1]; + for i := 1 to NoAGrps do + for k := 1 to NoSelected do SumB := SumB + ABCSums[i-1,j-1,k-1]; + BSums[j-1] := BSums[j-1] + SumB; + Term4 := Term4 + (SumB * SumB); + end; + Term4 := Term4 / (NinGrp * NoAGrps * NoSelected); + + Term5 := 0.0; + for k := 1 to NoSelected do + begin + SumC := 0.0; + CountC := CountC + Ccnt[k-1]; + for i := 1 to NoAGrps do + for j := 1 to NoBGrps do SumC := SumC + ABCSums[i-1,j-1,k-1]; + CSums[k-1] := CSums[k-1] + SumC; + Term5 := Term5 + (SumC * SumC); + end; + Term5 := Term5 / (NinGrp * NoAGrps * NoBGrps); + + + Term6 := 0.0; + for i := 1 to NoAGrps do + begin + for j := 1 to NoBGrps do + begin + SumAB := 0.0; + //CountAB := CountAB + ABcnt^[i,j]; + for k := 1 to NoSelected do SumAB := SumAB + ABCSums[i-1,j-1,k-1]; + ABSums[i-1,j-1] := ABSums[i-1,j-1] + SumAB; + Term6 := Term6 + (SumAB * SumAB); + end; + end; + Term6 := Term6 / (NinGrp * NoSelected); + + Term7 := 0.0; + for i := 1 to NoAGrps do + begin + for k := 1 to NoSelected do + begin + SumAC := 0.0; + for j := 1 to NoBGrps do SumAC := SumAC + ABCSums[i-1,j-1,k-1]; + ACSums[i-1,k-1] := ACSums[i-1,k-1] + SumAC; + Term7 := Term7 + (SumAC * SumAC); + end; + end; + Term7 := Term7 / (NinGrp * NoBGrps); + + Term8 := 0.0; + for j := 1 to NoBGrps do + begin + for k := 1 to NoSelected do + begin + SumBC := 0.0; + for i := 1 to NoAGrps do SumBC := SumBC + ABCSums[i-1,j-1,k-1]; + BCSums[j-1,k-1] := BCSums[j-1,k-1] + SumBC; + Term8 := Term8 + (SumBC * SumBC); + end; + end; + Term8 := Term8 / (NinGrp * NoAGrps); + + Term9 := 0.0; + for i := 1 to NoAGrps do + begin + for j := 1 to NoBGrps do + begin + for k := 1 to NoSelected do + begin + SumABC := ABCSums[i-1,j-1,k-1]; + //CountABC := CountABC + ABCNcnt[i,j,k]; + Term9 := Term9 + (SumABC * SumABC); + end; + end; + end; + Term9 := Term9 / NinGrp; + + Term10 := 0.0; + for i := 1 to NoCases do Term10 := Term10 + SumPSqr[i-1]; + Term10 := Term10 / NoSelected; + + //Get DF, SS, MS, F and Probabilities + DFBetween := (NinGrp * NoAGrps * NoBGrps) - 1.0; + DFA := NoAGrps - 1.0; + DFB := NoBGrps - 1.0; + DFAB := (NoAGrps - 1.0) * (NoBGrps - 1.0); + DFerrorBetween := (NoAGrps * NoBGrps) * (NinGrp - 1.0); + DFWithin := (NinGrp * NoAGrps * NoBGrps) * (NoSelected - 1.0); + DFC := NoSelected - 1.0; + DFAC := (NoAGrps - 1.0) * (NoSelected - 1.0); + DFBC := (NoBGrps - 1.0) * (NoSelected - 1.0); + DFABC := (NoAGrps - 1.0) * (NoBGrps - 1.0) * (NoSelected - 1.0); + DFerrorWithin := NoAGrps * NoBGrps * (NinGrp - 1.0) * (NoSelected - 1.0); + SSBetweenSubjects := Term10 - Term1; + SSA := Term3 - Term1; + SSB := Term4 - Term1; + SSAB := Term6 - Term3 - Term4 + Term1; + SSerrorBetween := Term10 - Term6; + SSWithinSubjects := Term2 - Term10; + SSC := Term5 - Term1; + SSAC := Term7 - Term3 - Term5 + Term1; + SSBC := Term8 - Term4 - Term5 + Term1; + SSABC := Term9 - Term6 - Term7 - Term8 + Term3 + Term4 + Term5 - Term1; + SSerrorWithin := Term2 - Term9 - Term10 + Term6; + MSA := SSA / DFA; + MSB := SSB / DFB; + MSAB := SSAB / DFAB; + MSerrorBetween := SSerrorBetween / DFerrorBetween; + MSC := SSC / DFC; + MSAC := SSAC / DFAC; + MSBC := SSBC / DFBC; + MSABC := SSABC / DFABC; + MSerrorWithin := SSerrorWithin / DFerrorWithin; + FA := MSA / MSerrorBetween; + FB := MSB / MSerrorBetween; + FAB := MSAB / MSerrorBetween; + FC := MSC / MSerrorWithin; + FAC := MSAC / MSerrorWithin; + FBC := MSBC / MSerrorWithin; + FABC := MSABC / MSerrorWithin; + ProbA := probf(FA,DFA,DFerrorBetween); + ProbB := probf(FB,DFB,DFerrorBetween); + ProbAB := probf(FAB,DFAB,DFerrorBetween); + ProbC := probf(FC,DFC,DFerrorWithin); + ProbAC := probf(FAC,DFAC,DFerrorWithin); + ProbBC := probf(FBC,DFBC,DFerrorWithin); + ProbABC := probf(FABC,DFABC,DFerrorWithin); +end; + +procedure TABRAnovaFrm.Summarize(Sender: TObject); +var + outline : string; + +begin + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('SOURCE DF SS MS F PROB.'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Between Subjects %5.0f%10.3f',[DFBetween,SSBetweenSubjects]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format(' A Effects %5.0f%10.3f%10.3f%10.3f%10.3f', + [DFA, SSA, MSA, FA, ProbA]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format(' B Effects %5.0f%10.3f%10.3f%10.3f%10.3f', + [DFB, SSB, MSB, FB, ProbB]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format(' AB Effects %5.0f%10.3f%10.3f%10.3f%10.3f', + [DFAB, SSAB, MSAB, FAB, ProbAB]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format(' Error Between %5.0f%10.3f%10.3f', + [DFerrorBetween,SSerrorBetween,MSerrorBetween]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Within Subjects %5.0f%10.3f', + [DFWithin,SSWithinSubjects]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format(' C Replications %5.0f%10.3f%10.3f%10.3f%10.3f', + [DFC, SSC, MSC, FC, ProbC]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format(' AC Effects %5.0f%10.3f%10.3f%10.3f%10.3f', + [DFAC, SSAC, MSAC, FAC, ProbAC]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format(' BC Effects %5.0f%10.3f%10.3f%10.3f%10.3f', + [DFBC, SSBC, MSBC, FBC, ProbBC]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format(' ABC Effects %5.0f%10.3f%10.3f%10.3f%10.3f', + [DFABC, SSABC, MSABC, FABC, ProbABC]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format(' Error Within %5.0f%10.3f%10.3f', + [DFerrorWithin, SSerrorWithin, MSerrorWithin]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Total %5.0f%10.3f', + [DFBetween + DFWithin, SSBetweenSubjects + SSWithinSubjects]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; +end; + +procedure TABRAnovaFrm.MeansReport(Sender: TObject); +var + ColHeader, LabelStr : string; + Title : string; + i, j, k, row : integer; + +begin + row := 1; + OutPutFrm.RichEdit.Clear; + Title := 'ABR Means Table'; + ColHeader := 'Repeated Measures'; + for i := 1 to NoAGrps do + begin + for j := 1 to NoBGrps do + begin + LabelStr := format('A%d B%d',[i,j]); + RowLabels[row-1] := LabelStr; + for k := 1 to NoSelected do + begin + AMatrix[row-1,k-1] := ABCSums[i-1,j-1,k-1] / NinGrp; + ColLabels[k-1] := OS3MainFrm.DataGrid.Cells[ColNoSelected[k-1],0]; + end; + row := row + 1; + end; + end; + MAT_PRINT(AMatrix,MaxRows,NoSelected,Title,RowLabels,ColLabels,NinGrp); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); + + Title := 'AB Means Table'; + ColHeader := 'B Levels'; + for i := 1 to NoAGrps do + begin + LabelStr := format('A%d',[i]); + RowLabels[i-1] := LabelStr; + for j := 1 to NoBGrps do + begin + AMatrix[i-1,j-1] := ABSums[i-1,j-1] / (NinGrp * NoSelected); + end; + end; + for j := 1 to NoBGrps do + begin + LabelStr := format('B %d',[j]); + ColLabels[j-1] := LabelStr; + end; + MAT_PRINT(AMatrix,NoAgrps,NoBgrps,Title,RowLabels,ColLabels,NinGrp*NoSelected); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); + + Title := 'AC Means Table'; + ColHeader := 'C Levels'; + for i := 1 to NoAGrps do + begin + LabelStr := format('A%d',[i-1]); + RowLabels[i-1] := LabelStr; + for j := 1 to NoSelected do + AMatrix[i-1,j-1] := ACSums[i-1,j-1] / (NinGrp * NoBGrps); + end; + for j := 1 to NoSelected do + begin + LabelStr := format('C %d',[j-1]); + ColLabels[j-1] := LabelStr; + end; + MAT_PRINT(AMatrix,NoAGrps,NoSelected,Title,RowLabels,ColLabels,NinGrp*NoBGrps); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); + + Title := 'BC Means Table'; + ColHeader := 'C Levels'; + for i := 1 to NoBGrps do + begin + LabelStr := format('B%d',[i]); + RowLabels[i-1] := LabelStr; + for j := 1 to NoSelected do + begin + AMatrix[i-1,j-1] := BCSums[i-1,j-1] / (NinGrp * NoAGrps); + end; + end; + for j := 1 to NoSelected do + begin + LabelStr := format('C %d',[j]); + ColLabels[j-1] := LabelStr; + end; + MAT_PRINT(AMatrix,NoBGrps,NoSelected,Title,RowLabels,ColLabels,NinGrp*NoAGrps); + OutPutFrm.ShowModal; +end; + +procedure TABRAnovaFrm.BoxTests(Sender: TObject); +var + XVector, XSums : DblDyneVec; + DetMat, MeanCovMat : DblDyneMat; + Det, M1, M2, Sum1, C1, C2, f1, f2, chi, ProbChi, X, avgvar,avgcov : double; + ColHeader, LabelStr : string; + Title : string; + i, j, k, l, row, SubjA, SubjB, N, p, quad : integer; + errorcode : boolean; + +begin + SetLength(XVector,NoSelected); + SetLength(XSums,NoSelected); + SetLength(DetMat,NoSelected+1,NoSelected+1); + SetLength(MeanCovMat,NoSelected+1,NoSelected+1); + SetLength(PooledMat,NoSelected+1,NoSelected+1); + + for i := 1 to NoSelected do + begin + LabelStr := format('C%d',[i]); + RowLabels[i-1] := LabelStr; + ColLabels[i-1] := LabelStr; + for j := 1 to NoSelected do PooledMat[i-1,j-1] := 0.0; + end; + + // get variance-covariance AMatrix for the repeated measures within + // each combination of A and B levels. Pool them for the pooled + // covariance AMatrix. Get Determinants of each AMatrix. + OutPutFrm.RichEdit.Clear; + Sum1 := 0.0; + for i := 1 to NoAGrps do + begin + for j := 1 to NoBGrps do + begin + LabelStr := format('Variance-Covariance AMatrix for A%d B%d', + [i,j]); + Title := LabelStr; + ColHeader := 'C Levels'; + // initialize AMatrix for this combination + for k := 1 to NoSelected do + begin + for l := 1 to NoSelected do AMatrix[k-1,0] := 0.0; + XSums[k-1] := 0.0; + end; + // read data and add to covariances + for row := 1 to NoCases do + begin + if Not GoodRecord(row,selected,ColNoSelected) then continue; + SubjA := round(StrToFLoat(Trim(OS3MainFrm.DataGrid.Cells[ACol,row]))); + SubjA := SubjA - MinA + 1; + SubjB := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[BCol,row]))); + SubjB := SubjB - MinB + 1; + if ((SubjA <> i)or(SubjB <> j)) then continue; + for k := 1 to NoSelected do + begin + X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[ColNoSelected[k-1],row])); + XVector[k-1] := X; + XSums[k-1] := XSums[k-1] + X; + end; + for k := 1 to NoSelected do + begin + for l := 1 to NoSelected do + begin + AMatrix[k-1,l-1] := AMatrix[k-1,l-1] + (XVector[k-1] * XVector[l-1]); + end; + end; + end; // next case + // convert sums of cross-products to variance-covariance + for k := 1 to NoSelected do + begin + for l := 1 to NoSelected do + begin + AMatrix[k-1,l-1] := AMatrix[k-1,l-1] - (XSums[k-1]*XSums[l-1] / + NinGrp); + AMatrix[k-1,l-1] := AMatrix[k-1,l-1] / (NinGrp - 1); + PooledMat[k-1,l-1] := PooledMat[k-1,l-1] + AMatrix[k-1,l-1]; + end; + end; + MAT_PRINT(AMatrix,NoSelected,NoSelected,Title,RowLabels,ColLabels,NoCases); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); + for k := 1 to NoSelected do + for l := 1 to NoSelected do + DetMat[k-1,l-1] := AMatrix[k-1,l-1]; + Determ(DetMat,NoSelected, NoSelected,Det,errorcode); + if (Det > 0.0e35) then Sum1 := sum1 + (NinGrp * ln(Det)) + else ShowMessage('WARNING! Determinant of a covariance AMatrix near 0.'); + end;// next B level + end; // next A level + + // get pooled variance-covariance + for i := 1 to NoSelected do + for j := 1 to NoSelected do + PooledMat[i-1,j-1] := PooledMat[i-1,j-1] / (NoAGrps * NoBGrps); + Title := 'Pooled Variance-Covariance AMatrix'; + MAT_PRINT(PooledMat,NoSelected,NoSelected,Title,RowLabels,ColLabels,NoCases); + + // calculate F-Max for variance homogeneity + + // calculate Box test for covariance homogeneity + for i := 1 to NoSelected do + for j := 1 to NoSelected do + DetMat[i-1,j-1] := PooledMat[i-1,j-1]; + Determ(DetMat,NoSelected,NoSelected,Det,errorcode); + if (Det > 0.0e35) then + begin + M1 := (NinGrp*NoAGrps*NoBGrps * ln(Det)) - Sum1; + C1 := (2.0 * NoSelected * NoSelected + 3.0 * NoSelected - 1.0) / + (6.0 * (NoSelected+1) * (NoAGrps * NoBGrps - 1.0)); + C1 := C1 * ( (NoAGrps * NoBGrps * (1.0 / NinGrp)) - (1.0 / (NinGrp * NoAGrps * NoBGrps))); + f1 := (NoSelected * (NoSelected + 1.0) * (NoAGrps * NoBGrps - 1.0))/2.0; + chi := (1.0 - C1) * M1; + ProbChi := 1.0 - chisquaredprob(chi,round(f1)); + OutPutFrm.RichEdit.Lines.Add(''); + LabelStr := 'Test that sample covariances are from same population:'; + OutPutFrm.RichEdit.Lines.Add(LabelStr); + LabelStr := format('Chi-Squared := %10.3f with %d degrees of freedom.', + [chi,round(f1)]); + OutPutFrm.RichEdit.Lines.Add(LabelStr); + LabelStr := format('Probability of > Chi-Squared := %10.3f',[ProbChi]); + OutPutFrm.RichEdit.Lines.Add(LabelStr); + OutPutFrm.RichEdit.Lines.Add(''); + end + else ShowMessage('WARNING! Determinant of a pooled covariance AMatrix near 0.'); + // test that pooled covariance has form of equal variances and equal covariances + if (Det > 0.0e35) then // determinant of pooled covariance > 0 + begin + M2 := Det; + avgvar := 0.0; + for i := 1 to NoSelected do avgvar := avgvar + PooledMat[i-1,i-1]; + avgvar := avgvar / NoSelected; + avgcov := 0.0; + for i := 1 to NoSelected-1 do + for j := i+1 to NoSelected do + avgcov := avgcov + PooledMat[i-1,j-1]; + avgcov := avgcov / (NoSelected * (NoSelected - 1) / 2); + for i := 1 to NoSelected do DetMat[i-1,i-1] := avgvar; + for i := 1 to NoSelected-1 do + begin + for j := i+1 to NoSelected do + begin + DetMat[i-1,j-1] := avgcov; + DetMat[j-1,i-1] := avgcov; + end; + end; + Determ(DetMat,NoSelected,NoSelected,Det,errorcode); + if (Det > 0.0e35) then + begin + N := NoAGrps * NoBGrps * NinGrp; + p := NoAGrps * NoBGrps; + quad := NoSelected * NoSelected + NoSelected - 4; + M2 := ln(M2 / Det); + M2 := -(N - p) * M2; + C2 := NoSelected * (NoSelected + 1) * (NoSelected + 1) * + (2 * NoSelected - 3); + C2 := C2 / (6 * (N - p) * (NoSelected - 1) * quad); + f2 := quad / 2; + chi := (1.0 - C2) * M2; + ProbChi := 1.0 - chisquaredprob(chi,round(f2)); + OutPutFrm.RichEdit.Lines.Add(''); + LabelStr := 'Test that variance-covariances AMatrix has equal variances and equal covariances:'; + OutPutFrm.RichEdit.Lines.Add(LabelStr); + LabelStr := format('Chi-Squared := %10.3f with %d degrees of freedom.', + [chi,round(f2)]); + OutPutFrm.RichEdit.Lines.Add(LabelStr); + LabelStr := format('Probability of > Chi-Squared := %10.3f',[ProbChi]); + OutPutFrm.RichEdit.Lines.Add(LabelStr); + OutPutFrm.RichEdit.Lines.Add(''); + end + else ShowMessage('WARNING! Determinant of theoretical covariance AMatrix near zero.'); + end; + OutPutFrm.ShowModal; + + // cleanup + PooledMat := nil; + MeanCovMat := nil; + DetMat := nil; + XSums := nil; + XVector := nil; +end; + +procedure TABRAnovaFrm.GraphMeans(Sender: TObject); +var + MaxMean : double; + outline : string; + i, j : integer; + +begin + // Do AB interaction + // Get maximum cell mean + MaxMean := ABSums[0,0] / (NinGrp*NoSelected); + SetLength(GraphFrm.Ypoints,NoAGrps,NoBGrps); + SetLength(GraphFrm.Xpoints,1,NoBGrps); + for i := 1 to NoAGrps do + begin + outline := 'A ' + IntToStr(i); + GraphFrm.SetLabels[i] := outline; + for j := 1 to NoBGrps do + begin + GraphFrm.Ypoints[i-1,j-1] := ABSums[i-1,j-1] / (NinGrp * NoSelected); + if GraphFrm.Ypoints[i-1,j-1] > MaxMean then MaxMean := GraphFrm.Ypoints[i-1,j-1]; + end; + end; + for j := 1 to NoBGrps do + begin + GraphFrm.Xpoints[0,j-1] := j; + end; + + GraphFrm.nosets := NoAGrps; + GraphFrm.nbars := NoBGrps; + GraphFrm.Heading := 'AxBxR ANOVA'; + GraphFrm.XTitle := 'B TREATMENT GROUP'; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.GraphType := 2; // 3d Vertical Bar Chart + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + + // Do AC interaction + MaxMean := ACSums[0,0] / (NinGrp*NoBGrps); + SetLength(GraphFrm.Ypoints,NoAGrps,NoSelected); + SetLength(GraphFrm.Xpoints,1,NoSelected); + for i := 1 to NoAGrps do + begin + outline := 'A ' + IntToStr(i); + GraphFrm.SetLabels[i] := outline; + for j := 1 to NoSelected do + begin + GraphFrm.Ypoints[i-1,j-1] := ACSums[i-1,j-1] / (NinGrp * NoBGrps); + if GraphFrm.Ypoints[i-1,j-1] > MaxMean then MaxMean := GraphFrm.Ypoints[i-1,j-1]; + end; + end; + for j := 1 to NoSelected do + begin + GraphFrm.Xpoints[0,j-1] := j; + end; + GraphFrm.nosets := NoAGrps; + GraphFrm.nbars := NoSelected; + GraphFrm.Heading := 'AxBxR ANOVA'; + GraphFrm.XTitle := 'C TREATMENT (WITHIN SUBJECTS) GROUP'; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.GraphType := 2; // 3d Vertical Bar Chart + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + + // Do BC interaction + SetLength(GraphFrm.Ypoints,NoBGrps,NoSelected); + SetLength(GraphFrm.Xpoints,NoSelected); + MaxMean := BCSums[0,0] / (NinGrp*NoAGrps); + for i := 1 to NoBGrps do + for j := 1 to NoSelected do + if ((BCSums[i-1,j-1] / (NinGrp*NoAGrps)) > MaxMean) then + MaxMean := BCSums[i-1,j-1] / (NinGrp*NoAGrps); + for i := 1 to NoBGrps do + begin + outline := 'B ' + IntToStr(i); + GraphFrm.SetLabels[i] := outline; + for j := 1 to NoSelected do + begin + GraphFrm.Ypoints[i-1,j-1] := BCSums[i-1,j-1] / (NinGrp * NoAGrps); + if GraphFrm.Ypoints[i-1,j-1] > MaxMean then MaxMean := GraphFrm.Ypoints[i-1,j-1]; + end; + end; + for j := 1 to NoSelected do + begin + GraphFrm.Xpoints[0,j-1] := j; + end; + GraphFrm.nosets := NoBGrps; + GraphFrm.nbars := NoSelected; + GraphFrm.Heading := 'AxBxR ANOVA'; + GraphFrm.XTitle := 'C TREATMENT (WITHIN SUBJECTS) GROUP'; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.GraphType := 2; // 3d Vertical Bar Chart + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + // cleanup the heap + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; +end; + +procedure TABRAnovaFrm.CleanUp(Sender: TObject); +begin + ABCNcnt := nil; + ABCSums := nil; + ColLabels := nil; + RowLabels := nil; + Ccnt := nil; + Bcnt := nil; + Acnt := nil; + SumPSqr := nil; + AMatrix := nil; + BCSums := nil; + ACSums := nil; + ABSums := nil; + CSums := nil; + BSums := nil; + ASums := nil; + ColNoSelected := nil; +end; + +initialization + {$I abranovaunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/ABRANOVAUNIT.lfm b/applications/lazstats/source_orig/ABRANOVAUNIT.lfm new file mode 100644 index 000000000..c5b005787 --- /dev/null +++ b/applications/lazstats/source_orig/ABRANOVAUNIT.lfm @@ -0,0 +1,418 @@ +object ABRAnovaFrm: TABRAnovaFrm + Left = 228 + Height = 355 + Top = 104 + Width = 534 + Caption = 'AxBxR ANOVA (two between and repeated measures)' + ClientHeight = 355 + ClientWidth = 534 + OnShow = FormShow + LCLVersion = '0.9.29' + object Label1: TLabel + Left = 16 + Height = 14 + Top = 8 + Width = 94 + Caption = 'Available Variables:' + ParentColor = False + end + object Label2: TLabel + Left = 255 + Height = 14 + Top = 24 + Width = 83 + Caption = 'Factor A Variable' + ParentColor = False + end + object Label3: TLabel + Left = 255 + Height = 14 + Top = 96 + Width = 82 + Caption = 'Factor B Variable' + ParentColor = False + end + object Label4: TLabel + Left = 255 + Height = 14 + Top = 168 + Width = 97 + Caption = 'Repeated Measures' + ParentColor = False + end + object VarList: TListBox + Left = 16 + Height = 239 + Top = 24 + Width = 181 + ItemHeight = 0 + MultiSelect = True + TabOrder = 0 + end + object AInBtn: TBitBtn + Left = 211 + Height = 26 + Top = 24 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = AInBtnClick + TabOrder = 1 + end + object AOutBtn: TBitBtn + Left = 211 + Height = 26 + Top = 56 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = AOutBtnClick + TabOrder = 2 + end + object BInBtn: TBitBtn + Left = 210 + Height = 26 + Top = 96 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = BInBtnClick + TabOrder = 3 + end + object BOutBtn: TBitBtn + Left = 210 + Height = 26 + Top = 128 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = BOutBtnClick + TabOrder = 4 + end + object CInBtn: TBitBtn + Left = 211 + Height = 26 + Top = 168 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = CInBtnClick + TabOrder = 5 + end + object COutBtn: TBitBtn + Left = 210 + Height = 26 + Top = 200 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = COutBtnClick + TabOrder = 6 + end + object ACodes: TEdit + Left = 255 + Height = 21 + Top = 40 + Width = 139 + TabOrder = 7 + Text = 'ACodes' + end + object BCodes: TEdit + Left = 255 + Height = 21 + Top = 112 + Width = 138 + TabOrder = 8 + Text = 'BCodes' + end + object CList: TListBox + Left = 256 + Height = 155 + Top = 184 + Width = 143 + ItemHeight = 0 + TabOrder = 9 + end + object GroupBox1: TGroupBox + Left = 16 + Height = 69 + Top = 272 + Width = 225 + Caption = 'Options:' + ClientHeight = 51 + ClientWidth = 221 + TabOrder = 10 + object PlotChk: TCheckBox + Left = 7 + Height = 17 + Top = 1 + Width = 72 + Caption = 'Plot Means' + TabOrder = 0 + end + object TestChk: TCheckBox + Left = 9 + Height = 17 + Top = 24 + Width = 177 + Caption = 'Test Homogeneity of Covariance' + TabOrder = 1 + end + end + object ResetBtn: TButton + Left = 440 + Height = 27 + Top = 24 + Width = 89 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 11 + end + object CancelBtn: TButton + Left = 440 + Height = 27 + Top = 72 + Width = 89 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 12 + end + object ComputeBtn: TButton + Left = 440 + Height = 27 + Top = 168 + Width = 89 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 13 + end + object ReturnBtn: TButton + Left = 440 + Height = 27 + Top = 216 + Width = 89 + Caption = 'Return' + ModalResult = 1 + TabOrder = 14 + end + object HelpBtn: TButton + Tag = 102 + Left = 440 + Height = 27 + Top = 120 + Width = 89 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 15 + end +end diff --git a/applications/lazstats/source_orig/ABRANOVAUNIT.lrs b/applications/lazstats/source_orig/ABRANOVAUNIT.lrs new file mode 100644 index 000000000..7b1ed2094 --- /dev/null +++ b/applications/lazstats/source_orig/ABRANOVAUNIT.lrs @@ -0,0 +1,347 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TABRAnovaFrm','FORMDATA',[ + 'TPF0'#12'TABRAnovaFrm'#11'ABRAnovaFrm'#4'Left'#3#228#0#6'Height'#3'c'#1#3'To' + +'p'#2'h'#5'Width'#3#22#2#7'Caption'#6'/AxBxR ANOVA (two between and repeated' + +' measures)'#12'ClientHeight'#3'c'#1#11'ClientWidth'#3#22#2#6'OnShow'#7#8'Fo' + +'rmShow'#10'LCLVersion'#6#8'0.9.30.4'#0#6'TLabel'#6'Label1'#4'Left'#2#16#6'H' + +'eight'#2#16#3'Top'#2#8#5'Width'#2'f'#7'Caption'#6#20'Available Variables:' + +#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#255#0#6'Height'#2#16#3 + +'Top'#2#24#5'Width'#2'Z'#7'Caption'#6#17'Factor A Variable'#11'ParentColor'#8 + +#0#0#6'TLabel'#6'Label3'#4'Left'#3#255#0#6'Height'#2#16#3'Top'#2'`'#5'Width' + +#2'Y'#7'Caption'#6#17'Factor B Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'L' + +'abel4'#4'Left'#3#255#0#6'Height'#2#16#3'Top'#3#168#0#5'Width'#2'g'#7'Captio' + +'n'#6#17'Repeated Measures'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'L' + +'eft'#2#16#6'Height'#3#239#0#3'Top'#2#24#5'Width'#3#181#0#10'ItemHeight'#2#0 + +#11'MultiSelect'#9#8'TabOrder'#2#0#0#0#7'TBitBtn'#6'AInBtn'#4'Left'#3#211#0#6 + +'Height'#2#26#3'Top'#2#24#5'Width'#2#30#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0 + +'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4 + +#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\' + +#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?' + +#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0 + +#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255 + +#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137 + +#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255 + +#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158 + +#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255 + +#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255 + +'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q' + +#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'AInBtnClick'#8'TabOrder'#2#1 + ,#0#0#7'TBitBtn'#7'AOutBtn'#4'Left'#3#211#0#6'Height'#2#26#3'Top'#2'8'#5'Widt' + +'h'#2#30#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0 + +#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0 + +#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247 + +'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'[' + +#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255 + +'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q' + +#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206 + +#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z' + +#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0 + +'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212#163 + +#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199 + +#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0 + +#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']' + +#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I' + +#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7 + +'OnClick'#7#12'AOutBtnClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#6'BInBtn'#4'Left' + +#3#210#0#6'Height'#2#26#3'Top'#2'`'#5'Width'#2#30#10'Glyph.Data'#10':'#4#0#0 + +'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0 + +#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255 + +#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211 + +#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130 + +#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$' + +#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171 + +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204 + +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J' + +#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255 + +'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161 + +'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'BInBtnClick'#8'TabOrde' + +'r'#2#3#0#0#7'TBitBtn'#7'BOutBtn'#4'Left'#3#210#0#6'Height'#2#26#3'Top'#3#128 + +#0#5'Width'#2#30#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0 + +#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0 + +#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153 + +'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V' + +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255 + +'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195 + +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + ,#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255 + +#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135 + +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#12'BOutBtnClick'#8'TabOrder'#2#4#0#0#7'TBitBtn'#6'CInB' + +'tn'#4'Left'#3#211#0#6'Height'#2#26#3'Top'#3#168#0#5'Width'#2#30#10'Glyph.Da' + +'ta'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0 + +#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184 + +#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255 + +#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255 + +#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142 + +#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J' + +#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162 + +#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255 + +#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130 + +#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199 + +'t'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5' + +#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'CInBtnClick'#8 + +'TabOrder'#2#5#0#0#7'TBitBtn'#7'COutBtn'#4'Left'#3#210#0#6'Height'#2#26#3'To' + +'p'#3#200#0#5'Width'#2#30#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0 + +#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd' + +#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G' + +#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161 + +'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131 + +#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/' + +'x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e' + +#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255 + +#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132 + +#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255 + +#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154 + +#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255 + +#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201 + +#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'Num' + +'Glyphs'#2#0#7'OnClick'#7#12'COutBtnClick'#8'TabOrder'#2#6#0#0#5'TEdit'#6'AC' + +'odes'#4'Left'#3#255#0#6'Height'#2#23#3'Top'#2'('#5'Width'#3#139#0#8'TabOrde' + +'r'#2#7#4'Text'#6#6'ACodes'#0#0#5'TEdit'#6'BCodes'#4'Left'#3#255#0#6'Height' + +#2#23#3'Top'#2'p'#5'Width'#3#138#0#8'TabOrder'#2#8#4'Text'#6#6'BCodes'#0#0#8 + +'TListBox'#5'CList'#4'Left'#3#0#1#6'Height'#3#155#0#3'Top'#3#184#0#5'Width'#3 + +#143#0#10'ItemHeight'#2#0#8'TabOrder'#2#9#0#0#9'TGroupBox'#9'GroupBox1'#4'Le' + +'ft'#2#16#6'Height'#2'E'#3'Top'#3#16#1#5'Width'#3#225#0#7'Caption'#6#8'Optio' + +'ns:'#12'ClientHeight'#2'3'#11'ClientWidth'#3#221#0#8'TabOrder'#2#10#0#9'TCh' + +'eckBox'#7'PlotChk'#4'Left'#2#7#6'Height'#2#19#3'Top'#2#1#5'Width'#2'O'#7'Ca' + +'ption'#6#10'Plot Means'#8'TabOrder'#2#0#0#0#9'TCheckBox'#7'TestChk'#4'Left' + +#2#9#6'Height'#2#19#3'Top'#2#24#5'Width'#3#194#0#7'Caption'#6#30'Test Homoge' + +'neity of Covariance'#8'TabOrder'#2#1#0#0#0#7'TButton'#8'ResetBtn'#4'Left'#3 + +#184#1#6'Height'#2#27#3'Top'#2#24#5'Width'#2'Y'#7'Caption'#6#5'Reset'#7'OnCl' + +'ick'#7#13'ResetBtnClick'#8'TabOrder'#2#11#0#0#7'TButton'#9'CancelBtn'#4'Lef' + +'t'#3#184#1#6'Height'#2#27#3'Top'#2'H'#5'Width'#2'Y'#7'Caption'#6#6'Cancel' + +#11'ModalResult'#2#2#8'TabOrder'#2#12#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3 + +#184#1#6'Height'#2#27#3'Top'#3#168#0#5'Width'#2'Y'#7'Caption'#6#7'Compute'#7 + +'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#13#0#0#7'TButton'#9'ReturnBtn' + +#4'Left'#3#184#1#6'Height'#2#27#3'Top'#3#216#0#5'Width'#2'Y'#7'Caption'#6#6 + +'Return'#11'ModalResult'#2#1#8'TabOrder'#2#14#0#0#7'TButton'#7'HelpBtn'#3'Ta' + +'g'#2'f'#4'Left'#3#184#1#6'Height'#2#27#3'Top'#2'x'#5'Width'#2'Y'#7'Caption' + +#6#4'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2#15#0#0#0 +]); diff --git a/applications/lazstats/source_orig/AJKLogLinUnit.pas b/applications/lazstats/source_orig/AJKLogLinUnit.pas new file mode 100644 index 000000000..a74f1e186 --- /dev/null +++ b/applications/lazstats/source_orig/AJKLogLinUnit.pas @@ -0,0 +1,980 @@ +unit AJKLogLinUnit; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, Grids, Math, OutPutUnit, Buttons, ExtCtrls, MainUnit, FunctionsUnit, + GlobalDefs, DataProcs; + +type cube = array[1..10,1..10,1..10] of double; +type matrix = array[1..10,1..10] of double; +type vector = array[1..10] of double; +type quad = array[1..10,1..10,1..10,1..7] of double; + +type + TAJKLogLinearFrm = class(TForm) + Memo1: TMemo; + Label1: TLabel; + NrowsEdit: TEdit; + Label2: TLabel; + NcolsEdit: TEdit; + Label3: TLabel; + NslicesEdit: TEdit; + Grid: TStringGrid; + ComputeBtn: TButton; + ExitBtn: TButton; + FileFromGrp: TRadioGroup; + VarList: TListBox; + RowInBtn: TBitBtn; + RowOutBtn: TBitBtn; + Label4: TLabel; + RowVarEdit: TEdit; + ColInBtn: TBitBtn; + ColOutBtn: TBitBtn; + Label5: TLabel; + ColVarEdit: TEdit; + FreqInBtn: TBitBtn; + FreqOutBtn: TBitBtn; + Label6: TLabel; + FreqVarEdit: TEdit; + CancelBtn: TButton; + ResetBtn: TButton; + SliceBtnIn: TBitBtn; + SliceBtnOut: TBitBtn; + Label7: TLabel; + SliceVarEdit: TEdit; + procedure FormShow(Sender: TObject); + procedure ExitBtnClick(Sender: TObject); + procedure NrowsEditKeyPress(Sender: TObject; var Key: Char); + procedure NcolsEditKeyPress(Sender: TObject; var Key: Char); + procedure NslicesEditKeyPress(Sender: TObject; var Key: Char); + procedure ComputeBtnClick(Sender: TObject); + procedure ModelEffect(Nrows,Ncols,Nslices : integer; + VAR Data : cube; + VAR RowMarg : vector; + VAR ColMarg : vector; + VAR SliceMarg : vector; + VAR AB : matrix; + VAR AC : matrix; + VAR BC : matrix; + VAR Total : double; + Model : integer); + procedure Iterate(Nrows, Ncols, Nslices : integer; + VAR Data : cube; + VAR RowMarg : vector; + VAR ColMarg : vector; + VAR SliceMarg : vector; + VAR Total : double; + VAR Expected : cube; + VAR NewRowMarg : vector; + VAR NewColMarg : vector; + VAR NewSliceMarg : vector; + VAR NewTotal : double); + procedure PrintTable(Nrows, Ncols, Nslices : integer; + VAR Data : cube; + VAR RowMarg : vector; + VAR ColMarg : vector; + VAR SliceMarg : vector; + Total : double); + procedure PrintLamdas(Nrows,Ncols,Nslices : integer; + Var CellLambdas : Quad; + mu : double); + procedure PrintMatrix(VAR X : matrix; + Nrows, Ncols: integer; + Title : string); + procedure CancelBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure FileFromGrpClick(Sender: TObject); + procedure RowInBtnClick(Sender: TObject); + procedure RowOutBtnClick(Sender: TObject); + procedure ColInBtnClick(Sender: TObject); + procedure ColOutBtnClick(Sender: TObject); + procedure SliceBtnInClick(Sender: TObject); + procedure SliceBtnOutClick(Sender: TObject); + procedure FreqInBtnClick(Sender: TObject); + procedure FreqOutBtnClick(Sender: TObject); + + private + { Private declarations } + public + { Public declarations } + end; + +var + AJKLogLinearFrm: TAJKLogLinearFrm; + +implementation + +{$R *.DFM} + +procedure TAJKLogLinearFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(Self); +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.ExitBtnClick(Sender: TObject); +begin + Close; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.NrowsEditKeyPress(Sender: TObject; + var Key: Char); +begin + if ord(Key) = 13 then NcolsEdit.SetFocus; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.NcolsEditKeyPress(Sender: TObject; + var Key: Char); +begin + if ord(Key) = 13 then NslicesEdit.SetFocus; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.NslicesEditKeyPress(Sender: TObject; + var Key: Char); +var + i, j, k, row : integer; + Nslices, Ncols, Nrows : integer; +begin + if ord(Key) = 13 then + begin + Nrows := StrToInt(NrowsEdit.Text); + Ncols := StrToInt(NcolsEdit.Text); + Nslices := StrToInt(NslicesEdit.Text); + Grid.RowCount := Nrows * Ncols * Nslices + 1; + row := 1; + for k := 1 to Nslices do + begin + for j := 1 to Ncols do + begin + for i := 1 to Nrows do + begin + Grid.Cells[0,row] := IntToStr(i); + Grid.Cells[1,row] := IntToStr(j); + Grid.Cells[2,row] := IntToStr(k); + row := row + 1; + end; + end; + end; + Grid.SetFocus; + end; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.ComputeBtnClick(Sender: TObject); +var + i, j, k, row, col, slice, Nrows, Ncols, Nslices : integer; + Data : cube; + AB, AC, BC : matrix; + RowMarg, ColMarg, SliceMarg : vector; + Total : double; + arraysize : integer; + Model : integer; + astr, Title : string; + RowCol, ColCol, SliceCol, Fcol : integer; + GridPos : IntDyneVec; + value : integer; + Fx : double; + +begin + Nrows := 0; + Ncols := 0; + Nslices := 0; + Total := 0.0; + + if FileFromGrp.ItemIndex = 0 then // mainfrm input + begin + SetLength(GridPos,4); + for i := 1 to NoVariables do + begin + if RowVarEdit.Text = MainFrm.Grid.Cells[i,0] then GridPos[0] := i; + if ColVarEdit.Text = MainFrm.Grid.Cells[i,0] then GridPos[1] := i; + if SliceVarEdit.Text = MainFrm.Grid.Cells[i,0] then GridPos[2] := i; + if FreqVarEdit.Text = MainFrm.Grid.Cells[i,0] then GridPos[3] := i; + end; + // get no. of rows, columns and slices + for i := 1 to MainFrm.Grid.RowCount - 1 do + begin + value := StrToInt(MainFrm.Grid.Cells[GridPos[0],i]); + if value > Nrows then Nrows := value; + value := StrToInt(MainFrm.Grid.Cells[GridPos[1],i]); + if value > Ncols then Ncols := value; + value := StrToInt(MainFrm.Grid.Cells[GridPos[2],i]); + if value > Nslices then Nslices := value; + end; + for i := 1 to Nrows do + for j := 1 to Ncols do + AB[i,j] := 0.0; + for i := 1 to Nrows do + for k := 1 to Nslices do + AC[i,k] := 0.0; + for j := 1 to Ncols do + for k := 1 to Nslices do + BC[j,k] := 0.0; + arraysize := Nrows * Ncols * Nslices; + // Get data + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + Data[i,j,k] := 0.0; + rowcol := GridPos[0]; + colcol := GridPos[1]; + slicecol := GridPos[2]; + Fcol := GridPos[3]; + for i := 1 to MainFrm.Grid.RowCount - 1 do + begin + if Not GoodRecord(i, 4, GridPos) then continue; + row := StrToInt(MainFrm.Grid.Cells[rowcol,i]); + col := StrToInt(MainFrm.Grid.Cells[colcol,i]); + slice := StrToInt(MainFrm.Grid.Cells[slicecol,i]); + Fx := StrToInt(MainFrm.Grid.Cells[Fcol,i]); + Data[row,col,slice] := Data[row,col,slice] + Fx; + Total := Total + Fx; + RowMarg[row] := RowMarg[row] + Fx; + ColMarg[col] := ColMarg[col] + Fx; + SliceMarg[slice] := SliceMarg[slice] + Fx; + AB[row,col] := AB[row,col] + Fx; + AC[row,slice] := AC[row,slice] + Fx; + BC[col,slice] := BC[col,slice] + Fx; + end; + GridPos := nil; + end; + + if FileFromGrp.ItemIndex = 1 then // form input + begin + Nrows := StrToInt(NrowsEdit.Text); + Ncols := StrToInt(NcolsEdit.Text); + Nslices := StrToInt(NslicesEdit.Text); + for i := 1 to Nrows do + for j := 1 to Ncols do + AB[i,j] := 0.0; + for i := 1 to Nrows do + for k := 1 to Nslices do + AC[i,k] := 0.0; + for j := 1 to Ncols do + for k := 1 to Nslices do + BC[j,k] := 0.0; + arraysize := Nrows * Ncols * Nslices; + + // get data + for i := 1 to arraysize do + begin + row := StrToInt(Grid.Cells[0,i]); + col := StrToInt(Grid.Cells[1,i]); + slice := StrToInt(Grid.Cells[2,i]); + Data[row,col,slice] := StrToInt(Grid.Cells[3,i]); + AB[row,col] := AB[row,col] + Data[row,col,slice]; + AC[row,slice] := AC[row,slice] + Data[row,col,slice]; + BC[col,slice] := BC[col,slice] + Data[row,col,slice]; + Total := Total + Data[row,col,slice]; + RowMarg[row] := RowMarg[row] + Data[row,col,slice]; + ColMarg[col] := ColMarg[col] + Data[row,col,slice]; + SliceMarg[slice] := SliceMarg[slice] + Data[row,col,slice]; + end; + end; + + // print heading of output + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Log-Linear Analysis of a Three Dimension Table'); + OutPutFrm.RichEdit.Lines.Add(''); + + // print observed matrix + astr := 'Observed Frequencies'; + OutPutFrm.RichEdit.Lines.Add(astr); + PrintTable(Nrows,Ncols,Nslices,Data,RowMarg,ColMarg,SliceMarg,Total); + OutPutFrm.RichEdit.Lines.Add(''); + + // Print sub-matrices + Title := 'Sub-matrix AB'; + PrintMatrix(AB,Nrows,Ncols,Title); + Title := 'Sub-matrix AC'; + PrintMatrix(AC,Nrows,Nslices,Title); + Title := 'Sub-matrix BC'; + PrintMatrix(BC,Ncols,Nslices,Title); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + + for Model := 1 to 9 do + ModelEffect(Nrows,Ncols,Nslices,Data,RowMarg,ColMarg, + SliceMarg,AB,AC,BC,Total,Model); + + +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.ModelEffect(Nrows,Ncols,Nslices : integer; + VAR Data : cube; + VAR RowMarg : vector; + VAR ColMarg : vector; + VAR SliceMarg : vector; + VAR AB : matrix; + VAR AC : matrix; + VAR BC : matrix; + VAR Total : double; + Model : integer); +var + i, j, k, l : integer; + CellLambdas : Quad; + LogData, Expected : cube; + Title, astr : string; + NewRowMarg,NewColMarg,NewSliceMarg : vector; + LogRowMarg, LogColMarg, LogSliceMarg : vector; + NewTotal : double; + ABLogs, ACLogs, BCLogs : matrix; + LogTotal, mu, ModelTotal, Ysqr : double; + DF : integer; + +begin + // Get expected values for chosen model + if Model = 1 then // Saturated model + begin + Title := 'Saturated Model'; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + Expected[i,j,k] := Data[i,j,k]; + end; + + if Model = 2 then // independence + begin + Title := 'Model of Independence'; + Iterate(Nrows,Ncols,Nslices,Data,RowMarg,ColMarg,SliceMarg,Total, + Expected,NewRowMarg,NewColMarg,NewSliceMarg,NewTotal); + end; + + if Model = 3 then // no AB effect + begin + Title := 'No AB Effect'; + for i := 1 to Nrows do + for j := 1 to Ncols do + 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'; + for i := 1 to Nrows do + for j := 1 to Ncols do + 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'; + for i := 1 to Nrows do + for j := 1 to Ncols do + 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'; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + Expected[i,j,k] := (RowMarg[i] / Total) * + (ColMarg[j] / Total) * (Total / Nslices); + end; + + if Model = 7 then // no B effect + begin + Title := 'Model of no Column (B) effect'; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + Expected[i,j,k] := (RowMarg[i] / Total) * + (SliceMarg[k] / Total) * (Total / Ncols); + end; + + if Model = 8 then // no A effect + begin + Title := 'Model of no Row (A) effect'; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + Expected[i,j,k] := (ColMarg[j] / Total) * + (SliceMarg[k] / Total) * (Total / Nrows); + end; + + if Model = 9 then // Equiprobability Model + begin + Title := 'Equi-probability Model'; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + Expected[i,j,k] := Total / + (Nrows * NCols * Nslices); + end; + LogTotal := 0.0; + for i := 1 to Nrows do + begin + NewRowMarg[i] := 0.0; + LogRowMarg[i] := 0.0; + end; + for j := 1 to Ncols do + begin + NewColMarg[j] := 0.0; + LogColMarg[j] := 0.0; + end; + for k := 1 to Nslices do + begin + NewSliceMarg[k] := 0.0; + LogSliceMarg[k] := 0.0; + end; + + for i := 1 to Nrows do + for j := 1 to Ncols do + ABLogs[i,j] := 0.0; + + for i := 1 to Nrows do + for k := 1 to Nslices do + ACLogs[i,k] := 0.0; + + for j := 1 to Ncols do + for k := 1 to Nslices do + BCLogs[j,k] := 0.0; + + for i := 1 to Nrows do + begin + for j := 1 to Ncols do + begin + for k := 1 to Nslices do + begin + NewRowMarg[i] := NewRowMarg[i] + Expected[i,j,k]; + NewColMarg[j] := NewColMarg[j] + Expected[i,j,k]; + NewSliceMarg[k] := NewSliceMarg[k] + Expected[i,j,k]; + end; + end; + end; + + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + LogData[i,j,k] := ln(Expected[i,j,k]); + + for i := 1 to Nrows do + begin + for j := 1 to Ncols do + begin + for k := 1 to Nslices do + begin + LogRowMarg[i] := LogRowMarg[i] + LogData[i,j,k]; + LogColMarg[j] := LogColMarg[j] + LogData[i,j,k]; + LogSliceMarg[k] := LogSliceMarg[k] + LogData[i,j,k]; + ABLogs[i,j] := ABLogs[i,j] + LogData[i,j,k]; + ACLogs[i,k] := ACLogs[i,k] + LogData[i,j,k]; + BCLogs[j,k] := BCLogs[j,k] + LogData[i,j,k]; + LogTotal := LogTotal + LogData[i,j,k]; + end; + end; + end; + + for i := 1 to Nrows do LogRowMarg[i] := LogRowMarg[i] / (Ncols * Nslices); + for j := 1 to Ncols do LogColMarg[j] := LogColMarg[j] / (Nrows * Nslices); + for k := 1 to Nslices do LogSliceMarg[k] := LogSliceMarg[k] / (Ncols * Nrows); + LogTotal := LogTotal / (Ncols * Nrows * Nslices); + for i := 1 to Nrows do + for j := 1 to Ncols do + ABLogs[i,j] := ABLogs[i,j] / Nslices; + for i := 1 to Nrows do + for k := 1 to Nslices do + ACLogs[i,k] := ACLogs[i,k] / Ncols; + for j := 1 to Ncols do + for k := 1 to Nslices do + BCLogs[j,k] := BCLogs[j,k] / Nrows; + + for i := 1 to Nrows do + begin + for j := 1 to Ncols do + begin + for k := 1 to Nslices do + begin + CellLambdas[i,j,k,1] := LogRowMarg[i] - LogTotal; + CellLambdas[i,j,k,2] := LogColMarg[j] - LogTotal; + CellLambdas[i,j,k,3] := LogSliceMarg[k] - LogTotal; + CellLambdas[i,j,k,4] := ABLogs[i,j] - LogRowMarg[i] + - LogColMarg[j] + LogTotal; + CellLambdas[i,j,k,5] := ACLogs[i,k] - LogRowMarg[i] + - LogSliceMarg[k] + LogTotal; + CellLambdas[i,j,k,6] := BCLogs[j,k] - LogColMarg[j] + - LogSliceMarg[k] + LogTotal; + CellLambdas[i,j,k,7] := LogData[i,j,k] + LogRowMarg[i] + + LogColMarg[j] + LogSliceMarg[k] + - ABLogs[i,j] - ACLogs[i,k] + - BCLogs[j,k] - LogTotal; + end; + end; + end; + mu := LogTotal; + + // Get Y square for model + Ysqr := 0.0; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + Ysqr := Ysqr + (Data[i,j,k] * ln(Data[i,j,k] / Expected[i,j,k])); + Ysqr := 2.0 * Ysqr; + + OutPutFrm.RichEdit.Lines.Add(Title); + OutPutFrm.RichEdit.Lines.Add(''); + + astr := 'Expected Frequencies'; + OutPutFrm.RichEdit.Lines.Add(astr); + PrintTable(Nrows,Ncols,Nslices,Expected,NewRowMarg,NewColMarg, + NewSliceMarg,NewTotal); + OutPutFrm.RichEdit.Lines.Add(''); + + astr := 'Log Frequencies'; + OutPutFrm.RichEdit.Lines.Add(astr); + PrintTable(Nrows,Ncols,Nslices,LogData,LogRowMarg,LogColMarg,LogSliceMarg,LogTotal); + OutPutFrm.RichEdit.Lines.Add(''); + + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + astr := 'Cell Parameters'; + OutPutFrm.RichEdit.Lines.Add(astr); + PrintLamdas(Nrows,Ncols,Nslices,CellLambdas, mu); + OutPutFrm.RichEdit.Lines.Add(''); + + astr := 'G squared statistic for model fit = ' + format('%6.3f',[Ysqr]); + case Model of + 1 : DF := 0; // saturated + 2 : DF := Nrows * Ncols * Nslices - Nrows - Ncols - Nslices + 2; // independence + 3 : DF := Nslices * (Nrows - 1) * (Ncols - 1); //no AB effect + 4 : DF := Ncols * (Nrows - 1) * (Nslices - 1); // no AC effect + 5 : DF := Nrows * (Ncols - 1) * (Nslices - 1); // no BC effect + 6 : DF := Nrows * Ncols * Nslices - Nrows - Ncols + 1; // no C effect + 7 : DF := Nrows * Ncols * Nslices - Nrows - Nslices + 1; // no B effect + 8 : DF := Nrows * Ncols * Nslices - Ncols - Nslices + 1; // no A effect + 9 : DF := Nrows * Ncols * Nslices - 1; // Equiprobability + end; + astr := astr + ' D.F. = ' + IntToStr(DF); + OutPutFrm.RichEdit.Lines.Add(astr); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.Iterate(Nrows, Ncols, Nslices : integer; + VAR Data : cube; + VAR RowMarg : vector; + VAR ColMarg : vector; + VAR SliceMarg : vector; + VAR Total : double; + VAR Expected : cube; + VAR NewRowMarg : vector; + VAR NewColMarg : vector; + VAR NewSliceMarg : vector; + VAR NewTotal : double); + +Label Step; +var + previous : cube; + i, j, k : integer; + delta : double; + difference : double; + +begin + delta := 0.1; + difference := 0.0; + for i := 1 to Nrows do newrowmarg[i] := 0.0; + for j := 1 to Ncols do newcolmarg[j] := 0.0; + for k := 1 to Nslices do newslicemarg[k] := 0.0; + + // initialize expected values + for i := 1 to Nrows do + begin + for j := 1 to Ncols do + begin + for k := 1 to Nslices do + begin + expected[i,j,k] := 1.0; + previous[i,j,k] := 1.0; + end; + end; + end; + +Step: + // step 1: initialize new row margins and calculate expected value + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + newrowmarg[i] := newrowmarg[i] + expected[i,j,k]; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + expected[i,j,k] := (RowMarg[i] / newrowmarg[i]) * expected[i,j,k]; + + // step 2: initialize new col margins and calculate expected values + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + newcolmarg[j] := newcolmarg[j] + expected[i,j,k]; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + expected[i,j,k] := (ColMarg[j] / newcolmarg[j]) * expected[i,j,k]; + + // step 3: initialize new slice margins and calculate expected values + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + newslicemarg[k] := newslicemarg[k] + expected[i,j,k]; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + expected[i,j,k] := (SliceMarg[k] / newslicemarg[k]) * expected[i,j,k]; + + // step 4: check for change and quit if smaller than delta + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + if abs(Previous[i,j,k]-expected[i,j,k]) > difference then + difference := abs(Previous[i,j,k]-expected[i,j,k]); + + if difference < delta then + begin + newtotal := 0.0; + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + newtotal := newtotal + expected[i,j,k]; + exit; + end + else begin + for i := 1 to Nrows do + for j := 1 to Ncols do + for k := 1 to Nslices do + Previous[i,j,k] := expected[i,j,k]; + for i := 1 to Nrows do newrowmarg[i] := 0.0; + for j := 1 to Ncols do newcolmarg[j] := 0.0; + for k := 1 to Nslices do newslicemarg[k] := 0.0; + difference := 0.0; + goto step; + end; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.PrintTable(Nrows, Ncols, Nslices : integer; + VAR Data : cube; + VAR RowMarg : vector; + VAR ColMarg : vector; + VAR SliceMarg : vector; + Total : double); +var + astr : string; + i, j,k : integer; +begin + astr := ' A B C VALUE '; + for i := 1 to Nrows do + begin + for j := 1 to Ncols do + begin + for k := 1 to Nslices do + begin + astr := format('%3d %3d %3d %8.3f',[i,j,k,Data[i,j,k]]); + OutPutFrm.RichEdit.Lines.Add(astr); + end; + end; + end; + astr := 'Totals for Dimension A'; + OutPutFrm.RichEdit.Lines.Add(astr); + for i := 1 to Nrows do + begin + astr := format('Row %d %8.3f',[i,RowMarg[i]]); + OutPutFrm.RichEdit.Lines.Add(astr); + end; + astr := 'Totals for Dimension B'; + OutPutFrm.RichEdit.Lines.Add(astr); + for j := 1 to Ncols do + begin + astr := format('Col %d %8.3f',[j,ColMarg[j]]); + OutPutFrm.RichEdit.Lines.Add(astr); + end; + astr := 'Totals for Dimension C'; + OutPutFrm.RichEdit.Lines.Add(astr); + for k := 1 to Nslices do + begin + astr := format('Slice %d %8.3f',[k,SliceMarg[k]]); + OutPutFrm.RichEdit.Lines.Add(astr); + end; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.PrintLamdas(Nrows,Ncols,Nslices : integer; + Var CellLambdas : Quad; + mu : double); +var + i, j, k, l : integer; + astr : string; +begin + astr := 'ROW COL SLICE MU LAMBDA A LAMBDA B LAMBDA C'; + OutPutFrm.RichEdit.Lines.Add(astr); + astr := ' LAMBDA AB LAMBDA AC LAMBDA BC LAMBDA ABC'; + OutPutFrm.RichEdit.Lines.Add(astr); + OutPutFrm.RichEdit.Lines.Add(''); + for i := 1 to Nrows do + begin + for j := 1 to Ncols do + begin + for k := 1 to Nslices do + begin + astr := format('%3d %3d %3d ',[i,j,k]); + astr := astr + format(' %8.3f ',[mu]); + for l := 1 to 3 do + astr := astr + format(' %8.3f ',[CellLambdas[i,j,k,l]]); + OutPutFrm.RichEdit.Lines.Add(astr); + astr := ' '; + for l := 4 to 7 do + astr := astr + format(' %8.3f ',[CellLambdas[i,j,k,l]]); + OutPutFrm.RichEdit.Lines.Add(astr); + OutPutFrm.RichEdit.Lines.Add(''); + end; + end; + end; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.PrintMatrix(VAR X : matrix; + Nrows, Ncols: integer; + Title : string); +Label loop; +var +i, j : integer; +first, last : integer; +astr : string; + +begin + OutPutFrm.RichEdit.Lines.Add(Title); + OutPutFrm.RichEdit.Lines.Add(''); + first := 1; + last := Ncols; + if last > 6 then last := 6; +loop: + astr := 'ROW/COL'; + for j := first to last do astr := astr + format(' %3d ',[j]); + OutPutFrm.RichEdit.Lines.Add(astr); + for i := 1 to Nrows do + begin + astr := format(' %3d ',[i]); + for j := first to last do astr := astr + format(' %8.3f ',[X[i,j]]); + OutPutFrm.RichEdit.Lines.Add(astr); + end; + if last < Ncols then + begin + first := last + 1; + last := Ncols; + if last > 6 then last := 6; + goto loop; + end; + OutPutFrm.RichEdit.Lines.Add(''); +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.CancelBtnClick(Sender: TObject); +begin + AJKLogLinearFrm.Hide; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.ResetBtnClick(Sender: TObject); +var + i, j : integer; +begin +// for i := 0 to Grid.RowCount - 1 do +// for j := 0 to Grid.ColCount - 1 do +// Grid.Cells[j,i] := ''; + Grid.ColCount := 4; + Grid.RowCount := 2; + Grid.Cells[0,0] := 'ROW'; + Grid.Cells[1,0] := 'COL'; + Grid.Cells[2,0] := 'SLICE'; + Grid.Cells[3,0] := 'FREQ.'; + VarList.Clear; + for i := 1 to NoVariables do + VarList.Items.Add(MainFrm.Grid.Cells[i,0]); + RowVarEdit.Text := ''; + ColVarEdit.Text := ''; + FreqVarEdit.Text := ''; + NRowsEdit.Text := ''; + NColsEdit.Text := ''; + NSlicesEdit.Text := ''; + VarList.Visible := false; + RowInBtn.Visible := false; + RowOutBtn.Visible := false; + ColInBtn.Visible := false; + ColOutBtn.Visible := false; + FreqInBtn.Visible := false; + FreqOutBtn.Visible := false; + Label4.Visible := false; + Label5.Visible := false; + Label6.Visible := false; + Label7.Visible := false; + RowVarEdit.Visible := false; + ColVarEdit.Visible := false; + SliceVarEdit.Visible := false; + FreqVarEdit.Visible := false; + Memo1.Visible := false; + Label1.Visible := false; + Label2.Visible := false; + Label3.Visible := false; + NRowsEdit.Visible := false; + NColsEdit.Visible := false; + NSlicesEdit.Visible := false; + Grid.Visible := false; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.FileFromGrpClick(Sender: TObject); +begin + if FileFromGrp.ItemIndex = 0 then // file from main form + begin + VarList.Visible := true; + RowInBtn.Visible := true; + RowOutBtn.Visible := false; + ColInBtn.Visible := true; + ColOutBtn.Visible := false; + SliceBtnIn.Visible := true; + SliceBtnOut.Visible := false; + FreqInBtn.Visible := true; + FreqOutBtn.Visible := false; + Label4.Visible := true; + Label5.Visible := true; + Label6.Visible := true; + Label7.Visible := true; + RowVarEdit.Visible := true; + ColVarEdit.Visible := true; + SliceVarEdit.Visible := true; + FreqVarEdit.Visible := true; + Memo1.Visible := false; + Label1.Visible := false; + Label2.Visible := false; + Label3.Visible := false; + NRowsEdit.Visible := false; + NColsEdit.Visible := false; + NSlicesEdit.Visible := false; + Grid.Visible := false; + end; + if FileFromGrp.ItemIndex = 1 then // data from this form + begin + VarList.Visible := false; + RowInBtn.Visible := false; + RowOutBtn.Visible := false; + ColInBtn.Visible := false; + ColOutBtn.Visible := false; + SliceBtnIn.Visible := false; + SliceBtnOut.Visible := false; + FreqInBtn.Visible := false; + FreqOutBtn.Visible := false; + Label4.Visible := false; + Label5.Visible := false; + Label6.Visible := false; + Label7.Visible := false; + RowVarEdit.Visible := false; + ColVarEdit.Visible := false; + SliceVarEdit.Visible := false; + FreqVarEdit.Visible := false; + Memo1.Visible := true; + Label1.Visible := true; + Label2.Visible := true; + Label3.Visible := true; + NRowsEdit.Visible := true; + NColsEdit.Visible := true; + NSlicesEdit.Visible := true; + Grid.Visible := true; + end; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.RowInBtnClick(Sender: TObject); +var + index : integer; + +begin + index := VarList.ItemIndex; + RowVarEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + RowOutBtn.Visible := true; + RowInBtn.Visible := false; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.RowOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(RowVarEdit.Text); + RowInBtn.Visible := true; + RowOutBtn.Visible := false; + RowVarEdit.Text := ''; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.ColInBtnClick(Sender: TObject); +var + index : integer; +begin + index := VarList.ItemIndex; + ColVarEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + ColOutBtn.Visible := true; + ColInBtn.Visible := false; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.ColOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(ColVarEdit.Text); + ColInBtn.Visible := true; + ColOutBtn.Visible := false; + ColVarEdit.Text := ''; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.SliceBtnInClick(Sender: TObject); +var + index : integer; +begin + index := VarList.ItemIndex; + SliceVarEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + SliceBtnOut.Visible := true; + SliceBtnIn.Visible := false; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.SliceBtnOutClick(Sender: TObject); +begin + VarList.Items.Add(SliceVarEdit.Text); + SliceBtnIn.Visible := true; + SliceBtnOut.Visible := false; + FreqVarEdit.Text := ''; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.FreqInBtnClick(Sender: TObject); +var + index : integer; +begin + index := VarList.ItemIndex; + FreqVarEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + FreqOutBtn.Visible := true; + FreqInBtn.Visible := false; +end; +//------------------------------------------------------------------- + +procedure TAJKLogLinearFrm.FreqOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(FreqVarEdit.Text); + FreqInBtn.Visible := true; + FreqOutBtn.Visible := false; + FreqVarEdit.Text := ''; +end; +//------------------------------------------------------------------- + +end. diff --git a/applications/lazstats/source_orig/ANCOVAUNIT.PAS b/applications/lazstats/source_orig/ANCOVAUNIT.PAS new file mode 100644 index 000000000..db884ee1e --- /dev/null +++ b/applications/lazstats/source_orig/ANCOVAUNIT.PAS @@ -0,0 +1,1154 @@ +unit ANCOVAUNIT; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + MainUnit, OutPutUnit, FunctionsLib, GraphLib, + Globals, DataProcs, MatrixLib, DictionaryUnit, StdCtrls, Buttons, ExtCtrls,contexthelpunit; + +type + + { TANCOVAfrm } + + TANCOVAfrm = class(TForm) + HelpBtn: TButton; + MultCompChk: TCheckBox; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + PlotMeans: TCheckBox; + Inverses: TCheckBox; + RMats: TCheckBox; + Describe: TCheckBox; + DepIn: TBitBtn; + DepOut: TBitBtn; + FixedIn: TBitBtn; + FixedOut: TBitBtn; + CovIn: TBitBtn; + CovOut: TBitBtn; + DepVar: TEdit; + GroupBox1: TGroupBox; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + FixedList: TListBox; + Label4: TLabel; + CovList: TListBox; + VarList: TListBox; + procedure ComputeBtnClick(Sender: TObject); + procedure CovInClick(Sender: TObject); + procedure CovOutClick(Sender: TObject); + procedure DepInClick(Sender: TObject); + procedure DepOutClick(Sender: TObject); + procedure FixedInClick(Sender: TObject); + procedure FixedOutClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + NCases, NoSelected, NoFixed, NoCovs, DepColNo : integer; + ColNoSelected : IntDyneVec; // Grid col. no's of predictors + RowLabels, ColLabels : StrDyneVec; + CorMat : DblDyneMat; // correlation matrix + IndMat : DblDyneMat; // correlation matrix among independent variables + BetaWeights : DblDyneVec; // standardized regression weights + Means, Variances, StdDevs : DblDyneVec; + PrintIt : boolean; // true to print correlations in reg procedure + probout : double; // probability for removing a variable + Testout : boolean; // true if testing for retention of variables + plot : boolean; // if true, plot group means + StdErrEst : double; // standard error of estimate + multcomp : boolean; // if true make multiple comparisons + R2 : double; // squared multiple correlation coefficient + FixedCols : IntDyneVec; // grid columns of fixed variables + CovCols : IntDyneVec; // grid columns of covariates + mingrp, maxgrp : IntDyneVec; // min and max group codes + Block : IntDyneMat; // descriptors for group codings + // values 1 to 5 contain group min, max, startcol, endcol and no. of vectors + NoBlocks : integer; // number of vector blocks created for groups and inter. + errorcode : boolean; // returned by routines that use an errorcode + IndepIndex : IntDyneVec; // sequential number of predictors in corr. matrix + BlockLabel : StrDyneVec; + descript : boolean; + printinv : boolean; + NoTestVecs : integer; // no. of vectors for group interactions with covariates + constant : double; // regression constant + noind : integer; // no. of independent variables in a regression analysis + BWeights : DblDyneVec; // raw regression weights + BStdErrs : DblDyneVec; // standard errors of regression weights + BTtests : DblDyneVec; + + procedure GetParms(Sender: TObject); + procedure CodeGroups(Sender: TObject); + procedure GenInteractions(Sender: TObject); + procedure DoRegs(Sender: TObject); + procedure CleanUp(Sender: TObject); + procedure EntryOpt1(Sender: TObject); + procedure GenCovInteracts(Sender: TObject); + procedure AdjustMeans(Sender: TObject); + procedure MultCompare(Sender: TObject); + + public + { public declarations } + end; + +var + ANCOVAfrm: TANCOVAfrm; + +implementation + +{ TANCOVAfrm } + +procedure TANCOVAfrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + DepVar.Text := ''; + DepIn.Visible := true; + DepOut.Visible := false; + FixedIn.Visible := true; + FixedOut.Visible := false; + CovIn.Visible := true; + CovOut.Visible := false; + VarList.Clear; + CovList.Clear; + FixedList.Clear; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + Describe.Checked := true; + Rmats.Checked := false; + Inverses.Checked := false; + PlotMeans.Checked := false; + NoBlocks := 0; +end; + +procedure TANCOVAfrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TANCOVAfrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TANCOVAfrm.DepInClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + DepVar.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + DepIn.Visible := false; + DepOut.Visible := true; +end; + +procedure TANCOVAfrm.CovInClick(Sender: TObject); +VAR i, index : integer; +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + CovList.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + CovOut.Visible := true; +end; + +procedure TANCOVAfrm.ComputeBtnClick(Sender: TObject); +begin + NoFixed := FixedList.Items.Count; + NoCovs := CovList.Items.Count; + if (NoFixed <= 0) or (NoCovs <= 0) then + begin + ShowMessage('ERROR! You must have at least one group variable and one covariate'); + exit; + end; + GetParms(self); + CodeGroups(self); + GenInteractions(self); + GenCovInteracts(self); + DoRegs(self); + CleanUp(self); + ReturnBtn.SetFocus; +end; + +procedure TANCOVAfrm.CovOutClick(Sender: TObject); +VAR index : integer; +begin + index := CovList.ItemIndex; + if index < 0 then + begin + CovOut.Visible := false; + exit; + end; + VarList.Items.Add(CovList.Items.Strings[index]); + CovList.Items.Delete(index); +end; + +procedure TANCOVAfrm.DepOutClick(Sender: TObject); +begin + VarList.Items.Add(DepVar.Text); + DepVar.Text := ''; + DepIn.Visible := true; + DepOut.Visible := false; +end; + +procedure TANCOVAfrm.FixedInClick(Sender: TObject); +VAR i, index : integer; +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + FixedList.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + FixedOut.Visible := true; +end; + +procedure TANCOVAfrm.FixedOutClick(Sender: TObject); +VAR index : integer; +begin + index := FixedList.ItemIndex; + if index < 0 then + begin + FixedOut.Visible := false; + exit; + end; + VarList.Items.Add(FixedList.Items.Strings[index]); + FixedList.Items.Delete(index); +end; + +procedure TANCOVAfrm.GetParms(Sender: TObject); +label covs; +VAR i, j : integer; +begin + SetLength(ColNoSelected,NoVariables); + SetLength(FixedCols,NoFixed); + SetLength(CovCols,NoCovs); + SetLength(mingrp,NoFixed); + SetLength(maxgrp,NoFixed); + SetLength(Block,100,5); + SetLength(BlockLabel,100); + + NoSelected := 0; + NoBlocks := 0; + if Describe.Checked then descript := true else descript := false; + if inverses.Checked then printinv := true else printinv := false; + if plotmeans.Checked then plot := true else plot := false; + if multcompchk.Checked then multcomp := true else multcomp := false; + for i := 1 to NoVariables do + begin + if DepVar.Text = OS3MainFrm.DataGrid.Cells[i,0] then + begin + DepColNo := i; + ColNoSelected[0] := i; + NoSelected := 1; + break; + end; + end; + + if NoFixed < 1 then goto covs; + for i := 0 to NoFixed - 1 do + begin + for j := 1 to NoVariables do + begin + if FixedList.Items.Strings[i] = OS3MainFrm.DataGrid.Cells[j,0] then + begin + FixedCols[i] := j; + ColNoSelected[NoSelected] := j; + NoSelected := NoSelected + 1; + break; + end; + end; + end; + +covs: if NoCovs < 1 then exit; + for i := 0 to NoCovs - 1 do + begin + for j := 1 to NoVariables do + begin + if CovList.Items.Strings[i] = OS3MainFrm.DataGrid.Cells[j,0] then + begin + CovCols[i] := j; + ColNoSelected[NoSelected] := j; + NoSelected := NoSelected + 1; + break; + end; + end; + end; + // create a "Block" for each covariate + for i := 0 to NoCovs-1 do + begin + NoBlocks := NoBlocks + 1; + Block[i,0] := 0; // group min + Block[i,1] := 0; // group max + Block[i,2] := CovCols[i]; // start column in grid + Block[i,3] := CovCols[i]; // end column in grid + Block[i,4] := 1; // no. of vectors + BlockLabel[i] := 'Cov' + IntToStr(i); + end; +end; + +procedure TANCOVAfrm.CodeGroups(Sender: TObject); +var + col, i, j, value, startcol, endcol, novectors : integer; + factlabel, cellstring : string; + +begin +// startcol := Block[NoBlocks,4] + 1; // next column after last block + for i := 0 to NoFixed-1 do // create a block for code vectors of each fixed variable + begin + col := FixedCols[i]; + factlabel := chr(ord('A')+i); + mingrp[i] := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col,1]))); + maxgrp[i] := mingrp[i]; + for j := 1 to NoCases do + begin + if NOT GoodRecord(j,NoSelected,ColNoSelected) then continue; + cellstring := Trim(OS3MainFrm.DataGrid.Cells[col,j]); + value := round(StrToFloat(cellstring)); + if value < mingrp[i] then mingrp[i] := value; + if value > maxgrp[i] then maxgrp[i] := value; + end; + // create fixed effect coding for levels - 1 of the fixed effect var. + EffectCode(col,mingrp[i],maxgrp[i],factlabel,startcol, + endcol,novectors); + NoBlocks := NoBlocks + 1; + Block[NoBlocks-1,0] := mingrp[i]; + Block[NoBlocks-1,1] := maxgrp[i]; + Block[NoBlocks-1,2] := startcol; + Block[NoBlocks-1,3] := endcol; + Block[NoBlocks-1,4] := novectors; + BlockLabel[NoBlocks-1] := factlabel; + end; // next factor block +end; + +procedure TANCOVAfrm.GenInteractions(Sender: TObject); +type Twoway = array[0..9,0..1] of integer; +type Threeway = array[0..9,0..2] of integer; +type Fourway = array[0..4,0..3] of integer; +var + i, j, k, l, m, n, o, highest, col, vect1col, vect2col, vect3col, value : integer; + labelstr : string; + startcol, endcol, novectors, oldnovars : integer; + cell1, cell2, cell3, cell4 : string; + TwoWayCombos, ThreeWayCombos, FourwayCombos : double; + Block1, Block2, Block3, Block4, Start1, End1, Start2, End2, Start3, End3 : integer; + Start4, End4 : integer; + const Twoways: Twoway = ((1,2),(1,3),(2,3),(1,4),(2,4),(3,4),(1,5),(2,5),(3,5),(4,5)); + const Threeways: Threeway = ((1,2,3),(1,2,4),(1,3,4),(2,3,4),(1,2,5),(1,3,5), + (1,4,5),(2,3,5),(2,4,5),(3,4,5)); + const Fourways: Fourway = ((1,2,3,4),(1,2,3,5),(1,2,4,5),(1,3,4,5),(2,3,4,5)); + +begin + if NoFixed < 2 then exit; + novectors := 0; + // Do two-way interactions +// col := NoVariables; + TwoWayCombos := round(combos(2.0, NoFixed)); + oldnovars := NoVariables; + for i := 0 to round(TwoWayCombos)-1 do + begin + Block1 := TwoWays[i,0] + NoCovs - 1; + Block2 := TwoWays[i,1] + NoCovs - 1; + Start1 := Block[Block1,2]; + End1 := Block[Block1,3]; + Start2 := Block[Block2,2]; + End2 := Block[Block2,3]; + oldnovars := NoVariables; + startcol := Block[NoBlocks-1,3] + 1; + col := NoVariables; + for j := Start1 to End1 do + begin + for k := Start2 to End2 do + begin + col := col + 1; + novectors := novectors + 1; + DictionaryFrm.NewVar(col); + labelstr := OS3MainFrm.DataGrid.Cells[j,0] + 'x'; + labelstr := labelstr + OS3MainFrm.DataGrid.Cells[k,0]; + OS3MainFrm.DataGrid.Cells[col,0] := labelstr; + DictionaryFrm.DictGrid.Cells[1,col] := labelstr; + for m := 1 to NoCases do + begin + if NOT GoodRecord(m,NoSelected,ColNoSelected) then Continue; + cell1 := Trim(OS3MainFrm.DataGrid.Cells[j,m]); + cell2 := Trim(OS3MainFrm.DataGrid.Cells[k,m]); + value := round(StrToFloat(cell1)) * + round(StrToFloat(cell2)); + OS3MainFrm.DataGrid.Cells[col,m] := IntToStr(value); + end; + end; + endcol := col; + NoBlocks := NoBlocks + 1; + Block[NoBlocks-1,0] := 0; // zeroes for interactions + Block[NoBlocks-1,1] := 0; // zeroes for interactions + Block[NoBlocks-1,2] := startcol; // grid start col for 2-way interactions + Block[NoBlocks-1,3] := endcol; // grid end col for 2-way interactions + Block[NoBlocks-1,4] := novectors; // no. of vectors for 2-way interaction + BlockLabel[NoBlocks-1] := BlockLabel[Block1] + 'x' + BlockLabel[Block2]; + NoVariables := oldnovars + novectors; + OS3MainFrm.NoVarsEdit.Text := IntToStr(NoVariables); + novectors := 0; + end; // end of interaction of fixed effect vectors j and fixed effect vectors k + end; // end of 2 way interactions + + // do 3-way interactions using group vectors and two way interaction vectors + if (NoFixed < 3) then exit; + ThreeWayCombos := Combos(3.0,NoFixed); + for i := 0 to round(ThreeWayCombos)-1 do + begin + startcol := Block[NoBlocks-1,3] + 1; // next column after last block + col := NoVariables; + Block1 := ThreeWays[i,0] + NoCovs - 1; + Block2 := ThreeWays[i,1] + NoCovs - 1; + Block3 := ThreeWays[i,2] + NoCovs - 1; + Start1 := Block[Block1,2]; + End1 := Block[Block1,3]; + Start2 := Block[Block2,2]; + End2 := Block[Block2,3]; + Start3 := Block[Block3,2]; + End3 := Block[Block3,3]; + oldnovars := NoVariables; + novectors := 0; + for j := Start1 to End1 do + begin + for k := Start2 to End2 do + begin + for l := Start3 to End3 do // no. vectors in first factor + begin + col := col + 1; + novectors := novectors + 1; + DictionaryFrm.NewVar(col); + labelstr := OS3MainFrm.DataGrid.Cells[j,0] + 'x'; + labelstr := labelstr + OS3MainFrm.DataGrid.Cells[k,0]; + labelstr := labelstr + 'x' + OS3MainFrm.DataGrid.Cells[l,0]; + OS3MainFrm.DataGrid.Cells[col,0] := labelstr; + DictionaryFrm.DictGrid.Cells[1,col] := labelstr; + for m := 1 to NoCases do + begin + if NOT GoodRecord(m,NoSelected,ColNoSelected) then Continue; + cell1 := Trim(OS3MainFrm.DataGrid.Cells[j,m]); + cell2 := Trim(OS3MainFrm.DataGrid.Cells[k,m]); + cell3 := Trim(OS3MainFrm.DataGrid.Cells[l,m]); + value := round(StrToFloat(cell1)) * + round(StrToFloat(cell2)) * + round(StrToFloat(cell3)); + OS3MainFrm.DataGrid.Cells[col,m] := IntToStr(value); + end; // next case m + end; // next third variable + end; // next second variable + end; // end of interaction of fixed effects vectors for j, k and l + endcol := col; // last grid column containing three-way interaction vectors + NoBlocks := NoBlocks + 1; + Block[NoBlocks-1,0] := 0; // zeroes for interactions + Block[NoBlocks-1,1] := 0; // zeroes for interactions + Block[NoBlocks-1,2] := startcol; // grid start col for 2-way interactions + Block[NoBlocks-1,3] := endcol; // grid end col for 2-way interactions + Block[NoBlocks-1,4] := novectors; // no. of vectors for 2-way interaction + BlockLabel[NoBlocks-1] := BlockLabel[Block1] + 'x' + BlockLabel[Block2] + + 'x' + BlockLabel[Block3]; + NoVariables := oldnovars + novectors; + OS3MainFrm.NoVarsEdit.Text := IntToStr(NoVariables); + end; // end of three way interactions + + // do 4-way interactions using group and 3-way interaction vectors + if (NoFixed < 4) then exit; + FourWayCombos := combos(4.0,NoFixed); + for i := 0 to round(FourWayCombos) - 1 do + begin + startcol := Block[NoBlocks-1][3] + 1; + col := NoVariables; + Block1 := FourWays[i][0] + NoCovs - 1; // block # for first fixed effect + Block2 := FourWays[i][1] + NoCovs - 1; // block # for second fixed effect + Block3 := FourWays[i][2] + NoCovs - 1; // block # for third fixed effect + Block4 := FourWays[i][3] + NoCovs - 1; // block # for fourth fixed effect + Start1 := Block[Block1][2]; + End1 := Block[Block1][3]; + Start2 := Block[Block2][2]; + End2 := Block[Block2][3]; + Start3 := Block[Block3][2]; + End3 := Block[Block3][3]; + Start4 := Block[Block4][2]; + End4 := Block[Block4][3]; + oldnovars := NoVariables; + novectors := 0; + for j := Start1 to End1 do // vector in first fixed factor + begin + for k := Start2 to End2 do // vector in second fixed factor + begin + for l := Start3 to End3 do // vector in third fixed factor + begin + for m := Start4 to End4 do // vecotr in fourth fixed factor + begin + col := col + 1; + novectors := novectors + 1; + DictionaryFrm.NewVar(col); + labelstr := OS3MainFrm.DataGrid.Cells[j,0] + 'x'; + labelstr := labelstr + OS3MainFrm.DataGrid.Cells[k,0]; + labelstr := labelstr + 'x' + OS3MainFrm.DataGrid.Cells[l,0]; + OS3MainFrm.DataGrid.Cells[col,0] := labelstr; + DictionaryFrm.DictGrid.Cells[1,col] := labelstr; + for n := 1 to NoCases do + begin +// if (! ValidRecord(n,ColNoSelected,NoSelected)) continue; + cell1 := Trim(OS3MainFrm.DataGrid.Cells[j,n]); + cell2 := Trim(OS3MainFrm.DataGrid.Cells[k,n]); + cell3 := Trim(OS3MainFrm.DataGrid.Cells[l,n]); + cell4 := Trim(OS3MainFrm.DataGrid.Cells[m,n]); + value := round(StrToFloat(cell1)) * + round(StrToFloat(cell2)) * + round(StrToFloat(cell3)) * + round(StrToFloat(cell4)); + OS3MainFrm.DataGrid.Cells[col,n] := IntToStr(value); + end; // next case n + end; // next fourth vector m + end; // next third vector + end; // next second vector + end; // end of interaction of fixed effects vectors for j, k and l and m + endcol := col; // last grid column containing four-way interaction vectors + NoBlocks := NoBlocks + 1; + Block[NoBlocks-1][0] := 0; // zeroes for interactions + Block[NoBlocks-1][1] := 0; // zeroes for interactions + Block[NoBlocks-1][2] := startcol; // grid start col for 4-way interactions + Block[NoBlocks-1][3] := endcol; // grid end col for 4-way interactions + Block[NoBlocks-1][4] := novectors; // no. of vectors for 2-way interaction + BlockLabel[NoBlocks-1] := BlockLabel[Block1] + 'x' + BlockLabel[Block2] + + 'x' + BlockLabel[Block3] + 'x' + + BlockLabel[Block4]; + NoVariables := oldnovars + novectors; + OS3MainFrm.NoVarsEdit.Text := IntToStr(NoVariables); + end; // end of four-way combinations +end; + +procedure TANCOVAfrm.DoRegs(Sender: TObject); +var + outline : string; + count : integer; + i, j : integer; + +begin + // get count of variables used + count := 0; + for i := 0 to NoBlocks - 1 do + for j := 0 to Block[i,4] do count := count + 1; + SetLength(BetaWeights,count+1); + SetLength(BWeights,count+2); + SetLength(BStdErrs,count+1); + SetLength(BTtests,count+1); + SetLength(Means,count+1); + SetLength(Variances,count+1); + SetLength(StdDevs,count+1); + SetLength(RowLabels,count+1); + SetLength(ColLabels,count+1); + SetLength(Cormat,count+1,count+1); + SetLength(Indmat,count+1,count+1); + SetLength(IndepIndex,count+1); + SetLength(ColNoSelected,count+1); + + if Rmats.Checked then PrintIt := true else PrintIt := false; + Testout := false; + Probout := 0.99; + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('ANALYSIS OF COVARIANCE USING MULTIPLE REGRESSION'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := 'File Analyzed: ' + OS3MainFrm.FileNameEdit.Text; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + EntryOpt1(self); // factors, interactions and covariats concurrently + OutPutFrm.ShowModal; + IndepIndex := nil; +end; + +procedure TANCOVAfrm.CleanUp(Sender: TObject); +begin + Indmat := nil; + Cormat := nil; + ColLabels := nil; + RowLabels := nil; + StdDevs := nil; + Variances := nil; + Means := nil; + BTtests := nil; + BStdErrs := nil; + BWeights := nil; + BetaWeights := nil; + maxgrp := nil; + mingrp := nil; + CovCols := nil; + FixedCols := nil; + ColNoSelected := nil +end; + +procedure TANCOVAfrm.EntryOpt1(Sender: TObject); +var + i, j, k, col, count : integer; + Title : string; + outline : string; + FullR2 : double; + F : double; + Prob : double; + df1, df2: double; + SSGroups : double; + MSGroups : double; + SSError : double; + MSError : double; + SSTotal : double; + SSExplained : double; + SSGrpTot : double; + tProbs : DblDyneVec; +begin + // factors, interactions and covariates concurrently (full model) + // get grid column numbers of all vectors and dependent variable + + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Model for Testing Assumption of Zero Interactions with Covariates'); + OutPutFrm.RichEdit.Lines.Add(''); + count := 0; + for i := 1 to NoBlocks do // no. of vector blocks + begin + for j := 1 to Block[i-1,4] do // no of vectors in block + begin + col := Block[i-1,2] + j - 1; // count from beginning col. + count := count + 1; + ColNoSelected[count-1] := col; + IndepIndex[count-1] := count; + RowLabels[count-1] := OS3MainFrm.DataGrid.Cells[col,0]; + end; + end; + count := count + 1; + noind := count - 1; + ColNoSelected[count-1] := DepColNo; + IndepIndex[count-1] := count; + RowLabels[count-1] := OS3MainFrm.DataGrid.Cells[DepColNo,0]; + // Get correlation matrix (note dependent is last variable) + Correlations(count,ColNoSelected,Cormat,Means,Variances,StdDevs,errorcode,NCases); + if Rmats.Checked then PrintIt := true else PrintIt := false; + if PrintIt then + begin + Title := 'Correlation Matrix'; + Mat_Print(Cormat,count,count,title,RowLabels,RowLabels,NCases); + end; + if descript then + begin + DynVectorPrint(Means,count,'MEANS',RowLabels,NCases); + DynVectorPrint(Variances,count,'VARIANCES',RowLabels,NCases); + DynVectorPrint(StdDevs,count,'STD. DEV.S',RowLabels,NCases); + end; + // Get regression + SetLength(tProbs,count); + PrintIt := true; + printinv := false; + if Inverses.Checked = true then printinv := true; + SetLength(BStdErrs,noind+1); + SetLength(BTtests,noind+1); + MReg(noind,ColNoSelected,DepColNo,RowLabels,Means,Variances,StdDevs,BWeights, + BetaWeights,BStdErrs,BTtests,tProbs,R2,StdErrEst,NCases,errorcode,false); + FullR2 := R2; + SSTotal := Variances[count-1] * (NCases - 1); + SSGroups := FullR2 * SSTotal; + SSError := (1.0 - FullR2) * SSTotal; + df1 := noind; + df2 := NCases - noind - 1; + MSGroups := SSGroups / df1; + MSError := SSError / df2; + F := MSGroups / MSError; + Prob := probf(F,df1,df2); + OutPutFrm.RichEdit.Lines.Add(''); + outline := 'Analysis of Variance for the Model to Test Regression Homogeneity'; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(' SOURCE Deg.F. SS MS F Prob>F'); + outline := format('%10s %10.0f %10.2f %10.2f %10.3f %10.4f', + ['Explained',df1,SSGroups,MSGroups,F,Prob]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('%10s %10.0f %10.2f %10.2f', + ['Error',df2,SSError,MSError]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('%10s %10d %10.2f', + ['Total',NCases-1,SSTotal]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('%12s %10.3f',['R Squared = ',R2]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + + // Now do analysis without the interactions (Ancova model) + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Model for Analysis of Covariance'); + OutPutFrm.RichEdit.Lines.Add(''); + count := 0; + for i := 1 to NoBlocks - 1 do // no. of vector blocks + begin + for j := 1 to Block[i-1,4] do // no of vectors in block + begin + col := Block[i-1,2] + j - 1; // count from beginning col. + count := count + 1; + ColNoSelected[count-1] := col; + IndepIndex[count-1] := count; + RowLabels[count-1] := OS3MainFrm.DataGrid.Cells[col,0]; + end; + end; + count := count + 1; + noind := count - 1; + ColNoSelected[count-1] := DepColNo; + IndepIndex[count-1] := count; + RowLabels[count-1] := OS3MainFrm.DataGrid.Cells[DepColNo,0]; + // Get correlation matrix (note dependent is last variable) + Correlations(count,ColNoSelected,Cormat,Means,Variances,StdDevs,errorcode,NCases); + // save in IndMat + for i := 0 to count-1 do + for j := 0 to count - 1 do + IndMat[i,j] := Cormat[i,j]; + if Rmats.Checked then PrintIt := true else PrintIt := false; + if PrintIt then + begin + Title := 'Correlation Matrix'; + Mat_Print(Cormat,count,count,title,RowLabels,RowLabels,NCases); + end; + if descript then + begin + DynVectorPrint(Means,count,'MEANS',RowLabels,NCases); + DynVectorPrint(Variances,count,'VARIANCES',RowLabels,NCases); + DynVectorPrint(StdDevs,count,'STD. DEV.S',RowLabels,NCases); + end; + // Get regression + PrintIt := true; + printinv := false; + if Inverses.Checked = true then printinv := true; + SetLength(BStdErrs,noind+1); + SetLength(BTtests,noind+1); + + MReg(noind,ColNoSelected,DepColNo,RowLabels,Means,Variances,StdDevs,BWeights, + BetaWeights,BStdErrs,BTtests,tProbs,R2,StdErrEst,NCases,errorcode,false); + + // test differences between previous and current models (= beta test) + constant := BWeights[noind]; + df1 := NoTestVecs; + F := ((FullR2 - R2) / df1) / ((1.0 - FullR2) / df2); + Prob := probf(F,df1,df2); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Test for Homogeneity of Group Regression Coefficients'); + outline := format('Change in R2 = %6.4f. F = %10.3f Prob.> F = %6.4f with d.f. %8.0f and %8.0f', + [(FullR2 - R2),F,Prob, df1, df2]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('%12s %10.3f',['R Squared = ',R2]); + OutPutFrm.RichEdit.Lines.Add(outline); + + FullR2 := R2; + SSTotal := Variances[count-1] * (NCases - 1); + SSGroups := FullR2 * SSTotal; +// SSExplained := SSGroups; + SSError := (1.0 - FullR2) * SSTotal; + df1 := noind; + df2 := NCases - noind - 1; + MSGroups := SSGroups / df1; + MSError := SSError / df2; + // obtain Adjusted means +// AdjustMeans(self); + // Make Comparisons among means +// if multcomp then MultCompare(self); + F := MSGroups / MSError; + Prob := probf(F,df1,df2); + OutPutFrm.RichEdit.Lines.Add(''); + outline := 'Analysis of Variance for the ANCOVA Model'; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(' SOURCE Deg.F. SS MS F Prob>F'); + outline := format('%10s %10.0f %10.2f %10.2f %10.3f %10.4f', + ['Explained',df1,SSGroups,MSGroups,F,Prob]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('%10s %10.0f %10.2f %10.2f', + ['Error',df2,SSError,MSError]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('%10s %10d %10.2f', + ['Total',NCases-1,SSTotal]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); + // Obtain adjusted means + AdjustMeans(self); + // make comparisons among groups + if multcomp then MultCompare(self); + + // Now do regression, eliminating each block to test effects of that term + PrintIt := false; + OutPutFrm.RichEdit.Lines.Add('Test for Each Source of Variance - Type III SS'); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' SOURCE Deg.F. SS MS F Prob>F'); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------'); +// SSGrpTot := 0.0; + for i := 1 to NoBlocks - 1 do // covariates, fixed effects, interactions + begin + count := 0; + for j := 1 to NoBlocks-1 do + begin + if j = i then continue; // exclude the factor to be tested + for k := 1 to Block[j-1,4] do // no of vectors in block + begin + col := Block[j-1,2] + k - 1; // count from beginning col. + count := count + 1; + ColNoSelected[count-1] := col; + IndepIndex[count-1] := count; + RowLabels[count-1] := OS3MainFrm.DataGrid.Cells[col,0]; + end; + end; // get next block of vectors for factors to be included + count := count + 1; + noind := count - 1; + ColNoSelected[count-1] := DepColNo; + IndepIndex[count-1] := count; + RowLabels[count-1] := OS3MainFrm.DataGrid.Cells[DepColNo,0]; + Correlations(count,ColNoSelected,Cormat,Means,Variances,StdDevs,errorcode,NCases); + // Get regression + printinv := false; + SetLength(BStdErrs,noind+1); + SetLength(BTtests,noind+1); + MReg(noind,ColNoSelected,DepColNo,RowLabels,Means,Variances,StdDevs,BWeights, + BetaWeights,BStdErrs,BTtests,tProbs,R2,StdErrEst,NCases,errorcode,false); + df1 := Block[i-1,4]; + SSGroups := (FullR2 - R2)* SSTotal; + SSGrpTot := SSGrpTot + SSGroups; + MSGroups := SSGroups / df1; + F := MSGroups / MSError; + Prob := probf(F,df1,df2); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('%10s %10.0f %10.2f %10.2f %10.3f %10.4f', + [BlockLabel[i-1],df1,SSGroups,MSGroups,F,Prob]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; // get next Block to eliminate + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------'); + outline := format('%10s %10.0f %10.2f %10.2f',['ERROR',df2,SSError,MSError]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------'); + outline := format('%10s %10d %10.2f',['TOTAL',NCases-1,SSTotal]); +{ + df1 := NoCovs; + SSGroups := SSExplained - SSGrpTot; + MSGroups := SSGroups / df1; + F := MSGroups / MSError; + Prob := probf(F,df1,df2); + outline := format('%10s %10.0f %10.2f %10.2f %10.3f %10.4f', + ['Covariates',df1,SSGroups,MSGroups,F,Prob]); + OutPutFrm.RichEdit.Lines.Add(outline); + + outline := format('%10s %10.0f %10.2f %10.2f', + ['Error',df2,SSError,MSError]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('%10s %10d %10.2f', + ['Total',NCases-1,SSTotal]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); +} + tProbs := nil; +end; + +procedure TANCOVAfrm.GenCovInteracts(Sender: TObject); +var + i, j, k, l, m, vect1col, vect2col, col : integer; + value : double; + labelstr, cell1, cell2 : string; + startcol, endcol, novectors, oldnovars : integer; + lastblock, firstblock : integer; + +begin + col := NoVariables; + oldnovars := NoVariables; + novectors := 0; + NoTestVecs := 0; + startcol := Block[NoBlocks-1,3] + 1; + lastblock := NoBlocks; + firstblock := NoCovs + 1; + for i := 1 to NoCovs do // product vectors for each covariate + begin + vect1col := Block[i-1,2]; + for j := firstblock to lastblock do + begin + for l := 1 to Block[j-1,4] do + begin + vect2col := Block[j-1,2] + l - 1; // first vector col. of B + col := col + 1; + novectors := novectors + 1; + NoTestVecs := NoTestVecs + 1; + DictionaryFrm.NewVar(col); + labelstr := OS3MainFrm.DataGrid.Cells[vect1col,0] + 'x'; + labelstr := labelstr + OS3MainFrm.DataGrid.Cells[vect2col,0]; + OS3MainFrm.DataGrid.Cells[col,0] := labelstr; + DictionaryFrm.DictGrid.Cells[1,col] := labelstr; + for m := 1 to NoCases do + begin + if NOT GoodRecord(m,NoSelected,ColNoSelected) then Continue; + cell1 := Trim(OS3MainFrm.DataGrid.Cells[vect1col,m]); + cell2 := Trim(OS3MainFrm.DataGrid.Cells[vect2col,m]); + value := StrToFloat(cell1) * StrToFloat(cell2); + OS3MainFrm.DataGrid.Cells[col,m] := FloatToStr(value); + end; // next case m + end; // next l vector + end; // next fixed effects factor j and interactions + end; // next covariate i + endcol := col; // last grid column containing two-way interaction vectors + NoBlocks := NoBlocks + 1; + Block[NoBlocks-1,0] := 0; // zeroes for interactions + Block[NoBlocks-1,1] := 0; // zeroes for interactions + Block[NoBlocks-1,2] := startcol; // grid start col for 2-way interactions + Block[NoBlocks-1,3] := endcol; // grid end col for 2-way interactions + Block[NoBlocks-1,4] := novectors; // no. of vectors for 2-way interaction + BlockLabel[NoBlocks-1] := BlockLabel[i-1] + 'xFixed'; + NoVariables := oldnovars + novectors; + OS3MainFrm.NoVarsEdit.Text := IntToStr(NoVariables); +end; + +procedure TANCOVAfrm.AdjustMeans(Sender: TObject); +var + sum : double; + GrpCovMeans : DblDyneMat; + AdjMeans : DblDyneVec; + Intercepts : DblDyneVec; + i, j, k, col, grp, nogrps : integer; + value : double; + Labels : StrDyneVec; + outline : string; + noingrp : IntDyneVec; + XValue : DblDyneVec; + maxmean : double; + cell1 : string; + +begin + SetLength(GrpCovMeans,noind,noind); + SetLength(AdjMeans,noind); + SetLength(Intercepts,noind); + SetLength(Labels,noind); + SetLength(noingrp,noind); + SetLength(XValue,noind); + + // get means for groups and covariates + for j := 1 to NoFixed do // for each fixed variable + begin + nogrps := maxgrp[j-1] - mingrp[j-1] + 1; + maxmean := 0.0; + for i := 1 to nogrps do + begin + XValue[i-1] := i; + noingrp[i-1] := 0; + for k := 1 to NoCovs do GrpCovMeans[i-1,k-1] := 0.0; + end; + for i := 1 to nogrps do AdjMeans[i-1] := 0.0; + for i := 1 to NoCases do + begin + cell1 := Trim(OS3MainFrm.DataGrid.Cells[FixedCols[j-1],i]); + if cell1 = '' then continue; + grp := round(StrToFloat(cell1)); + grp := grp - mingrp[j-1] + 1; + noingrp[grp-1] := noingrp[grp-1] + 1; + for k := 1 to NoCovs do + begin + col := CovCols[k-1]; + cell1 := Trim(OS3MainFrm.DataGrid.Cells[col,i]); + if cell1 = '' then continue; + value := StrToFloat(cell1); + GrpCovMeans[grp-1,k-1] := GrpCovMeans[grp-1,k-1] + value; + end; + cell1 := Trim(OS3MainFrm.DataGrid.Cells[DepColNo,i]); + if cell1 = '' then continue; + value := StrToFloat(cell1); + AdjMeans[grp-1] := AdjMeans[grp-1] + value; + end; // next case i + + SetLength(GraphFrm.Ypoints,1,nogrps); + SetLength(GraphFrm.Xpoints,1,nogrps); + for k := 1 to nogrps do + begin + AdjMeans[k-1] := AdjMeans[k-1] / noingrp[k-1]; + GraphFrm.Ypoints[0,k-1] := AdjMeans[k-1]; + GraphFrm.Xpoints[0,k-1] := k; + if AdjMeans[k-1] > maxmean then maxmean := AdjMeans[k-1]; + for i := 1 to NoCovs do + begin + GrpCovMeans[k-1,i-1] := GrpCovMeans[k-1,i-1] / noingrp[k-1]; + end; + end; + // print unadjusted means + OutPutFrm.RichEdit.Lines.Add(''); + outline := 'Unadjusted Group Means for Group Variables ' + + OS3MainFrm.DataGrid.Cells[FixedCols[j-1] ,0]; + OutPutFrm.RichEdit.Lines.Add(outline); + DynVectorPrint(AdjMeans,nogrps,'Means',Labels,NCases); + OutPutFrm.RichEdit.Lines.Add(''); + + // plot group means if requested + if plot then + begin + GraphFrm.nosets := 1; + GraphFrm.nbars := nogrps; + GraphFrm.Heading := 'Unadjusted Means'; + GraphFrm.XTitle := 'GROUP'; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := 2; // 3d Vertical Bar Chart + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + // get intercepts for group equations for this fixed effect variable + sum := 0.0; + for k := 1 to nogrps - 1 do // no. vectors is 1 less than no. groups + begin + intercepts[k-1] := constant + BWeights[NoCovs+k-1]; + sum := sum + BWeights[NoCovs+k-1]; + end; + intercepts[nogrps-1] := constant - sum; + + // get adjusted means + for k := 1 to nogrps do + begin + sum := 0.0; + for i := 1 to NoCovs do + sum := sum + BWeights[i-1] * (GrpCovMeans[k-1,i-1]-Means[i-1]); + AdjMeans[k-1] := AdjMeans[k-1] - sum; + GraphFrm.Ypoints[0,k-1] := AdjMeans[k-1]; + Labels[k-1] := 'Group ' + IntToStr(k); + end; + // plot group means if requested + if plot then + begin + GraphFrm.nosets := 1; + GraphFrm.nbars := nogrps; + GraphFrm.Heading := 'Adjusted Means'; + GraphFrm.XTitle := 'GROUP'; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := 2; // 3d Vertical Bar Chart + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + // print results for intercepts + OutPutFrm.RichEdit.Lines.Add(''); + outline := 'Intercepts for Each Group Regression Equation for Variable: ' + + OS3MainFrm.DataGrid.Cells[FixedCols[j-1] ,0]; + OutPutFrm.RichEdit.Lines.Add(outline); + DynVectorPrint(Intercepts,nogrps,'Inercepts',Labels,NCases); + OutPutFrm.RichEdit.Lines.Add(''); + // print adjusted means + OutPutFrm.RichEdit.Lines.Add(''); + outline := 'Adjusted Group Means for Group Variables ' + + OS3MainFrm.DataGrid.Cells[FixedCols[j-1] ,0]; + OutPutFrm.RichEdit.Lines.Add(outline); + DynVectorPrint(AdjMeans,nogrps,'Means',Labels,NCases); + OutPutFrm.RichEdit.Lines.Add(''); + end; + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + XValue := nil; + noingrp := nil; + Labels := nil; + intercepts := nil; + AdjMeans := nil; + GrpCovMeans := nil; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; +end; + +procedure TANCOVAfrm.MultCompare(Sender: TObject); +var + i, j, size : integer; + covmat : DblDyneMat; + outline : string; + title : string; + Labels : StrDyneVec; + sum : double; + df1, df2, F, Prob : double; + +begin + SetLength(covmat,noind,noind); + SetLength(Labels,noind); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Multiple Comparisons Among Group Means'); + OutPutFrm.RichEdit.Lines.Add(''); + SVDInverse(IndMat,noind); + size := noind - NoCovs; + title := 'Inverse of Independents Matrix'; + for i := 1 to noind do Labels[i-1] := 'Group ' + IntToStr(i); + for i := 1 to noind-NoCovs do + for j := 1 to noind-NoCovs do + covmat[i-1,j-1] := sqr(StdErrEst) * IndMat[NoCovs+i-1,NoCovs+j-1] / + (Variances[NoCovs+j-1] * (NoCases-1)); + for i := 1 to size+1 do Labels[i-1] := 'Group ' + IntToStr(i); + // augment matrix + for i := 1 to size do + begin + sum := 0.0; + for j := 1 to size do + begin + sum := sum + covmat[i-1,j-1]; + end; + covmat[i-1,size] := -sum; + covmat[size,i-1] := -sum; + end; + sum := 0.0; + for i := 1 to size do sum := sum + covmat[i-1,size]; + covmat[size,size] := -sum; + if Inverses.Checked then + begin + title := 'Augmented Covariance Among Group Vectors'; + for i := 1 to size do Labels[i-1] := 'Group ' + IntToStr(i); + MAT_PRINT(covmat,size+1,size+1,title,Labels,Labels,NoCases); + end; + + // Now, contrast the b coefficients + // Get last B weight from effect coding as - sum of other B weights + BWeights[noind] := 0.0; + for i := 0 to noind-1 do BWeights[noind] := BWeights[noind] - BWeights[i]; + for i := 1 to size do + begin + for j := i + 1 to size + 1 do + begin + df1 := 1.0; + df2 := NoCases - noind - 1; + F := sqr(BWeights[NoCovs+i-1] - BWeights[NoCovs+j-1]); + F := F / (covmat[i-1,i-1] + covmat[j-1,j-1] - (covmat[i-1,j-1] + covmat[j-1,i-1])); + Prob := probf(F,df1,df2); + outline := format('Comparison of Group %3d with Group %3d', + [i,j]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('F = %10.3f, probability = %5.3f with degrees of freedom %5.0f and %5.0f', + [F, Prob, df1, df2]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + OutPutFrm.RichEdit.Lines.Add(''); + Labels := nil; + covmat := nil; +end; + +initialization + {$I ancovaunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/ANCOVAUNIT.lfm b/applications/lazstats/source_orig/ANCOVAUNIT.lfm new file mode 100644 index 000000000..8272d9fe6 --- /dev/null +++ b/applications/lazstats/source_orig/ANCOVAUNIT.lfm @@ -0,0 +1,445 @@ +object ANCOVAfrm: TANCOVAfrm + Left = 204 + Height = 412 + Top = 192 + Width = 747 + Caption = 'Analysis of Covariance Using Multiple Regression Methods' + ClientHeight = 412 + ClientWidth = 747 + OnShow = FormShow + Position = poScreenCenter + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 8 + Height = 14 + Top = 9 + Width = 94 + Caption = 'Available Variables:' + ParentColor = False + end + object Label2: TLabel + Left = 265 + Height = 14 + Top = 31 + Width = 95 + Caption = 'Dependent Variable' + ParentColor = False + end + object Label3: TLabel + Left = 265 + Height = 14 + Top = 111 + Width = 66 + Caption = 'Fixed Factors' + ParentColor = False + end + object Label4: TLabel + Left = 265 + Height = 14 + Top = 256 + Width = 53 + Caption = 'Covariates' + ParentColor = False + end + object VarList: TListBox + Left = 8 + Height = 383 + Top = 24 + Width = 210 + ItemHeight = 0 + MultiSelect = True + TabOrder = 0 + end + object DepIn: TBitBtn + Left = 224 + Height = 26 + Top = 31 + Width = 34 + 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 + } + NumGlyphs = 0 + OnClick = DepInClick + TabOrder = 1 + end + object DepOut: TBitBtn + Left = 224 + Height = 26 + Top = 64 + Width = 34 + 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 + } + NumGlyphs = 0 + OnClick = DepOutClick + TabOrder = 2 + end + object FixedIn: TBitBtn + Left = 224 + Height = 26 + Top = 144 + Width = 34 + 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 + } + NumGlyphs = 0 + OnClick = FixedInClick + TabOrder = 3 + end + object FixedOut: TBitBtn + Left = 224 + Height = 26 + Top = 176 + Width = 34 + 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 + } + NumGlyphs = 0 + OnClick = FixedOutClick + TabOrder = 4 + end + object CovIn: TBitBtn + Left = 224 + Height = 26 + Top = 280 + Width = 34 + 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 + } + NumGlyphs = 0 + OnClick = CovInClick + TabOrder = 5 + end + object CovOut: TBitBtn + Left = 224 + Height = 26 + Top = 312 + Width = 34 + 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 + } + NumGlyphs = 0 + OnClick = CovOutClick + TabOrder = 6 + end + object DepVar: TEdit + Left = 263 + Height = 21 + Top = 48 + Width = 139 + TabOrder = 7 + Text = 'DepVar' + end + object FixedList: TListBox + Left = 264 + Height = 111 + Top = 129 + Width = 136 + ItemHeight = 0 + MultiSelect = True + TabOrder = 8 + end + object CovList: TListBox + Left = 263 + Height = 123 + Top = 272 + Width = 134 + ItemHeight = 0 + MultiSelect = True + TabOrder = 9 + end + object GroupBox1: TGroupBox + Left = 416 + Height = 176 + Top = 136 + Width = 191 + Caption = 'Output Options:' + ClientHeight = 158 + ClientWidth = 187 + TabOrder = 10 + object Describe: TCheckBox + Left = 9 + Height = 17 + Top = 9 + Width = 119 + Caption = 'Descriptive Statistics' + TabOrder = 0 + end + object RMats: TCheckBox + Left = 8 + Height = 17 + Top = 39 + Width = 116 + Caption = 'Correlation Matrices' + TabOrder = 1 + end + object Inverses: TCheckBox + Left = 8 + Height = 17 + Top = 72 + Width = 113 + Caption = 'Inverse of Matrices' + TabOrder = 2 + end + object PlotMeans: TCheckBox + Left = 7 + Height = 17 + Top = 106 + Width = 106 + Caption = 'Plot Factor Means' + TabOrder = 3 + end + object MultCompChk: TCheckBox + Left = 7 + Height = 17 + Top = 134 + Width = 149 + Caption = 'Show Multiple Comparisons' + TabOrder = 4 + end + end + object ResetBtn: TButton + Left = 635 + Height = 27 + Top = 151 + Width = 76 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 11 + end + object CancelBtn: TButton + Left = 635 + Height = 27 + Top = 208 + Width = 76 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 12 + end + object ComputeBtn: TButton + Left = 635 + Height = 27 + Top = 304 + Width = 76 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 13 + end + object ReturnBtn: TButton + Left = 635 + Height = 27 + Top = 352 + Width = 76 + Caption = 'Return' + ModalResult = 1 + TabOrder = 14 + end + object HelpBtn: TButton + Tag = 103 + Left = 638 + Height = 27 + Top = 256 + Width = 73 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 15 + end +end diff --git a/applications/lazstats/source_orig/ANCOVAUNIT.lrs b/applications/lazstats/source_orig/ANCOVAUNIT.lrs new file mode 100644 index 000000000..40e7bef72 --- /dev/null +++ b/applications/lazstats/source_orig/ANCOVAUNIT.lrs @@ -0,0 +1,353 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TANCOVAfrm','FORMDATA',[ + 'TPF0'#10'TANCOVAfrm'#9'ANCOVAfrm'#4'Left'#3#204#0#6'Height'#3#156#1#3'Top'#3 + +#192#0#5'Width'#3#235#2#7'Caption'#6'8Analysis of Covariance Using Multiple ' + +'Regression Methods'#12'ClientHeight'#3#156#1#11'ClientWidth'#3#235#2#6'OnSh' + +'ow'#7#8'FormShow'#8'Position'#7#14'poScreenCenter'#10'LCLVersion'#6#8'0.9.2' + +'8.2'#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2#14#3'Top'#2#9#5'Width'#2 + +'^'#7'Caption'#6#20'Available Variables:'#11'ParentColor'#8#0#0#6'TLabel'#6 + +'Label2'#4'Left'#3#9#1#6'Height'#2#14#3'Top'#2#31#5'Width'#2'_'#7'Caption'#6 + +#18'Dependent Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#3#9 + +#1#6'Height'#2#14#3'Top'#2'o'#5'Width'#2'B'#7'Caption'#6#13'Fixed Factors'#11 + +'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#3#9#1#6'Height'#2#14#3'Top'#3 + +#0#1#5'Width'#2'5'#7'Caption'#6#10'Covariates'#11'ParentColor'#8#0#0#8'TList' + +'Box'#7'VarList'#4'Left'#2#8#6'Height'#3#127#1#3'Top'#2#24#5'Width'#3#210#0 + +#10'ItemHeight'#2#0#11'MultiSelect'#9#8'TabOrder'#2#0#0#0#7'TBitBtn'#5'DepIn' + +#4'Left'#3#224#0#6'Height'#2#26#3'Top'#2#31#5'Width'#2'"'#10'Glyph.Data'#10 + +':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0 + +' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b' + +#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5' + +#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0 + +#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255 + +#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142 + +#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J' + +#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162 + +#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255 + +#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130 + +#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199 + +'t'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5' + +#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#10'DepInClick'#8 + ,'TabOrder'#2#1#0#0#7'TBitBtn'#6'DepOut'#4'Left'#3#224#0#6'Height'#2#26#3'Top' + +#2'@'#5'Width'#2'"'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6' + +#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0 + +#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153 + +'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V' + +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255 + +'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195 + +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255 + +#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135 + +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#11'DepOutClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#7'Fixed' + +'In'#4'Left'#3#224#0#6'Height'#2#26#3'Top'#3#144#0#5'Width'#2'"'#10'Glyph.Da' + +'ta'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0 + +#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184 + +#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255 + +#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255 + +#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142 + +#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J' + +#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162 + +#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255 + +#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130 + +#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199 + +'t'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5' + +#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#12'FixedInClick'#8 + +'TabOrder'#2#3#0#0#7'TBitBtn'#8'FixedOut'#4'Left'#3#224#0#6'Height'#2#26#3'T' + +'op'#3#176#0#5'Width'#2'"'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0 + +#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd' + +#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G' + +#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161 + +'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131 + +#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/' + +'x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e' + +#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255 + ,#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132 + +#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255 + +#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154 + +#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255 + +#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201 + +#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'Num' + +'Glyphs'#2#0#7'OnClick'#7#13'FixedOutClick'#8'TabOrder'#2#4#0#0#7'TBitBtn'#5 + +'CovIn'#4'Left'#3#224#0#6'Height'#2#26#3'Top'#3#24#1#5'Width'#2'"'#10'Glyph.' + +'Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16 + +#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184 + +#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255 + +#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255 + +#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142 + +#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J' + +#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162 + +#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255 + +#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130 + +#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199 + +'t'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5' + +#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#10'CovInClick'#8 + +'TabOrder'#2#5#0#0#7'TBitBtn'#6'CovOut'#4'Left'#3#224#0#6'Height'#2#26#3'Top' + +#3'8'#1#5'Width'#2'"'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0 + +'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0 + +#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G' + +#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161 + +'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131 + +#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/' + +'x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e' + +#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255 + +#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132 + +#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255 + +#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154 + +#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255 + +#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201 + +#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'Num' + +'Glyphs'#2#0#7'OnClick'#7#11'CovOutClick'#8'TabOrder'#2#6#0#0#5'TEdit'#6'Dep' + +'Var'#4'Left'#3#7#1#6'Height'#2#21#3'Top'#2'0'#5'Width'#3#139#0#8'TabOrder'#2 + +#7#4'Text'#6#6'DepVar'#0#0#8'TListBox'#9'FixedList'#4'Left'#3#8#1#6'Height'#2 + +'o'#3'Top'#3#129#0#5'Width'#3#136#0#10'ItemHeight'#2#0#11'MultiSelect'#9#8'T' + +'abOrder'#2#8#0#0#8'TListBox'#7'CovList'#4'Left'#3#7#1#6'Height'#2'{'#3'Top' + +#3#16#1#5'Width'#3#134#0#10'ItemHeight'#2#0#11'MultiSelect'#9#8'TabOrder'#2#9 + +#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#3#160#1#6'Height'#3#176#0#3'Top'#3#136 + +#0#5'Width'#3#191#0#7'Caption'#6#15'Output Options:'#12'ClientHeight'#3#158#0 + +#11'ClientWidth'#3#187#0#8'TabOrder'#2#10#0#9'TCheckBox'#8'Describe'#4'Left' + +#2#9#6'Height'#2#17#3'Top'#2#9#5'Width'#2'w'#7'Caption'#6#22'Descriptive Sta' + +'tistics'#8'TabOrder'#2#0#0#0#9'TCheckBox'#5'RMats'#4'Left'#2#8#6'Height'#2 + +#17#3'Top'#2''''#5'Width'#2't'#7'Caption'#6#20'Correlation Matrices'#8'TabOr' + +'der'#2#1#0#0#9'TCheckBox'#8'Inverses'#4'Left'#2#8#6'Height'#2#17#3'Top'#2'H' + +#5'Width'#2'q'#7'Caption'#6#19'Inverse of Matrices'#8'TabOrder'#2#2#0#0#9'TC' + +'heckBox'#9'PlotMeans'#4'Left'#2#7#6'Height'#2#17#3'Top'#2'j'#5'Width'#2'j'#7 + +'Caption'#6#17'Plot Factor Means'#8'TabOrder'#2#3#0#0#9'TCheckBox'#11'MultCo' + +'mpChk'#4'Left'#2#7#6'Height'#2#17#3'Top'#3#134#0#5'Width'#3#149#0#7'Caption' + +#6#25'Show Multiple Comparisons'#8'TabOrder'#2#4#0#0#0#7'TButton'#8'ResetBtn' + +#4'Left'#3'{'#2#6'Height'#2#27#3'Top'#3#151#0#5'Width'#2'L'#7'Caption'#6#5'R' + +'eset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#11#0#0#7'TButton'#9'Canc' + +'elBtn'#4'Left'#3'{'#2#6'Height'#2#27#3'Top'#3#208#0#5'Width'#2'L'#7'Caption' + +#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#12#0#0#7'TButton'#10'ComputeB' + +'tn'#4'Left'#3'{'#2#6'Height'#2#27#3'Top'#3'0'#1#5'Width'#2'L'#7'Caption'#6#7 + +'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#13#0#0#7'TButton'#9 + +'ReturnBtn'#4'Left'#3'{'#2#6'Height'#2#27#3'Top'#3'`'#1#5'Width'#2'L'#7'Capt' + +'ion'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#14#0#0#7'TButton'#7'Help' + +'Btn'#3'Tag'#2'g'#4'Left'#3'~'#2#6'Height'#2#27#3'Top'#3#0#1#5'Width'#2'I'#7 + +'Caption'#6#4'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2#15#0#0#0 +]); diff --git a/applications/lazstats/source_orig/ANOVATESTS.PAS b/applications/lazstats/source_orig/ANOVATESTS.PAS new file mode 100644 index 000000000..06c42cef6 --- /dev/null +++ b/applications/lazstats/source_orig/ANOVATESTS.PAS @@ -0,0 +1,545 @@ +unit ANOVATESTS; + +{$MODE Delphi} + +Interface + +uses LCLIntf, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + FUNCTIONSLIB, OUTPUTUNIT, GLOBALS; + + +procedure TUKEY(error_ms : double; { mean squared for residual } + error_df : double; { deg. freedom for residual } + value : double; { size of smallest group } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { no. of cases in a group } + min_grp : integer; { minimum group code } + max_grp : integer); { maximum group code } + +procedure SCHEFFETEST(error_ms : double; { mean squared residual } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { count of cases in a group } + min_grp : integer; { code of first group } + max_grp : integer; { code of last group } + total_n : double); { total number of cases } + +procedure Newman_Keuls(error_ms : double; { residual mean squared } + error_df : double; { deg. freedom for error } + value : double; { number in smallest group } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { count of cases in a group } + min_grp : integer; { lowest group code } + max_grp : integer); { largest group code } + +procedure TUKEY_KRAMER(error_ms : double; { residual mean squared } + error_df : double; { deg. freedom for error } + value : double; { number in smallest group } + group_total : DblDyneVec; { sum of scores in group } + group_count : DblDyneVec; { number of caes in group } + min_grp : integer; { code of lowest group } + max_grp : integer); { code of highst group } + +procedure CONTRASTS(error_ms : double; { residual ms } + error_df : double; { residual df } + group_total : DblDyneVec; { group sums } + group_count : DblDyneVec; { group cases } + min_grp : integer; { lowest code } + max_grp : integer; { highest code } + overall_probf : double); { prob of overall test } + +procedure Bonferroni( group_total : DblDyneVec; { sum of scores in group } + group_count : DblDyneVec; { number of caes in group } + group_var : DblDyneVec; { group variances } + min_grp : integer; { code of lowest group } + max_grp : integer); { code of highst group } + +procedure TUKEYBTEST(ErrorMS : double; // within groups error + ErrorDF : double; // degrees of freedom within + group_total : DblDyneVec; // vector of group sums + group_count : DblDyneVec; // vector of group n's + min_grp : integer; // smallest group code + max_grp : integer; // largest group code + groupsize : double); // size of groups (all equal) + +{ --------------------------------------------------------------------- } + +Implementation + +Uses BLKANOVAUNIT; + +procedure TUKEY(error_ms : double; { mean squared for residual } + error_df : double; { deg. freedom for residual } + value : double; { size of smallest group } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { no. of cases in a group } + min_grp : integer; { minimum group code } + max_grp : integer); { maximum group code } +var + sig : boolean; + divisor : double; + df1 : integer; + alpha : double; + contrast, mean1, mean2 : double; + q_stat : double; + i,j : integer; + outline : string; + +begin + alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Tukey HSD Test for Differences Between Means'); + outline := format(' alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('Groups Difference Statistic Probability Significant?'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + divisor := sqrt(error_ms / value ); + for i := min_grp to max_grp - 1 do + for j := i + 1 to max_grp do + begin + outline := format('%2d - %2d ',[i,j]); + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + contrast := mean1 - mean2; + outline := outline + format('%7.3f q = ',[contrast]); + contrast := abs(contrast / divisor) ; + outline := outline + format('%6.3f ',[contrast]); + df1 := max_grp - min_grp + 1; + q_stat := STUDENT(contrast,error_df,df1); + outline := outline + format(' %6.4f',[q_stat]); + if alpha >= q_stat then sig := TRUE else sig := FALSE; + if sig = TRUE then outline := outline + ' YES ' + else outline := outline + ' NO'; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); +end; + +{ ------------------------------------------------------------------------ } + +procedure SCHEFFETEST(error_ms : double; { mean squared residual } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { count of cases in a group } + min_grp : integer; { code of first group } + max_grp : integer; { code of last group } + total_n : double); { total number of cases } + +var + statistic, stat_var, stat_sd : double; + mean1, mean2, alpha, difference, prob_scheffe, f_prob, df1, df2 : double; + outline : string; + i, j : integer; +begin + alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Scheffe contrasts among pairs of means.'); + outline := format(' alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('Group vs Group Difference Scheffe Critical Significant?'); + OutPutFrm.RichEdit.Lines.Add(' Statistic Value'); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------'); + alpha := 1.0 - alpha ; + for i:= min_grp to max_grp - 1 do + for j := i + 1 to max_grp do + begin + outline := format('%2d %2d ',[i,j]); + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + difference := mean1 - mean2; + outline := outline + format('%8.2f ',[difference]); + stat_var := error_ms * + ( 1.0 / group_count[i-1] + 1.0 / group_count[j-1]); + stat_sd := sqrt(stat_var); + statistic := abs(difference / stat_sd); + outline := outline + format('%8.2f ',[statistic]); + df1 := max_grp - min_grp; + df2 := total_n - df1 + 1; + f_prob := fpercentpoint(alpha,round(df1),round(df2) ); + prob_scheffe := sqrt(df1 * f_prob); + outline := outline + format('%8.3f ',[prob_scheffe]); + if statistic > prob_scheffe then outline := outline + 'YES' + else outline := outline + 'NO'; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------'); +end; + +{ ----------------------------------------------------------------------- } + +procedure Newman_Keuls(error_ms : double; { residual mean squared } + error_df : double; { deg. freedom for error } + value : double; { number in smallest group } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { count of cases in a group } + min_grp : integer; { lowest group code } + max_grp : integer); { largest group code } +var + i, j : integer; + temp1, temp2 : double; + groupno : IntDyneVec; + alpha : double; + contrast, mean1, mean2 : double; + q_stat : double; + divisor : double; + tempno : integer; + df1 : integer; + sig : boolean; + outline : string; + +begin + SetLength(groupno,max_grp-min_grp+1); + for i := min_grp to max_grp do groupno[i-1] := i; + for i := min_grp to max_grp - 1 do + begin + for j := i + 1 to max_grp do + begin + if group_total[i-1] / group_count[i-1] > + group_total[j-1] / group_count[j-1] then + begin + temp1 := group_total[i-1]; + temp2 := group_count[i-1]; + tempno := groupno[i-1]; + group_total[i-1] := group_total[j-1]; + group_count[i-1] := group_count[j-1]; + groupno[i-1] := groupno[j-1]; + group_total[j-1] := temp1; + group_count[j-1] := temp2; + groupno[j-1] := tempno; + end; + end; + end; + alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Neuman-Keuls Test for Contrasts on Ordered Means'); + outline := format(' alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Group Mean'); + for i := 1 to max_grp do + begin + outline := format('%3d %10.3f',[groupno[i-1],group_total[i-1] / group_count[i-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Groups Difference Statistic d.f. Probability Significant?'); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------'); + divisor := sqrt(error_ms / value); + for i := min_grp to max_grp - 1 do + begin + for j := i + 1 to max_grp do + begin + outline := format('%2d - %2d ',[groupno[i-1],groupno[j-1]]); + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + contrast := mean1 - mean2; + outline := outline + format('%7.3f q = ',[contrast]); + contrast := abs(contrast / divisor ); + df1 := j - i + 1; + outline := outline + format('%6.3f %2d %3.0f ',[contrast,df1,error_df]); + q_stat := STUDENT(contrast,error_df,df1); + outline := outline + format(' %6.4f',[q_stat]); + if alpha > q_stat then sig := TRUE else sig := FALSE; + if sig = TRUE then outline := outline + ' YES' + else outline := outline + ' NO'; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------'); + groupno := nil; +end; + +{ ----------------------------------------------------------------------- } + +procedure TUKEY_KRAMER(error_ms : double; { residual mean squared } + error_df : double; { deg. freedom for error } + value : double; { number in smallest group } + group_total : DblDyneVec; { sum of scores in group } + group_count : DblDyneVec; { number of caes in group } + min_grp : integer; { code of lowest group } + max_grp : integer); { code of highst group } +var + sig : boolean; + divisor : double; + df1 : integer; + alpha : double; + contrast, mean1, mean2 : double; + q_stat : double; + outline : string; + i, j : integer; + +begin + alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Tukey-Kramer Test for Differences Between Means'); + outline := format(' alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('Groups Difference Statistic Probability Significant?'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + for i := min_grp to max_grp - 1 do + for j := i + 1 to max_grp do + begin + outline := format('%2d - %2d ',[i,j]); + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + contrast := mean1 - mean2; + outline := outline + format('%7.3f q = ',[contrast]); + divisor := sqrt(error_ms * + ( ( 1.0/group_count[i-1] + 1.0/group_count[j-1] ) / 2 ) ); + contrast := abs(contrast / divisor) ; + outline := outline + format('%6.3f ',[contrast]); + df1 := max_grp - min_grp + 1; + q_stat := STUDENT(contrast,error_df,df1); + outline := outline + format(' %6.4f',[q_stat]); + if alpha >= q_stat then sig := TRUE else sig := FALSE; + if sig = TRUE then outline := outline + ' YES ' + else outline := outline + ' NO'; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); +end; + +{ ------------------------------------------------------------------------ } + +procedure CONTRASTS(error_ms : double; { residual ms } + error_df : double; { residual df } + group_total : DblDyneVec; { group sums } + group_count : DblDyneVec; { group cases } + min_grp : integer; { lowest code } + max_grp : integer; { highest code } + overall_probf : double); { prob of overall test } +var + nocontrasts, i, j, k : integer; + df1, df2, probstat, statistic, alpha : double; + coefficients : array[1..20,1..20] of double; + nonorthog : boolean; + weight, sumcross : double; + response : string[5]; + outline : string; + prompt : string; + +begin + outline := format('Enter the number of contrasts (less than %2d or 0:',[max_grp-min_grp+1]); + response := InputBox('ORTHOGONAL CONTRASTS',outline,'0'); + nocontrasts := StrToInt(response); + if nocontrasts > 0 then + begin + for i := 1 to nocontrasts do + begin + outline := format('Contrast number %2d',[i]); + for j := 1 to (max_grp - min_grp+1) do + begin + prompt := format('Group %2d coefficient = ',[j]); + response := InputBox(outline,prompt,'1'); + coefficients[i,j] := StrToFloat(response); + end; + end; + { Check for orthogonality } + nonorthog := FALSE; + for i := 1 to nocontrasts - 1 do + begin + for j := i + 1 to nocontrasts do + begin + sumcross := 0; + for k := 1 to (max_grp - min_grp + 1) do + begin + sumcross := sumcross + + coefficients[i,k]*coefficients[j,k]; + end; + if sumcross <> 0 then nonorthog := TRUE; + if sumcross <> 0 then + begin + outline := format('contrasts %2d and %2d not orthogonal.',[i,j]); + ShowMessage('ERROR!' + outline); + end; + end; + end; + if NOT nonorthog then + begin + alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + if overall_probf > alpha then + begin + OutPutFrm.RichEdit.Lines.Add('No contrasts significant.'); + exit; + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' ORTHOGONAL CONTRASTS'); + OutPutFrm.RichEdit.Lines.Add('Contrast Statistic Probability Critical Value Significant?'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + for i := 1 to nocontrasts do + begin + statistic := 0.0; + weight := 0.0; + for j := 1 to (max_grp - min_grp + 1) do + begin + statistic := statistic + (coefficients[i,j] * + (group_total[j-1] / group_count[j-1])); + weight := weight + (sqr(coefficients[i,j]) / + group_count[j-1]); + end; + statistic := sqr(statistic); + statistic := statistic / (error_ms * weight); + outline := format('%3d %9.4f ',[i,statistic]); + df1 := 1; + df2 := error_df; + probstat := probf(statistic,round(df1),round(df2)) / 2; + outline := outline + format('%8.3f %5.2f ',[probstat,alpha]); + if probstat < alpha then outline := outline + 'YES' + else outline := outline + 'NO'; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Contrast Coefficients Used:'); + for i := 1 to nocontrasts do + begin + outline := format('Contrast %2d ',[i]); + for j := 1 to (max_grp - min_grp + 1) do + outline := outline + format('%4.1f ',[coefficients[i,j]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; { if orthogonal } + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + end; { if nocontrasts > 0 } +end; { of procedure CONTRASTS } +{ ----------------------------------------------------------------------- } + +procedure Bonferroni( group_total : DblDyneVec; { sum of scores in group } + group_count : DblDyneVec; { number of cases in group } + group_var : DblDyneVec; { group variances } + min_grp : integer; { code of lowest group } + max_grp : integer); { code of highst group } +var + i, j : integer; + alpha : double; + contrast, mean1, mean2 : double; + divisor : double; + df2 : integer; + outline : string; + testalpha : double; + NoGrps : integer; + tprob : double; + sig : string[6]; + SS1, SS2 : double; +begin + alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Bonferroni Test for Differences Between Means'); + outline := format(' Overall alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + NoGrps := max_grp - min_grp + 1; + testalpha := alpha / ( (NoGrps * (NoGrps-1)) / 2.0 ); + outline := format('Comparisons made at alpha / no. comparisons = %5.3f',[testalpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Groups Difference Statistic Prob > Value Significant?'); + for i := 1 to NoGrps - 1 do + begin + for j := i+1 to NoGrps do + begin + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + SS1 := group_var[i-1] * (group_count[i-1] - 1.0); + SS2 := group_var[j-1] * (group_count[j-1] - 1.0); + divisor := (SS1 + SS2) / (group_count[i-1] + group_count[j-1] - 2.0); + divisor := sqrt(divisor * ( 1.0 / group_count[i-1] + 1.0 / group_count[j-1])); + contrast := abs(mean1-mean2) / divisor; + df2 := round(group_count[i-1] + group_count[j-1] - 2.0); + tprob := probt(contrast,df2); + if testalpha >= tprob then sig := 'YES' else sig := 'NO'; + outline := format('%3d - %3d %10.3f %10.3f %10.3f %s', + [min_grp+i-1,min_grp+j-1,mean1-mean2,contrast,tprob,sig]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; +end; +//------------------------------------------------------------------- + +procedure TUKEYBTEST(ErrorMS : double; // within groups error + ErrorDF : double; // degrees of freedom within + group_total : DblDyneVec; // vector of group sums + group_count : DblDyneVec; // vector of group n's + min_grp : integer; // smallest group code + max_grp : integer; // largest group code + groupsize : double); // size of groups (all equal) +var + alpha : double; + outline : string; + i, j : integer; + df1 : double; + qstat : double; + tstat : double; + groupno : IntDyneVec; + temp1, temp2 : double; + tempno : integer; + NoGrps : integer; + contrast : double; + mean1, mean2 : double; + sig : string[6]; + groups : double; + response : string[5]; + divisor : double; + +begin + SetLength(groupno,max_grp-min_grp+1); + alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Tukey B Test for Contrasts on Ordered Means'); + outline := format(' alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Groups Difference Statistic d.f. Prob.>value Significant?'); + divisor := sqrt(ErrorMS / groupsize); + NoGrps := max_grp - min_grp + 1; + for i := min_grp to max_grp do groupno[i-1] := i; + for i := 1 to NoGrps - 1 do + begin + for j := i + 1 to NoGrps do + begin + if group_total[i-1] / group_count[i-1] > + group_total[j-1] / group_count[j-1] then + begin + temp1 := group_total[i-1]; + temp2 := group_count[i-1]; + tempno := groupno[i-1]; + group_total[i-1] := group_total[j-1]; + group_count[i-1] := group_count[j-1]; + groupno[i-1] := groupno[j-1]; + group_total[j-1] := temp1; + group_count[j-1] := temp2; + groupno[j-1] := tempno; + end; + end; + end; + + for i := 1 to NoGrps-1 do + begin + for j := i+1 to NoGrps do + begin + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + contrast := abs((mean1 - mean2) / divisor); + df1 := j - i + 1.0; + qstat := STUDENT(contrast,ErrorDF,df1); + groups := NoGrps; + tstat := STUDENT(contrast,ErrorDF,groups); + qstat := (qstat + tstat) / 2.0; + if alpha >= qstat then sig := 'YES' else sig := 'NO'; + outline := format('%3d - %3d %10.3f %10.3f %4.0f,%4.0f %5.3f %s', + [groupno[i-1],groupno[j-1], + mean1-mean2,contrast,df1,ErrorDF,qstat,sig]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + groupno := nil; +end; +//------------------------------------------------------------------- + +end. + + \ No newline at end of file diff --git a/applications/lazstats/source_orig/AUTOCORUNIT.PAS b/applications/lazstats/source_orig/AUTOCORUNIT.PAS new file mode 100644 index 000000000..88983ff89 --- /dev/null +++ b/applications/lazstats/source_orig/AUTOCORUNIT.PAS @@ -0,0 +1,1204 @@ +unit AutoCorUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, ExtCtrls, Buttons, MainUnit, functionsLib, OutPutUnit, Globals, GraphLib, + DataProcs, MatrixLib, PointsUnit, ExpSmoothUnit, DifferenceUnit,FFTUnit, + PolynomialUnit, Math, contexthelpunit; + + +type + + { TAutocorrFrm } + + TAutocorrFrm = class(TForm) + AlphaEdit: TEdit; + HelpBtn: TButton; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + PlotChk: TCheckBox; + StatsChk: TCheckBox; + RMatChk: TCheckBox; + PartialsChk: TCheckBox; + YuleWalkerChk: TCheckBox; + ResidChk: TCheckBox; + GroupBox5: TGroupBox; + MaxLagEdit: TEdit; + InBtn: TBitBtn; + Label5: TLabel; + Label6: TLabel; + OutBtn: TBitBtn; + DepVarEdit: TEdit; + Label3: TLabel; + Label4: TLabel; + VarList: TListBox; + MRegSmoothChk: TCheckBox; + PolyChk: TCheckBox; + FourierSmoothChk: TCheckBox; + ExpSmoothChk: TCheckBox; + MoveAvgChk: TCheckBox; + DifferenceChk: TCheckBox; + MeanChk: TCheckBox; + GroupBox4: TGroupBox; + Label2: TLabel; + ProjPtsEdit: TEdit; + ProjectChk: TCheckBox; + FromCaseEdit: TEdit; + GroupBox3: TGroupBox; + ToCaseEdit: TEdit; + GroupBox1: TGroupBox; + GroupBox2: TGroupBox; + Label1: TLabel; + ColBtn: TRadioButton; + AllCasesBtn: TRadioButton; + OnlyCasesBtn: TRadioButton; + RowBtn: TRadioButton; + procedure ColBtnClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure InBtnClick(Sender: TObject); + procedure OutBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure ReturnBtnClick(Sender: TObject); + procedure RowBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + procedure four1(VAR data : DblDyneVec; nn : longword; isign : integer); + procedure realft(VAR data : DblDyneVec; n : longword; isign : integer); + procedure fourier(VAR data : DblDyneVec; n : integer; npts : integer); + procedure PolyFit(VAR pts : DblDyneVec; VAR avg : DblDyneVec; + NoPts : integer); + + end; + +var + AutocorrFrm: TAutocorrFrm; + +implementation +uses MoveAvgUnit, AutoPlotUnit; + +{ TAutocorrFrm } + +procedure TAutocorrFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + VarList.Clear; + DepVarEdit.Text := ''; + MaxLagEdit.Text := '30'; + StatsChk.Checked := false; + RmatChk.Checked := false; + PartialsChk.Checked := false; + PlotChk.Checked := true; + ResidChk.Checked := false; + DifferenceChk.Checked := false; + PolyChk.Checked := false; + MeanChk.Checked := false; + MoveAvgChk.Checked := false; + ExpSmoothChk.Checked := false; + FourierSmoothChk.Checked := false; + YuleWalkerChk.Checked := false; + FromCaseEdit.Text := ''; + ToCaseEdit.Text := ''; + AllCasesBtn.Checked := true; + InBtn.Visible := true; + OutBtn.Visible := false; + AlphaEdit.Text := '0.05'; + ProjPtsEdit.Text := ''; + if ColBtn.Checked = true then + begin + for i := 1 to OS3MainFrm.DataGrid.ColCount - 1 do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + end + else begin + for i := 1 to NoCases do + begin + if IsFiltered(i) then continue; + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[0,i]); + end; + end; +end; + +procedure TAutocorrFrm.ReturnBtnClick(Sender: TObject); +begin + AutocorrFrm.Hide; +end; + +procedure TAutocorrFrm.RowBtnClick(Sender: TObject); +VAR i : integer; +begin + VarList.Clear; + for i := 1 to NoCases do VarList.Items.Add(OS3MainFrm.DataGrid.Cells[0,i]); + GroupBox2.Caption := 'Include Columns:'; + AllCasesBtn.Caption := 'All Variables'; + OnlyCasesBtn.Caption := 'Only Columns From:'; +end; + +procedure TAutocorrFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TAutocorrFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TAutocorrFrm.ComputeBtnClick(Sender: TObject); +var + X, Y, count, alphaval, covzero,mean1,mean2, var1, var2, mean : double; + sd1, sd2, uplimit, lowlimit, varresid, StdErr, alpha, difference : double; + NoPts, DepVar, maxlag, lag, noproj : integer; + i, j, k, ncors, npoints, nvalues, t : integer; + Means, StdDevs, PartCors, residual, betas, rxy, pts, avg : DblDyneVec; + correlations, a : DblDyneMat; + RowLabels, ColLabels : StrDyneVec; + Title : string; + r, vx, vy, sx, sy, mx, my, UCL, LCL, Yhat, Constant : double; + outline, cellstring : string; + ColNoSelected : IntDyneVec; + NoSelected : integer; + negative : boolean; + Msg : string; + zconf, samptrans, z : double; + confidence, StdDevY : double; + upper : array[0..300] of double; + lower : array[0..300] of double; + lagvalue : array[0..300] of integer; + +begin + OutPutFrm.RichEdit.Clear; + SetLength(ColNoSelected,NoVariables); + if ColBtn.Checked = true then + begin + // get column of the selected variable + DepVar := 0; + for i := 1 to NoVariables do + if (OS3MainFrm.DataGrid.Cells[i,0] = DepVarEdit.Text) then DepVar := i; + if (DepVar = 0)then + begin + ShowMessage('No variable selected to analyze.'); + exit; + end; + ColNoSelected[0] := DepVar; + NoSelected := 1; + // get no. of valid points + NoPts := 0; + for i := 1 to NoCases do + if ValidValue(i,DepVar) then NoPts := NoPts + 1; + end + else begin // get row of the selected case + DepVar := 0; + for i := 1 to NoCases do + begin + if NOT GoodRecord(i,NoSelected,ColNoSelected) then continue; + if (OS3MainFrm.DataGrid.Cells[0,i] = DepVarEdit.Text) then DepVar := i; + end; + if (DepVar = 0)then + begin + ShowMessage('No variable selected to analyze.'); + exit; + end; + ColNoSelected[0] := DepVar; + NoSelected := 1; + NoPts := NoVariables; + end; + + // Get the alpha level and the maximum lag values + alpha := 1.0 - StrToFloat(AlphaEdit.Text); + if ProjectChk.Checked then noproj := StrToInt(ProjPtsEdit.Text) else noproj := 0; + maxlag := StrToInt(MaxLagEdit.Text); + if maxlag > NoPts div 2 then maxlag := NoPts div 2; + if StrToInt(MaxLagEdit.Text) > maxlag then MaxLagEdit.Text := IntToStr(maxlag); + npoints := maxlag + 2; + + // allocate space for covariance and correlation matrices, etc. + SetLength(correlations,npoints+1,npoints+1); + SetLength(Means,npoints); + SetLength(StdDevs,npoints); + SetLength(RowLabels,npoints); + SetLength(ColLabels,npoints); + SetLength(PartCors,npoints); + SetLength(a,npoints,npoints); + SetLength(betas,npoints); + SetLength(rxy,npoints); + SetLength(pts,NoPts+noproj+10); + SetLength(avg,NoPts+noproj+10); + SetLength(residual,NoPts+noproj+10); + + // Initialize arrays + for i := 0 to npoints-1 do + begin + for j := 0 to npoints - 1 do + begin + correlations[i,j] := 0.0; + a[i,j] := 0.0; + end; + Means[i] := 0.0; + StdDevs[i] := 0.0; + cellstring := 'Lag '; + cellstring := cellstring + IntToStr(i); + RowLabels[i] := cellstring; + ColLabels[i] := RowLabels[i]; + PartCors[i] := 0.0; + betas[i] := 0.0; + end; + uplimit := 0.0; + lowlimit := 0.0; + covzero := 0.0; + + // Get points to analyze + if ColBtn.Checked = true then + begin + if AllCasesBtn.Checked = true then + begin + for i := 1 to NoPts do + begin + if NOT ValidValue(i,DepVar) then continue; + pts[i-1] := StrToFloat(OS3MainFrm.DataGrid.Cells[DepVar,i]); + end; + end + else begin + NoPts := 0; + for i := StrToInt(FromCaseEdit.Text) to StrToInt(ToCaseEdit.Text) do + begin + if NOT ValidValue(i,DepVar) then continue; + pts[NoPts] := StrToFloat(OS3MainFrm.DataGrid.Cells[DepVar,i]); + NoPts := NoPts + 1; + end; + end; + end + else begin // row button selected + if AllCasesBtn.Checked = true then + begin + for i := 1 to NoPts do + begin + if Not ValidValue(DepVar,i) then continue; + pts[i-1] := StrToFloat(OS3MainFrm.DataGrid.Cells[i,DepVar]); + end; + end + else begin + NoPts := 0; + for i := StrToInt(FromCaseEdit.Text) to StrToInt(ToCaseEdit.Text) do + begin + if Not ValidValue(DepVar,i) then continue; + pts[NoPts] := StrToFloat(OS3MainFrm.DataGrid.Cells[i,DepVar]); + NoPts := NoPts + 1; + end; + end; + end; + + // Calculate mean of all values + mean := 0.0; + count := NoPts; + for i := 1 to NoPts do mean := mean + pts[i-1]; + + correlations[0,0] := 1.0; + mean := mean / count; + + // Remove mean from all observations if elected + if (MeanChk.Checked) then + for i := 1 to NoPts do pts[i-1] := pts[i-1] - mean; + + // Get differences for lag specified + if (DifferenceChk.Checked) then + begin + if (DifferenceFrm.ShowModal = mrOK) then + begin + lag := StrToInt(DifferenceFrm.LagEdit.Text); + for i := 0 to NoPts - 1 do avg[i] := pts[i]; + for j := 1 to StrToInt(DifferenceFrm.OrderEdit.Text) do + begin + for i := NoPts downto lag do + begin + avg[i] := avg[i] - avg[i-lag]; + end; + end; + end; + // plot the original and differenced values + PointsFrm.pts := pts; + PointsFrm.avg := avg; + PointsFrm.NoCases := NoPts; + PointsFrm.LabelOne := 'Original'; + PointsFrm.LabelTwo := 'Differenced'; + Msg := 'No. points = '; + Msg := Msg + IntToStr(NoCases); + PointsFrm.MsgEdit.Text := Msg; + PointsFrm.Title := 'Differencing Smoothed'; + PointsFrm.Caption := 'Difference Smoothing'; + PointsFrm.ShowModal; +// PointsFrm.PtsPlot(self); + if (ResidChk.Checked = true) then // calculate and plot residuals; + begin + varresid := 0.0; + for i := 0 to NoPts - 1 do + begin + residual[i] := pts[i] - avg[i]; + varresid := varresid + (residual[i] * residual[i]); + end; + varresid := varresid / NoPts; + StdErr := sqrt(varresid); + // plot the residuals + PointsFrm.pts := pts; + PointsFrm.avg := residual; + PointsFrm.NoCases := NoPts; + Msg := 'Std. Err. Residuals = '; + Msg := Msg + FloatToStr(StdErr); + PointsFrm.MsgEdit.Text := Msg; + PointsFrm.LabelOne := 'Original'; + PointsFrm.LabelTwo := 'Residuals'; + PointsFrm.Title := 'Residuals from Difference Smoothing'; + PointsFrm.Caption := 'Difference Residuals'; + PointsFrm.ShowModal; +// PointsFrm.PtsPlot(self); + end; + // replace original points with smoothed values + for i := 0 to NoPts - 1 do + pts[i] := avg[i]; + end; + + // Get moving average if checked + if (MoveAvgChk.Checked) then + begin + MoveAvgFrm.ShowModal; + nvalues := MoveAvgFrm.order; + if (nvalues > 0) then + begin + // plot the original points and the smoothed average + for i := nvalues to NoPts - nvalues - 1 do + begin + avg[i] := pts[i] * MoveAvgFrm.W[0]; // middle value + for j := 1 to nvalues do // left values + avg[i] := avg[i] + (pts[i-j] * MoveAvgFrm.W[j]); + for j := 1 to nvalues do // right values + avg[i] := avg[i] + (pts[i+j] * MoveAvgFrm.W[j]); + end; + // fill in unestimable averages with original points + for i := 0 to nvalues - 1 do // left values + begin + avg[i] := pts[i] * MoveAvgFrm.W[0]; + for j := 1 to nvalues do + avg[i] := avg[i] + (pts[i+j] * 2.0 * MoveAvgFrm.W[j]); + end; + for i := NoPts - nvalues to NoPts - 1 do //right values + begin + avg[i] := pts[i] * MoveAvgFrm.W[0]; + for j := 1 to nvalues do + avg[i] := avg[i] + (pts[i-j] * 2.0 * MoveAvgFrm.W[j]); + end; + if ProjectChk.Checked then + begin + for i := 0 to noproj-1 do + begin + avg[NoPts+i] := avg[NoPts-1]; + pts[NoPts+i] := pts[NoPts-1]; + end; + end; + // plot the points + PointsFrm.pts := pts; + PointsFrm.avg := avg; + PointsFrm.NoCases := NoPts+noproj; + PointsFrm.LabelOne := 'Original'; + PointsFrm.LabelTwo := 'Smoothed'; + Msg := 'No. points = '; + Msg := Msg + IntToStr(NoPts); + PointsFrm.MsgEdit.Text := Msg; + PointsFrm.Title := 'Moving Average Smoothed'; + PointsFrm.Caption := 'Moving Average Smoothing'; + PointsFrm.ShowModal; + end; + if (ResidChk.Checked = true) then // calculate and plot residuals; + begin + varresid := 0.0; + for i := 0 to NoPts - 1 do + begin + residual[i] := pts[i] - avg[i]; + varresid := varresid + (residual[i] * residual[i]); + end; + varresid := varresid / NoPts; + StdErr := sqrt(varresid); + // plot the residuals + PointsFrm.pts := pts; + PointsFrm.avg := residual; + PointsFrm.NoCases := NoPts; + Msg := 'Std. Err. Residuals = '; + Msg := Msg + FloatToStr(StdErr); + PointsFrm.MsgEdit.Text := Msg; + PointsFrm.LabelOne := 'Original'; + PointsFrm.LabelTwo := 'Residuals'; + PointsFrm.Title := 'Residuals from Moving Average'; + PointsFrm.Caption := 'Moving Average Residuals'; + PointsFrm.ShowModal; +// PointsFrm.PtsPlot(self); + end; + // replace original points with smoothed values + for i := 0 to (NoPts + noproj - 1) do pts[i] := avg[i]; + end; + + // do exponential smoothing if requested + if (ExpSmoothChk.Checked = true) then + begin + ExpSmoothFrm.ShowModal; + alpha := ExpSmoothFrm.alpha; + avg[0] := pts[0]; // set first value := to observed + for t := 1 to NoPts - 1 do // case pointer + begin + avg[t] := alpha * pts[t]; + avg[t] := avg[t] + (1.0 - alpha) * avg[t-1]; + end; + if ProjectChk.Checked then + begin + for i := 0 to noproj-1 do + begin + avg[NoPts+i] := alpha * pts[NoPts+i-1]; + avg[NoPts+i] := avg[NoPts+i] + ((1.0 - alpha) * avg[NoPts+i-1]); + pts[NoPts+i] := avg[NoPts+i]; + end; + end; + // plot the points + PointsFrm.pts := pts; + PointsFrm.avg := avg; + PointsFrm.NoCases := NoPts+noproj; + PointsFrm.LabelOne := 'Original'; + PointsFrm.LabelTwo := 'Smoothed'; + PointsFrm.Title := 'Exponential Smoothed'; + PointsFrm.Caption := 'Exponential Smoothing'; + PointsFrm.ShowModal; +// PointsFrm.PtsPlot(self); + if (ResidChk.Checked = true) then // calculate and plot residuals; + begin + varresid := 0.0; + for i := 0 to NoPts - 1 do + begin + residual[i] := pts[i] - avg[i]; + varresid := varresid + (residual[i] * residual[i]); + end; + varresid := varresid / NoPts; + StdErr := sqrt(varresid); + // plot the residuals + PointsFrm.pts := pts; + PointsFrm.avg := residual; + PointsFrm.NoCases := NoPts; + Msg := 'Std. Err. Residuals = '; + Msg := Msg + FloatToStr(StdErr); + PointsFrm.MsgEdit.Text := Msg; + PointsFrm.LabelOne := 'Original'; + PointsFrm.LabelTwo := 'Residuals'; + PointsFrm.Title := 'Residuals from Exponential Smoothing'; + PointsFrm.Caption := 'Exponential Residuals'; + PointsFrm.ShowModal; +// PointsFrm.PtsPlot(self); + end; + // replace original points with smoothed values + for i := 0 to (NoPts + noproj - 1) do pts[i] := avg[i]; + end; + + // Fast Fourier smoothing, if requested + if (FourierSmoothChk.Checked = true) then + begin + for i := 0 to NoPts - 1 do avg[i] := pts[i]; + if ProjectChk.Checked then + begin + for i := 0 to noproj - 1 do + begin + avg[i] := pts[NoPts-1-noproj+i]; + pts[i] := avg[i]; + end; + end; + FFTFrm.NptsEdit.Text := IntToStr(NoPts+noproj+1); + FFTFrm.ShowModal; + nvalues := StrToInt(FFTFrm.NptsEdit.Text); + fourier(avg,nvalues,nvalues); + PointsFrm.pts := pts; + PointsFrm.avg := avg; + PointsFrm.NoCases := NoPts+noproj; + PointsFrm.LabelOne := 'Original'; + PointsFrm.LabelTwo := 'Smoothed'; + PointsFrm.Title := 'Fourier Smoothed'; + PointsFrm.Caption := 'Fourier Smoothing'; + PointsFrm.ShowModal; +// PointsFrm.PtsPlot(self); + if (ResidChk.Checked = true) then // calculate and plot residuals; + begin + varresid := 0.0; + for i := 0 to NoPts - 1 do + begin + residual[i] := pts[i] - avg[i]; + varresid := varresid + (residual[i] * residual[i]); + end; + varresid := varresid / NoPts; + StdErr := sqrt(varresid); + // plot the residuals + PointsFrm.pts := pts; + PointsFrm.avg := residual; + PointsFrm.NoCases := NoPts; + Msg := 'Std. Err. Residuals = '; + Msg := Msg + FloatToStr(StdErr); + PointsFrm.MsgEdit.Text := Msg; + PointsFrm.LabelOne := 'Original'; + PointsFrm.LabelTwo := 'Residuals'; + PointsFrm.Title := 'Residuals from Fourier Smoothing'; + PointsFrm.Caption := 'Fourier Residuals'; + PointsFrm.ShowModal; +// PointsFrm.PtsPlot(self); + end; + // replace original points with smoothed values + for i := 0 to (NoPts + noproj - 1) do pts[i] := avg[i]; + end; + + // Get polynomial regression fit if elected + if (PolyChk.Checked) then + begin + if (PolynomialFrm.ShowModal = mrOk) then + begin + if ProjectChk.Checked then + begin + for i := 0 to noproj - 1 do + begin + avg[i] := pts[NoPts-1-noproj+i]; + pts[i] := avg[i]; + end; + end; + PolyFit(pts,avg,NoPts+noproj); + // plot original and smoothed data + PointsFrm.pts := pts; + PointsFrm.avg := avg; + PointsFrm.NoCases := NoPts+noproj; + PointsFrm.LabelOne := 'Original'; + PointsFrm.LabelTwo := 'Smoothed'; + PointsFrm.Title := 'Polynomial Smoothed'; + PointsFrm.Caption := 'Polynomial Smoothing'; + PointsFrm.ShowModal; +// PointsFrm.PtsPlot(self); + // plot residuals if checked + if (ResidChk.Checked) then + begin + varresid := 0.0; + for i := 0 to NoPts - 1 do + begin + residual[i] := pts[i] - avg[i]; + varresid := varresid + (residual[i] * residual[i]); + end; + varresid := varresid / NoPts; + StdErr := sqrt(varresid); + // plot the residuals + PointsFrm.pts := pts; + PointsFrm.avg := residual; + PointsFrm.NoCases := NoPts; + Msg := 'Std. Err. Residuals = '; + Msg := Msg + FloatToStr(StdErr); + PointsFrm.MsgEdit.Text := Msg; + PointsFrm.LabelOne := 'Original'; + PointsFrm.LabelTwo := 'Residuals'; + PointsFrm.Title := 'Residuals from Polynomial Smoothing'; + PointsFrm.Caption := 'Polynomial Residuals'; + PointsFrm.ShowModal; +// PointsFrm.PtsPlot(self); + end; + end; + + // replace original points with smoothed values + for i := 0 to (NoPts + noproj - 1) do pts[i] := avg[i]; + end; + + // get mean and variance of (transformed?) points + mean := 0.0; + for i := 0 to NoPts - 1 do mean := mean + pts[i]; + mean := mean / NoPts; + for i := 1 to NoPts do + begin + X := pts[i-1]; + if (MeanChk.Checked = true) then covzero := covzero + (X * X) + else covzero := covzero + ((X - mean) * (X - mean)); + end; + covzero := covzero / count; + + outline := format('Overall mean = %8.3f, variance = %8.3f',[mean,covzero]); + OutPutFrm.RichEdit.Lines.Add(outline); + + // get correlations for each lag 0 to maxlag + confidence := StrToFloat(AlphaEdit.Text); + ncors := 0; + OutPutFrm.RichEdit.Lines.Add('Lag Rxy MeanX MeanY Std.Dev.X Std.Dev.Y Cases LCL UCL'); + OutPutFrm.RichEdit.Lines.Add(''); + if maxlag > NoPts-3 then + begin + maxlag := NoPts - 3; + maxlagedit.Text := IntToStr(maxlag); + end; + for lag := 0 to maxlag do + begin + r := 0.0; + vx := 0.0; + vy := 0.0; + mx := 0.0; + my := 0.0; + Count := 0.0; + lagvalue[lag] := lag; + for i := 1 to (NoPts - lag) do + begin + X := pts[i-1]; + Y := pts[i-1+lag]; + if (MeanChk.Checked = true) then r := r + (X * Y) + else r := r + ((X - mean) * (Y - mean)); + vx := vx + (X * X); + vy := vy + (Y * Y); + mx := mx + X; + my := my + Y; + Count := Count + 1.0; + end; + r := r / NoPts; + vx := vx - (mx * mx / Count); + vx := vx / (Count - 1.0); + sx := sqrt(vx); + vy := vy - (my * my / Count); + vy := vy / (Count - 1.0); + sy := sqrt(vy); + mx := mx / Count; + my := my / Count; + r := r / covzero; + if (abs(r) < 1.0) then samptrans := ln((1.0 + r) / (1.0 - r)) / 2.0; + // if above failed, r := 1.0 + StdErr := sqrt(1.0 / (NoPts - 3.0)); + zconf := abs(inversez(confidence / 2.0)); + if (abs(r) < 1.0) then + begin + z := samptrans / StdErr; + UCL := samptrans + (zconf * StdErr); + LCL := samptrans - (zconf * StdErr); + UCL := (exp(2.0 * UCL) - 1.0) / (exp(2.0 * UCL) + 1.0); + LCL := (exp(2.0 * LCL) - 1.0) / (exp(2.0 * LCL) + 1.0); + end + else + begin + UCL := 1.0; + LCL := 1.0; + end; + upper[lag] := UCL; + lower[lag] := LCL; + outline := format('%4d %9.4f %9.4f %9.4f %9.4f %9.4f %9.0f %9.4f %9.4f', + [lag, r, mx, my, sx, sy, Count, LCL, UCL]); + OutPutFrm.RichEdit.Lines.Add(outline); + ncors := ncors + 1; + correlations[0,lag] := r; + correlations[lag,0] := r; + end; // next lag + OutPutFrm.ShowModal; + + // build correlation matrix + for i := 0 to maxlag do correlations[i,i] := 1.0; + for i := 1 to maxlag do + begin + for j := i+1 to maxlag do + begin + correlations[i,j] := correlations[0,j-i]; + correlations[j,i] := correlations[i,j]; + end; + end; + + // Print the correlation matrix if elected + if (RmatChk.Checked = true) then + begin + OutPutFrm.RichEdit.Clear; + Title := 'Matrix of Lagged Variable: '; + Title := Title + DepVarEdit.Text; + MAT_PRINT(correlations,maxlag+1,maxlag+1,Title,RowLabels,ColLabels,NoPts); + OutPutFrm.ShowModal; + end; + + // Calculate partial correlations + PartCors[0] := 1.0; + for i := 1 to maxlag do // start at lag 1 + begin + for j := 1 to i do + begin + for k := 1 to i do + begin + a[j-1,k-1] := correlations[j,k]; + end; + rxy[j-1] := correlations[0,j]; + end; + SVDinverse(a, i); + + // get betas as product of inverse times vector + for j := 1 to i do + begin + betas[j-1] := 0.0; + for k := 1 to i do betas[j-1] := betas[j-1] + (a[j-1,k-1] * rxy[k-1]); + end; + + // get regression constant + // Note - since variance of Y and each X is the same, B = beta for an X + Constant := 0; + if MeanChk.Checked = false then + begin + for j := 1 to i do Constant := Constant + betas[j-1] * Mean; + Constant := Mean - Constant; + end; + + // calculate predicted value and residual + // Note - the dependent variable predicted is the next value in the + // time series using each of the previous time period values + Yhat := 0.0; + StdDevY := sqrt(covzero); + for j := 0 to i-1 do Yhat := Yhat + (betas[j] * pts[j]); + Yhat := Yhat + Constant; + avg[i] := Yhat; + residual[i] := pts[i] - Yhat; + + // print betas if elected + if (YuleWalkerChk.Checked) then + begin + OutPutFrm.RichEdit.Clear; + Title := 'Yule-Walker Coefficients for lag ' + IntToStr(i); + DynVectorPrint(betas,i,Title,ColLabels,NoPts); + outline := format('Constant = %10.3f',[Constant]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + end; + + PartCors[i] := betas[i-1]; + end; // next i (lag from 1 to maxlag) + + // print partial correlations if elected + if (PartialsChk.Checked = true) then + begin + OutPutFrm.RichEdit.Clear; + Title := 'Partial Correlation Coefficients'; + DynVectorPrint(PartCors,maxlag,Title,ColLabels,NoPts); + OutPutFrm.ShowModal; + end; + + // plot correlations if elected + uplimit := 1.96 * (1.0 / sqrt(count)); + lowlimit := -1.96 * (1.0 / sqrt(count)); + if (PlotChk.Checked = true) then + begin + for i := 0 to maxlag do rxy[i] := correlations[0][i]; + AutoPlotFrm.PlotPartCors := true; + AutoPlotFrm.PlotLimits := true; + AutoPlotFrm.correlations := rxy; + AutoPlotFrm.partcors := PartCors; + AutoPlotFrm.uplimit := uplimit; + AutoPlotFrm.lowlimit := lowlimit; + AutoPlotFrm.npoints := maxlag+1; + AutoPlotFrm.DepVarEdit := DepVarEdit.Text; +// AutoPlotFrm.AutoPlot; + AutoPlotFrm.ShowModal; + end; + + if MRegSmoothChk.Checked then + begin + // calculate predicted values and residuals for remaining points + // Note - the dependent variable predicted is the next value in + // the time series using each of the previous time period values + // as predictors + for i := maxlag to (NoPts + noproj - 1) do + begin + Yhat := 0.0; + for j := 0 to maxlag do Yhat := Yhat + (betas[j] * pts[i-maxlag+j]); + Yhat := Yhat + Constant; + avg[i] := Yhat; + residual[i] := pts[i] - Yhat; + end; + // plot points smoothed by autoregression + avg[0] := pts[0]; + PointsFrm.pts := pts; + PointsFrm.avg := avg; + PointsFrm.NoCases := NoPts + noproj; + PointsFrm.LabelOne := 'Original'; + PointsFrm.LabelTwo := 'Smoothed'; + PointsFrm.Title := 'Autoregressive Smoothed'; + PointsFrm.Caption := 'Autoregression Smoothing'; + PointsFrm.ShowModal; + + // plot residuals if elected + if (ResidChk.Checked) then + begin + varresid := 0.0; + residual[0] := 0.0; + for i := 1 to maxlag do + begin +// residual[i] := pts[i] - avg[i]; + varresid := varresid + (residual[i] * residual[i]); + end; + varresid := varresid / maxlag; + StdErr := sqrt(varresid); + // plot the residuals + PointsFrm.pts := pts; + PointsFrm.avg := residual; + PointsFrm.NoCases := NoPts; + Msg := 'Std. Err. Residuals = '; + Msg := Msg + FloatToStr(StdErr); + PointsFrm.MsgEdit.Text := Msg; + PointsFrm.LabelOne := 'Original'; + PointsFrm.LabelTwo := 'Residuals'; + PointsFrm.Title := 'Residuals from Autoregression Smoothing'; + PointsFrm.Caption := 'Autoregressive Residuals'; + PointsFrm.ShowModal; + end; + end; + + // clean up the heap + residual := nil; + avg := nil; + pts := nil; + rxy := nil; + betas := nil; + a := nil; + PartCors := nil; + ColLabels := nil; + RowLabels := nil; + StdDevs := nil; + Means := nil; + correlations := nil; + ColNoSelected := nil; + + OutPutFrm.RichEdit.Clear; +end; + +procedure TAutocorrFrm.ColBtnClick(Sender: TObject); +VAR i : integer; +begin + VarList.Clear; + for i := 1 to OS3MainFrm.DataGrid.ColCount - 1 do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + GroupBox2.Caption := 'Include Cases:'; + AllCasesBtn.Caption := 'All Cases'; + OnlyCasesBtn.Caption := 'Only Cases From:'; +end; + +procedure TAutocorrFrm.InBtnClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + DepVarEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + OutBtn.Visible := true; + InBtn.Visible := false; +end; + +procedure TAutocorrFrm.OutBtnClick(Sender: TObject); +begin + VarList.Items.Add(DepVarEdit.Text); + DepVarEdit.Text := ''; + InBtn.Visible := true; + OutBtn.Visible := false; +end; + +procedure TAutocorrFrm.four1(var data: DblDyneVec; nn: longword; isign: integer); +var + n,mmax,m,j,istep, i : longword; + wtemp,wr,wpr,wpi,wi,theta : double; + tempr,tempi : double; + +begin + n := 2 * nn; + j := 1; + i := 1; + while i < n do + begin + if (j > i) then + begin + tempr := data[j]; + tempi := data[j+1]; + data[j] := data[i]; + data[j+1] := data[i+1]; + data[i] := tempr; + data[i+1] := tempi; + end; + m := n div 2; + while (m >= 2) and (j > m) do + begin + j := j - m; + m := m div 2; + end; + j := j + m; + i := i + 2; + end; + mmax := 2; + while (n > mmax) do + begin + istep := 2 * mmax; + theta := isign * (6.28318530717959 / mmax); + wtemp := sin(0.5 * theta); + wpr := -2.0 * wtemp * wtemp; + wpi := sin(theta); + wr := 1.0; + wi := 0.0; + m := 1; + while m < mmax do + begin + i := m; + while i <= n do + begin + j := i + mmax; + tempr := wr * data[j] - wi * data[j+1]; + tempi := wr * data[j+1] + wi * data[j]; + data[j] := data[i] - tempr; + data[j+1] := data[i+1] - tempi; + data[i] := data[i] + tempr; + data[i+1] := data[i+1] + tempi; + i := i + istep; + end; + wtemp := wr; + wr := wr * wpr - wi * wpi + wr; + wi := wi * wpr + wtemp * wpi + wi; + m := m + 2; + end; + mmax := istep; + end; +end; + +procedure TAutocorrFrm.realft(var data: DblDyneVec; n: longword; isign: integer); +var + i,i1,i2,i3,i4,np3 : longword; + c1,c2,h1r,h1i,h2r,h2i : double; + wr,wi,wpr,wpi,wtemp,theta : double; + +begin + c1 := 0.5; + theta := 3.141592653589793 / ( n div 2); + if (isign = 1) then + begin + c2 := -0.5; + four1(data,n div 2,1); + end else + begin + c2 := 0.5; + theta := -theta; + end; + wtemp := sin(0.5 * theta); + wpr := -2.0 * wtemp * wtemp; + wpi := sin(theta); + wr := 1.0 + wpr; + wi := wpi; + np3 := n + 3; + for i := 2 to n div 2 do + begin + i1 := i + i - 1; + i2 := 1 + i1; + i3 := np3 - i2; + i4 := 1 + i3; + h1r := c1 * (data[i1] + data[i3]); + h1i := c1 * (data[i2] - data[i4]); + h2r := -c2 * (data[i2] + data[i4]); + h2i := c2 * (data[i1] - data[i3]); + data[i1] := h1r + wr * h2r - wi * h2i; + data[i2] := h1i + wr * h2i + wi * h2r; + data[i3] := h1r - wr * h2r + wi * h2i; + data[i4] := -h1i + wr * h2i + wi * h2r; + wtemp := wr; + wr := wtemp * wpr - wi * wpi + wr; + wi := wi * wpr + wtemp * wpi + wi; + end; + if (isign = 1) then + begin + h1r := data[1]; + data[1] := h1r + data[2]; + data[2] := h1r - data[2]; + end else + begin + h1r := data[1]; + data[1] := c1 * (h1r + data[2]); + data[2] := c1 * (h1r - data[2]); + four1(data,n div 2,-1); + end; +end; + +procedure TAutocorrFrm.fourier(var data: DblDyneVec; n: integer; npts: integer ); +var + nmin, m, mo2, i, k, j : integer; + yn, y1, rn1, fac, cnst : double; + y : DblDyneVec; + +begin + m := 2; + nmin := n + (2 * npts); + while (m < nmin) do m := m * 2; + cnst := npts / m; + cnst := cnst * cnst; + SetLength(y,m+1); + for i := 0 to n - 1 do y[i+1] := data[i]; + y1 := y[1]; + yn := y[n]; + rn1 := 1.0 / (n - 1); + for j := 1 to n do y[j] := y[j] + (-rn1 * (y1 * (n - j) + y1 * (j - 1))); + for j := n+1 to m do y[j] := 0.0; + mo2 := m div 2; + realft(y,mo2,1); + y[1] := y[1] / mo2; + fac := 1.0; + for j := 1 to mo2 - 1 do + begin + k := 2 * j + 1; + if (fac <> 0) then + begin + fac := (1.0 - cnst * j * j) / mo2; + if ( fac < 0.0) then fac := 0.0; + y[k] := fac * y[k]; + y[k + 1] := fac * y[k + 1]; + end + else y[k + 1] := 0.0; + y[k] := 0.0; + end; + fac := (1.0 - 0.25 * npts * npts) / mo2; + if (fac < 0.0) then fac := 0.0; + y[2] := y[2] * fac; + realft(y,mo2,-1); + for j := 1 to n do y[j] := y[j] + rn1 * (y1 * (n - j) + yn * (j - 1)); + for j := 0 to n - 1 do data[j] := y[j+1]; + y := nil; +end; + +procedure TAutocorrFrm.PolyFit(var pts: DblDyneVec; var avg: DblDyneVec; + NoPts: integer); +var + X : DblDyneMat; + XY : DblDyneVec; + XTX : DblDyneMat; + Beta : DblDyneVec; + t, Yhat : double; + i, j, k, order : integer; + RowLabels, ColLabels : StrDyneVec; + +begin + order := StrToInt(PolynomialFrm.PolyEdit.Text); + SetLength(X,NoPts,order+1); + SetLength(XTX,order+2,order+2); + SetLength(XY,order+1); + SetLength(Beta,order+1); + SetLength(RowLabels,NoPts+1); + SetLength(ColLabels,NoPts+1); + + // initialize + for i := 0 to NoPts - 1 do + begin + for j := 0 to order do + begin + X[i,j] := 0.0; + end; + end; + for i := 0 to order do + begin + XY[i] := 0.0; + Beta[i] := 0.0; + for j := 0 to order do + begin + XTX[i,j] := 0.0; + end; + end; + + for i := 0 to NoPts - 1 do + begin + for j := 0 to order do + begin + t := i+1; + X[i,j] := Power(t,j); + end; + end; + + // print the X matrix as a check + for i := 0 to NoPts - 1 do + begin + RowLabels[i] := 'Case' + IntToStr(i+1); + end; + for i := 0 to order+1 do + begin + ColLabels[i] := 'Order' + IntToStr(i); + end; +{ + OutPutFrm.RichEdit.Clear; + Title := 'X Matrix'; + DynMatPrint(X,NoPts,order+1,Title,RowLabels,ColLabels,NoPts); + OutPutFrm.ShowModal; +} + // Get X transpose times X + for j := 0 to order do + begin + for k := 0 to order do + begin + XTX[j,k] := 0.0; + for i := 0 to NoPts - 1 do + begin + XTX[j,k] := XTX[j,k] + (X[i,j] * X[i,k]); + end; + end; + end; +{ + // print the XTX matrix + OutPutFrm.RichEdit.Clear; + Title := 'XTX Matrix (Offset by 1)'; + DynMatPrint(XTX,order+2,order+2,Title,ColLabels,ColLabels,NoPts); + OutPutFrm.ShowModal; +} + // Get X transpose Y + for j := 0 to order do + begin + for i := 0 to NoPts - 1 do + begin + XY[j] := XY[j] + (X[i,j] * pts[i]); + end; + end; +{ + // print the XY vector + OutPutFrm.RichEdit.Clear; + Title := 'XY vector'; + DynVectorPrint(XY,order+1,Title,ColLabels,NoPts); + OutPutFrm.ShowModal; +} + // get inverse of XTX + SVDinverse(XTX,order+1); +{ + // print the inverse matrix + OutPutFrm.RichEdit.Clear; + Title := 'XTX Inverse Matrix'; + DynMatPrint(XTX,order+2,order+2,Title,ColLabels,ColLabels,NoPts); + OutPutFrm.ShowModal; +} + // get betas + for j := 0 to order do + begin + for k := 0 to order do + begin + Beta[j] := Beta[j] + (XTX[j,k] * XY[k]); + end; + end; +{ + // print the betas + OutPutFrm.RichEdit.Clear; + Title := 'Betas vector'; + DynVectorPrint(Beta,order+1,Title,ColLabels,NoPts); + OutPutFrm.ShowModal; +} + // get predicted values + for i := 0 to NoPts - 1 do + begin + Yhat := 0.0; + t := i; + for j := 0 to order do Yhat := Yhat + (Beta[j] * Power(t,j)); + avg[i] := Yhat; + end; + + //cleanup + ColLabels := nil; + RowLabels := nil; + Beta := nil; + XY := nil; + XTX := nil; + X := nil; +end; + +initialization + {$I autocorunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/AUTOCORUNIT.lfm b/applications/lazstats/source_orig/AUTOCORUNIT.lfm new file mode 100644 index 000000000..3cae7bfd0 --- /dev/null +++ b/applications/lazstats/source_orig/AUTOCORUNIT.lfm @@ -0,0 +1,448 @@ +object AutocorrFrm: TAutocorrFrm + Left = 176 + Height = 432 + Top = 90 + Width = 503 + Caption = 'Autocorrelation' + ClientHeight = 432 + ClientWidth = 503 + OnShow = FormShow + LCLVersion = '0.9.30' + object Label3: TLabel + Left = 6 + Height = 16 + Top = 72 + Width = 102 + Caption = 'Available Variables:' + ParentColor = False + end + object Label4: TLabel + Left = 193 + Height = 16 + Top = 88 + Width = 90 + Caption = 'Selected Variable' + ParentColor = False + end + object Label5: TLabel + Left = 152 + Height = 16 + Top = 168 + Width = 68 + Caption = 'Alpha Level: ' + ParentColor = False + end + object Label6: TLabel + Left = 149 + Height = 16 + Top = 191 + Width = 83 + Caption = 'Maximum Lag: ' + ParentColor = False + end + object GroupBox1: TGroupBox + Left = 7 + Height = 41 + Top = 16 + Width = 283 + Caption = 'The series is code in:' + ClientHeight = 23 + ClientWidth = 279 + TabOrder = 0 + object ColBtn: TRadioButton + Left = 9 + Height = 19 + Top = 1 + Width = 99 + Caption = 'A Grid Column' + OnClick = ColBtnClick + TabOrder = 0 + end + object RowBtn: TRadioButton + Left = 153 + Height = 19 + Top = 1 + Width = 109 + Caption = 'A row of the grid' + OnClick = RowBtnClick + TabOrder = 1 + end + end + object GroupBox2: TGroupBox + Left = 296 + Height = 121 + Top = 24 + Width = 195 + Caption = 'Include Cases:' + ClientHeight = 103 + ClientWidth = 191 + TabOrder = 1 + object Label1: TLabel + Left = 57 + Height = 16 + Top = 84 + Width = 15 + Caption = 'To' + ParentColor = False + end + object AllCasesBtn: TRadioButton + Left = 8 + Height = 19 + Top = 2 + Width = 67 + Caption = 'All Cases' + TabOrder = 0 + end + object OnlyCasesBtn: TRadioButton + Left = 7 + Height = 19 + Top = 26 + Width = 112 + Caption = 'Only Cases From:' + TabOrder = 1 + end + object FromCaseEdit: TEdit + Left = 88 + Height = 23 + Top = 48 + Width = 57 + TabOrder = 2 + Text = 'FromCaseEdit' + end + object ToCaseEdit: TEdit + Left = 87 + Height = 23 + Top = 79 + Width = 58 + TabOrder = 3 + Text = 'ToCaseEdit' + end + end + object GroupBox3: TGroupBox + Left = 296 + Height = 44 + Top = 161 + Width = 195 + Caption = 'Projection Option:' + ClientHeight = 26 + ClientWidth = 191 + TabOrder = 2 + object Label2: TLabel + Left = 128 + Height = 16 + Top = 5 + Width = 34 + Caption = 'Points' + ParentColor = False + end + object ProjectChk: TCheckBox + Left = 8 + Height = 19 + Top = 2 + Width = 57 + Caption = 'Project' + TabOrder = 0 + end + object ProjPtsEdit: TEdit + Left = 72 + Height = 23 + Top = 1 + Width = 42 + TabOrder = 1 + end + end + object GroupBox4: TGroupBox + Left = 297 + Height = 149 + Top = 216 + Width = 194 + Caption = 'Data Smoothing:' + ClientHeight = 131 + ClientWidth = 190 + TabOrder = 3 + object MeanChk: TCheckBox + Left = 9 + Height = 19 + Top = 2 + Width = 105 + Caption = 'Center on Mean' + TabOrder = 0 + end + object DifferenceChk: TCheckBox + Left = 8 + Height = 19 + Top = 18 + Width = 136 + Caption = 'Difference Smoothing' + TabOrder = 1 + end + object MoveAvgChk: TCheckBox + Left = 8 + Height = 19 + Top = 37 + Width = 152 + Caption = 'Moving Average Smooth' + TabOrder = 2 + end + object ExpSmoothChk: TCheckBox + Left = 8 + Height = 19 + Top = 55 + Width = 135 + Caption = 'Exponentially Smooth' + TabOrder = 3 + end + object FourierSmoothChk: TCheckBox + Left = 8 + Height = 19 + Top = 74 + Width = 131 + Caption = 'Fourier Filter Smooth' + TabOrder = 4 + end + object PolyChk: TCheckBox + Left = 8 + Height = 19 + Top = 90 + Width = 185 + Caption = 'Polynomial Regression Smooth' + TabOrder = 5 + end + object MRegSmoothChk: TCheckBox + Left = 9 + Height = 19 + Top = 108 + Width = 169 + Caption = 'Multiple Regression Smooth' + TabOrder = 6 + end + end + object VarList: TListBox + Left = 6 + Height = 274 + Top = 88 + Width = 138 + ItemHeight = 0 + TabOrder = 4 + end + object InBtn: TBitBtn + Left = 153 + Height = 27 + Top = 95 + Width = 31 + 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 + } + NumGlyphs = 0 + OnClick = InBtnClick + TabOrder = 5 + end + object OutBtn: TBitBtn + Left = 153 + Height = 27 + Top = 125 + Width = 31 + 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 + } + NumGlyphs = 0 + OnClick = OutBtnClick + TabOrder = 6 + end + object DepVarEdit: TEdit + Left = 185 + Height = 23 + Top = 112 + Width = 105 + TabOrder = 7 + Text = 'DepVarEdit' + end + object AlphaEdit: TEdit + Left = 223 + Height = 23 + Top = 161 + Width = 41 + TabOrder = 8 + Text = 'AlphaEdit' + end + object MaxLagEdit: TEdit + Left = 221 + Height = 23 + Top = 184 + Width = 43 + TabOrder = 9 + Text = 'MaxLagEdit' + end + object GroupBox5: TGroupBox + Left = 153 + Height = 149 + Top = 216 + Width = 137 + Caption = 'Analysis / Output Options' + ClientHeight = 131 + ClientWidth = 133 + TabOrder = 10 + object PlotChk: TCheckBox + Left = 7 + Height = 19 + Top = 2 + Width = 87 + Caption = 'Correlogram' + TabOrder = 0 + end + object StatsChk: TCheckBox + Left = 7 + Height = 19 + Top = 16 + Width = 66 + Caption = 'Statistics' + TabOrder = 1 + end + object RMatChk: TCheckBox + Left = 7 + Height = 19 + Top = 32 + Width = 132 + Caption = 'Print correlation Mat.' + TabOrder = 2 + end + object PartialsChk: TCheckBox + Left = 6 + Height = 19 + Top = 48 + Width = 142 + Caption = 'Partial autocorrelations' + TabOrder = 3 + end + object YuleWalkerChk: TCheckBox + Left = 6 + Height = 19 + Top = 64 + Width = 120 + Caption = 'Yule-Walker Coef.s' + TabOrder = 4 + end + object ResidChk: TCheckBox + Left = 5 + Height = 19 + Top = 80 + Width = 88 + Caption = 'Residual Plot' + TabOrder = 5 + end + end + object ResetBtn: TButton + Left = 6 + Height = 26 + Top = 385 + Width = 76 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 11 + end + object CancelBtn: TButton + Left = 104 + Height = 26 + Top = 385 + Width = 76 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 12 + end + object ComputeBtn: TButton + Left = 320 + Height = 26 + Top = 385 + Width = 76 + Caption = 'Compute' + ModalResult = 1 + OnClick = ComputeBtnClick + TabOrder = 13 + end + object ReturnBtn: TButton + Left = 415 + Height = 26 + Top = 385 + Width = 76 + Caption = 'Return' + ModalResult = 1 + OnClick = ReturnBtnClick + TabOrder = 14 + end + object HelpBtn: TButton + Tag = 104 + Left = 208 + Height = 27 + Top = 384 + Width = 73 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 15 + end +end diff --git a/applications/lazstats/source_orig/AUTOCORUNIT.lrs b/applications/lazstats/source_orig/AUTOCORUNIT.lrs new file mode 100644 index 000000000..ec7867a63 --- /dev/null +++ b/applications/lazstats/source_orig/AUTOCORUNIT.lrs @@ -0,0 +1,189 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TAutocorrFrm','FORMDATA',[ + 'TPF0'#12'TAutocorrFrm'#11'AutocorrFrm'#4'Left'#3#176#0#6'Height'#3#176#1#3'T' + +'op'#2'Z'#5'Width'#3#247#1#7'Caption'#6#15'Autocorrelation'#12'ClientHeight' + +#3#176#1#11'ClientWidth'#3#247#1#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#6 + +'0.9.30'#0#6'TLabel'#6'Label3'#4'Left'#2#6#6'Height'#2#16#3'Top'#2'H'#5'Widt' + +'h'#2'f'#7'Caption'#6#20'Available Variables:'#11'ParentColor'#8#0#0#6'TLabe' + +'l'#6'Label4'#4'Left'#3#193#0#6'Height'#2#16#3'Top'#2'X'#5'Width'#2'Z'#7'Cap' + +'tion'#6#17'Selected Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'L' + +'eft'#3#152#0#6'Height'#2#16#3'Top'#3#168#0#5'Width'#2'D'#7'Caption'#6#13'Al' + +'pha Level: '#11'ParentColor'#8#0#0#6'TLabel'#6'Label6'#4'Left'#3#149#0#6'He' + +'ight'#2#16#3'Top'#3#191#0#5'Width'#2'S'#7'Caption'#6#13'Maximum Lag: '#11'P' + +'arentColor'#8#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#2#7#6'Height'#2')'#3'To' + +'p'#2#16#5'Width'#3#27#1#7'Caption'#6#22'The series is code in:'#12'ClientHe' + +'ight'#2#23#11'ClientWidth'#3#23#1#8'TabOrder'#2#0#0#12'TRadioButton'#6'ColB' + +'tn'#4'Left'#2#9#6'Height'#2#19#3'Top'#2#1#5'Width'#2'c'#7'Caption'#6#13'A G' + +'rid Column'#7'OnClick'#7#11'ColBtnClick'#8'TabOrder'#2#0#0#0#12'TRadioButto' + +'n'#6'RowBtn'#4'Left'#3#153#0#6'Height'#2#19#3'Top'#2#1#5'Width'#2'm'#7'Capt' + +'ion'#6#17'A row of the grid'#7'OnClick'#7#11'RowBtnClick'#8'TabOrder'#2#1#0 + +#0#0#9'TGroupBox'#9'GroupBox2'#4'Left'#3'('#1#6'Height'#2'y'#3'Top'#2#24#5'W' + +'idth'#3#195#0#7'Caption'#6#14'Include Cases:'#12'ClientHeight'#2'g'#11'Clie' + +'ntWidth'#3#191#0#8'TabOrder'#2#1#0#6'TLabel'#6'Label1'#4'Left'#2'9'#6'Heigh' + +'t'#2#16#3'Top'#2'T'#5'Width'#2#15#7'Caption'#6#2'To'#11'ParentColor'#8#0#0 + +#12'TRadioButton'#11'AllCasesBtn'#4'Left'#2#8#6'Height'#2#19#3'Top'#2#2#5'Wi' + +'dth'#2'C'#7'Caption'#6#9'All Cases'#8'TabOrder'#2#0#0#0#12'TRadioButton'#12 + +'OnlyCasesBtn'#4'Left'#2#7#6'Height'#2#19#3'Top'#2#26#5'Width'#2'p'#7'Captio' + +'n'#6#16'Only Cases From:'#8'TabOrder'#2#1#0#0#5'TEdit'#12'FromCaseEdit'#4'L' + +'eft'#2'X'#6'Height'#2#23#3'Top'#2'0'#5'Width'#2'9'#8'TabOrder'#2#2#4'Text'#6 + +#12'FromCaseEdit'#0#0#5'TEdit'#10'ToCaseEdit'#4'Left'#2'W'#6'Height'#2#23#3 + +'Top'#2'O'#5'Width'#2':'#8'TabOrder'#2#3#4'Text'#6#10'ToCaseEdit'#0#0#0#9'TG' + +'roupBox'#9'GroupBox3'#4'Left'#3'('#1#6'Height'#2','#3'Top'#3#161#0#5'Width' + +#3#195#0#7'Caption'#6#18'Projection Option:'#12'ClientHeight'#2#26#11'Client' + +'Width'#3#191#0#8'TabOrder'#2#2#0#6'TLabel'#6'Label2'#4'Left'#3#128#0#6'Heig' + +'ht'#2#16#3'Top'#2#5#5'Width'#2'"'#7'Caption'#6#6'Points'#11'ParentColor'#8#0 + +#0#9'TCheckBox'#10'ProjectChk'#4'Left'#2#8#6'Height'#2#19#3'Top'#2#2#5'Width' + +#2'9'#7'Caption'#6#7'Project'#8'TabOrder'#2#0#0#0#5'TEdit'#11'ProjPtsEdit'#4 + +'Left'#2'H'#6'Height'#2#23#3'Top'#2#1#5'Width'#2'*'#8'TabOrder'#2#1#0#0#0#9 + +'TGroupBox'#9'GroupBox4'#4'Left'#3')'#1#6'Height'#3#149#0#3'Top'#3#216#0#5'W' + +'idth'#3#194#0#7'Caption'#6#15'Data Smoothing:'#12'ClientHeight'#3#131#0#11 + +'ClientWidth'#3#190#0#8'TabOrder'#2#3#0#9'TCheckBox'#7'MeanChk'#4'Left'#2#9#6 + +'Height'#2#19#3'Top'#2#2#5'Width'#2'i'#7'Caption'#6#14'Center on Mean'#8'Tab' + +'Order'#2#0#0#0#9'TCheckBox'#13'DifferenceChk'#4'Left'#2#8#6'Height'#2#19#3 + +'Top'#2#18#5'Width'#3#136#0#7'Caption'#6#20'Difference Smoothing'#8'TabOrder' + +#2#1#0#0#9'TCheckBox'#10'MoveAvgChk'#4'Left'#2#8#6'Height'#2#19#3'Top'#2'%'#5 + +'Width'#3#152#0#7'Caption'#6#21'Moving Average Smooth'#8'TabOrder'#2#2#0#0#9 + +'TCheckBox'#12'ExpSmoothChk'#4'Left'#2#8#6'Height'#2#19#3'Top'#2'7'#5'Width' + +#3#135#0#7'Caption'#6#20'Exponentially Smooth'#8'TabOrder'#2#3#0#0#9'TCheckB' + +'ox'#16'FourierSmoothChk'#4'Left'#2#8#6'Height'#2#19#3'Top'#2'J'#5'Width'#3 + +#131#0#7'Caption'#6#21'Fourier Filter Smooth'#8'TabOrder'#2#4#0#0#9'TCheckBo' + +'x'#7'PolyChk'#4'Left'#2#8#6'Height'#2#19#3'Top'#2'Z'#5'Width'#3#185#0#7'Cap' + +'tion'#6#28'Polynomial Regression Smooth'#8'TabOrder'#2#5#0#0#9'TCheckBox'#13 + +'MRegSmoothChk'#4'Left'#2#9#6'Height'#2#19#3'Top'#2'l'#5'Width'#3#169#0#7'Ca' + +'ption'#6#26'Multiple Regression Smooth'#8'TabOrder'#2#6#0#0#0#8'TListBox'#7 + +'VarList'#4'Left'#2#6#6'Height'#3#18#1#3'Top'#2'X'#5'Width'#3#138#0#10'ItemH' + +'eight'#2#0#8'TabOrder'#2#4#0#0#7'TBitBtn'#5'InBtn'#4'Left'#3#153#0#6'Height' + +#2#27#3'Top'#2'_'#5'Width'#2#31#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0 + +#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0 + +#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161 + +'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255 + +'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255 + +#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157 + +#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195 + +#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0 + +#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255 + +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144 + +#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201 + +#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190 + +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255 + +'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#9'NumGlyphs'#2#0#7'OnClick'#7#10'InBtnClick'#8'TabOrder'#2#5#0#0#7'TBitBtn' + +#6'OutBtn'#4'Left'#3#153#0#6'Height'#2#27#3'Top'#2'}'#5'Width'#2#31#10'Glyph' + +'.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16 + +#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255 + +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$' + +#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156 + ,#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255 + +#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255 + +'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138 + +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207 + +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}' + +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'OutBtnClick'#8 + +'TabOrder'#2#6#0#0#5'TEdit'#10'DepVarEdit'#4'Left'#3#185#0#6'Height'#2#23#3 + +'Top'#2'p'#5'Width'#2'i'#8'TabOrder'#2#7#4'Text'#6#10'DepVarEdit'#0#0#5'TEdi' + +'t'#9'AlphaEdit'#4'Left'#3#223#0#6'Height'#2#23#3'Top'#3#161#0#5'Width'#2')' + +#8'TabOrder'#2#8#4'Text'#6#9'AlphaEdit'#0#0#5'TEdit'#10'MaxLagEdit'#4'Left'#3 + +#221#0#6'Height'#2#23#3'Top'#3#184#0#5'Width'#2'+'#8'TabOrder'#2#9#4'Text'#6 + +#10'MaxLagEdit'#0#0#9'TGroupBox'#9'GroupBox5'#4'Left'#3#153#0#6'Height'#3#149 + +#0#3'Top'#3#216#0#5'Width'#3#137#0#7'Caption'#6#25'Analysis / Output Options' + +#12'ClientHeight'#3#131#0#11'ClientWidth'#3#133#0#8'TabOrder'#2#10#0#9'TChec' + +'kBox'#7'PlotChk'#4'Left'#2#7#6'Height'#2#19#3'Top'#2#2#5'Width'#2'W'#7'Capt' + +'ion'#6#11'Correlogram'#8'TabOrder'#2#0#0#0#9'TCheckBox'#8'StatsChk'#4'Left' + +#2#7#6'Height'#2#19#3'Top'#2#16#5'Width'#2'B'#7'Caption'#6#10'Statistics'#8 + +'TabOrder'#2#1#0#0#9'TCheckBox'#7'RMatChk'#4'Left'#2#7#6'Height'#2#19#3'Top' + +#2' '#5'Width'#3#132#0#7'Caption'#6#22'Print correlation Mat.'#8'TabOrder'#2 + +#2#0#0#9'TCheckBox'#11'PartialsChk'#4'Left'#2#6#6'Height'#2#19#3'Top'#2'0'#5 + +'Width'#3#142#0#7'Caption'#6#24'Partial autocorrelations'#8'TabOrder'#2#3#0#0 + +#9'TCheckBox'#13'YuleWalkerChk'#4'Left'#2#6#6'Height'#2#19#3'Top'#2'@'#5'Wid' + +'th'#2'x'#7'Caption'#6#18'Yule-Walker Coef.s'#8'TabOrder'#2#4#0#0#9'TCheckBo' + +'x'#8'ResidChk'#4'Left'#2#5#6'Height'#2#19#3'Top'#2'P'#5'Width'#2'X'#7'Capti' + +'on'#6#13'Residual Plot'#8'TabOrder'#2#5#0#0#0#7'TButton'#8'ResetBtn'#4'Left' + +#2#6#6'Height'#2#26#3'Top'#3#129#1#5'Width'#2'L'#7'Caption'#6#5'Reset'#7'OnC' + +'lick'#7#13'ResetBtnClick'#8'TabOrder'#2#11#0#0#7'TButton'#9'CancelBtn'#4'Le' + +'ft'#2'h'#6'Height'#2#26#3'Top'#3#129#1#5'Width'#2'L'#7'Caption'#6#6'Cancel' + +#11'ModalResult'#2#2#8'TabOrder'#2#12#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3 + +'@'#1#6'Height'#2#26#3'Top'#3#129#1#5'Width'#2'L'#7'Caption'#6#7'Compute'#11 + +'ModalResult'#2#1#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#13#0#0#7'TB' + +'utton'#9'ReturnBtn'#4'Left'#3#159#1#6'Height'#2#26#3'Top'#3#129#1#5'Width'#2 + +'L'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#7'OnClick'#7#14'ReturnBtnClic' + +'k'#8'TabOrder'#2#14#0#0#7'TButton'#7'HelpBtn'#3'Tag'#2'h'#4'Left'#3#208#0#6 + +'Height'#2#27#3'Top'#3#128#1#5'Width'#2'I'#7'Caption'#6#4'Help'#7'OnClick'#7 + +#12'HelpBtnClick'#8'TabOrder'#2#15#0#0#0 +]); diff --git a/applications/lazstats/source_orig/AUTOPLOTUNIT.PAS b/applications/lazstats/source_orig/AUTOPLOTUNIT.PAS new file mode 100644 index 000000000..6df365ccc --- /dev/null +++ b/applications/lazstats/source_orig/AUTOPLOTUNIT.PAS @@ -0,0 +1,214 @@ +unit AutoPlotUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + ExtCtrls, StdCtrls, Printers, Globals; + +type + + { TAutoPlotFrm } + + TAutoPlotFrm = class(TForm) + Image1: TImage; + PrintBtn: TButton; + ReturnBtn: TButton; + Panel1: TPanel; + procedure FormShow(Sender: TObject); + procedure PrintBtnClick(Sender: TObject); + procedure AutoPlot(Sender: TObject); + + private + { private declarations } + public + { public declarations } + correlations, partcors : DblDyneVec; + uplimit, lowlimit : double; + npoints : integer; + DepVarEdit : string; + PlotPartCors : boolean; // true to plot partial correlations + PlotLimits : boolean; // true to show upper and lower limits + + end; + +var + AutoPlotFrm: TAutoPlotFrm; + +implementation + +{ TAutoPlotFrm } + +procedure TAutoPlotFrm.FormShow(Sender: TObject); +begin + AutoPlotFrm.Image1.Canvas.Clear; + AutoPlot(self); +end; + +procedure TAutoPlotFrm.PrintBtnClick(Sender: TObject); +var r : Trect; +begin + with Printer do + begin + Printer.Orientation := poPortrait; + r := Rect(20,20,printer.pagewidth-20,printer.pageheight div 2 + 20); + BeginDoc; + Canvas.StretchDraw(r,Image1.Picture.BitMap); + EndDoc; + end; +end; + +procedure TAutoPlotFrm.AutoPlot(Sender: TObject); +var + topmarg, botmarg, leftmarg, rightmarg, verthi, horizlong : integer; + i, X, Y, middle, yincrement, xincrement, labelheight : integer; + labelstring : string; + labelstr : string; + corstep, yprop, scaley : double; + +begin + height := AutoPlotFrm.Image1.Canvas.Height; + width := AutoPlotFrm.Image1.Canvas.Width; + middle := height div 2; + topmarg := height div 10; + verthi := height - (2 * topmarg); + botmarg := topmarg + verthi; + leftmarg := width div 10; + horizlong := width - 2 * leftmarg; + rightmarg := leftmarg + horizlong; + yincrement := verthi div 20; + xincrement := horizlong div npoints; + +// AutoPlotFrm.Show; + AutoPlotFrm.Image1.Canvas.Pen.Color := clBlack; + + // print title at top, centered + labelstring := 'Autocorrelations analysis for :'; + labelstring := labelstring + DepVarEdit; + X := (leftmarg + horizlong div 2) - (AutoPlotFrm.Image1.Canvas.TextWidth(labelstring) div 2); + Y := 1; + AutoPlotFrm.Image1.Canvas.TextOut(X,Y,labelstring); + + // draw middle (zero correlation) axis + Y := middle; + AutoPlotFrm.Image1.Canvas.MoveTo(leftmarg,Y); + X := rightmarg; + AutoPlotFrm.Image1.Canvas.LineTo(X,Y); + + // draw right axis + X := leftmarg; + Y := botmarg; + AutoPlotFrm.Image1.Canvas.MoveTo(X,Y); + Y := topmarg; + AutoPlotFrm.Image1.Canvas.LineTo(X,Y); + + // correlation scale to left of vertical axis + corstep := 1.0; + for i := 0 to 20 do + begin + Y := topmarg + (i * yincrement); + labelstr := format('%4.2f -',[corstep]); + labelstring := labelstr; + X := leftmarg - AutoPlotFrm.Image1.Canvas.TextWidth(labelstring); + AutoPlotFrm.Image1.Canvas.TextOut(X,Y,labelstring); + corstep := corstep - 0.1; + end; + + // Make legend axis on bottom + X := leftmarg; + Y := botmarg; + AutoPlotFrm.Image1.Canvas.MoveTo(X,Y); + X := rightmarg; + AutoPlotFrm.Image1.Canvas.LineTo(X,Y); + for i := 0 to npoints do + begin + X := leftmarg + (xincrement * i); + labelstring := '|'; + AutoPlotFrm.Image1.Canvas.TextOut(X,Y,labelstring); + labelstring := IntToStr(i); + Y := Y + 5; + if (i mod 2) = 1 then AutoPlotFrm.Image1.Canvas.TextOut(X,Y,labelstring); + Y := botmarg; + end; + labelstring := 'LAG VALUE'; + X := (leftmarg + horizlong div 2) - (AutoPlotFrm.Image1.Canvas.TextWidth(labelstring) div 2); + Y := botmarg + AutoPlotFrm.Image1.Canvas.TextHeight(labelstring); + AutoPlotFrm.Image1.Canvas.TextOut(X,Y,labelstring); + + // Plot lines from correlation to correlation + AutoPlotFrm.Image1.Canvas.Pen.Color := clRed; + for i := 0 to npoints - 1 do + begin + yprop := (1.0 - correlations[i]) / 2.0; + scaley := yprop * verthi; + X := leftmarg + round(xincrement * i); + Y := topmarg + round(scaley); + if (i = 0)then AutoPlotFrm.Image1.Canvas.MoveTo(X,Y) + else AutoPlotFrm.Canvas.LineTo(X,Y); + AutoPlotFrm.Image1.Canvas.Ellipse(X-3,Y-3,X+3,Y+3); + end; + + // Plot partial correlations + if PlotPartCors then + begin + AutoPlotFrm.Image1.Canvas.Pen.Color := clBlue; + for i := 0 to npoints - 1 do + begin + yprop := (1.0 - partcors[i]) / 2.0; + scaley := yprop * verthi; + X := leftmarg + round(xincrement * i); + Y := topmarg + round(scaley); + if (i = 0) then AutoPlotFrm.Image1.Canvas.MoveTo(X,Y) + else AutoPlotFrm.Image1.Canvas.LineTo(X,Y); + AutoPlotFrm.Image1.Canvas.Ellipse(X-3,Y-3,X+3,Y+3); + end; + end; + + // Plot lines for upper and lower 95% confidence levels + if PlotLimits then + begin + AutoPlotFrm.Image1.Canvas.Pen.Color := clGreen; + yprop := (1.0 - uplimit) / 2.0; + scaley := yprop * verthi; + Y := topmarg + round(scaley); + AutoPlotFrm.Image1.Canvas.MoveTo(leftmarg,Y); + X := rightmarg; + AutoPlotFrm.Image1.Canvas.LineTo(X,Y); + yprop := (1.0 - lowlimit) / 2.0; + scaley := yprop * verthi; + Y := topmarg + round(scaley); + AutoPlotFrm.Image1.Canvas.MoveTo(leftmarg,Y); + X := rightmarg; + AutoPlotFrm.Image1.Canvas.LineTo(X,Y); + end; + + // Show legend at right + X := rightmarg; + labelstring := 'Correlations'; + labelheight := AutoPlotFrm.Image1.Canvas.TextHeight(labelstring); + Y := 5 * labelheight; + AutoPlotFrm.Image1.Canvas.Font.Color := clRed; + AutoPlotFrm.Image1.Canvas.TextOut(X,Y,labelstring); + if PlotPartCors then + begin + labelstring := 'Partials'; + Y := 6 * labelheight; + AutoPlotFrm.Image1.Canvas.Font.Color := clBlue; + AutoPlotFrm.Image1.Canvas.TextOut(X,Y,labelstring); + end; + if PlotLimits then + begin + Y := 7 * labelheight; + labelstring := '95% C.I.'; + AutoPlotFrm.Image1.Canvas.Font.Color := clGreen; + AutoPlotFrm.Image1.Canvas.TextOut(X,Y,labelstring); + end; +end; + +initialization + {$I autoplotunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/AUTOPLOTUNIT.lfm b/applications/lazstats/source_orig/AUTOPLOTUNIT.lfm new file mode 100644 index 000000000..e72c00cad --- /dev/null +++ b/applications/lazstats/source_orig/AUTOPLOTUNIT.lfm @@ -0,0 +1,46 @@ +object AutoPlotFrm: TAutoPlotFrm + Left = 82 + Height = 517 + Top = 99 + Width = 743 + Caption = 'Autocorrelation and partial autocorrelation' + ClientHeight = 517 + ClientWidth = 743 + OnShow = FormShow + LCLVersion = '0.9.30' + object Image1: TImage + Left = 0 + Height = 468 + Top = 0 + Width = 743 + Align = alClient + end + object Panel1: TPanel + Left = 0 + Height = 49 + Top = 468 + Width = 743 + Align = alBottom + ClientHeight = 49 + ClientWidth = 743 + TabOrder = 0 + object PrintBtn: TButton + Left = 408 + Height = 27 + Top = 9 + Width = 83 + Caption = 'Print' + OnClick = PrintBtnClick + TabOrder = 0 + end + object ReturnBtn: TButton + Left = 522 + Height = 27 + Top = 9 + Width = 79 + Caption = 'Return' + ModalResult = 1 + TabOrder = 1 + end + end +end diff --git a/applications/lazstats/source_orig/AUTOPLOTUNIT.lrs b/applications/lazstats/source_orig/AUTOPLOTUNIT.lrs new file mode 100644 index 000000000..0854ab429 --- /dev/null +++ b/applications/lazstats/source_orig/AUTOPLOTUNIT.lrs @@ -0,0 +1,15 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TAutoPlotFrm','FORMDATA',[ + 'TPF0'#12'TAutoPlotFrm'#11'AutoPlotFrm'#4'Left'#2'R'#6'Height'#3#5#2#3'Top'#2 + +'c'#5'Width'#3#231#2#7'Caption'#6'+Autocorrelation and partial autocorrelati' + +'on'#12'ClientHeight'#3#5#2#11'ClientWidth'#3#231#2#6'OnShow'#7#8'FormShow' + +#10'LCLVersion'#6#6'0.9.30'#0#6'TImage'#6'Image1'#4'Left'#2#0#6'Height'#3#212 + +#1#3'Top'#2#0#5'Width'#3#231#2#5'Align'#7#8'alClient'#0#0#6'TPanel'#6'Panel1' + +#4'Left'#2#0#6'Height'#2'1'#3'Top'#3#212#1#5'Width'#3#231#2#5'Align'#7#8'alB' + +'ottom'#12'ClientHeight'#2'1'#11'ClientWidth'#3#231#2#8'TabOrder'#2#0#0#7'TB' + +'utton'#8'PrintBtn'#4'Left'#3#152#1#6'Height'#2#27#3'Top'#2#9#5'Width'#2'S'#7 + +'Caption'#6#5'Print'#7'OnClick'#7#13'PrintBtnClick'#8'TabOrder'#2#0#0#0#7'TB' + +'utton'#9'ReturnBtn'#4'Left'#3#10#2#6'Height'#2#27#3'Top'#2#9#5'Width'#2'O'#7 + +'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#1#0#0#0#0 +]); diff --git a/applications/lazstats/source_orig/AXSANOVAUNIT.PAS b/applications/lazstats/source_orig/AXSANOVAUNIT.PAS new file mode 100644 index 000000000..bb165481b --- /dev/null +++ b/applications/lazstats/source_orig/AXSANOVAUNIT.PAS @@ -0,0 +1,902 @@ +unit AxSAnovaUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, MainUnit, OutPutUnit, FunctionsLib, GraphLib, Globals, + DataProcs, contexthelpunit; + + +type + + { TAxSAnovaFrm } + + TAxSAnovaFrm = class(TForm) + PosthocChk: TCheckBox; + DepInBtn: TBitBtn; + DepOutBtn: TBitBtn; + HelpBtn: TButton; + RepInBtn: TBitBtn; + RepOutBtn: TBitBtn; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + PlotChk: TCheckBox; + GrpVar: TEdit; + GroupBox1: TGroupBox; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + RepList: TListBox; + VarList: TListBox; + procedure ComputeBtnClick(Sender: TObject); + procedure DepInBtnClick(Sender: TObject); + procedure DepOutBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure RepInBtnClick(Sender: TObject); + procedure RepOutBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure PostHocTests(NoSelected : integer; MSerr : double; dferr : integer; + count : integer; ColMeans : DblDyneVec; Sender: TObject); + procedure TUKEY(error_ms : double; { mean squared for residual } + error_df : double; { deg. freedom for residual } + value : double; { size of smallest group } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { no. of cases in a group } + min_grp : integer; { minimum group code } + max_grp : integer); { maximum group code } + procedure SCHEFFETEST(error_ms : double; { mean squared residual } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { count of cases in a group } + min_grp : integer; { code of first group } + max_grp : integer; { code of last group } + total_n : double); { total number of cases } + + procedure Newman_Keuls(error_ms : double; { residual mean squared } + error_df : double; { deg. freedom for error } + value : double; { number in smallest group } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { count of cases in a group } + min_grp : integer; { lowest group code } + max_grp : integer); { largest group code } + + procedure TUKEY_KRAMER(error_ms : double; { residual mean squared } + error_df : double; { deg. freedom for error } + value : double; { number in smallest group } + group_total : DblDyneVec; { sum of scores in group } + group_count : DblDyneVec; { number of caes in group } + min_grp : integer; { code of lowest group } + max_grp : integer); { code of highst group } + procedure TUKEYBTEST(ErrorMS : double; // within groups error + ErrorDF : double; // degrees of freedom within + group_total : DblDyneVec; // vector of group sums + group_count : DblDyneVec; // vector of group n's + min_grp : integer; // smallest group code + max_grp : integer; // largest group code + groupsize : double); // size of groups (all equal) + + private + { private declarations } + public + { public declarations } + end; + +var + AxSAnovaFrm: TAxSAnovaFrm; + +implementation + +{ TAxSAnovaFrm } + +procedure TAxSAnovaFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + VarList.Items.Clear; + RepList.Items.Clear; + GrpVar.Text := ''; + DepInBtn.Visible := true; + DepOutBtn.Visible := false; + RepInBtn.Visible := true; + RepOutBtn.Visible := false; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + PlotChk.Checked := false; +end; + +procedure TAxSAnovaFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TAxSAnovaFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TAxSAnovaFrm.RepInBtnClick(Sender: TObject); +VAR i, index : integer; +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + RepList.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + RepOutBtn.Visible := true; +end; + +procedure TAxSAnovaFrm.RepOutBtnClick(Sender: TObject); +VAR index : integer; +begin + index := RepList.ItemIndex; + if index < 0 then + begin + RepOutBtn.Visible := false; + exit; + end; + VarList.Items.Add(RepList.Items.Strings[index]); + RepList.Items.Delete(index); +end; + +procedure TAxSAnovaFrm.DepInBtnClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + GrpVar.Text := VarList.Items.Strings[index]; + DepInBtn.Visible := false; + DepOutBtn.Visible := true; +end; + +procedure TAxSAnovaFrm.ComputeBtnClick(Sender: TObject); +var + a1, a2, agrp, i, j, k, v1, totaln, NoSelected, range : integer; + group, col : integer; + p, X, f1, f2, f3, probf1, probf2, probf3, fd1, fd2, TotMean : double; + TotStdDev, den, maxmean, alpha : double; + C, StdDev : DblDyneMat; + squaredsumx, sumxsquared, coltot, sumsum : DblDyneVec; + degfree : array[1..8] of integer; + ColNoSelected : IntDyneVec; + ss :array[1..8] of double; + ms : array[1..8] of double; + coeff : array[1..6] of double; + N : IntDyneVec; + value, outline : string; +// parray : array[1..10] of pvector; + +begin + SetLength(ColNoSelected,NoVariables+1); + if GrpVar.Text = '' then + Begin + ShowMessage('ERROR! Select a variable for between groups treatment groups'); + exit; + end; + NoSelected := 1; + + // Get between subjects group variable + for j := 1 to NoVariables do + if GrpVar.Text = OS3MainFrm.DataGrid.Cells[j,0] then ColNoSelected[0] := j; + v1 := ColNoSelected[0]; //A treatment (group) variable + + //get minimum and maximum group codes for Treatment A + a1 := 1000; //atoi(MainForm.Grid.Cells[v1][1].c_str()); + a2 := 0; //a1; + for i := 1 to NoCases do + Begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + group := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[v1,i]))); + if group < a1 then a1 := group; + if group > a2 then a2 := group; + end; + range := a2 - a1 + 1; + NoSelected := RepList.Items.Count + 1; + k := NoSelected - 1; //Number of B (within subject) treatment levels + + // allocate heap + SetLength(C,range+1,NoSelected+1); + SetLength(N,range+1); + SetLength(squaredsumx,range+1); + SetLength(coltot,NoSelected+1); + SetLength(sumxsquared,range+1); + SetLength(sumsum,range+1); + SetLength(StdDev,range+1,NoSelected+1); + + // initialize arrays + for i := 0 to range-1 do + Begin + N[i] := 0; + squaredsumx[i] := 0.0; + sumxsquared[i] := 0.0; + sumsum[i] := 0.0; + for j := 0 to k-1 do C[i,j] := 0.0; + end; + for j := 0 to k-1 do coltot[j] := 0.0; + for i := 0 to range do + for j := 0 to k do + StdDev[i,j] := 0.0; + for i := 1 to 6 do coeff[i] := 0.0; + for i := 1 to 8 do degfree[i] := 0; + TotStdDev := 0.0; + TotMean := 0.0; + totaln := 0; + + // Get items selected for repeated measures (B treatments) + for i := 0 to RepList.Items.Count - 1 do + Begin + for j := 1 to NoVariables do + Begin + if RepList.Items.Strings[i] = OS3MainFrm.DataGrid.Cells[j,0] then + ColNoSelected[i+1] := j; + end; + end; + + //Read data values and get sums and sums of squared values + for i := 1 to NoCases do + Begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + agrp := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[v1,i]))); + agrp := agrp - a1 + 1; // offset to one + p := 0.0; + //Now read the B treatment scores + for j := 1 to k do + Begin + col := ColNoSelected[j]; + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col,i])); + C[agrp-1,j-1] := C[agrp-1,j-1] + X; + StdDev[agrp-1,j-1] := StdDev[agrp-1,j-1] + (X * X); + coeff[1]:= coeff[1] + X; + p := p + X; + sumxsquared[agrp-1] := sumxsquared[agrp-1] + (X * X); + TotMean := TotMean + X; + TotStdDev := TotStdDev + (X * X); + end; + N[agrp-1] := N[agrp-1] + 1; + squaredsumx[agrp-1] := squaredsumx[agrp-1] + (p * p); + sumsum[agrp-1] := sumsum[agrp-1] + p; + end; // next case + + // Obtain sums of squares for std. dev.s of B treatments + for i := 1 to k do // column (B treatments) + for j := 1 to range do // group of A treatments + StdDev[range,i-1] := StdDev[range,i-1] + StdDev[j-1,i-1]; + + // Obtain sums of squares for std. dev.s of A treatments + for i := 1 to range do + for j := 1 to k do + StdDev[i-1,k] := StdDev[i-1,k] + StdDev[i-1,j-1]; + + // Obtain cell standard deviations + for i := 1 to range do // rows + Begin + for j := 1 to k do // columns + Begin + StdDev[i-1,j-1] := StdDev[i-1,j-1] - ((C[i-1,j-1] * C[i-1,j-1]) / (N[i-1])); + StdDev[i-1,j-1] := StdDev[i-1,j-1] / (N[i-1]-1); + StdDev[i-1,j-1] := sqrt(StdDev[i-1,j-1]); + end; + end; + + // Obtain A treatment group standard deviations + for i := 1 to range do + Begin + StdDev[i-1,k] := StdDev[i-1,k] - ((sumsum[i-1] * sumsum[i-1]) / (k * N[i-1])); + StdDev[i-1,k] := StdDev[i-1,k] / (k * N[i-1] - 1); + StdDev[i-1,k] := sqrt(StdDev[i-1,k]); + end; + + // Obtain coefficients for the sums of squares + for i := 1 to range do + Begin + coeff[2] := coeff[2] + sumxsquared[i-1]; + coeff[3] := coeff[3] + ((sumsum[i-1] * (sumsum[i-1]) / ((N[i-1] * k)))); + coeff[6] := coeff[6] + squaredsumx[i-1]; + totaln := totaln + N[i-1]; + end; + coeff[1] := (coeff[1] * coeff[1]) / (totaln * k); + den := k; + coeff[6] := coeff[6] / den; + for j := 1 to k do + Begin + coltot[j-1] := 0.0; + for i := 1 to range do + Begin + coltot[j-1] := coltot[j-1] + C[i-1,j-1]; + coeff[5] := coeff[5] + ((C[i-1,j-1] * C[i-1,j-1]) / N[i-1]); + end; + coeff[4] := coeff[4] + (coltot[j-1] * coltot[j-1]); + end; + den := totaln; + coeff[4] := coeff[4] / den; + + // Obtain B treatment group standard deviations + for j := 1 to k do + Begin + StdDev[range,j-1] := StdDev[range,j-1] - ((coltot[j-1] * coltot[j-1]) / totaln); + StdDev[range,j-1] := StdDev[range,j-1] / (totaln-1); + StdDev[range,j-1] := sqrt(StdDev[range,j-1]); + end; + + // Calculate degrees of freedom for the mean squares + degfree[1] := totaln - 1; // Between subjects degrees freedom + degfree[2] := a2 - a1; // between groups degrees of freedom + degfree[3] := totaln - (a2 - a1 + 1);// subjects within groups deg. frd. + degfree[4] := totaln * (k - 1); // within subjects degrees of freedom + degfree[5] := k - 1; // B treatments degrees of freedom + degfree[6] := degfree[2] * degfree[5]; // A x B interaction degrees of frd. + degfree[7] := degfree[3] * degfree[5]; // B x Subjects within groups d.f. + degfree[8] := k * totaln - 1; // total degrees of freedom + + // Calculate the sums of squares + ss[1] := coeff[6] - coeff[1]; + ss[2] := coeff[3] - coeff[1]; + ss[3] := coeff[6] - coeff[3]; + ss[4] := coeff[2] - coeff[6]; + ss[5] := coeff[4] - coeff[1]; + ss[6] := coeff[5] - coeff[3] - coeff[4] + coeff[1]; + ss[7] := coeff[2] - coeff[5] - coeff[6] + coeff[3]; + ss[8] := coeff[2] - coeff[1]; + + // Calculate the mean squares + for i := 1 to 8 do + Begin + den := degfree[i]; + ms[i] := ss[i] / den; + end; + + // Calculate the f-tests for effects A, B and interaction + if (ms[3] > 0.0) then f1 := ms[2] / ms[3] else f1 := 1000.0; + if (ms[7] > 0.0) then + Begin + f2 := ms[5] / ms[7]; + f3 := ms[6] / ms[7]; + end + else + Begin + f2 := 1000.0; + f3 := 1000.0; + end; + + //Now, report results + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('ANOVA With One Between Subjects and One Within Subjects Treatments'); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('------------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add('Source df SS MS F Prob.'); + OutPutFrm.RichEdit.Lines.Add('------------------------------------------------------------------'); + fd1 := degfree[2]; + fd2 := degfree[3]; + probf1 := probf(f1, fd1, fd2); + fd1 := degfree[5]; + fd2 := degfree[7]; + probf2 := probf(f2, fd1, fd2); + fd1 := degfree[6]; + fd2 := degfree[7]; + probf3 := probf(f3, fd1, fd2); + outline := format('Between %5d %10.3f',[degfree[1],ss[1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format(' Groups (A) %5d %10.3f %10.3f %10.3f %6.4f', + [degfree[2], ss[2], ms[2], f1, probf1]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format(' Subjects w.g.%5d %10.3f %10.3f', + [degfree[3],ss[3],ms[3]]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Within Subjects %5d %10.3f',[degfree[4], ss[4]]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format(' B Treatments %5d %10.3f %10.3f %10.3f %6.4f', + [degfree[5], ss[5], ms[5], f2, probf2]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format(' A X B inter. %5d %10.3f %10.3f %10.3f %6.4f', + [degfree[6], ss[6], ms[6], f3, probf3]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format(' B X S w.g. %5d %10.3f %10.3f', + [degfree[7], ss[7], ms[7]]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('TOTAL %5d %10.3f',[degfree[8], ss[8]]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('------------------------------------------------------------------'); + + //Calculate and print means + OutPutFrm.RichEdit.Lines.Add('Means'); + outline := 'TRT. '; + for i := 1 to k do + Begin + value := format('B%3d ',[i]); + outline := outline + value; + end; + outline := outline + 'TOTAL'; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(' A '); + for i := 1 to range do + Begin + for j := 1 to k do + C[i-1,j-1] := C[i-1,j-1] / N[i-1]; //mean of each B treatment within A treatment + sumsum[i-1] := sumsum[i-1] / (N[i-1] * k); //means in A treatment accross B treatments + end; + for j := 1 to k do coltot[j-1] := coltot[j-1] / totaln; + TotStdDev := TotStdDev - ((TotMean * TotMean) / (k * totaln)); + TotStdDev := TotStdDev / (k * totaln - 1); + TotStdDev := sqrt(TotStdDev); + TotMean := TotMean / (k * totaln); + for i := 1 to range do + Begin + outline := format('%3d ',[i+a1-1]); + for j := 1 to k do + Begin + value := format('%7.3f',[C[i-1,j-1]]); + outline := outline + value; + end; + value := format('%7.3f',[sumsum[i-1]]); + outline := outline + value; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := 'TOTAL'; + for j := 1 to k do + Begin + value := format('%7.3f',[coltot[j-1]]); + outline := outline + value; + end; + value := format('%7.3f',[TotMean]); + outline := outline + value; + OutPutFrm.RichEdit.Lines.Add(outline); + + // Print standard deviations + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Standard Deviations'); + outline := 'TRT. '; + for i := 1 to k do + Begin + value := format('B%3d ',[i]); + outline := outline + value; + end; + outline := outline + 'TOTAL'; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(' A '); + for i := 1 to range do + Begin + outline := format('%3d ',[i+a1-1]); + for j := 1 to k do + Begin + value := format('%7.3f',[StdDev[i-1,j-1]]); + outline := outline + value; + end; + value := format('%7.3f',[StdDev[i-1,k]]); + outline := outline + value; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := 'TOTAL'; + for j := 1 to k do + Begin + value := format('%7.3f',[StdDev[range,j-1]]); + outline := outline + value; + end; + value := format('%7.3f',[TotStdDev]); + outline := outline + value; + OutPutFrm.RichEdit.Lines.Add(outline); + + OutPutFrm.ShowModal; + if PlotChk.Checked = true then // PlotMeans(C,range,k,this) + begin + maxmean := 0.0; + SetLength(GraphFrm.Ypoints,range,k); + SetLength(GraphFrm.Xpoints,1,k); + for i := 1 to range do + begin + outline := 'A ' + IntToStr(i); + GraphFrm.SetLabels[i] := outline; + for j := 1 to k do + begin + GraphFrm.Ypoints[i-1,j-1] := C[i-1,j-1]; + if C[i-1,j-1] > maxmean then maxmean := C[i-1,j-1]; + end; + end; + for j := 1 to k do + begin + coltot[j-1] := j; + GraphFrm.Xpoints[0,j-1] := j; + end; + GraphFrm.nosets := range; + GraphFrm.nbars := k; + GraphFrm.Heading := 'TREATMENTS X SUBJECT REPLICATIONS ANOVA'; + GraphFrm.XTitle := 'WITHIN (B) TREATMENT GROUP'; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.GraphType := 2; // 3d Vertical Bar Chart + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + + if PosthocChk.Checked = true then + begin + OutPutFrm.RichEdit.Clear; + // Do tests for the A (between groups) + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Comparisons for the Between Group Means'); + PostHocTests(range, MS[1], degfree[1], range, sumsum, self); + OutPutFrm.ShowModal; + // Do tests for the B (repeated measures) + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Comparisons for the Repeated Measures Means'); + PostHocTests(k, ms[4], degfree[4], NoCases, coltot, self); + end; + OutPutFrm.ShowModal; + // cleanup the heap + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + StdDev := nil; + sumsum := nil; + sumxsquared := nil; + coltot := nil; + squaredsumx := nil; + N := nil; + C := nil; + ColNoSelected := nil; +end; + +procedure TAxSAnovaFrm.DepOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(GrpVar.Text); + GrpVar.Text := ''; + DepInBtn.Visible := true; + DepOutBtn.Visible := false; +end; +procedure TAxSAnovaFrm.PostHocTests(NoSelected : integer; MSerr : double; dferr : integer; + count : integer; ColMeans : DblDyneVec; Sender: TObject); +VAR + group_total : DblDyneVec; + group_count : DblDyneVec; + i, mingrp : integer; +begin + SetLength(group_total,NoSelected); + SetLength(group_count,NoSelected); + for i := 0 to NoSelected - 1 do + begin + group_count[i] := double(count); + group_total[i] := double(count) * ColMeans[i]; + end; + mingrp := 1; + TUKEY(MSerr, dferr, count, group_total, group_count, mingrp, NoSelected); + TUKEY_KRAMER(MSerr, dferr, count, group_total, group_count, mingrp, NoSelected); + TUKEYBTEST(MSerr, dferr, group_total, group_count, mingrp,NoSelected, count); + SCHEFFETEST(MSerr, group_total, group_count, mingrp, NoSelected, count*NoSelected); + Newman_Keuls(MSerr, dferr, count, group_total, group_count, mingrp, NoSelected); +end; +procedure TAxSAnovaFrm.TUKEY(error_ms : double; { mean squared for residual } + error_df : double; { deg. freedom for residual } + value : double; { size of smallest group } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { no. of cases in a group } + min_grp : integer; { minimum group code } + max_grp : integer); { maximum group code } +var + sig : boolean; + divisor : double; + df1 : integer; + alpha : double; + contrast, mean1, mean2 : double; + q_stat : double; + i,j : integer; + outline : string; + +begin +// alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + alpha := 0.05; + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Tukey HSD Test for Differences Between Means'); + outline := format(' alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('Groups Difference Statistic Probability Significant?'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + divisor := sqrt(error_ms / value ); + for i := min_grp to max_grp - 1 do + for j := i + 1 to max_grp do + begin + outline := format('%2d - %2d ',[i,j]); + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + contrast := mean1 - mean2; + outline := outline + format('%7.3f q = ',[contrast]); + contrast := abs(contrast / divisor) ; + outline := outline + format('%6.3f ',[contrast]); + df1 := max_grp - min_grp + 1; + q_stat := STUDENT(contrast,error_df,df1); + outline := outline + format(' %6.4f',[q_stat]); + if alpha >= q_stat then sig := TRUE else sig := FALSE; + if sig = TRUE then outline := outline + ' YES ' + else outline := outline + ' NO'; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); +end; + +procedure TAxSAnovaFrm.SCHEFFETEST(error_ms : double; { mean squared residual } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { count of cases in a group } + min_grp : integer; { code of first group } + max_grp : integer; { code of last group } + total_n : double); { total number of cases } +var + statistic, stat_var, stat_sd : double; + mean1, mean2, alpha, difference, prob_scheffe, f_prob, df1, df2 : double; + outline : string; + i, j : integer; +begin +// alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + alpha := 0.05; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Scheffe contrasts among pairs of means.'); + outline := format(' alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('Group vs Group Difference Scheffe Critical Significant?'); + OutPutFrm.RichEdit.Lines.Add(' Statistic Value'); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------'); + alpha := 1.0 - alpha ; + for i:= min_grp to max_grp - 1 do + for j := i + 1 to max_grp do + begin + outline := format('%2d %2d ',[i,j]); + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + difference := mean1 - mean2; + outline := outline + format('%8.2f ',[difference]); + stat_var := error_ms * + ( 1.0 / group_count[i-1] + 1.0 / group_count[j-1]); + stat_sd := sqrt(stat_var); + statistic := abs(difference / stat_sd); + outline := outline + format('%8.2f ',[statistic]); + df1 := max_grp - min_grp; + df2 := total_n - df1 + 1; + f_prob := fpercentpoint(alpha,round(df1),round(df2) ); + prob_scheffe := sqrt(df1 * f_prob); + outline := outline + format('%8.3f ',[prob_scheffe]); + if statistic > prob_scheffe then outline := outline + 'YES' + else outline := outline + 'NO'; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------'); +end; + + +procedure TAxSAnovaFrm.Newman_Keuls(error_ms : double; { residual mean squared } + error_df : double; { deg. freedom for error } + value : double; { number in smallest group } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { count of cases in a group } + min_grp : integer; { lowest group code } + max_grp : integer); { largest group code } +var + i, j : integer; + temp1, temp2 : double; + groupno : IntDyneVec; + alpha : double; + contrast, mean1, mean2 : double; + q_stat : double; + divisor : double; + tempno : integer; + df1 : integer; + sig : boolean; + outline : string; + +begin + SetLength(groupno,max_grp-min_grp+1); + for i := min_grp to max_grp do groupno[i-1] := i; + for i := min_grp to max_grp - 1 do + begin + for j := i + 1 to max_grp do + begin + if group_total[i-1] / group_count[i-1] > + group_total[j-1] / group_count[j-1] then + begin + temp1 := group_total[i-1]; + temp2 := group_count[i-1]; + tempno := groupno[i-1]; + group_total[i-1] := group_total[j-1]; + group_count[i-1] := group_count[j-1]; + groupno[i-1] := groupno[j-1]; + group_total[j-1] := temp1; + group_count[j-1] := temp2; + groupno[j-1] := tempno; + end; + end; + end; +// alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + alpha := 0.05; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Neuman-Keuls Test for Contrasts on Ordered Means'); + outline := format(' alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Group Mean'); + for i := 1 to max_grp do + begin + outline := format('%3d %10.3f',[groupno[i-1],group_total[i-1] / group_count[i-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Groups Difference Statistic d.f. Probability Significant?'); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------'); + divisor := sqrt(error_ms / value); + for i := min_grp to max_grp - 1 do + begin + for j := i + 1 to max_grp do + begin + outline := format('%2d - %2d ',[groupno[i-1],groupno[j-1]]); + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + contrast := mean1 - mean2; + outline := outline + format('%7.3f q = ',[contrast]); + contrast := abs(contrast / divisor ); + df1 := j - i + 1; + outline := outline + format('%6.3f %2d %3.0f ',[contrast,df1,error_df]); + q_stat := STUDENT(contrast,error_df,df1); + outline := outline + format(' %6.4f',[q_stat]); + if alpha > q_stat then sig := TRUE else sig := FALSE; + if sig = TRUE then outline := outline + ' YES' + else outline := outline + ' NO'; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------'); + groupno := nil; +end; + +procedure TAxSAnovaFrm.TUKEY_KRAMER(error_ms : double; { residual mean squared } + error_df : double; { deg. freedom for error } + value : double; { number in smallest group } + group_total : DblDyneVec; { sum of scores in group } + group_count : DblDyneVec; { number of caes in group } + min_grp : integer; { code of lowest group } + max_grp : integer); { code of highst group } +var + sig : boolean; + divisor : double; + df1 : integer; + alpha : double; + contrast, mean1, mean2 : double; + q_stat : double; + outline : string; + i, j : integer; + +begin +// alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + alpha := 0.05; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Tukey-Kramer Test for Differences Between Means'); + outline := format(' alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('Groups Difference Statistic Probability Significant?'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + for i := min_grp to max_grp - 1 do + for j := i + 1 to max_grp do + begin + outline := format('%2d - %2d ',[i,j]); + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + contrast := mean1 - mean2; + outline := outline + format('%7.3f q = ',[contrast]); + divisor := sqrt(error_ms * + ( ( 1.0/group_count[i-1] + 1.0/group_count[j-1] ) / 2 ) ); + contrast := abs(contrast / divisor) ; + outline := outline + format('%6.3f ',[contrast]); + df1 := max_grp - min_grp + 1; + q_stat := STUDENT(contrast,error_df,df1); + outline := outline + format(' %6.4f',[q_stat]); + if alpha >= q_stat then sig := TRUE else sig := FALSE; + if sig = TRUE then outline := outline + ' YES ' + else outline := outline + ' NO'; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); +end; + +procedure TAxSAnovaFrm.TUKEYBTEST(ErrorMS : double; // within groups error + ErrorDF : double; // degrees of freedom within + group_total : DblDyneVec; // vector of group sums + group_count : DblDyneVec; // vector of group n's + min_grp : integer; // smallest group code + max_grp : integer; // largest group code + groupsize : double); // size of groups (all equal) +var + alpha : double; + outline : string; + i, j : integer; + df1 : double; + qstat : double; + tstat : double; + groupno : IntDyneVec; + temp1, temp2 : double; + tempno : integer; + NoGrps : integer; + contrast : double; + mean1, mean2 : double; + sig : string[6]; + groups : double; + response : string[5]; + divisor : double; + +begin + SetLength(groupno,max_grp-min_grp+1); +// alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + alpha := 0.05; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Tukey B Test for Contrasts on Ordered Means'); + outline := format(' alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Groups Difference Statistic d.f. Prob.>value Significant?'); + divisor := sqrt(ErrorMS / groupsize); + NoGrps := max_grp - min_grp + 1; + for i := min_grp to max_grp do groupno[i-1] := i; + for i := 1 to NoGrps - 1 do + begin + for j := i + 1 to NoGrps do + begin + if group_total[i-1] / group_count[i-1] > + group_total[j-1] / group_count[j-1] then + begin + temp1 := group_total[i-1]; + temp2 := group_count[i-1]; + tempno := groupno[i-1]; + group_total[i-1] := group_total[j-1]; + group_count[i-1] := group_count[j-1]; + groupno[i-1] := groupno[j-1]; + group_total[j-1] := temp1; + group_count[j-1] := temp2; + groupno[j-1] := tempno; + end; + end; + end; + + for i := 1 to NoGrps-1 do + begin + for j := i+1 to NoGrps do + begin + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + contrast := abs((mean1 - mean2) / divisor); + df1 := j - i + 1.0; + qstat := STUDENT(contrast,ErrorDF,df1); + groups := NoGrps; + tstat := STUDENT(contrast,ErrorDF,groups); + qstat := (qstat + tstat) / 2.0; + if alpha >= qstat then sig := 'YES' else sig := 'NO'; + outline := format('%3d - %3d %10.3f %10.3f %4.0f,%4.0f %5.3f %s', + [groupno[i-1],groupno[j-1], + mean1-mean2,contrast,df1,ErrorDF,qstat,sig]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + groupno := nil; +end; + +initialization + {$I axsanovaunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/AXSANOVAUNIT.lfm b/applications/lazstats/source_orig/AXSANOVAUNIT.lfm new file mode 100644 index 000000000..ef8837e0e --- /dev/null +++ b/applications/lazstats/source_orig/AXSANOVAUNIT.lfm @@ -0,0 +1,312 @@ +object AxSAnovaFrm: TAxSAnovaFrm + Left = 240 + Height = 305 + Top = 121 + Width = 558 + Caption = 'Treatments by Subjects ANOVA (AxS)' + ClientHeight = 305 + ClientWidth = 558 + OnShow = FormShow + LCLVersion = '0.9.30.4' + object Label1: TLabel + Left = 9 + Height = 16 + Top = 8 + Width = 102 + Caption = 'Available Variables:' + ParentColor = False + end + object Label2: TLabel + Left = 232 + Height = 16 + Top = 25 + Width = 79 + Caption = 'Group Variable' + ParentColor = False + end + object Label3: TLabel + Left = 232 + Height = 16 + Top = 104 + Width = 103 + Caption = 'Repeated Measures' + ParentColor = False + end + object VarList: TListBox + Left = 9 + Height = 257 + Top = 25 + Width = 172 + ItemHeight = 0 + MultiSelect = True + TabOrder = 0 + end + object DepInBtn: TBitBtn + Left = 192 + Height = 26 + Top = 25 + Width = 31 + 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 + } + NumGlyphs = 0 + OnClick = DepInBtnClick + TabOrder = 1 + end + object DepOutBtn: TBitBtn + Left = 192 + Height = 26 + Top = 64 + Width = 31 + 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 + } + NumGlyphs = 0 + OnClick = DepOutBtnClick + TabOrder = 2 + end + object RepInBtn: TBitBtn + Left = 192 + Height = 26 + Top = 104 + Width = 31 + 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 + } + NumGlyphs = 0 + OnClick = RepInBtnClick + TabOrder = 3 + end + object RepOutBtn: TBitBtn + Left = 192 + Height = 26 + Top = 144 + Width = 31 + 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 + } + NumGlyphs = 0 + OnClick = RepOutBtnClick + TabOrder = 4 + end + object GrpVar: TEdit + Left = 232 + Height = 23 + Top = 40 + Width = 143 + TabOrder = 5 + Text = 'GrpVar' + end + object RepList: TListBox + Left = 231 + Height = 153 + Top = 128 + Width = 144 + ItemHeight = 0 + TabOrder = 6 + end + object GroupBox1: TGroupBox + Left = 384 + Height = 64 + Top = 8 + Width = 156 + Caption = 'Option' + ClientHeight = 46 + ClientWidth = 152 + TabOrder = 7 + object PlotChk: TCheckBox + Left = 9 + Height = 19 + Top = 4 + Width = 102 + Caption = 'Plot Cell Means' + TabOrder = 0 + end + object PosthocChk: TCheckBox + Left = 9 + Height = 19 + Top = 24 + Width = 136 + Caption = 'Posthoc Comparisons' + TabOrder = 1 + end + end + object ResetBtn: TButton + Left = 432 + Height = 30 + Top = 160 + Width = 80 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 8 + end + object CancelBtn: TButton + Left = 432 + Height = 30 + Top = 120 + Width = 80 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 9 + end + object ComputeBtn: TButton + Left = 432 + Height = 30 + Top = 240 + Width = 80 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 10 + end + object ReturnBtn: TButton + Left = 432 + Height = 30 + Top = 200 + Width = 80 + Caption = 'Return' + ModalResult = 1 + TabOrder = 11 + end + object HelpBtn: TButton + Tag = 106 + Left = 432 + Height = 32 + Top = 80 + Width = 78 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 12 + end +end diff --git a/applications/lazstats/source_orig/AXSANOVAUNIT.lrs b/applications/lazstats/source_orig/AXSANOVAUNIT.lrs new file mode 100644 index 000000000..1e67d8fc4 --- /dev/null +++ b/applications/lazstats/source_orig/AXSANOVAUNIT.lrs @@ -0,0 +1,241 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TAxSAnovaFrm','FORMDATA',[ + 'TPF0'#12'TAxSAnovaFrm'#11'AxSAnovaFrm'#4'Left'#3#240#0#6'Height'#3'1'#1#3'To' + +'p'#2'y'#5'Width'#3'.'#2#7'Caption'#6'"Treatments by Subjects ANOVA (AxS)'#12 + +'ClientHeight'#3'1'#1#11'ClientWidth'#3'.'#2#6'OnShow'#7#8'FormShow'#10'LCLV' + +'ersion'#6#8'0.9.30.4'#0#6'TLabel'#6'Label1'#4'Left'#2#9#6'Height'#2#16#3'To' + +'p'#2#8#5'Width'#2'f'#7'Caption'#6#20'Available Variables:'#11'ParentColor'#8 + +#0#0#6'TLabel'#6'Label2'#4'Left'#3#232#0#6'Height'#2#16#3'Top'#2#25#5'Width' + +#2'O'#7'Caption'#6#14'Group Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Labe' + +'l3'#4'Left'#3#232#0#6'Height'#2#16#3'Top'#2'h'#5'Width'#2'g'#7'Caption'#6#17 + +'Repeated Measures'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#9 + +#6'Height'#3#1#1#3'Top'#2#25#5'Width'#3#172#0#10'ItemHeight'#2#0#11'MultiSel' + +'ect'#9#8'TabOrder'#2#0#0#0#7'TBitBtn'#8'DepInBtn'#4'Left'#3#192#0#6'Height' + +#2#26#3'Top'#2#25#5'Width'#2#31#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0 + +#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0 + +#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161 + +'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255 + +'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255 + +#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157 + +#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195 + +#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0 + +#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255 + +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144 + +#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201 + +#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190 + +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255 + +'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#9'NumGlyphs'#2#0#7'OnClick'#7#13'DepInBtnClick'#8'TabOrder'#2#1#0#0#7'TBitB' + +'tn'#9'DepOutBtn'#4'Left'#3#192#0#6'Height'#2#26#3'Top'#2'@'#5'Width'#2#31#10 + +'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0 + ,#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)' + +#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134 + +#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203 + +#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190 + +'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127 + +#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255 + +#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135 + +#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255 + +#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14 + +'DepOutBtnClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#8'RepInBtn'#4'Left'#3#192#0#6 + +'Height'#2#26#3'Top'#2'h'#5'Width'#2#31#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0 + +'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4 + +#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\' + +#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?' + +#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0 + +#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255 + +#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137 + +#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255 + +#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158 + +#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255 + +#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255 + +'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q' + +#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#13'RepInBtnClick'#8'TabOrder'#2 + +#3#0#0#7'TBitBtn'#9'RepOutBtn'#4'Left'#3#192#0#6'Height'#2#26#3'Top'#3#144#0 + +#5'Width'#2#31#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0 + +#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0 + +#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O' + +#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V' + +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255 + +'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195 + +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255 + ,#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135 + +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#14'RepOutBtnClick'#8'TabOrder'#2#4#0#0#5'TEdit'#6'GrpV' + +'ar'#4'Left'#3#232#0#6'Height'#2#23#3'Top'#2'('#5'Width'#3#143#0#8'TabOrder' + +#2#5#4'Text'#6#6'GrpVar'#0#0#8'TListBox'#7'RepList'#4'Left'#3#231#0#6'Height' + +#3#153#0#3'Top'#3#128#0#5'Width'#3#144#0#10'ItemHeight'#2#0#8'TabOrder'#2#6#0 + +#0#9'TGroupBox'#9'GroupBox1'#4'Left'#3#128#1#6'Height'#2'@'#3'Top'#2#8#5'Wid' + +'th'#3#156#0#7'Caption'#6#6'Option'#12'ClientHeight'#2'.'#11'ClientWidth'#3 + +#152#0#8'TabOrder'#2#7#0#9'TCheckBox'#7'PlotChk'#4'Left'#2#9#6'Height'#2#19#3 + +'Top'#2#4#5'Width'#2'f'#7'Caption'#6#15'Plot Cell Means'#8'TabOrder'#2#0#0#0 + +#9'TCheckBox'#10'PosthocChk'#4'Left'#2#9#6'Height'#2#19#3'Top'#2#24#5'Width' + +#3#136#0#7'Caption'#6#19'Posthoc Comparisons'#8'TabOrder'#2#1#0#0#0#7'TButto' + +'n'#8'ResetBtn'#4'Left'#3#176#1#6'Height'#2#30#3'Top'#3#160#0#5'Width'#2'P'#7 + +'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#8#0#0#7'TB' + +'utton'#9'CancelBtn'#4'Left'#3#176#1#6'Height'#2#30#3'Top'#2'x'#5'Width'#2'P' + +#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#9#0#0#7'TButton'#10 + +'ComputeBtn'#4'Left'#3#176#1#6'Height'#2#30#3'Top'#3#240#0#5'Width'#2'P'#7'C' + +'aption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#10#0#0#7 + +'TButton'#9'ReturnBtn'#4'Left'#3#176#1#6'Height'#2#30#3'Top'#3#200#0#5'Width' + +#2'P'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#11#0#0#7'TBut' + +'ton'#7'HelpBtn'#3'Tag'#2'j'#4'Left'#3#176#1#6'Height'#2' '#3'Top'#2'P'#5'Wi' + +'dth'#2'N'#7'Caption'#6#4'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2 + +#12#0#0#0 +]); diff --git a/applications/lazstats/source_orig/AboutUnit.lfm b/applications/lazstats/source_orig/AboutUnit.lfm new file mode 100644 index 000000000..e79cce5ec --- /dev/null +++ b/applications/lazstats/source_orig/AboutUnit.lfm @@ -0,0 +1,84 @@ +object AboutBox: TAboutBox + Left = 202 + Height = 206 + Top = 145 + Width = 298 + BorderStyle = bsDialog + Caption = 'About LazStats' + ClientHeight = 206 + ClientWidth = 298 + Color = clBtnFace + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Position = poScreenCenter + LCLVersion = '0.9.30.4' + object OKButton: TButton + Left = 111 + Height = 25 + Top = 160 + Width = 75 + Caption = 'OK' + Default = True + ModalResult = 1 + OnClick = OKButtonClick + TabOrder = 0 + end + object Panel1: TPanel + Left = 16 + Height = 136 + Top = 16 + Width = 276 + ClientHeight = 136 + ClientWidth = 276 + TabOrder = 1 + object Label1: TLabel + Left = 80 + Height = 30 + Top = 0 + Width = 100 + Caption = 'LazStats' + Font.CharSet = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -24 + Font.Name = 'MS Sans Serif' + Font.Pitch = fpVariable + Font.Quality = fqDraft + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object Label2: TLabel + Left = 64 + Height = 21 + Top = 40 + Width = 129 + Caption = 'William G. Miller' + Font.CharSet = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Pitch = fpVariable + Font.Quality = fqDraft + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object Label3: TLabel + Left = 64 + Height = 21 + Top = 75 + Width = 123 + Caption = 'Copyright 2013' + Font.CharSet = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Pitch = fpVariable + Font.Quality = fqDraft + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + end +end diff --git a/applications/lazstats/source_orig/AboutUnit.lrs b/applications/lazstats/source_orig/AboutUnit.lrs new file mode 100644 index 000000000..ca16605c5 --- /dev/null +++ b/applications/lazstats/source_orig/AboutUnit.lrs @@ -0,0 +1,28 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TAboutBox','FORMDATA',[ + 'TPF0'#9'TAboutBox'#8'AboutBox'#4'Left'#3#202#0#6'Height'#3#206#0#3'Top'#3#145 + +#0#5'Width'#3'*'#1#11'BorderStyle'#7#8'bsDialog'#7'Caption'#6#14'About LazSt' + +'ats'#12'ClientHeight'#3#206#0#11'ClientWidth'#3'*'#1#5'Color'#7#9'clBtnFace' + +#10'Font.Color'#7#12'clWindowText'#11'Font.Height'#2#245#9'Font.Name'#6#13'M' + +'S Sans Serif'#8'Position'#7#14'poScreenCenter'#10'LCLVersion'#6#8'0.9.30.4' + +#0#7'TButton'#8'OKButton'#4'Left'#2'o'#6'Height'#2#25#3'Top'#3#160#0#5'Width' + +#2'K'#7'Caption'#6#2'OK'#7'Default'#9#11'ModalResult'#2#1#7'OnClick'#7#13'OK' + +'ButtonClick'#8'TabOrder'#2#0#0#0#6'TPanel'#6'Panel1'#4'Left'#2#16#6'Height' + +#3#136#0#3'Top'#2#16#5'Width'#3#20#1#12'ClientHeight'#3#136#0#11'ClientWidth' + +#3#20#1#8'TabOrder'#2#1#0#6'TLabel'#6'Label1'#4'Left'#2'P'#6'Height'#2#30#3 + +'Top'#2#0#5'Width'#2'd'#7'Caption'#6#8'LazStats'#12'Font.CharSet'#7#12'ANSI_' + +'CHARSET'#10'Font.Color'#7#12'clWindowText'#11'Font.Height'#2#232#9'Font.Nam' + +'e'#6#13'MS Sans Serif'#10'Font.Pitch'#7#10'fpVariable'#12'Font.Quality'#7#7 + +'fqDraft'#10'Font.Style'#11#6'fsBold'#0#11'ParentColor'#8#10'ParentFont'#8#0 + +#0#6'TLabel'#6'Label2'#4'Left'#2'@'#6'Height'#2#21#3'Top'#2'('#5'Width'#3#129 + +#0#7'Caption'#6#17'William G. Miller'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10 + +'Font.Color'#7#12'clWindowText'#11'Font.Height'#2#240#9'Font.Name'#6#13'MS S' + +'ans Serif'#10'Font.Pitch'#7#10'fpVariable'#12'Font.Quality'#7#7'fqDraft'#10 + +'Font.Style'#11#6'fsBold'#0#11'ParentColor'#8#10'ParentFont'#8#0#0#6'TLabel' + +#6'Label3'#4'Left'#2'@'#6'Height'#2#21#3'Top'#2'K'#5'Width'#2'{'#7'Caption'#6 + +#14'Copyright 2013'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'Font.Color'#7#12 + +'clWindowText'#11'Font.Height'#2#240#9'Font.Name'#6#13'MS Sans Serif'#10'Fon' + +'t.Pitch'#7#10'fpVariable'#12'Font.Quality'#7#7'fqDraft'#10'Font.Style'#11#6 + +'fsBold'#0#11'ParentColor'#8#10'ParentFont'#8#0#0#0#0 +]); diff --git a/applications/lazstats/source_orig/AboutUnit.pas b/applications/lazstats/source_orig/AboutUnit.pas new file mode 100644 index 000000000..f5e591af5 --- /dev/null +++ b/applications/lazstats/source_orig/AboutUnit.pas @@ -0,0 +1,43 @@ +unit AboutUnit; + +{$mode objfpc}{$H+} + +interface + +uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, ExtCtrls; + +type + + { TAboutBox } + + TAboutBox = class(TForm) + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + OKButton: TButton; + Panel1: TPanel; + procedure OKButtonClick(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + AboutBox: TAboutBox; + +implementation + + +procedure TAboutBox.OKButtonClick(Sender: TObject); +begin + AboutBox.Hide; +end; + +initialization + {$I AboutUnit.lrs} + + +end. + diff --git a/applications/lazstats/source_orig/BACKREGUNIT.PAS b/applications/lazstats/source_orig/BACKREGUNIT.PAS new file mode 100644 index 000000000..a33df3936 --- /dev/null +++ b/applications/lazstats/source_orig/BACKREGUNIT.PAS @@ -0,0 +1,409 @@ +unit BackRegUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, Globals, MainUnit, MatrixLib, OutPutUnit, + FunctionsLib, DataProcs; + +type + + { TBackRegFrm } + + TBackRegFrm = class(TForm) + OpenDialog1: TOpenDialog; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + InBtn: TBitBtn; + OutBtn: TBitBtn; + AllBtn: TBitBtn; + DepInBtn: TBitBtn; + DepOutBtn: TBitBtn; + MatInChkBox: TCheckBox; + MatSaveChkBox: TCheckBox; + CPChkBox: TCheckBox; + CovChkBox: TCheckBox; + CorrsChkBox: TCheckBox; + MeansChkBox: TCheckBox; + SaveDialog1: TSaveDialog; + VarChkBox: TCheckBox; + SDChkBox: TCheckBox; + PartialsChkBox: TCheckBox; + DepVar: TEdit; + GroupBox1: TGroupBox; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + ListBox1: TListBox; + VarList: TListBox; + procedure AllBtnClick(Sender: TObject); + procedure CancelBtnClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure DepInBtnClick(Sender: TObject); + procedure DepOutBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure InBtnClick(Sender: TObject); + procedure OutBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure ReturnBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + BackRegFrm: TBackRegFrm; + +implementation + +{ TBackRegFrm } + +procedure TBackRegFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + VarList.Clear; + ListBox1.Clear; + for i := 1 to NoVariables do + begin + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + end; + InBtn.Enabled := true; + OutBtn.Enabled := false; + CPChkBox.Checked := false; + CovChkBox.Checked := false; + CorrsChkBox.Checked := true; + MeansChkBox.Checked := true; + VarChkBox.Checked := false; + SDChkBox.Checked := true; + MatInChkBox.Checked := false; + MatSaveChkBox.Checked := false; + PartialsChkBox.Checked := false; + DepVar.Text := ''; + DepInBtn.Enabled := true; + DepOutBtn.Enabled := false; +end; + +procedure TBackRegFrm.ReturnBtnClick(Sender: TObject); +begin + BackRegFrm.Hide; +end; + +procedure TBackRegFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TBackRegFrm.AllBtnClick(Sender: TObject); +VAR count, index : integer; +begin + count := VarList.Items.Count; + for index := 0 to count-1 do + begin + ListBox1.Items.Add(VarList.Items.Strings[index]); + end; + VarList.Clear; +end; + +procedure TBackRegFrm.CancelBtnClick(Sender: TObject); +begin + BackRegFrm.Hide; +end; + +procedure TBackRegFrm.ComputeBtnClick(Sender: TObject); +Label CleanUp; +VAR + NoVars, NoIndepVars, i, j, NCases, mattype, StepNo : integer; + Index, IndexX, IndexY : integer; + R2, StdErr, df1, df2, x, determinant, stderrest, POut, LowestPartial : double; + errorcode : integer; + errcode : boolean; + filename : string; + cellstring, outline, valstring : string; + Corrs : DblDyneMat; + Means : DblDyneVec; + Variances : DblDyneVec; + StdDevs : DblDyneVec; + ColNoSelected : IntDyneVec; + title : string; + RowLabels : StrDyneVec; + ColLabels : StrDyneVec; + InverseMat : DblDyneMat; + ProdMat : DblDyneMat; + CorrMat : DblDyneMat; + BetaWeights : DblDyneVec; + IndepIndex : IntDyneVec; + constant : double; +begin + if NoVariables = 0 then NoVariables := 200; + SetLength(Corrs,NoVariables+1,NoVariables+1); + SetLength(Means,NoVariables); + SetLength(Variances,NoVariables); + SetLength(StdDevs,NoVariables); + SetLength(RowLabels,NoVariables); + SetLength(ColLabels,NoVariables); + SetLength(InverseMat,NoVariables+1,NoVariables+1); + SetLength(ProdMat,NoVariables+1,NoVariables+1); + SetLength(CorrMat,NoVariables+1,NoVariables+1); + SetLength(BetaWeights,NoVariables); + SetLength(IndepIndex,NoVariables); + SetLength(ColNoSelected,NoVariables); + + OutPutFrm.RichEdit.Clear; +// OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify; + OutPutFrm.RichEdit.Lines.Add('Step Backward Multiple Regression by Bill Miller'); + errcode := false; + errorcode := 0; + if MatInChkBox.Checked = true then + begin + OpenDialog1.Filter := 'FreeStat matrix files (*.MAT)|*.MAT|All files (*.*)|*.*'; + OpenDialog1.FilterIndex := 1; + if OpenDialog1.Execute then + begin + filename := OpenDialog1.FileName; + MATREAD(Corrs,NoVars,NoVars,Means,StdDevs,NCases,RowLabels,ColLabels,filename); + for i := 0 to NoVars-1 do + begin + Variances[i] := sqr(StdDevs[i]); + ColNoSelected[i] := i+1; + end; + DepVar.Text := RowLabels[NoVars-1]; + for i := 0 to NoVars-2 do ListBox1.Items.Add(RowLabels[i]); + CPChkBox.Checked := false; + CovChkBox.Checked := false; + MatSaveChkBox.Checked := false; + ShowMessage('NOTICE! Last variable in matrix is the dependent variable'); + end; + end; + if MatInChkBox.Checked = false then + begin + { get variable columns } + NoVars := ListBox1.Items.Count; + if NoVars < 1 then + begin + ShowMessage('ERROR! No variables selected.'); + goto CleanUp; + end; + for i := 1 to NoVars do + begin + cellstring := ListBox1.Items.Strings[i-1]; + for j := 1 to NoVariables do + begin + if cellstring = OS3MainFrm.DataGrid.Cells[j,0] then + begin + ColNoSelected[i-1] := j; + RowLabels[i-1] := cellstring; + ColLabels[i-1] := cellstring; + end; + end; + end; + { get dependendent variable column } + if DepVar.Text = '' then + begin + ShowMessage('ERROR! No Dependent variable selected.'); + goto CleanUp; + end; + NoVars := NoVars + 1; + for j := 1 to NoVariables do + begin + if DepVar.Text = OS3MainFrm.DataGrid.Cells[j,0] then + begin + ColNoSelected[NoVars-1] := j; + RowLabels[NoVars-1] := DepVar.Text; + ColLabels[NoVars-1] := DepVar.Text; + end; + end; + end; + POut := 1.0; + StepNo := 1; + while NoVars > 1 do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('----------------- STEP %3d ------------------',[StepNo]); + OutPutFrm.RichEdit.Lines.Add(outline); + if CPChkBox.Checked = true then + begin + title := 'Cross-Products Matrix'; + GridXProd(NoVars,ColNoSelected,Corrs,errcode,NCases); + MAT_PRINT(Corrs,NoVars,NoVars,title,RowLabels,ColLabels,NCases); + end; + if CovChkBox.Checked = true then + begin + title := 'Variance-Covariance Matrix'; + GridCovar(NoVars,ColNoSelected,Corrs,Means,Variances, + StdDevs,errcode,NCases); + MAT_PRINT(Corrs,NoVars,NoVars,title,RowLabels,ColLabels,NCases); + end; + if MatInChkBox.Checked = false then + Correlations(NoVars,ColNoSelected,Corrs,Means,Variances, + StdDevs,errcode,NCases); + if CorrsChkBox.Checked = true then + begin + title := 'Product-Moment Correlations Matrix'; + MAT_PRINT(Corrs,NoVars,NoVars,title,RowLabels,ColLabels,NCases); + end; + if MatSaveChkBox.Checked = true then + begin + SaveDialog1.Filter := 'FreeStat matrix files (*.MAT)|*.MAT|All files (*.*)|*.*'; + SaveDialog1.FilterIndex := 1; + if SaveDialog1.Execute then + begin + filename := SaveDialog1.FileName; + MATSAVE(Corrs,NoVars,NoVars,Means,StdDevs,NCases,RowLabels,ColLabels,filename); + end; + MatSaveChkBox.Checked := false; // only save first one + end; + title := 'Means'; + if MeansChkBox.Checked = true then + DynVectorPrint(Means,NoVars,title,ColLabels,NCases); + title := 'Variances'; + if VarChkBox.Checked = true then + DynVectorPrint(Variances,NoVars,title,ColLabels,NCases); + title := 'Standard Deviations'; + if SDChkBox.Checked = true then + DynVectorPrint(StdDevs,NoVars,title,ColLabels,NCases); + if errorcode > 0 then + begin + ShowMessage('ERROR! A selected variable has no variability-run aborted.'); + goto CleanUp; + end; + + { get determinant of the correlation matrix } + determinant := 0.0; + for i := 1 to NoVars do + for j := 1 to NoVars do + CorrMat[i-1,j-1] := Corrs[i-1,j-1]; + Determ(CorrMat,NoVars,NoVars,determinant,errcode); + if (determinant < 0.000001) then + begin + ShowMessage('ERROR! Matrix is singular!'); +// goto cleanup; + end; + outline := format('Determinant of correlation matrix = %8.4f',[determinant]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + NoIndepVars := NoVars-1; + for i := 1 to NoIndepVars do IndepIndex[i-1] := i; + MReg2(NCases,NoVars,NoIndepVars,IndepIndex,corrs,InverseMat, + RowLabels,R2,BetaWeights, + Means,Variances,errorcode,StdErrEst,constant,POut,true, false,false); + // Get partial correlation matrix + for i := 1 to NoVars do + for j := 1 to NoVars do + InverseMat[i-1,j-1] := Corrs[i-1,j-1]; + SVDinverse(InverseMat,NoVars); + for i := 1 to NoVars do + begin + for j := 1 to NoVars do + begin + ProdMat[i-1,j-1] := -(1.0 / sqrt(InverseMat[i-1,i-1])) * + InverseMat[i-1,j-1] * (1.0 / sqrt(InverseMat[j-1,j-1])); + end; + end; + LowestPartial := 1.0; + Index := NoIndepVars; + for i := 1 to NoIndepVars do + begin + BetaWeights[i-1] := ProdMat[i-1,NoVars-1]; + if abs(BetaWeights[i-1]) < LowestPartial then + begin + LowestPartial := abs(BetaWeights[i-1]); + Index := i; + end; + end; + if PartialsChkBox.Checked = true then + begin + title := 'Partial Correlations'; + DynVectorPrint(BetaWeights,NoIndepVars,title,ColLabels,NCases); + end; + OutPutFrm.ShowModal; + + { eliminate variable with lowest partial } + if NoVars > 2 then + begin + outline := format('Variable %d (%s) eliminated',[Index,ColLabels[Index-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + for i := Index to NoVars-1 do + begin + ColNoSelected[i-1] := ColNoSelected[i]; + ColLabels[i-1] := ColLabels[i]; + RowLabels[i-1] := RowLabels[i]; + end; + NoVars := NoVars - 1; + StepNo := StepNo + 1; + end + else NoVars := 0; + end; + OutPutFrm.ShowModal; + +CleanUp: + ColNoSelected := nil; + IndepIndex := nil; + BetaWeights := nil; + CorrMat := nil; + ProdMat := nil; + InverseMat := nil; + ColLabels := nil; + RowLabels := nil; + StdDevs := nil; + Variances := nil; + Means := nil; + Corrs := nil; + BackRegFrm.Hide; +end; + +procedure TBackRegFrm.DepInBtnClick(Sender: TObject); +VAR index : integer; +begin + index := ListBox1.ItemIndex; + DepVar.Text := ListBox1.Items.Strings[index]; + ListBox1.Items.Delete(index); + DepOutBtn.Enabled := true; + DepInBtn.Enabled := false; +end; + +procedure TBackRegFrm.DepOutBtnClick(Sender: TObject); +begin + ListBox1.Items.Add(DepVar.Text); + DepVar.Text := ''; + DepInBtn.Enabled := true; +end; + +procedure TBackRegFrm.InBtnClick(Sender: TObject); +VAR i, index : integer; +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + ListBox1.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + OutBtn.Enabled := true; +end; + +procedure TBackRegFrm.OutBtnClick(Sender: TObject); +VAR index : integer; +begin + index := ListBox1.ItemIndex; + VarList.Items.Add(ListBox1.Items.Strings[index]); + ListBox1.Items.Delete(index); + InBtn.Enabled := true; +end; + +initialization + {$I backregunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/BACKREGUNIT.lfm b/applications/lazstats/source_orig/BACKREGUNIT.lfm new file mode 100644 index 000000000..0f15878e7 --- /dev/null +++ b/applications/lazstats/source_orig/BACKREGUNIT.lfm @@ -0,0 +1,376 @@ +object BackRegFrm: TBackRegFrm + Left = 161 + Height = 341 + Top = 97 + Width = 642 + Caption = 'Stepwise Backward Multiple Regression' + ClientHeight = 341 + ClientWidth = 642 + OnShow = FormShow + LCLVersion = '0.9.26.2' + object Label1: TLabel + Left = 6 + Height = 14 + Top = 7 + Width = 90 + Caption = 'Available Variables' + ParentColor = False + end + object Label2: TLabel + Left = 228 + Height = 14 + Top = 8 + Width = 119 + Caption = 'Variables to be Analyzed' + ParentColor = False + end + object Label3: TLabel + Left = 454 + Height = 14 + Top = 11 + Width = 95 + Caption = 'Dependent Variable' + ParentColor = False + end + object VarList: TListBox + Left = 6 + Height = 306 + Top = 22 + Width = 169 + MultiSelect = True + TabOrder = 0 + end + object InBtn: TBitBtn + Left = 185 + Height = 30 + Top = 26 + Width = 34 + 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 + } + NumGlyphs = 0 + OnClick = InBtnClick + TabOrder = 1 + end + object OutBtn: TBitBtn + Left = 185 + Height = 30 + Top = 56 + Width = 34 + 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 + } + NumGlyphs = 0 + OnClick = OutBtnClick + TabOrder = 2 + end + object AllBtn: TBitBtn + Left = 185 + Height = 30 + Top = 120 + Width = 34 + Caption = 'ALL' + NumGlyphs = 0 + OnClick = AllBtnClick + TabOrder = 3 + end + object ListBox1: TListBox + Left = 229 + Height = 303 + Top = 25 + Width = 172 + TabOrder = 4 + end + object DepInBtn: TBitBtn + Left = 416 + Height = 30 + Top = 26 + Width = 34 + 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 + } + NumGlyphs = 0 + OnClick = DepInBtnClick + TabOrder = 5 + end + object DepOutBtn: TBitBtn + Left = 416 + Height = 30 + Top = 56 + Width = 34 + 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 + } + NumGlyphs = 0 + OnClick = DepOutBtnClick + TabOrder = 6 + end + object DepVar: TEdit + Left = 455 + Height = 22 + Top = 37 + Width = 147 + TabOrder = 7 + Text = 'DepVar' + end + object GroupBox1: TGroupBox + Left = 416 + Height = 168 + Top = 96 + Width = 219 + Caption = 'Options' + ClientHeight = 150 + ClientWidth = 215 + TabOrder = 8 + object MatInChkBox: TCheckBox + Left = 8 + Height = 17 + Top = 2 + Width = 196 + Caption = 'Get Data from a matrix file (max.=200)' + TabOrder = 0 + end + object MatSaveChkBox: TCheckBox + Left = 8 + Height = 17 + Top = 16 + Width = 145 + Caption = 'Save the correlation matrix' + TabOrder = 1 + end + object CPChkBox: TCheckBox + Left = 8 + Height = 17 + Top = 32 + Width = 152 + Caption = 'Show Cross-Products Matrix' + TabOrder = 2 + end + object CovChkBox: TCheckBox + Left = 8 + Height = 17 + Top = 48 + Width = 180 + Caption = 'Show Variance-Covariance Matrix' + TabOrder = 3 + end + object CorrsChkBox: TCheckBox + Left = 8 + Height = 17 + Top = 64 + Width = 151 + Caption = 'Show Intercorrelation Matrix' + TabOrder = 4 + end + object MeansChkBox: TCheckBox + Left = 8 + Height = 17 + Top = 80 + Width = 82 + Caption = 'Show Means' + TabOrder = 5 + end + object VarChkBox: TCheckBox + Left = 8 + Height = 17 + Top = 96 + Width = 97 + Caption = 'Show Variances' + TabOrder = 6 + end + object SDChkBox: TCheckBox + Left = 8 + Height = 17 + Top = 112 + Width = 146 + Caption = 'Show Standard Deviations' + TabOrder = 7 + end + object PartialsChkBox: TCheckBox + Left = 8 + Height = 17 + Top = 128 + Width = 137 + Caption = 'Show Partial Correlations' + TabOrder = 8 + end + end + object ResetBtn: TButton + Left = 416 + Height = 26 + Top = 270 + Width = 72 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 9 + end + object CancelBtn: TButton + Left = 552 + Height = 26 + Top = 270 + Width = 72 + Caption = 'Cancel' + ModalResult = 2 + OnClick = CancelBtnClick + TabOrder = 10 + end + object ComputeBtn: TButton + Left = 416 + Height = 26 + Top = 304 + Width = 72 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 11 + end + object ReturnBtn: TButton + Left = 552 + Height = 26 + Top = 304 + Width = 72 + Caption = 'Return' + ModalResult = 1 + OnClick = ReturnBtnClick + TabOrder = 12 + end + object OpenDialog1: TOpenDialog + left = 183 + top = 168 + end + object SaveDialog1: TSaveDialog + left = 184 + top = 208 + end +end diff --git a/applications/lazstats/source_orig/BACKREGUNIT.lrs b/applications/lazstats/source_orig/BACKREGUNIT.lrs new file mode 100644 index 000000000..8e67c4881 --- /dev/null +++ b/applications/lazstats/source_orig/BACKREGUNIT.lrs @@ -0,0 +1,256 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TBackRegFrm','FORMDATA',[ + 'TPF0'#11'TBackRegFrm'#10'BackRegFrm'#4'Left'#3#161#0#6'Height'#3'U'#1#3'Top' + +#2'a'#5'Width'#3#130#2#7'Caption'#6'%Stepwise Backward Multiple Regression' + +#12'ClientHeight'#3'U'#1#11'ClientWidth'#3#130#2#6'OnShow'#7#8'FormShow'#10 + +'LCLVersion'#6#8'0.9.26.2'#0#6'TLabel'#6'Label1'#4'Left'#2#6#6'Height'#2#14#3 + +'Top'#2#7#5'Width'#2'Z'#7'Caption'#6#19'Available Variables'#11'ParentColor' + +#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#228#0#6'Height'#2#14#3'Top'#2#8#5'Width' + +#2'w'#7'Caption'#6#24'Variables to be Analyzed'#11'ParentColor'#8#0#0#6'TLab' + +'el'#6'Label3'#4'Left'#3#198#1#6'Height'#2#14#3'Top'#2#11#5'Width'#2'_'#7'Ca' + +'ption'#6#18'Dependent Variable'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList' + +#4'Left'#2#6#6'Height'#3'2'#1#3'Top'#2#22#5'Width'#3#169#0#11'MultiSelect'#9 + +#8'TabOrder'#2#0#0#0#7'TBitBtn'#5'InBtn'#4'Left'#3#185#0#6'Height'#2#30#3'To' + +'p'#2#26#5'Width'#2'"'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0 + +'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0 + +#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^' + +#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195 + +'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255 + +#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255 + +#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255 + +']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145 + +'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#10'InBtnClick'#8'TabOrder'#2#1#0#0#7'TBitBtn'#6'OutBtn' + +#4'Left'#3#185#0#6'Height'#2#30#3'Top'#2'8'#5'Width'#2'"'#10'Glyph.Data'#10 + +':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0 + ,' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255 + +#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213 + +#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135 + +#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r' + +#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201''#204#138#255 + +#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154 + +#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194 + +#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h' + +#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169 + +'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255 + +'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h' + +#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199 + +'t'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'OutBtnClick'#8'Tab' + +'Order'#2#2#0#0#7'TBitBtn'#6'AllBtn'#4'Left'#3#185#0#6'Height'#2#30#3'Top'#2 + +'x'#5'Width'#2'"'#7'Caption'#6#3'ALL'#9'NumGlyphs'#2#0#7'OnClick'#7#11'AllBt' + +'nClick'#8'TabOrder'#2#3#0#0#8'TListBox'#8'ListBox1'#4'Left'#3#229#0#6'Heigh' + +'t'#3'/'#1#3'Top'#2#25#5'Width'#3#172#0#8'TabOrder'#2#4#0#0#7'TBitBtn'#8'Dep' + +'InBtn'#4'Left'#3#160#1#6'Height'#2#30#3'Top'#2#26#5'Width'#2'"'#10'Glyph.Da' + +'ta'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0 + +#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184 + +#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255 + +#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255 + +#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142 + +#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J' + +#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162 + +#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255 + +#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130 + +#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199 + +'t'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5' + +#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#13'DepInBtnClick' + +#8'TabOrder'#2#5#0#0#7'TBitBtn'#9'DepOutBtn'#4'Left'#3#160#1#6'Height'#2#30#3 + +'Top'#2'8'#5'Width'#2'"'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0 + +#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0 + +#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G' + +#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161 + +'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131 + +#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/' + +'x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e' + ,#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255 + +#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132 + +#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255 + +#255#255#0'h'#199't'#201''#204#138#255#162#216#171#255#158#214#167#255#154 + +#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255 + +#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201 + +#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'Num' + +'Glyphs'#2#0#7'OnClick'#7#14'DepOutBtnClick'#8'TabOrder'#2#6#0#0#5'TEdit'#6 + +'DepVar'#4'Left'#3#199#1#6'Height'#2#22#3'Top'#2'%'#5'Width'#3#147#0#8'TabOr' + +'der'#2#7#4'Text'#6#6'DepVar'#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#3#160#1#6 + +'Height'#3#168#0#3'Top'#2'`'#5'Width'#3#219#0#7'Caption'#6#7'Options'#12'Cli' + +'entHeight'#3#150#0#11'ClientWidth'#3#215#0#8'TabOrder'#2#8#0#9'TCheckBox'#11 + +'MatInChkBox'#4'Left'#2#8#6'Height'#2#17#3'Top'#2#2#5'Width'#3#196#0#7'Capti' + +'on'#6'&Get Data from a matrix file (max.=200)'#8'TabOrder'#2#0#0#0#9'TCheck' + +'Box'#13'MatSaveChkBox'#4'Left'#2#8#6'Height'#2#17#3'Top'#2#16#5'Width'#3#145 + +#0#7'Caption'#6#27'Save the correlation matrix'#8'TabOrder'#2#1#0#0#9'TCheck' + +'Box'#8'CPChkBox'#4'Left'#2#8#6'Height'#2#17#3'Top'#2' '#5'Width'#3#152#0#7 + +'Caption'#6#26'Show Cross-Products Matrix'#8'TabOrder'#2#2#0#0#9'TCheckBox'#9 + +'CovChkBox'#4'Left'#2#8#6'Height'#2#17#3'Top'#2'0'#5'Width'#3#180#0#7'Captio' + +'n'#6#31'Show Variance-Covariance Matrix'#8'TabOrder'#2#3#0#0#9'TCheckBox'#11 + +'CorrsChkBox'#4'Left'#2#8#6'Height'#2#17#3'Top'#2'@'#5'Width'#3#151#0#7'Capt' + +'ion'#6#28'Show Intercorrelation Matrix'#8'TabOrder'#2#4#0#0#9'TCheckBox'#11 + +'MeansChkBox'#4'Left'#2#8#6'Height'#2#17#3'Top'#2'P'#5'Width'#2'R'#7'Caption' + +#6#10'Show Means'#8'TabOrder'#2#5#0#0#9'TCheckBox'#9'VarChkBox'#4'Left'#2#8#6 + +'Height'#2#17#3'Top'#2'`'#5'Width'#2'a'#7'Caption'#6#14'Show Variances'#8'Ta' + +'bOrder'#2#6#0#0#9'TCheckBox'#8'SDChkBox'#4'Left'#2#8#6'Height'#2#17#3'Top'#2 + +'p'#5'Width'#3#146#0#7'Caption'#6#24'Show Standard Deviations'#8'TabOrder'#2 + +#7#0#0#9'TCheckBox'#14'PartialsChkBox'#4'Left'#2#8#6'Height'#2#17#3'Top'#3 + +#128#0#5'Width'#3#137#0#7'Caption'#6#25'Show Partial Correlations'#8'TabOrde' + +'r'#2#8#0#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#160#1#6'Height'#2#26#3'Top'#3 + +#14#1#5'Width'#2'H'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'T' + +'abOrder'#2#9#0#0#7'TButton'#9'CancelBtn'#4'Left'#3'('#2#6'Height'#2#26#3'To' + +'p'#3#14#1#5'Width'#2'H'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#7'OnClic' + +'k'#7#14'CancelBtnClick'#8'TabOrder'#2#10#0#0#7'TButton'#10'ComputeBtn'#4'Le' + +'ft'#3#160#1#6'Height'#2#26#3'Top'#3'0'#1#5'Width'#2'H'#7'Caption'#6#7'Compu' + +'te'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#11#0#0#7'TButton'#9'Retu' + +'rnBtn'#4'Left'#3'('#2#6'Height'#2#26#3'Top'#3'0'#1#5'Width'#2'H'#7'Caption' + +#6#6'Return'#11'ModalResult'#2#1#7'OnClick'#7#14'ReturnBtnClick'#8'TabOrder' + +#2#12#0#0#11'TOpenDialog'#11'OpenDialog1'#4'left'#3#183#0#3'top'#3#168#0#0#0 + +#11'TSaveDialog'#11'SaveDialog1'#4'left'#3#184#0#3'top'#3#208#0#0#0#0 +]); diff --git a/applications/lazstats/source_orig/BESTREGUNIT.PAS b/applications/lazstats/source_orig/BESTREGUNIT.PAS new file mode 100644 index 000000000..7df03b34b --- /dev/null +++ b/applications/lazstats/source_orig/BESTREGUNIT.PAS @@ -0,0 +1,710 @@ +unit BestRegUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, Globals, MainUnit, MatrixLib, OutPutUnit, + FunctionsLib, DataProcs; + + +type + + { TBestRegFrm } + + TBestRegFrm = class(TForm) + CPChkBox: TCheckBox; + ComboShowChkBox: TCheckBox; + CovChkBox: TCheckBox; + CorrsChkBox: TCheckBox; + MeansChkBox: TCheckBox; + VarChkBox: TCheckBox; + SDChkBox: TCheckBox; + MatSaveChkBox: TCheckBox; + PredictChkBox: TCheckBox; + MatInChkBox: TCheckBox; + InBtn: TBitBtn; + OutBtn: TBitBtn; + AllBtn: TBitBtn; + DepInBtn: TBitBtn; + DepOutBtn: TBitBtn; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + DepVar: TEdit; + InProb: TEdit; + GroupBox1: TGroupBox; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + BlockList: TListBox; + OpenDialog1: TOpenDialog; + SaveDialog1: TSaveDialog; + VarList: TListBox; + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure INIT(Sender: TObject); + procedure REGRESS(Sender: TObject); + procedure BEST_SET_STATS(Sender: TObject); + procedure bump_one(Sender: TObject); + procedure start_set(Sender: TObject); + procedure re_set(Sender: TObject); + procedure InBtnClick(Sender: TObject); + procedure OutBtnClick(Sender: TObject); + procedure AllBtnClick(Sender: TObject); + procedure DepInBtnClick(Sender: TObject); + procedure DepOutBtnClick(Sender: TObject); + + private + { private declarations } + pred_labels : StrDyneVec; + y_ptr, v : integer; + ii : integer; + jj : integer; + pointer : integer; + sets : integer; + selected : IntDyneVec; + max_set : IntDyneVec; + cross_prod : DblDyneMat; + ind_mat : DblDyneMat; + end_of_set : boolean; + all_done : boolean; + more_to_do : boolean; + no_predictors: integer; + last_set : integer; + first_pt : integer; + testval : integer; + sumx : DblDyneVec; + mean : DblDyneVec; + stddev : DblDyneVec; + variance : DblDyneVec; + xycross : DblDyneVec; + raw_b : DblDyneVec; + count : double; + b_zero : double; + stop_prob : double; + mult_R2 : double; + biggest_R2 : double; + last_R2 : double; + f_test : double; + t, beta : double; + ss_res : double; + ms_res : double; + ss_reg : double; + ms_reg : double; + df_reg : integer; + df_res : integer; + df1 : integer; + df_tot : integer; + prob_f : double; + ss_total : double; + seb : double; + R2_diff : double; + prout : double; + errorcode : integer; + errcode : boolean; + DepVarCol : integer; + RowLabels : StrDyneVec; + ColLabels : StrDyneVec; + ColNoSelected : IntDyneVec; + NCases : integer; + NoVars : integer; + + public + { public declarations } + end; + +var + BestRegFrm: TBestRegFrm; + +implementation + +{ TBestRegFrm } + +procedure TBestRegFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + BlockList.Clear; + VarList.Clear; + for i := 1 to NoVariables do + begin + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + end; + InBtn.Enabled := true; + OutBtn.Enabled := false; + DepInBtn.Enabled := true; + DepOutBtn.Enabled := false; + CPChkBox.Checked := false; + CovChkBox.Checked := false; + CorrsChkBox.Checked := true; + MeansChkBox.Checked := true; + VarChkBox.Checked := false; + SDChkBox.Checked := true; + MatSaveChkBox.Checked := false; + PredictChkBox.Checked := false; + DepVar.Text := ''; + InProb.Text := ''; +end; + +procedure TBestRegFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TBestRegFrm.ComputeBtnClick(Sender: TObject); +Label CleanUp; +var + i, j : integer; + title : string; + cellstring : string; + filename : string; + R2 : double; + StdErrEst : double; + IndepIndex : IntDyneVec; + constant : double; + +begin + if MatInChkBox.Checked = true then NoVariables := 200; + SetLength(cross_prod,NoVariables+1,NoVariables+1); + SetLength(ind_mat,NoVariables+1,NoVariables+1); + SetLength(sumx,NoVariables); + SetLength(mean,NoVariables); + SetLength(stddev,NoVariables); + SetLength(variance,NoVariables); + SetLength(xycross,NoVariables); + SetLength(raw_b,NoVariables); + SetLength(RowLabels,NoVariables); + SetLength(ColLabels,NoVariables); + SetLength(IndepIndex,NoVariables); + SetLength(ColNoSelected,NoVariables); + SetLength(Selected,NoVariables); + SetLength(Max_Set,NoVariables); + SetLength(pred_labels,NoVariables); + + stop_prob := StrToFloat(InProb.Text); // probability to include a block + prout := 1.0; + OutPutFrm.RichEdit.Clear; +// OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify; + OutPutFrm.RichEdit.Lines.Add('Best Combination Multiple Regression by Bill Miller'); + errorcode := 0; + last_R2 := 0.0; + last_set := 0 ; + more_to_do := TRUE; + + { get data } + if MatInChkBox.Checked = true then + begin + PredictChkBox.Checked := false; + MatSaveChkBox.Checked := false; + CPChkBox.Checked := false; + OpenDialog1.Filter := 'FreeStat matrix files (*.MAT)|*.MAT|All files (*.*)|*.*'; + OpenDialog1.FilterIndex := 1; + if OpenDialog1.Execute then + begin + filename := OpenDialog1.FileName; + MATREAD(cross_prod,NoVars,NoVars,Mean,stddev,NCases,RowLabels,ColLabels,filename); + for i := 1 to NoVars do variance[i-1] := sqr(stddev[i-1]); + ShowMessage('NOTICE! Last variable in matrix is the dependent variable'); + end; + if CorrsChkBox.Checked = true then + begin + title := 'Product-Moment Correlations Matrix'; + MAT_PRINT(cross_prod,NoVars,NoVars,title,RowLabels,ColLabels,NCases); + end; + title := 'Means'; + if MeansChkBox.Checked = true then + DynVectorPrint(mean,NoVars,title,ColLabels,NCases); + title := 'Variances'; + if VarChkBox.Checked = true then + DynVectorPrint(variance,NoVars,title,ColLabels,NCases); + title := 'Standard Deviations'; + if SDChkBox.Checked = true then + DynVectorPrint(stddev,NoVars,title,ColLabels,NCases); + + DepVarCol := NoVars; + y_ptr := NoVars; + DepVar.Text := RowLabels[NoVars]; + { convert correlations to deviation cross-products } + for i := 1 to NoVars do + for j := 1 to NoVars do + cross_prod[i-1,j-1] := cross_prod[i-1,j-1] * stddev[i-1] * stddev[j-1] + * (NCases - 1); + end; + + if MatInChkBox.Checked = false then + begin + { get independent item columns } + NoVars := BlockList.Items.Count; + if NoVars < 1 then + begin + ShowMessage('ERROR! No independent variables selected.'); + goto CleanUp; + end; + for i := 1 to NoVars do + begin + cellstring := BlockList.Items.Strings[i-1]; + for j := 1 to NoVariables do + begin + if cellstring = OS3MainFrm.DataGrid.Cells[j,0] then + begin + ColNoSelected[i-1] := j; + RowLabels[i-1] := cellstring; + ColLabels[i-1] := cellstring; + end; + end; + end; + + { get dependendent variable column } + if DepVar.Text = '' then + begin + ShowMessage('ERROR! No Dependent variable selected.'); + goto CleanUp; + end; + DepVarCol := 0; + NoVars := NoVars + 1; + y_ptr := NoVars; + for j := 1 to NoVariables do + begin + if DepVar.Text = OS3MainFrm.DataGrid.Cells[j,0] then + begin + DepVarCol := j; + ColNoSelected[NoVars-1] := j; + RowLabels[NoVars-1] := OS3MainFrm.DataGrid.Cells[j,0]; + ColLabels[NoVars-1] := RowLabels[NoVars-1]; + end; + end; + INIT(self); + + title := 'Cross-Products Matrix'; + GridXProd(NoVars,ColNoSelected,cross_prod,true,NCases); + for i := 1 to NoVars do + begin + sumx[i-1] := cross_prod[i-1,NoVars]; + mean[i-1] := sumx[i-1] / NCases; + variance[i-1] := cross_prod[i-1,i-1] - (sumx[i-1] * sumx[i-1] / NCases); + variance[i-1] := variance[i-1] / (NCases-1); + if variance[i-1] > 0 then stddev[i-1] := sqrt(variance[i-1]) + else begin + ShowMessage('ERROR! No variance for a variable!'); + goto cleanup; + end; + end; + if CPChkBox.Checked = true then + begin + MAT_PRINT(cross_prod,NoVars,NoVars,title,RowLabels,ColLabels,NCases); + end; + + {get deviation cross-products matrix} + for i := 1 to NoVars do + for j := 1 to NoVars do + cross_prod[i-1,j-1] := cross_prod[i-1,j-1] - (mean[i-1] * mean[j-1] * NCases); + end; + + title := 'Deviation Cross-Products Matrix'; + if CovChkBox.Checked = true then + MAT_PRINT(cross_prod,NoVars,NoVars,title,RowLabels,ColLabels,NCases); + + v := NoVars; + no_predictors := v - 1; + ss_total := cross_prod[y_ptr-1,y_ptr-1]; + biggest_R2 := 0.0; + + { Find best single predictor } + sets := 1; + for j := 1 to no_predictors do + begin + selected[0] := j; + regress(self); + end; + BEST_SET_STATS(self); + + { Find best combinations of 2 to no_predictors - 1 } + sets := 2; + while sets < no_predictors do + begin + end_of_set := FALSE; + start_set(self); + while NOT end_of_set do + begin + regress(self); + bump_one(self); + end; + regress(self); + BEST_SET_STATS(self); + sets := sets + 1; + end; + sets := sets - 1; // no. of predictors + +{ Find regression with all of the predictors } + if more_to_do then + begin + sets := no_predictors; + for i := 1 to sets do selected[i-1] := i; + REGRESS(self); + BEST_SET_STATS(self); + end + else begin + OutputFrm.RichEdit.Lines.Add(''); + OutputFrm.RichEdit.Lines.Add('Last variable added failed entry test. Job ended.'); + end; + + if MatInChkBox.Checked = false then + begin + { get correlation matrix and save if elected } + Correlations(NoVars,ColNoSelected,cross_prod,mean,variance, + stddev,errcode,NCases); + if (CorrsChkBox.Checked = true) then + begin + title := 'Product-Moment Correlations Matrix'; + MAT_PRINT(cross_prod,NoVars,NoVars,title,RowLabels,ColLabels,NCases); + end; + + title := 'Means'; + if (MeansChkBox.Checked = true) then + DynVectorPrint(mean,NoVars,title,ColLabels,NCases); + title := 'Variances'; + if (VarChkBox.Checked = true) then + DynVectorPrint(variance,NoVars,title,ColLabels,NCases); + title := 'Standard Deviations'; + if (SDChkBox.Checked = true) then + DynVectorPrint(stddev,NoVars,title,ColLabels,NCases); + + if MatSaveChkBox.Checked = true then + begin + SaveDialog1.Filter := 'FreeStat matrix files (*.MAT)|*.MAT|All files (*.*)|*.*'; + SaveDialog1.FilterIndex := 1; + if SaveDialog1.Execute then + begin + filename := SaveDialog1.FileName; + MATSAVE(cross_prod,NoVars,NoVars,mean,stddev,NCases,RowLabels,ColLabels,filename); + end; + end; + + { add [predicted scores, residual scores, etc. to grid if options elected } + if PredictChkBox.Checked = true then + begin + for i := 1 to sets do + begin + ii := selected[i-1]; + IndepIndex[i-1] := ii; //ColNoSelected[ii]; + end; + prout := 1.0; + + MReg2(NCases,NoVars, sets, IndepIndex, cross_prod, ind_mat, + RowLabels, R2, raw_b, mean, variance, + errorcode, StdErrEst, constant,prout, true, false,false); + + Predict(ColNoSelected, NoVars, ind_mat, mean, stddev, + raw_b, StdErrEst, IndepIndex, sets); + end; + end; + + OutPutFrm.ShowModal; + +cleanup: + pred_labels := nil; + Max_Set := nil; + Selected := nil; + ColNoSelected := nil; + IndepIndex := nil; + ColLabels := nil; + RowLabels := nil; + raw_b := nil; + xycross := nil; + variance := nil; + stddev := nil; + mean := nil; + sumx := nil; + ind_mat := nil; + cross_prod := nil; +end; + +procedure TBestRegFrm.INIT(Sender: TObject); +var + i,j : integer; + +begin + count := 0.0; + for i := 1 to NoVariables do + begin + sumx[i-1] := 0.0; + mean[i-1] := 0.0; + variance[i-1] := 0.0; + stddev[i-1] := 0.0; + for j := 1 to v do cross_prod[i-1,j-1] := 0.0; + end; +end; + +procedure TBestRegFrm.REGRESS(Sender: TObject); + +var + i, j : integer; + outline : string; + +begin + b_zero := 0.0 ; + ss_reg := 0.0 ; + for i := 1 to sets do + raw_b[i-1] := 0.0 ; + + { Set up matrices of deviation cross_products to use } + + for i := 1 to sets do + begin + ii := selected[i-1]; + xycross[i-1] := cross_prod[y_ptr-1,ii-1]; + for j := 1 to sets do + begin + jj := selected[j-1]; + ind_mat[i-1,j-1] := cross_prod[ii-1,jj-1]; + end; + end; + SVDinverse(ind_mat,sets); + + for i := 1 to sets do + begin + ii := selected[i-1]; + for j := 1 to sets do + raw_b[i-1] := raw_b[i-1] + (ind_mat[i-1,j-1] * xycross[j-1]) ; + b_zero := b_zero + raw_b[i-1] * mean[ii-1]; + end; + b_zero := mean[y_ptr-1] - b_zero; + + { Get sum of squares for regression and multiple R } + for i := 1 to sets do + ss_reg := ss_reg + raw_b[i-1] * xycross[i-1]; + mult_R2 := ss_reg / ss_total; + + { Now, check to see if this R2 is largest. If so, save set } + + if mult_R2 > biggest_R2 then + begin + biggest_R2 := mult_R2; + for i := 1 to sets do + max_set[i-1] := selected[i-1]; + end; + + { print out this combination for testing purposes } + if ComboShowChkBox.Checked = true then + begin + outline := format(' Set %2d includes variables:',[sets]); + OutPutFrm.RichEdit.Lines.Add(outline); + for i := 1 to sets do + begin + outline := format('variable %d (%s)',[selected[i-1],ColLabels[selected[i-1]-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Squared R = %6.4f',[mult_R2]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + end; +end; + +procedure TBestRegFrm.BEST_SET_STATS(Sender: TObject); + +var + i, j : integer; + outline : string; + +begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Variables entered in step %2d',[sets]); + OutPutFrm.RichEdit.Lines.Add(outline); + for i := 1 to sets do + begin + ii := max_set[i-1]; + selected[i-1] := max_set[i-1]; + outline := format('%2d %s',[max_set[i-1],ColLabels[ii-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + REGRESS(self); + outline := format('Squared Multiple Correlation = %5.4f',[mult_r2]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Dependent variable = %s',[ColLabels[y_ptr-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('ANOVA for Regression Effects : '); + OutPutFrm.RichEdit.Lines.Add('SOURCE df SS MS F Prob'); + df_reg := sets; + df_res := round(NCases) - sets - 1; + df_tot := round(NCases) - 1; + ms_reg := ss_reg / df_reg; + ss_res := ( 1.0 - mult_R2) * ss_total ; + ms_res := ss_res / df_res ; + f_test := ms_reg / ms_res ; + prob_f := probf(f_test, df_reg,df_res); + + { Get variance of b coefficients } + outline := format('Regression %3d %14.4f %14.4f %14.4f %14.4f', + [df_reg,ss_reg,ms_reg,f_test,prob_f]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Residual %3d %14.4f %14.4f',[df_res,ss_res,ms_res]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Total %3d %14.4f',[df_tot,ss_total]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Variables in the equation'); + OutPutFrm.RichEdit.Lines.Add('VARIABLE b s.e. b Beta t prob. t'); + for i := 1 to sets do + for j := 1 to sets do + ind_mat[i-1,j-1] := ind_mat[i-1,j-1] * ms_res ; + for i := 1 to sets do + begin + ii := selected[i-1]; + pred_labels[i-1] := ColLabels[ii-1]; + outline := format('%16s %10.5f ',[ColLabels[ii-1],raw_b[i-1]]); + seb := sqrt(ind_mat[i-1,i-1]); + t := raw_b[i-1] / seb ; + f_test := t * t ; + prob_f := probf(f_test,1,df_res); + beta := raw_b[i-1] * stddev[ii-1] / stddev[y_ptr-1] ; + outline := outline + format('%8.4f %8.4f %6.3f %6.4f', + [seb,beta,t,prob_f]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := format('(Intercept) %10.5f',[b_zero]); + OutPutFrm.RichEdit.Lines.Add(outline); + +{ MAT_PRINT(sets,ind_mat,pred_labels,'Variance-covariance matrix of b s');} + + { Now see if the gain was significant over last step } + df1 := sets - last_set ; + f_test := ((mult_R2 - last_R2 ) / df1 ) / ( (1.0 - mult_R2) / df_res) ; + prob_f := probf(f_test, df1,df_res); + if prob_f > stop_prob then more_to_do := FALSE ; + R2_diff := mult_R2 - last_R2 ; + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Increase in squared R for this step = %8.6f',[R2_diff]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('F = %8.4f with D.F. %d and %d with Probability = %6.4f', + [f_test,df1,df_res,prob_f]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(''); + last_set := sets; + last_R2 := mult_R2; +end; + +procedure TBestRegFrm.bump_one(Sender: TObject); + +begin + if selected[first_pt-1] < no_predictors then + selected[first_pt-1] := selected[first_pt-1] + 1 + else + begin + all_done := FALSE; + while NOT all_done do + begin + first_pt := first_pt -1; + if first_pt < 1 then all_done := TRUE else + begin + selected[first_pt-1] := selected[first_pt-1] + 1; + if selected[first_pt-1] < selected[first_pt] then + begin + re_set(self); + first_pt := pointer; + all_done := TRUE; + end + else selected[first_pt-1] := selected[first_pt-1] - 1; + end; + end; + end; +end; + +procedure TBestRegFrm.start_set(Sender: TObject); + +var + i : integer; + +begin + end_of_set := FALSE; + for i := 1 to sets do + selected[i-1] := i; + first_pt := sets; + pointer := sets; +end; + +procedure TBestRegFrm.re_set(Sender: TObject); + +var + i : integer; + +begin + testval := no_predictors - sets + 1 ; + if (first_pt = 1) AND (selected[first_pt-1] = testval) then + end_of_set := TRUE else + begin + for i := first_pt + 1 to sets do + selected[i-1] := selected[i-2] + 1; + end; +end; + +procedure TBestRegFrm.InBtnClick(Sender: TObject); +VAR i, index : integer; +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + BlockList.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + OutBtn.Enabled := true; +end; + +procedure TBestRegFrm.OutBtnClick(Sender: TObject); +VAR index : integer; +begin + index := BlockList.ItemIndex; + VarList.Items.Add(BlockList.Items.Strings[index]); + BlockList.Items.Delete(index); + InBtn.Enabled := true; + if BlockList.Items.Count = 0 then OutBtn.Enabled := false; +end; + +procedure TBestRegFrm.AllBtnClick(Sender: TObject); +VAR counts, index : integer; +begin + counts := VarList.Items.Count; + for index := 0 to counts-1 do + begin + BlockList.Items.Add(VarList.Items.Strings[index]); + end; + VarList.Clear; +end; + +procedure TBestRegFrm.DepInBtnClick(Sender: TObject); +VAR index : integer; +begin + index := BlockList.ItemIndex; + DepVar.Text := BlockList.Items.Strings[index]; + BlockList.Items.Delete(index); + DepOutBtn.Enabled := true; + DepInBtn.Enabled := false; +end; + +procedure TBestRegFrm.DepOutBtnClick(Sender: TObject); +begin + BlockList.Items.Add(DepVar.Text); + DepVar.Text := ''; + DepInBtn.Enabled := true; +end; + + +initialization + {$I bestregunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/BESTREGUNIT.lfm b/applications/lazstats/source_orig/BESTREGUNIT.lfm new file mode 100644 index 000000000..04052b61c --- /dev/null +++ b/applications/lazstats/source_orig/BESTREGUNIT.lfm @@ -0,0 +1,398 @@ +object BestRegFrm: TBestRegFrm + Left = 159 + Height = 394 + Top = 94 + Width = 673 + Caption = 'Best Combination Multiple Regression' + ClientHeight = 394 + ClientWidth = 673 + OnShow = FormShow + LCLVersion = '0.9.26.2' + object Label1: TLabel + Left = 8 + Height = 14 + Top = 7 + Width = 90 + Caption = 'Available Variables' + ParentColor = False + end + object Label2: TLabel + Left = 224 + Height = 14 + Top = 8 + Width = 88 + Caption = 'Selected Variables' + ParentColor = False + end + object Label3: TLabel + Left = 441 + Height = 14 + Top = 15 + Width = 95 + Caption = 'Dependent Variable' + ParentColor = False + end + object Label4: TLabel + Left = 8 + Height = 14 + Top = 313 + Width = 160 + Caption = 'Minimum Probability for Inclusion:' + ParentColor = False + end + object VarList: TListBox + Left = 9 + Height = 274 + Top = 23 + Width = 168 + MultiSelect = True + TabOrder = 0 + end + object InBtn: TBitBtn + Left = 184 + Height = 29 + Top = 24 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = InBtnClick + TabOrder = 1 + end + object OutBtn: TBitBtn + Left = 184 + Height = 29 + Top = 56 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = OutBtnClick + TabOrder = 2 + end + object AllBtn: TBitBtn + Left = 184 + Height = 29 + Top = 104 + Width = 32 + Caption = 'ALL' + NumGlyphs = 0 + OnClick = AllBtnClick + TabOrder = 3 + end + object BlockList: TListBox + Left = 223 + Height = 274 + Top = 28 + Width = 166 + TabOrder = 4 + end + object DepInBtn: TBitBtn + Left = 400 + Height = 29 + Top = 32 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = DepInBtnClick + TabOrder = 5 + end + object DepOutBtn: TBitBtn + Left = 400 + Height = 29 + Top = 64 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = DepOutBtnClick + TabOrder = 6 + end + object DepVar: TEdit + Left = 440 + Height = 19 + Top = 41 + Width = 148 + TabOrder = 7 + Text = 'DepVar' + end + object GroupBox1: TGroupBox + Left = 400 + Height = 278 + Top = 104 + Width = 265 + Caption = 'Options' + ClientHeight = 260 + ClientWidth = 261 + TabOrder = 8 + object CPChkBox: TCheckBox + Left = 9 + Height = 17 + Top = 1 + Width = 152 + Caption = 'Show Cross-Products Matrix' + TabOrder = 0 + end + object CovChkBox: TCheckBox + Left = 9 + Height = 17 + Top = 23 + Width = 200 + Caption = 'Show Deviation Cross-Products Matrix' + TabOrder = 1 + end + object CorrsChkBox: TCheckBox + Left = 9 + Height = 17 + Top = 46 + Width = 156 + Caption = 'Show Intercorrelations Matrix' + TabOrder = 2 + end + object MeansChkBox: TCheckBox + Left = 9 + Height = 17 + Top = 70 + Width = 82 + Caption = 'Show Means' + TabOrder = 3 + end + object VarChkBox: TCheckBox + Left = 9 + Height = 17 + Top = 95 + Width = 97 + Caption = 'Show Variances' + TabOrder = 4 + end + object SDChkBox: TCheckBox + Left = 9 + Height = 17 + Top = 120 + Width = 146 + Caption = 'Show Standard Deviations' + TabOrder = 5 + end + object MatSaveChkBox: TCheckBox + Left = 9 + Height = 17 + Top = 144 + Width = 129 + Caption = 'Save Correlation Matrix' + TabOrder = 6 + end + object PredictChkBox: TCheckBox + Left = 9 + Height = 17 + Top = 168 + Width = 171 + Caption = 'Predictions,residuals,C.I''s to grid' + TabOrder = 7 + end + object MatInChkBox: TCheckBox + Left = 9 + Height = 17 + Top = 192 + Width = 134 + Caption = 'Enter Data from a Matrix' + TabOrder = 8 + end + object ComboShowChkBox: TCheckBox + Left = 9 + Height = 17 + Top = 216 + Width = 188 + Caption = 'Show Results for each Combination' + TabOrder = 9 + end + end + object InProb: TEdit + Left = 176 + Height = 19 + Top = 306 + Width = 40 + TabOrder = 9 + Text = 'InProb' + end + object ResetBtn: TButton + Left = 7 + Height = 32 + Top = 350 + Width = 74 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 10 + end + object CancelBtn: TButton + Left = 103 + Height = 32 + Top = 350 + Width = 74 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 11 + end + object ComputeBtn: TButton + Left = 224 + Height = 32 + Top = 350 + Width = 74 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 12 + end + object ReturnBtn: TButton + Left = 320 + Height = 32 + Top = 350 + Width = 74 + Caption = 'Return' + ModalResult = 1 + TabOrder = 13 + end + object OpenDialog1: TOpenDialog + left = 236 + top = 317 + end + object SaveDialog1: TSaveDialog + left = 290 + top = 315 + end +end diff --git a/applications/lazstats/source_orig/BESTREGUNIT.lrs b/applications/lazstats/source_orig/BESTREGUNIT.lrs new file mode 100644 index 000000000..669d87a0f --- /dev/null +++ b/applications/lazstats/source_orig/BESTREGUNIT.lrs @@ -0,0 +1,261 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TBestRegFrm','FORMDATA',[ + 'TPF0'#11'TBestRegFrm'#10'BestRegFrm'#4'Left'#3#159#0#6'Height'#3#138#1#3'Top' + +#2'^'#5'Width'#3#161#2#7'Caption'#6'$Best Combination Multiple Regression'#12 + +'ClientHeight'#3#138#1#11'ClientWidth'#3#161#2#6'OnShow'#7#8'FormShow'#10'LC' + +'LVersion'#6#8'0.9.26.2'#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2#14#3 + +'Top'#2#7#5'Width'#2'Z'#7'Caption'#6#19'Available Variables'#11'ParentColor' + +#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#224#0#6'Height'#2#14#3'Top'#2#8#5'Width' + +#2'X'#7'Caption'#6#18'Selected Variables'#11'ParentColor'#8#0#0#6'TLabel'#6 + +'Label3'#4'Left'#3#185#1#6'Height'#2#14#3'Top'#2#15#5'Width'#2'_'#7'Caption' + +#6#18'Dependent Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#2 + +#8#6'Height'#2#14#3'Top'#3'9'#1#5'Width'#3#160#0#7'Caption'#6'"Minimum Proba' + +'bility for Inclusion:'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left' + +#2#9#6'Height'#3#18#1#3'Top'#2#23#5'Width'#3#168#0#11'MultiSelect'#9#8'TabOr' + +'der'#2#0#0#0#7'TBitBtn'#5'InBtn'#4'Left'#3#184#0#6'Height'#2#29#3'Top'#2#24 + +#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0 + +#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0 + +#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)' + +#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190 + +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255 + +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139 + +'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160 + +#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255 + +#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128 + +#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199 + +'t'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150 + +#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255 + +#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255 + +#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255 + +'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163 + +'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247 + +';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187 + +'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnCl' + +'ick'#7#10'InBtnClick'#8'TabOrder'#2#1#0#0#7'TBitBtn'#6'OutBtn'#4'Left'#3#184 + ,#0#6'Height'#2#29#3'Top'#2'8'#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0 + +#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0 + +#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207 + +'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';' + +#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255 + +#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211 + +#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130 + +#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$' + +#255#255#255#255#0#255#255#255#0'h'#199't'#201''#204#138#255#162#216#171#255 + +#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149 + +#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~' + +#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205 + +#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V' + +#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/' + +#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e' + +#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199 + +'t'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'OutBtnClick'#8'TabOrder'#2#2#0#0 + +#7'TBitBtn'#6'AllBtn'#4'Left'#3#184#0#6'Height'#2#29#3'Top'#2'h'#5'Width'#2 + +' '#7'Caption'#6#3'ALL'#9'NumGlyphs'#2#0#7'OnClick'#7#11'AllBtnClick'#8'TabO' + +'rder'#2#3#0#0#8'TListBox'#9'BlockList'#4'Left'#3#223#0#6'Height'#3#18#1#3'T' + +'op'#2#28#5'Width'#3#166#0#8'TabOrder'#2#4#0#0#7'TBitBtn'#8'DepInBtn'#4'Left' + +#3#144#1#6'Height'#2#29#3'Top'#2' '#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0 + +'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0 + +#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255 + +#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211 + +#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130 + +#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$' + +#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171 + +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204 + +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J' + +#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255 + +'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161 + +'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#13'DepInBtnClick'#8'TabOr' + +'der'#2#5#0#0#7'TBitBtn'#9'DepOutBtn'#4'Left'#3#144#1#6'Height'#2#29#3'Top'#2 + +'@'#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0 + +#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0 + +#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153 + +'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V' + +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255 + ,'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195 + +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255 + +#255#0'h'#199't'#201''#204#138#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135 + +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#14'DepOutBtnClick'#8'TabOrder'#2#6#0#0#5'TEdit'#6'DepV' + +'ar'#4'Left'#3#184#1#6'Height'#2#19#3'Top'#2')'#5'Width'#3#148#0#8'TabOrder' + +#2#7#4'Text'#6#6'DepVar'#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#3#144#1#6'Hei' + +'ght'#3#22#1#3'Top'#2'h'#5'Width'#3#9#1#7'Caption'#6#7'Options'#12'ClientHei' + +'ght'#3#4#1#11'ClientWidth'#3#5#1#8'TabOrder'#2#8#0#9'TCheckBox'#8'CPChkBox' + +#4'Left'#2#9#6'Height'#2#17#3'Top'#2#1#5'Width'#3#152#0#7'Caption'#6#26'Show' + +' Cross-Products Matrix'#8'TabOrder'#2#0#0#0#9'TCheckBox'#9'CovChkBox'#4'Lef' + +'t'#2#9#6'Height'#2#17#3'Top'#2#23#5'Width'#3#200#0#7'Caption'#6'$Show Devia' + +'tion Cross-Products Matrix'#8'TabOrder'#2#1#0#0#9'TCheckBox'#11'CorrsChkBox' + +#4'Left'#2#9#6'Height'#2#17#3'Top'#2'.'#5'Width'#3#156#0#7'Caption'#6#29'Sho' + +'w Intercorrelations Matrix'#8'TabOrder'#2#2#0#0#9'TCheckBox'#11'MeansChkBox' + +#4'Left'#2#9#6'Height'#2#17#3'Top'#2'F'#5'Width'#2'R'#7'Caption'#6#10'Show M' + +'eans'#8'TabOrder'#2#3#0#0#9'TCheckBox'#9'VarChkBox'#4'Left'#2#9#6'Height'#2 + +#17#3'Top'#2'_'#5'Width'#2'a'#7'Caption'#6#14'Show Variances'#8'TabOrder'#2#4 + +#0#0#9'TCheckBox'#8'SDChkBox'#4'Left'#2#9#6'Height'#2#17#3'Top'#2'x'#5'Width' + +#3#146#0#7'Caption'#6#24'Show Standard Deviations'#8'TabOrder'#2#5#0#0#9'TCh' + +'eckBox'#13'MatSaveChkBox'#4'Left'#2#9#6'Height'#2#17#3'Top'#3#144#0#5'Width' + +#3#129#0#7'Caption'#6#23'Save Correlation Matrix'#8'TabOrder'#2#6#0#0#9'TChe' + +'ckBox'#13'PredictChkBox'#4'Left'#2#9#6'Height'#2#17#3'Top'#3#168#0#5'Width' + +#3#171#0#7'Caption'#6'#Predictions,residuals,C.I''s to grid'#8'TabOrder'#2#7 + +#0#0#9'TCheckBox'#11'MatInChkBox'#4'Left'#2#9#6'Height'#2#17#3'Top'#3#192#0#5 + +'Width'#3#134#0#7'Caption'#6#24'Enter Data from a Matrix'#8'TabOrder'#2#8#0#0 + +#9'TCheckBox'#15'ComboShowChkBox'#4'Left'#2#9#6'Height'#2#17#3'Top'#3#216#0#5 + +'Width'#3#188#0#7'Caption'#6'!Show Results for each Combination'#8'TabOrder' + +#2#9#0#0#0#5'TEdit'#6'InProb'#4'Left'#3#176#0#6'Height'#2#19#3'Top'#3'2'#1#5 + +'Width'#2'('#8'TabOrder'#2#9#4'Text'#6#6'InProb'#0#0#7'TButton'#8'ResetBtn'#4 + +'Left'#2#7#6'Height'#2' '#3'Top'#3'^'#1#5'Width'#2'J'#7'Caption'#6#5'Reset'#7 + +'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#10#0#0#7'TButton'#9'CancelBtn'#4 + +'Left'#2'g'#6'Height'#2' '#3'Top'#3'^'#1#5'Width'#2'J'#7'Caption'#6#6'Cancel' + +#11'ModalResult'#2#2#8'TabOrder'#2#11#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3 + +#224#0#6'Height'#2' '#3'Top'#3'^'#1#5'Width'#2'J'#7'Caption'#6#7'Compute'#7 + +'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#12#0#0#7'TButton'#9'ReturnBtn' + +#4'Left'#3'@'#1#6'Height'#2' '#3'Top'#3'^'#1#5'Width'#2'J'#7'Caption'#6#6'Re' + +'turn'#11'ModalResult'#2#1#8'TabOrder'#2#13#0#0#11'TOpenDialog'#11'OpenDialo' + +'g1'#4'left'#3#236#0#3'top'#3'='#1#0#0#11'TSaveDialog'#11'SaveDialog1'#4'lef' + ,'t'#3'"'#1#3'top'#3';'#1#0#0#0 +]); diff --git a/applications/lazstats/source_orig/BINOMIALUNIT.PAS b/applications/lazstats/source_orig/BINOMIALUNIT.PAS new file mode 100644 index 000000000..cb270f784 --- /dev/null +++ b/applications/lazstats/source_orig/BINOMIALUNIT.PAS @@ -0,0 +1,166 @@ +unit BinomialUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, OutPutUnit, Math, FunctionsLib, GraphLib; + +type + + { TBinomialFrm } + + TBinomialFrm = class(TForm) + PlotChk: TCheckBox; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + FreqAEdit: TEdit; + FreqBEdit: TEdit; + PropAEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure FreqAEditKeyPress(Sender: TObject; var Key: char); + procedure FreqBEditKeyPress(Sender: TObject; var Key: char); + procedure PropAEditKeyPress(Sender: TObject; var Key: char); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + BinomialFrm: TBinomialFrm; + +implementation + +{ TBinomialFrm } + +procedure TBinomialFrm.ResetBtnClick(Sender: TObject); +begin + FreqAEdit.Text := ''; + FreqBEdit.Text := ''; + PropAEdit.Text := ''; + FreqAEdit.SetFocus; +end; + +procedure TBinomialFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TBinomialFrm.ComputeBtnClick(Sender: TObject); +var + p, Q, Probability, z, CorrectedA, SumProb : double; + A, b, N, X, i, j : integer; + outline : string; +begin + SumProb := 0.0; + A := round(StrToFloat(FreqAEdit.Text)); + b := round(StrToFloat(FreqBEdit.Text)); + p := StrToFloat(PropAEdit.Text); + N := A + b; + Q := 1.0 - p; + + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Binomial Probability Test'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Frequency of %d out of %d observed',[A, N]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('The theoretical proportion expected in category A is %5.3f', + [p]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := 'The test is for the probability of a value in category A as small or smaller'; + OutPutFrm.RichEdit.Lines.Add(outline); + outline := 'than that observed given the expected proportion.'; + OutPutFrm.RichEdit.Lines.Add(outline); + + if (N > 35) then //Use normal distribution approximation + begin + CorrectedA := A; + if A < (N * p) then CorrectedA := A + 0.5; + if A > (N * p) then CorrectedA := A - 0.5; + z := (CorrectedA - N * p) / sqrt(N * p * Q); + outline := format('Z value for Normal Distribution approximation := %5.3f', + [z]); + OutPutFrm.RichEdit.Lines.Add(outline); + Probability := probz(z); + outline := format('Probability := %6.4f',[Probability]); + OutPutFrm.RichEdit.Lines.Add(outline); + end + else //Use binomial fomula + begin + for X := 0 to A do + begin + Probability := combos(X, N) * Power(p,X) * Power(Q,(N - X)); + outline := format('Probability of %d = %6.4f',[X,Probability]); + OutPutFrm.RichEdit.Lines.Add(outline); + SumProb := SumProb + Probability; + end; + outline := format('Binomial Probability of %d or less out of %d = %6.4f', + [A,N,SumProb]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + if PlotChk.Checked then + begin + if N <= 35 then + begin + SetLength(GraphFrm.Xpoints,1,N+1); + SetLength(GraphFrm.Ypoints,1,N+1); + for i := 0 to N do GraphFrm.Xpoints[0,i] := i; + for i := 0 to N do + begin + Probability := combos(i,N) * power(p,i) * power(Q,(N-i)); + GraphFrm.Ypoints[0,i] := Probability; + end; + GraphFrm.GraphType := 2; + GraphFrm.nosets := 1; + GraphFrm.nbars := N; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlue; + GraphFrm.FloorColor := clGray; + GraphFrm.Heading := 'Binomial Distribution'; + GraphFrm.XTitle := 'Values'; + GraphFrm.YTitle := 'Probability'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := true; + GraphFrm.ShowLeftWall := true; + GraphFrm.ShowRightWall := true; + GraphFrm.ShowBottomWall := true; + GraphFrm.ShowModal; + end + else ShowMessage('Cannot plot for N > 35'); + end; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; +end; + +procedure TBinomialFrm.FreqAEditKeyPress(Sender: TObject; var Key: char); +begin + if Ord(Key) = 13 then FreqBEdit.SetFocus; +end; + +procedure TBinomialFrm.FreqBEditKeyPress(Sender: TObject; var Key: char); +begin + if Ord(Key) = 13 then PropAEdit.SetFocus; +end; + +procedure TBinomialFrm.PropAEditKeyPress(Sender: TObject; var Key: char); +begin + if Ord(Key) = 13 then ComputeBtn.SetFocus; +end; + +initialization + {$I binomialunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/BINOMIALUNIT.lfm b/applications/lazstats/source_orig/BINOMIALUNIT.lfm new file mode 100644 index 000000000..6d4a32550 --- /dev/null +++ b/applications/lazstats/source_orig/BINOMIALUNIT.lfm @@ -0,0 +1,106 @@ +object BinomialFrm: TBinomialFrm + Left = 154 + Height = 181 + Top = 103 + Width = 355 + Caption = 'Binomial Probability Calculator' + ClientHeight = 181 + ClientWidth = 355 + OnShow = FormShow + LCLVersion = '0.9.30' + object Label1: TLabel + Left = 9 + Height = 16 + Top = 17 + Width = 240 + Caption = 'Frequency of events observed in category ''A'':' + ParentColor = False + end + object Label2: TLabel + Left = 8 + Height = 16 + Top = 49 + Width = 239 + Caption = 'Frequency of events observed in category ''B'':' + ParentColor = False + end + object Label3: TLabel + Left = 8 + Height = 16 + Top = 80 + Width = 241 + Caption = 'Proportion of events expected in category ''A'':' + ParentColor = False + end + object ResetBtn: TButton + Left = 8 + Height = 26 + Top = 136 + Width = 58 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 0 + end + object CancelBtn: TButton + Left = 80 + Height = 26 + Top = 136 + Width = 58 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 1 + end + object ComputeBtn: TButton + Left = 176 + Height = 26 + Top = 136 + Width = 58 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 2 + end + object ReturnBtn: TButton + Left = 256 + Height = 26 + Top = 136 + Width = 58 + Caption = 'Return' + ModalResult = 1 + TabOrder = 3 + end + object FreqAEdit: TEdit + Left = 272 + Height = 23 + Top = 8 + Width = 43 + OnKeyPress = FreqAEditKeyPress + TabOrder = 4 + Text = 'FreqAEdit' + end + object FreqBEdit: TEdit + Left = 272 + Height = 23 + Top = 40 + Width = 43 + OnKeyPress = FreqBEditKeyPress + TabOrder = 5 + Text = 'Edit1' + end + object PropAEdit: TEdit + Left = 272 + Height = 23 + Top = 72 + Width = 43 + OnKeyPress = PropAEditKeyPress + TabOrder = 6 + Text = 'Edit1' + end + object PlotChk: TCheckBox + Left = 8 + Height = 19 + Top = 107 + Width = 125 + Caption = 'Plot the distribution' + TabOrder = 7 + end +end diff --git a/applications/lazstats/source_orig/BINOMIALUNIT.lrs b/applications/lazstats/source_orig/BINOMIALUNIT.lrs new file mode 100644 index 000000000..536650787 --- /dev/null +++ b/applications/lazstats/source_orig/BINOMIALUNIT.lrs @@ -0,0 +1,30 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TBinomialFrm','FORMDATA',[ + 'TPF0'#12'TBinomialFrm'#11'BinomialFrm'#4'Left'#3#154#0#6'Height'#3#181#0#3'T' + +'op'#2'g'#5'Width'#3'c'#1#7'Caption'#6#31'Binomial Probability Calculator'#12 + +'ClientHeight'#3#181#0#11'ClientWidth'#3'c'#1#6'OnShow'#7#8'FormShow'#10'LCL' + +'Version'#6#6'0.9.30'#0#6'TLabel'#6'Label1'#4'Left'#2#9#6'Height'#2#16#3'Top' + +#2#17#5'Width'#3#240#0#7'Caption'#6'-Frequency of events observed in categor' + +'y ''A'':'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#8#6'Height'#2 + +#16#3'Top'#2'1'#5'Width'#3#239#0#7'Caption'#6'-Frequency of events observed ' + +'in category ''B'':'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2#8#6 + +'Height'#2#16#3'Top'#2'P'#5'Width'#3#241#0#7'Caption'#6'.Proportion of event' + +'s expected in category ''A'':'#11'ParentColor'#8#0#0#7'TButton'#8'ResetBtn' + +#4'Left'#2#8#6'Height'#2#26#3'Top'#3#136#0#5'Width'#2':'#7'Caption'#6#5'Rese' + +'t'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#0#0#0#7'TButton'#9'CancelBt' + +'n'#4'Left'#2'P'#6'Height'#2#26#3'Top'#3#136#0#5'Width'#2':'#7'Caption'#6#6 + +'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#1#0#0#7'TButton'#10'ComputeBtn'#4 + +'Left'#3#176#0#6'Height'#2#26#3'Top'#3#136#0#5'Width'#2':'#7'Caption'#6#7'Co' + +'mpute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#2#0#0#7'TButton'#9'Re' + +'turnBtn'#4'Left'#3#0#1#6'Height'#2#26#3'Top'#3#136#0#5'Width'#2':'#7'Captio' + +'n'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#3#0#0#5'TEdit'#9'FreqAEdit' + +#4'Left'#3#16#1#6'Height'#2#23#3'Top'#2#8#5'Width'#2'+'#10'OnKeyPress'#7#17 + +'FreqAEditKeyPress'#8'TabOrder'#2#4#4'Text'#6#9'FreqAEdit'#0#0#5'TEdit'#9'Fr' + +'eqBEdit'#4'Left'#3#16#1#6'Height'#2#23#3'Top'#2'('#5'Width'#2'+'#10'OnKeyPr' + +'ess'#7#17'FreqBEditKeyPress'#8'TabOrder'#2#5#4'Text'#6#5'Edit1'#0#0#5'TEdit' + +#9'PropAEdit'#4'Left'#3#16#1#6'Height'#2#23#3'Top'#2'H'#5'Width'#2'+'#10'OnK' + +'eyPress'#7#17'PropAEditKeyPress'#8'TabOrder'#2#6#4'Text'#6#5'Edit1'#0#0#9'T' + +'CheckBox'#7'PlotChk'#4'Left'#2#8#6'Height'#2#19#3'Top'#2'k'#5'Width'#2'}'#7 + +'Caption'#6#21'Plot the distribution'#8'TabOrder'#2#7#0#0#0 +]); diff --git a/applications/lazstats/source_orig/BLKANOVAUNIT.PAS b/applications/lazstats/source_orig/BLKANOVAUNIT.PAS new file mode 100644 index 000000000..14b3a5466 --- /dev/null +++ b/applications/lazstats/source_orig/BLKANOVAUNIT.PAS @@ -0,0 +1,2742 @@ +unit BlkAnovaUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, ExtCtrls, MainUnit, Globals, FunctionsLib, OutPutUnit, + DataProcs, GraphLib, ANOVATESTSUnit, Math, contexthelpunit; + +type + + { TBlksAnovaFrm } + + TBlksAnovaFrm = class(TForm) + BrownForsythe: TCheckBox; + Label5: TLabel; + Welch: TCheckBox; + DepIn: TBitBtn; + DepOut: TBitBtn; + Fact1In: TBitBtn; + Fact1Out: TBitBtn; + Fact2In: TBitBtn; + Fact2Out: TBitBtn; + Fact3In: TBitBtn; + Fact3Out: TBitBtn; + HelpBtn: TButton; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + Scheffe: TCheckBox; + Plot3DLines: TCheckBox; + TukeyHSD: TCheckBox; + TukeyB: TCheckBox; + TukeyKramer: TCheckBox; + NewmanKeuls: TCheckBox; + Bonferoni: TCheckBox; + OrthoContrasts: TCheckBox; + PlotMeans: TCheckBox; + Plot2DLines: TCheckBox; + DepVar: TEdit; + Factor1: TEdit; + Factor2: TEdit; + Factor3: TEdit; + OverallAlpha: TEdit; + PostAlpha: TEdit; + GroupBox1: TGroupBox; + GroupBox2: TGroupBox; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + VarList: TListBox; + Fact1Grp: TRadioGroup; + Fact2Grp: TRadioGroup; + Fact3Grp: TRadioGroup; + StaticText1: TStaticText; + StaticText2: TStaticText; + StaticText3: TStaticText; + StaticText4: TStaticText; + procedure ComputeBtnClick(Sender: TObject); + procedure DepInClick(Sender: TObject); + procedure DepOutClick(Sender: TObject); + procedure Fact1OutClick(Sender: TObject); + procedure Fact2InClick(Sender: TObject); + procedure Fact2OutClick(Sender: TObject); + procedure Fact3InClick(Sender: TObject); + procedure Fact3OutClick(Sender: TObject); + procedure Fact1InClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure TwoWayContrasts(Sender: TObject); + procedure ThreeWayContrasts(Sender: TObject); + private + { private declarations } + NoSelected, intvalue, N : integer; + ColNoSelected : IntDyneVec; + outline, cellstring : string; + SSDep, SSErr, SSF1, SSF2, SSF3, SSF1F2, SSF1F3, SSF2F3, SSF1F2F3 : double; + MSDep, MSErr, MSF1, MSF2, MSF3, MSF1F2, MSF1F3, MSF2F3, MSF1F2F3 : double; + DFTot, DFErr, DFF1, DFF2, DFF3, DFF1F2, DFF1F3, DFF2F3, DFF1F2F3 : double; + Omega, OmegaF1, OmegaF2, OmegaF3, OmegaF1F2, F, MinSize, MaxSize : double; + OmegaF1F3, OmegaF2F3, OmegaF1F2F3 : double; + FF1, FF2, FF1F2, ProbF1, ProbF2, ProbF3, ProbF1F2, ProbF1F3 : double; + FF3, FF2F3, FF1F3, FF1F2F3, ProbF2F3, ProbF1F2F3 : double; + DepVarCol, F1Col, F2Col, F3Col, Nf1cells, Nf2cells, Nf3cells : integer; + MeanDep, MeanF1, MeanF2, MeanF3, X : double; + minf1, maxf1, minf2, maxf2, minf3, maxf3, nofactors, totcells : integer; + cellcnts : DblDyneVec; // array of cell counts + cellvars : DblDyneVec; // arrray of cell sums of squares then variances + cellsums : DblDyneVec; // array of cell sums then means + equal_grp : boolean; // check for equal groups for post-hoc tests + counts : DblDyneMat; // matrix for 2-way containing cell sizes + sums : DblDyneMat; // matrix for 2-way containing cell sums + vars : DblDyneMat; // matrix for 2-way containing sums of squares + RowSums : DblDyneVec; // 2 way row sums + ColSums : DblDyneVec; // 2 way col sums + RowCount : DblDyneVec; // 2 way row count + ColCount : DblDyneVec; // 2 way col count + SlcSums : DblDyneVec; // 3 way slice sums + SlcCount : DblDyneVec; // 3 way slice counts + NoGrpsA, NoGrpsB, NoGrpsC : integer; + OrdMeansA, OrdMeansB, OrdMeansC : DblDyneVec; // reordered means for f1, f2, f3 + allAlpha, PostHocAlpha : double; // alphas for tests +// wsum : array[1..20,1..20,1..20] of double; // sums for 3 way +// ncnt : array[1..20,1..20,1..20] of integer; // n in 3 way cells +// wx2 : array[1..20,1..20,1..20] of double; // sums of squares for 3 way cells + wsum, wx2 : DblDyneCube; + ncnt : IntDyneCube; + OKterms : array[1..14] of integer; + CompError : boolean; + + procedure getlevels(Sender : TObject); + procedure Calc1Way(Sender: TObject); + procedure OneWayTable(Sender: TObject); + procedure OneWayPlot(Sender: TObject); + procedure Calc2Way(Sender: TObject); + procedure TwoWayTable(Sender: TObject); + procedure TwoWayPlot(Sender: TObject); + procedure Calc3Way(Sender: TObject); + procedure ThreeWayTable(Sender: TObject); + procedure ThreeWayPlot(Sender: TObject); + procedure BrownForsytheOneWay(Sender: TObject); + procedure WelchOneWay(Sender: TObject); + procedure Welchttests(Sender: TObject); + public + { public declarations } + end; + +var + BlksAnovaFrm: TBlksAnovaFrm; + +implementation + +{ TBlksAnovaFrm } + +procedure TBlksAnovaFrm.ResetBtnClick(Sender: TObject); +Var i : integer; +begin + VarList.Clear; + DepIn.Visible := true; + Fact1In.Visible := true; + Fact2In.Visible := true; + Fact3In.Visible := true; + DepOut.Visible := false; + Fact1Out.Visible := false; + Fact2Out.Visible := false; + Fact3Out.Visible := false; + DepVar.Text := ''; + Factor1.Text := ''; + Factor2.Text := ''; + Factor3.Text := ''; + Fact1Grp.ItemIndex := 0; + Fact2Grp.ItemIndex := 0; + Fact3Grp.ItemIndex := 0; + PlotMeans.Checked := false; + Scheffe.Checked := false; + TukeyHSD.Checked := false; + TukeyB.Checked := false; + TukeyKramer.Checked := false; + NewmanKeuls.Checked := false; + Bonferoni.Checked := false; + PostAlpha.Text := '0.05'; + OverAllalpha.Text := '0.05'; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; + +procedure TBlksAnovaFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TBlksAnovaFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TBlksAnovaFrm.DepInClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + DepVar.Text := VarList.Items.Strings[index]; + DepIn.Visible := false; + DepOut.Visible := true; + VarList.Items.Delete(index); +end; + +procedure TBlksAnovaFrm.ComputeBtnClick(Sender: TObject); +Var + i : integer; + +Label cleanit; +label nexttwo; +label nextthree; + +begin + OutPutFrm.RichEdit.Clear; + // initialize values + SetLength(ColNoSelected,NoVariables); + DepVarCol := 0; + F1Col := 0; + F2Col := 0; + F3Col := 0; + SSDep := 0.0; + SSF1 := 0.0; + SSF2 := 0.0; + SSF3 := 0.0; + SSF1F2 := 0.0; + SSF1F3 := 0.0; + SSF2F3 := 0.0; + SSF1F2F3 := 0.0; + MeanDep := 0.0; + MeanF1 := 0.0; + MeanF2 := 0.0; + MeanF3 := 0.0; + Nf1cells := 0; + Nf2cells := 0; + Nf3cells := 0; + N := 0; + NoSelected := 0; + minf1 := 0; + maxf1 := 0; + minf2 := 0; + maxf2 := 0; + minf3 := 0; + maxf3 := 0; + + // Get column numbers of dependent variable and factors + for i := 1 to NoVariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[i,0]; + if cellstring = DepVar.Text then + begin + DepVarCol := i; + NoSelected := NoSelected + 1; + ColNoSelected[NoSelected-1] := DepVarCol; + end; + if cellstring = Factor1.Text then + begin + F1Col := i; + NoSelected := NoSelected + 1; + ColNoSelected[NoSelected-1] := F1Col; + end; + if cellstring = Factor2.Text then + begin + F2Col := i; + NoSelected := NoSelected + 1; + ColNoSelected[NoSelected-1] := F2Col; + end; + if cellstring = Factor3.Text then + begin + F3Col := i; + NoSelected := NoSelected + 1; + ColNoSelected[NoSelected-1] := F3Col; + end; + end; + if F2Col = 0 then nofactors := 1 else nofactors := 2; + if F3Col <> 0 then nofactors := 3; + allAlpha := StrToFloat(OverAllalpha.Text); + PostHocAlpha := StrToFloat(PostAlpha.Text); + // get min and max of each factor code + getlevels(self); + + // allocate space + SetLength(cellcnts,totcells); // array of cell counts + SetLength(cellvars,totcells); // arrray of cell sums of squares then variances + SetLength(cellsums,totcells); // array of cell sums then means + + // initialize array values + for i := 1 to totcells do + begin + cellsums[i-1] := 0.0; + cellvars[i-1] := 0.0; + cellcnts[i-1] := 0; + end; + + // do analysis + case nofactors of + 1 : + begin + Calc1Way(self); // single factor anova + if CompError then goto cleanit; + OneWayTable(self); // output the results + if Scheffe.Checked then + SCHEFFETEST(MSErr,cellsums,cellcnts,minf1,maxf1,N); + if (TukeyHSD.Checked) and (equal_grp) then + Tukey(MSErr,DFErr,MinSize,cellsums,cellcnts,minf1,maxf1); + if (TukeyB.Checked) and (equal_grp) then + TUKEYBTEST(MSErr,DFErr,cellsums,cellcnts,minf1,maxf1,MinSize); + if (TukeyKramer.Checked) then + TUKEY_KRAMER(MSErr,DFErr,MinSize,cellsums,cellcnts,minf1,maxf1); + if (NewmanKeuls.Checked) and (equal_grp) then + Newman_Keuls(MSErr,DFErr,MinSize,cellsums,cellcnts,minf1,maxf1); + if Bonferoni.Checked then + Bonferroni(cellsums,cellcnts,cellvars,minf1,maxf1); + if OrthoContrasts.Checked then + CONTRASTS(MSErr,DFErr,cellsums,cellcnts,minf1,maxf1,0.05); + OutPutFrm.ShowModal; + if (PlotMeans.Checked) or (Plot2DLines.Checked) + or (Plot3DLines.Checked) then OneWayPlot(self); + if BrownForsythe.Checked then BrownForsytheOneWay(self); + if Welch.Checked then WelchOneWay(self); + end; + 2 : // two-way anova + begin + SetLength(counts,Nf1cells,Nf2cells); // matrix for 2-way containing cell sizes + SetLength(sums,Nf1cells,Nf2cells); // matrix for 2-way containing cell sums + SetLength(vars,Nf1cells,Nf2cells); // matrix for 2-way containing sums of squares + SetLength(RowSums,Nf1cells); // 2 way row sums + SetLength(ColSums,Nf2cells); // 2 way col sums + SetLength(RowCount,Nf1cells); // 2 way row count + SetLength(ColCount,Nf2cells); // 2 way col count + SetLength(OrdMeansA,Nf1cells); // ordered means for factor 1 + SetLength(OrdMeansB,Nf2cells); // ordered means for factor 2 + + Calc2Way(self); + if CompError then goto nexttwo; + TwoWayTable(self); + TwoWayContrasts(self); + OutPutFrm.ShowModal; + if (PlotMeans.Checked) or (Plot2DLines.Checked) + or (Plot3DLines.Checked) then TwoWayPlot(self); +nexttwo: OrdMeansB := nil; + OrdMeansA := nil; + ColCount := nil; + RowCount := nil; + ColSums := nil; + RowSums := nil; + vars := nil; + sums := nil; + counts := nil; + end; + 3 : // three way anova + begin + SetLength(RowSums,Nf1cells); // 2 way row sums + SetLength(ColSums,Nf2cells); // 2 way col sums + SetLength(RowCount,Nf1cells); // 2 way row count + SetLength(ColCount,Nf2cells); // 2 way col count + SetLength(SlcSums,Nf3cells); // 3 way slice sums + SetLength(SlcCount,Nf3cells); // 3 way slice counts + SetLength(OrdMeansA,Nf1cells); // ordered means for factor 1 + SetLength(OrdMeansB,Nf2cells); // ordered means for factor 2 + SetLength(OrdMeansC,Nf3cells); // ordered means for factor 3 + SetLength(wsum,Nf1cells,Nf2cells,Nf3cells); + SetLength(wx2,Nf1cells,Nf2cells,Nf3cells); + SetLength(ncnt,Nf1cells,Nf2cells,Nf3cells); + + Calc3Way(self); + if CompError then goto nextthree; + ThreeWayTable(self); + ThreeWayContrasts(self); + OutPutFrm.ShowModal; + if (PlotMeans.Checked) or (Plot2DLines.Checked) + or (Plot3DLines.Checked) then ThreeWayPlot(self); +nextthree: ncnt := nil; + wx2 := nil; + wsum := nil; + OrdMeansC := nil; + OrdMeansB := nil; + OrdMeansA := nil; + SlcCount := nil; + SlcSums := nil; + ColCount := nil; + ColSums := nil; + RowCount := nil; + RowSums := nil; + end; + end; +cleanit: + cellcnts := nil; + cellvars := nil; + cellsums := nil; + ColNoSelected := nil; +end; + +procedure TBlksAnovaFrm.DepOutClick(Sender: TObject); +begin + VarList.Items.Add(DepVar.Text); + DepVar.Text := ''; + DepOut.Visible := false; + DepIn.Visible := true; +end; + +procedure TBlksAnovaFrm.Fact1OutClick(Sender: TObject); +begin + VarList.Items.Add(Factor1.Text); + Factor1.Text := ''; + Fact1Out.Visible := false; + Fact1In.Visible := true; +end; + +procedure TBlksAnovaFrm.Fact2InClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + if index = -1 then exit; + Factor2.Text := VarList.Items.Strings[index]; + Fact2In.Visible := false; + Fact2Out.Visible := true; + VarList.Items.Delete(index); +end; + +procedure TBlksAnovaFrm.Fact2OutClick(Sender: TObject); +begin + VarList.Items.Add(Factor2.Text); + Factor2.Text := ''; + Fact2Out.Visible := false; + Fact2In.Visible := true; +end; + +procedure TBlksAnovaFrm.Fact3InClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + if index = -1 then exit; + Factor3.Text := VarList.Items.Strings[index]; + Fact3In.Visible := false; + Fact3Out.Visible := true; + VarList.Items.Delete(index); +end; + +procedure TBlksAnovaFrm.Fact3OutClick(Sender: TObject); +begin + VarList.Items.Add(Factor3.Text); + Factor3.Text := ''; + Fact3Out.Visible := false; + Fact3In.Visible := true; +end; + +procedure TBlksAnovaFrm.Fact1InClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + if index = -1 then exit; + Factor1.Text := VarList.Items.Strings[index]; + Fact1In.Visible := false; + Fact1Out.Visible := true; + VarList.Items.Delete(index); +end; + +procedure TBlksAnovaFrm.getlevels(Sender: TObject); +VAR i : integer; +begin + minf1 := 10000; + maxf1 := -10000; + for i := 1 to NoCases do + begin + if Not GoodRecord(i,NoSelected,ColNoSelected) then continue; + intvalue := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F1Col,i]))); + if intvalue > maxf1 then maxf1 := intvalue; + if intvalue < minf1 then minf1 := intvalue; + end; + Nf1cells := maxf1 - minf1 + 1; + if nofactors > 1 then + begin + minf2 := 10000; + maxf2 := -10000; + for i := 1 to NoCases do + begin + if Not GoodRecord(i,NoSelected,ColNoSelected) then continue; + intvalue := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F2Col,i]))); + if intvalue > maxf2 then maxf2 := intvalue; + if intvalue < minf2 then minf2 := intvalue; + end; + Nf2cells := maxf2 - minf2 + 1; + end; + if nofactors = 3 then + begin + minf3 := 10000; + maxf3 := -10000; + for i := 1 to NoCases do + begin + if Not GoodRecord(i,NoSelected,ColNoSelected) then continue; + intvalue := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F3Col,i]))); + if intvalue > maxf3 then maxf3 := intvalue; + if intvalue < minf3 then minf3 := intvalue; + end; + Nf3cells := maxf3 - minf3 + 1; + end; + totcells := Nf1cells + Nf2cells + Nf3cells; +end; + +procedure TBlksAnovaFrm.Calc1Way(Sender: TObject); +VAR i : integer; +begin + // get working totals + for i := 1 to NoCases do + begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + intvalue := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F1Col,i]))); + X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[DepVarCol,i])); + intvalue := intvalue - minf1 + 1; + cellcnts[intvalue-1] := cellcnts[intvalue-1] + 1; + cellsums[intvalue-1] := cellsums[intvalue-1] + X; + cellvars[intvalue-1] := cellvars[intvalue-1] + (X * X); + MeanDep := MeanDep + X; + SSDep := SSDep + (X * X); + N := N + 1; + end; + DFF1 := 0; + for i := 0 to Nf1cells-1 do + begin + if cellcnts[i] > 0 then + begin + SSF1 := SSF1 + (sqr(cellsums[i]) / cellcnts[i]); + DFF1 := DFF1 + 1; + end; + end; + SSF1 := SSF1 - (sqr(MeanDep) / N); + SSDep := SSDep - (sqr(MeanDep) / N); + SSErr := SSDep - SSF1; + DFTot := N - 1; + DFF1 := DFF1 - 1; + DFErr := DFTot - DFF1; + MSF1 := SSF1 / DFF1; + MSErr := SSErr / DFErr; + MSDep := SSDep / DFTot; + Omega := (SSF1 - DFF1 * MSErr) / (SSDep + MSErr); + F := MSF1 / MSErr; + ProbF1 := probf(F,DFF1, DFErr); + MeanDep := MeanDep / N; +end; + +procedure TBlksAnovaFrm.OneWayTable(Sender: TObject); +var + i, grpsize : integer; + minvar, maxvar, sumvar, sumfreqlogvar, sumDFrecip : double; + c, bartlett, cochran, hartley, chiprob : double; + +begin + OutPutFrm.RichEdit.Lines.Add('ONE WAY ANALYSIS OF VARIANCE RESULTS'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Dependent variable is: %s, Independent variable is: %s', + [DepVar.Text,Factor1.Text]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add('SOURCE D.F. SS MS F PROB.>F OMEGA SQR.'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + outline := format('BETWEEN %4.0f%10.2f%10.2f%10.2f%10.2f%10.2f', + [DFF1,SSF1,MSF1,F,ProbF1,Omega]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('WITHIN %4.0f%10.2f%10.2f',[DFErr,SSErr,MSErr]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('TOTAL %4.0f%10.2f',[DFTot,SSDep]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('MEANS AND VARIABILITY OF THE DEPENDENT VARIABLE FOR LEVELS OF THE INDEPENDENT VARIABLE'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add('GROUP MEAN VARIANCE STD.DEV. N'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + equal_grp := true; + minvar := 1e20; + maxvar := 0.0; + sumvar := 0.0; + sumDFrecip := 0.0; + sumfreqlogvar := 0.0; + grpsize := round(cellcnts[0]); + MinSize := grpsize; // initialized minimum group size + MaxSize := grpsize; // initialize maximum group size + for i := 0 to NF1cells-1 do + begin + grpsize := round(cellcnts[i]); + if grpsize < MinSize then + begin + MinSize := grpsize; + equal_grp := false; + end; + if grpsize > MaxSize then MaxSize := grpsize; + if cellcnts[i] > 1 then + begin + cellvars[i] := cellvars[i] - (sqr(cellsums[i]) / cellcnts[i]); + cellvars[i] := cellvars[i] / (cellcnts[i] - 1); + if cellvars[i] > maxvar then maxvar := cellvars[i]; + if cellvars[i] < minvar then minvar := cellvars[i]; + sumvar :=sumvar + cellvars[i]; + sumDFrecip := sumDFrecip + (1.0 / (cellcnts[i] - 1.0)); + sumfreqlogvar := sumfreqlogvar + (cellcnts[i] - 1) * Log10(cellvars[i]); + end; + if cellcnts[i] > 0 then + begin + outline := format('%4d %10.2f%10.2f%10.2f%4.0f', + [i+1,cellsums[i] / cellcnts[i], cellvars[i], sqrt(cellvars[i]), cellcnts[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + outline := format('TOTAL%10.2f%10.2f%10.2f%4d',[MeanDep,MSDep,sqrt(MSDep),N]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(''); + c := 1.0 + (1.0 / (3 * DFF1)) * (sumDFrecip - (1.0 / DFErr)); + bartlett := (2.303 / c) * ((DFErr * Log10(MSErr)) - sumfreqlogvar); + chiprob := 1.0 - chisquaredprob(bartlett,round(DFF1)); + cochran := maxvar / sumvar; + hartley := maxvar / minvar; + OutPutFrm.RichEdit.Lines.Add('TESTS FOR HOMOGENEITY OF VARIANCE'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + outline := format('Hartley Fmax test statistic = %10.2f with deg.s freedom: %d and %5.0f.', + [hartley, NF1cells, MaxSize - 1]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Cochran C statistic = %10.2f with deg.s freedom: %d and %5.0f.', + [cochran, NF1cells, MaxSize - 1]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Bartlett Chi-square = %10.2f with %4.0f D.F. Prob. > Chi-Square = %6.3f', + [bartlett, DFF1, chiprob]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); +end; + +procedure TBlksAnovaFrm.OneWayPlot(Sender: TObject); +var + i : integer; + maxmean : double; + XValue : DblDyneVec; + setstring : string[11]; + plottype : integer; + +begin + plottype := 2; + SetLength(XValue,Nf1cells); + if PlotMeans.Checked then plottype := 2; + if Plot2DLines.Checked then plottype := 5; + if Plot3DLines.Checked then plottype := 6; + maxmean := 0.0; + setstring := 'FACTOR A'; + GraphFrm.SetLabels[1] := setstring; + SetLength(GraphFrm.YPoints,1,NF1cells); + SetLength(GraphFrm.Xpoints,1,NF1cells); + for i := 1 to NF1cells do + begin + cellsums[i-1] := cellsums[i-1] / cellcnts[i-1]; + GraphFrm.Ypoints[0,i-1] := cellsums[i-1]; + if cellsums[i-1] > maxmean then maxmean := cellsums[i-1]; + XValue[i-1] := minF1 + i - 1; + GraphFrm.Xpoints[0,i-1] := XValue[i-1]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := NF1cells; + GraphFrm.Heading := Factor1.Text; + GraphFrm.XTitle := 'FACTOR A LEVEL'; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; // 3d Vertical Bar Chart + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + XValue := nil; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; +end; + +procedure TBlksAnovaFrm.Calc2Way(Sender: TObject); +var + i, j : integer; + grpA, grpB : integer; + Constant, RowsTotCnt, ColsTotCnt, SSCells : double; + +begin + CompError := false; + // initialize matrix values + NoGrpsA := maxf1 - minf1 + 1; + NoGrpsB := maxf2 - minf2 + 1; + for i := 1 to NoGrpsA do + begin + RowSums[i-1] := 0.0; + RowCount[i-1] := 0.0; + for j := 1 to NoGrpsB do + begin + counts[i-1,j-1] := 0.0; + sums[i-1,j-1] := 0.0; + vars[i-1,j-1] := 0.0; + end; + end; + for i := 1 to NoGrpsB do + begin + ColCount[i-1] := 0.0; + ColSums[i-1] := 0.0; + end; + N := 0; + MeanDep := 0.0; + SSDep := 0.0; + SSCells := 0.0; + RowsTotCnt := 0.0; + ColsTotCnt := 0.0; + // get working totals + for i := 1 to NoCases do + begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + grpA := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F1Col,i]))); + grpB := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F2Col,i]))); + X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[DepVarCol,i])); + grpA := grpA - minf1 + 1; + grpB := grpB - minf2 + 1; + counts[grpA-1,grpB-1] := counts[grpA-1,grpB-1] + 1; + sums[grpA-1,grpB-1] := sums[grpA-1,grpB-1] + X; + vars[grpA-1,grpB-1] := vars[grpA-1,grpB-1] + (X * X); + RowSums[GrpA-1] := RowSums[GrpA-1] + X; + ColSums[GrpB-1] := ColSums[GrpB-1] + X; + RowCount[GrpA-1] := RowCount[GrpA-1] + 1.0; + ColCount[GrpB-1] := ColCount[GrpB-1] + 1.0; + MeanDep := MeanDep + X; + SSDep := SSDep + (X * X); + N := N + 1; + end; + + // Calculate results + for i := 0 to NoGrpsA-1 do + begin + SSF1 := SSF1 + ((RowSums[i] * RowSums[i]) / RowCount[i]); + RowsTotCnt := RowsTotCnt + RowCount[i]; + end; + for j := 0 to NoGrpsB-1 do + begin + SSF2 := SSF2 + ((ColSums[j] * ColSums[j]) / ColCount[j]); + ColsTotCnt := ColsTotCnt + ColCount[j]; + end; + for i := 0 to NoGrpsA-1 do + begin + for j := 0 to NoGrpsB-1 do + if counts[i,j] > 0 then + SSCells := SSCells + ((sums[i,j] * sums[i,j]) / counts[i,j]); + end; + if N > 0 then Constant := (MeanDep * MeanDep) / N else Constant := 0.0; + SSF1 := SSF1 - Constant; + SSF2 := SSF2 - Constant; + SSF1F2 := SSCells - SSF1 - SSF2 - Constant; + SSErr := SSDep - SSCells; + SSDep := SSDep - Constant; + + + if (SSF1F2 < 0) or (SSF1 < 0) or (SSF2 < 0) then + begin + ShowMessage('ERROR! A negative SS found. Unbalanced design? Ending analysis.'); + CompError := true; + exit; + end; + DFTot := N - 1; + DFF1 := NoGrpsA - 1; + DFF2 := NoGrpsB - 1; + DFF1F2 := DFF1 * DFF2; + DFErr := DFTot - DFF1 - DFF2 - DFF1F2; +// DFCells := N - (NoGrpsA * NoGrpsB); + MSF1 := SSF1 / DFF1; + MSF2 := SSF2 / DFF2; + MSF1F2 := SSF1F2 / DFF1F2; + MSErr := SSErr / DFErr; + MSDep := SSDep / DFTot; + OmegaF1 := (SSF1 - DFF1 * MSErr) / (SSDep + MSErr); + OmegaF2 := (SSF2 - DFF2 * MSErr) / (SSDep + MSErr); + OmegaF1F2 := (SSF1F2 - DFF1F2 * MSErr) / (SSDep + MSErr); + Omega := OmegaF1 + OmegaF2 + OmegaF1F2; + MeanDep := MeanDep / N; + // f tests for fixed effects + if (Fact1Grp.ItemIndex = 0) and (Fact2Grp.ItemIndex = 0) then + begin + FF1 := abs(MSF1 / MSErr); + FF2 := abs(MSF2 / MSErr); + FF1F2 := abs(MSF1F2 / MSErr); + ProbF1 := probf(FF1,DFF1,DFErr); + ProbF2 := probf(FF2,DFF2,DFErr); + ProbF1F2 := probf(FF1F2,DFF1F2,DFErr); + end; + // f tests if both factors are random + if (Fact1Grp.ItemIndex = 1) and (Fact2Grp.ItemIndex = 1) then + begin + FF1 := abs(MSF1 / MSF1F2); + FF2 := abs(MSF2 / MSF1F2); + FF1F2 := abs(MSF1F2 / MSErr); + ProbF1 := probf(FF1,DFF1,DFF1F2); + ProbF2 := probf(FF2,DFF2,DFF1F2); + ProbF3 := probf(FF1F2,DFF1F2,DFErr); + end; + // f test if factor A is random + if (Fact1Grp.ItemIndex = 1) and (Fact2Grp.ItemIndex = 0) then + begin + FF1 := abs(MSF1 / MSErr); + FF2 := abs(MSF2 / MSF1F2); + FF1F2 := abs(MSF1F2 / MSErr); + ProbF1 := probf(FF1,DFF1,DFErr); + ProbF2 := probf(FF2,DFF2,DFF1F2); + ProbF3 := probf(FF1F2,DFF1F2,DFErr); + end; + // f test if factor b is random + if (Fact1Grp.ItemIndex = 0) and (Fact2Grp.ItemIndex = 1) then + begin + FF1 := abs(MSF1 / MSF1F2); + FF2 := abs(MSF2 / MSErr); + FF1F2 := abs(MSF1F2 / MSErr); + ProbF1 := probf(FF1,DFF1,DFF1F2); + ProbF2 := probf(FF2,DFF2,DFErr); + ProbF3 := probf(FF1F2,DFF1F2,DFErr); + end; + if (ProbF1 > 1.0) then ProbF1 := 1.0; + if (ProbF2 > 1.0) then ProbF2 := 1.0; + if (ProbF1F2 > 1.0) then ProbF1F2 := 1.0; + + // Obtain omega squared (proportion of dependent variable explained) + if (OmegaF1 < 0.0) then OmegaF1 := 0.0; + if (OmegaF2 < 0.0) then OmegaF2 := 0.0; + if (OmegaF1F2 < 0.0) then OmegaF1F2 := 0.0; + //Omega = ( (SSF1 + SSF2 + SSF1F2) - (DFF1 + DFF2 + DFF1F2) * MSErr) / (SSDep + MSErr); + if (Omega < 0.0) then Omega := 0.0; +end; + +procedure TBlksAnovaFrm.TwoWayTable(Sender: TObject); +var + groupsize : integer; + MinVar, MaxVar, sumvars, sumDFrecip : double; + i, j : integer; + XBar, V, S, RowSS, ColSS : double; + sumfreqlogvar, c, bartlett, cochran, hartley, chiprob : double; + +begin + If CompError then exit; + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Two Way Analysis of Variance'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Variable analyzed: %s',[DepVar.Text]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Factor A (rows) variable: %s',[Factor1.Text]); + if Fact1Grp.ItemIndex = 0 then outline := outline + ' (Fixed Levels)' + else outline := outline + ' (Random Levels)'; + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Factor B (columns) variable: %s',[Factor2.Text]); + if Fact2Grp.ItemIndex = 0 then outline := outline + ' (Fixed Levels)' + else outline := outline + ' (Random Levels)'; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('SOURCE D.F. SS MS F PROB.> F Omega Squared'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Among Rows %4.0f %8.3f %8.3f %8.3f %6.3f %6.3f', + [DFF1,SSF1,MSF1,FF1,ProbF1,OmegaF1]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Among Columns %4.0f %8.3f %8.3f %8.3f %6.3f %6.3f', + [DFF2,SSF2,MSF2,FF2,ProbF2,OmegaF2]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Interaction %4.0f %8.3f %8.3f %8.3f %6.3f %6.3f', + [DFF1F2,SSF1F2,MSF1F2,FF1F2,ProbF1F2,OmegaF1F2]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Within Groups %4.0f %8.3f %8.3f', + [DFErr,SSErr,MSErr]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Total %4.0f %8.3f %8.3f', + [DFTot,SSDep,MSDep]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Omega squared for combined effects = %8.3f',[Omega]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + if (Fact1Grp.ItemIndex = 0) and (Fact2Grp.ItemIndex = 0) then + OutPutFrm.RichEdit.Lines.Add('Note: Denominator of F ratio is MSErr'); + if (Fact1Grp.ItemIndex = 1) and (Fact2Grp.ItemIndex = 1) then + OutPutFrm.RichEdit.Lines.Add('Note: Denominator of F ratio is MSAxB'); + if (Fact1Grp.ItemIndex = 0) and (Fact2Grp.ItemIndex = 1) then + begin + OutPutFrm.RichEdit.Lines.Add('Note: Denominator of F ratio for A is MSAxB'); + OutPutFrm.RichEdit.Lines.Add('and denominator for B and AxB is MSErr'); + end; + if (Fact1Grp.ItemIndex = 1) and (Fact2Grp.ItemIndex = 0) then + begin + OutPutFrm.RichEdit.Lines.Add('Note: Denominator of F ratio for B is MSAxB'); + OutPutFrm.RichEdit.Lines.Add('and denominator for A and AxB is MSErr'); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Descriptive Statistics'); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('GROUP Row Col. N MEAN VARIANCE STD.DEV.'); + groupsize := round(counts[0,0]); + equal_grp := true; + MaxVar := 0.0; + MinVar := 1e20; + sumvars := 0.0; + sumfreqlogvar := 0.0; + sumDFrecip := 0.0; + + // Display cell means, variances, standard deviations + V := 0.0; + XBar := 0.0; + S := 0.0; + for i := 0 to NoGrpsA-1 do + begin + for j := 0 to NoGrpsB-1 do + begin + if counts[i,j] > 1 then + begin + XBar := sums[i,j] / counts[i,j]; + V := vars[i,j] - ( (sums[i,j] * sums[i,j]) / counts[i,j]); + V := V / (counts[i,j] - 1.0); + S := sqrt(V); + sumvars := sumvars + V; + if V > MaxVar then MaxVar := V; + if V < MinVar then MinVar := V; + sumDFrecip := sumDFrecip + (1.0 / (counts[i,j] - 1.0)); + sumfreqlogvar := sumfreqlogvar + ((counts[i,j] - 1.0) * ln(V)); + if counts[i,j] <> groupsize then equal_grp := false; + end; + outline := format('Cell %3d %3d %3.0f %8.3f %8.3f %8.3f', + [minf1+i,minf2+j,counts[i,j],XBar,V,S]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + + //Display Row means, variances, standard deviations + for i := 0 to NoGrpsA-1 do + begin + XBar := RowSums[i] / RowCount[i]; + OrdMeansA[i] := XBar; + RowSS := 0.0; + for j := 0 to NoGrpsB-1 do RowSS := RowSS + vars[i,j]; + V := RowSS - (RowSums[i] * RowSums[i] / RowCount[i]); + V := V / (RowCount[i] - 1.0); + S := sqrt(V); + outline := format('Row %3d %3.0f %8.3f %8.3f %8.3f', + [minf1+i,RowCount[i],XBar,V,S]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + + //Display means, variances and standard deviations for columns + for j := 0 to NoGrpsB-1 do + begin + XBar := ColSums[j] / ColCount[j]; + OrdMeansB[j] := XBar; + ColSS := 0.0; + for i := 0 to NoGrpsA-1 do ColSS := ColSS + vars[i,j]; + if ColCount[j] > 0 then V := ColSS - (ColSums[j] * ColSums[j] / ColCount[j]); + if ColCount[j] > 1 then V := V / (ColCount[j] - 1.0); + if V > 0.0 then S := sqrt(V); + outline := format('Col %3d %3.0f %8.3f %8.3f %8.3f', + [minf2+j,ColCount[j],XBar,V,S]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + + outline := format('TOTAL %3d %8.3f %8.3f %8.3f', + [N,MeanDep,MSDep,sqrt(MSDep)]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); + c := 1.0 + (1.0 / (3.0 * NoGrpsA * NoGrpsB - 1.0)) * (sumDFrecip - (1.0 / DFErr)); + bartlett := (2.303 / c) * ((DFErr * ln(MSErr)) - sumfreqlogvar); + chiprob := 1.0 - chisquaredprob(bartlett,round(NoGrpsA * NoGrpsB - 1)); + cochran := maxvar / sumvars; + hartley := maxvar / minvar; + OutPutFrm.RichEdit.Lines.Add('TESTS FOR HOMOGENEITY OF VARIANCE'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + outline := format('Hartley Fmax test statistic = %10.2f with deg.s freedom: %d and %d.', + [hartley, (NoGrpsA*NoGrpsB),(groupsize-1) ]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Cochran C statistic = %10.2f with deg.s freedom: %d and %d.', + [cochran, (NoGrpsA*NoGrpsB), (groupsize - 1)]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Bartlett Chi-square statistic = %10.2f with %4d D.F. Prob. larger value = %6.3f', + [bartlett, (NoGrpsA*NoGrpsB - 1), chiprob]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); +end; + +procedure TBlksAnovaFrm.TwoWayPlot(Sender: TObject); +var + i, j : integer; + maxmean, XBar : double; + XValue : DblDyneVec; + title : string; + plottype : integer; + setstring : string[11]; + +begin + if CompError then exit; + SetLength(XValue,Nf1cells+Nf2cells); + plottype := 2; + if PlotMeans.Checked then plottype := 2; + if Plot2DLines.Checked then plottype := 5; + if Plot3DLines.Checked then plottype := 6; + + // do Factor A first + setstring := 'FACTOR A'; + GraphFrm.SetLabels[1] := setstring; + maxmean := 0.0; + SetLength(GraphFrm.Xpoints,1,NF1cells); + SetLength(GraphFrm.Ypoints,1,NF1cells); + for i := 1 to NF1cells do + begin + RowSums[i-1] := RowSums[i-1] / RowCount[i-1]; + GraphFrm.Ypoints[0,i-1] := RowSums[i-1]; + if RowSums[i-1] > maxmean then maxmean := RowSums[i-1]; + XValue[i-1] := minF1 + i - 1; + GraphFrm.Xpoints[0,i-1] := XValue[i-1]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := NF1cells; + GraphFrm.Heading := Factor1.Text; + title := Factor1.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + // do Factor B next + setstring := 'FACTOR B'; + GraphFrm.SetLabels[1] := setstring; + maxmean := 0.0; + SetLength(GraphFrm.Xpoints,1,NF2cells); + SetLength(GraphFrm.Ypoints,1,NF2cells); + for i := 1 to NF2cells do + begin + ColSums[i-1] := ColSums[i-1] / ColCount[i-1]; + GraphFrm.Ypoints[0,i-1] := ColSums[i-1]; + if ColSums[i-1] > maxmean then maxmean := ColSums[i-1]; + XValue[i-1] := minF1 + i - 1; + GraphFrm.Xpoints[0,i-1] := XValue[i-1]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := NF2cells; + GraphFrm.Heading := Factor2.Text; + title := Factor2.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + + // do Factor A x B Interaction next + maxmean := 0.0; + SetLength(GraphFrm.Ypoints,NF1cells,NF2cells); + SetLength(GraphFrm.Xpoints,1,NF2cells); + for i := 1 to NF1cells do + begin + setstring := Factor1.Text + ' ' + IntToStr(i); + GraphFrm.SetLabels[i] := setstring; + for j := 1 to NF2cells do + begin + XBar := sums[i-1,j-1] / counts[i-1,j-1]; + if XBar > maxmean then maxmean := XBar; + GraphFrm.Ypoints[i-1,j-1] := XBar; + end; + end; + for j := 1 to NF2cells do + begin + XValue[j-1] := minF2 + j - 1; + GraphFrm.Xpoints[0,j-1] := XValue[j-1]; + end; + + GraphFrm.nosets := NF1cells; + GraphFrm.nbars := NF2cells; + GraphFrm.Heading := 'Factor A x Factor B'; + title := Factor2.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + XValue := nil; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; +end; + +procedure TBlksAnovaFrm.Calc3Way(Sender: TObject); +var + i, j, k : integer; + grpA, grpB, grpC : integer; + Constant, RowsTotCnt, ColsTotCnt, SlcsTotCnt, SSCells : double; + p, n2 : double; + +begin + CompError := false; + // initialize matrix values + NoGrpsA := maxf1 - minf1 + 1; + NoGrpsB := maxf2 - minf2 + 1; + NoGrpsC := maxf3 - minf3 + 1; + for i := 0 to NoGrpsA-1 do + begin + RowSums[i] := 0.0; + RowCount[i] := 0.0; + for j := 0 to NoGrpsB-1 do + begin + for k := 0 to NoGrpsC-1 do + begin + wsum[i,j,k] := 0.0; + ncnt[i,j,k] := 0; + wx2[i,j,k] := 0.0; + end; + end; + end; + for i := 0 to NoGrpsB-1 do + begin + ColCount[i] := 0.0; + ColSums[i] := 0.0; + end; + for i := 0 to NoGrpsC-1 do + begin + SlcCount[i] := 0.0; + SlcSums[i] := 0.0; + end; + N := 0; + MeanDep := 0.0; + SSDep := 0.0; + RowsTotCnt := 0.0; + ColsTotCnt := 0.0; + SlcsTotCnt := 0.0; + SSF1 := 0.0; + SSF2 := 0.0; + SSF3 := 0.0; + SSF1F2 := 0.0; + SSF1F3 := 0.0; + SSF2F3 := 0.0; + SSF1F2F3 := 0.0; + SSCells := 0.0; + + // get working totals + for i := 1 to NoCases do + begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + grpA := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F1Col,i]))); + grpB := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F2Col,i]))); + grpC := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F3Col,i]))); + X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[DepVarCol,i])); + grpA := grpA - minf1 + 1; + grpB := grpB - minf2 + 1; + grpC := grpC - minf3 + 1; + ncnt[grpA-1,grpB-1,grpC-1] := ncnt[grpA-1,grpB-1,grpC-1] + 1; + wsum[grpA-1,grpB-1,grpC-1] := wsum[grpA-1,grpB-1,grpc-1] + X; + wx2[grpA-1,grpB-1,grpC-1] := wx2[grpA-1,grpB-1,grpC-1] + (X * X); + RowSums[GrpA-1] := RowSums[GrpA-1] + X; + ColSums[GrpB-1] := ColSums[GrpB-1] + X; + SlcSums[GrpC-1] := SlcSums[GrpC-1] + X; + RowCount[GrpA-1] := RowCount[GrpA-1] + 1.0; + ColCount[GrpB-1] := ColCount[GrpB-1] + 1.0; + SlcCount[GrpC-1] := SlcCount[GrpC-1] + 1.0; + MeanDep := MeanDep + X; + SSDep := SSDep + (X * X); + N := N + 1; + end; + + // Calculate results + Constant := (MeanDep * MeanDep) / N; + // get ss for rows + for i := 0 to NoGrpsA-1 do + begin + SSF1 := SSF1 + ((RowSums[i] * RowSums[i]) / RowCount[i]); + RowsTotCnt := RowsTotCnt + RowCount[i]; + end; + SSF1 := SSF1 - Constant; + + // get ss for columns + for j := 0 to NoGrpsB-1 do + begin + SSF2 := SSF2 + ((ColSums[j] * ColSums[j]) / ColCount[j]); + ColsTotCnt := ColsTotCnt + ColCount[j]; + end; + SSF2 := SSF2 - Constant; + + // get ss for slices + for k := 0 to NoGrpsC-1 do + begin + SSF3 := SSF3 + ((SlcSums[k] * SlcSums[k]) / SlcCount[k]); + SlcsTotCnt := SlcsTotCnt + SlcCount[k]; + end; + SSF3 := SSF3 - Constant; + + // get ss for row x col interaction + p := 0.0; + n2 := 0.0; + for i := 0 to NoGrpsA-1 do + begin + for j := 0 to NoGrpsB-1 do + begin + for k := 0 to NoGrpsC-1 do + begin + p := p + wsum[i,j,k]; + n2 := n2 + ncnt[i,j,k]; + end; + SSF1F2 := SSF1F2 + ((p * p) / n2); + p := 0.0; + n2 := 0.0; + end; + end; + SSF1F2 := SSF1F2 - SSF1 - SSF2 - Constant; + + // get ss for row x slice interaction + for i := 0 to NoGrpsA-1 do + begin + for k := 0 to NoGrpsC-1 do + begin + for j := 0 to NoGrpsB-1 do + begin + p := p + wsum[i,j,k]; + n2 := n2 + ncnt[i,j,k]; + end; + SSF1F3 := SSF1F3 + ((p * p) / n2); + p := 0.0; + n2 := 0.0; + end; + end; + SSF1F3 := SSF1F3 - SSF1 - SSF3 - Constant; + + // get ss for columns x slices interaction + for j := 0 to NoGrpsB-1 do + begin + for k := 0 to NoGrpsC-1 do + begin + for i := 0 to NoGrpsA-1 do + begin + p := p + wsum[i,j,k]; + n2 := n2 + ncnt[i,j,k]; + end; + SSF2F3 := SSF2F3 + ((p * p) / n2); + p := 0.0; + n2 := 0.0; + end; + end; + SSF2F3 := SSF2F3 - SSF2 - SSF3 - Constant; + + // get ss for cells + for i := 0 to NoGrpsA-1 do + for j := 0 to NoGrpsB-1 do + for k := 0 to NoGrpsC-1 do + SSCells := SSCells + ((wsum[i,j,k] * wsum[i,j,k]) / ncnt[i,j,k]); + + SSF1F2F3 := SSCells - SSF1 - SSF2 - SSF3 - SSF1F2 - SSF1F3 - SSF2F3 - Constant; + SSErr := SSDep - SSCells; + SSDep := SSDep - Constant; + + if (SSF1 < 0.0) or (SSF2 < 0.0) or (SSF3 < 0.0) or (SSF1F2 < 0.0) or + (SSF1F3 < 0.0) or (SSF2F3 < 0.0) or (SSF1F2F3 < 0.0) then + begin + ShowMessage('ERROR! A negative SS found. Unbalanced Design? Ending analysis.'); + CompError := true; + exit; + end; + DFTot := N - 1; + DFF1 := NoGrpsA - 1; + DFF2 := NoGrpsB - 1; + DFF3 := NoGrpsC - 1; + DFF1F2 := DFF1 * DFF2; + DFF1F3 := DFF1 * DFF3; + DFF2F3 := DFF2 * DFF3; + DFF1F2F3 := DFF1 * DFF2 * DFF3; + DFErr := DFTot - DFF1 - DFF2 - DFF3 - DFF1F2 - DFF1F3 - DFF2F3 - DFF1F2F3; +// DFCells := N - (NoGrpsA * NoGrpsB * NoGrpsC); + MSF1 := SSF1 / DFF1; + MSF2 := SSF2 / DFF2; + MSF3 := SSF3 / DFF3; + MSF1F2 := SSF1F2 / DFF1F2; + MSF1F3 := SSF1F3 / DFF1F3; + MSF2F3 := SSF2F3 / DFF2F3; + MSF1F2F3 := SSF1F2F3 / DFF1F2F3; + MSErr := SSErr / DFErr; + MSDep := SSDep / DFTot; + OmegaF1 := (SSF1 - DFF1 * MSErr) / (SSDep + MSErr); + OmegaF2 := (SSF2 - DFF2 * MSErr) / (SSDep + MSErr); + OmegaF3 := (SSF3 - DFF3 * MSErr) / (SSDep + MSErr); + OmegaF1F2 := (SSF1F2 - DFF1F2 * MSErr) / (SSDep + MSErr); + OmegaF1F3 := (SSF1F3 - DFF1F3 * MSErr) / (SSDep + MSErr); + OmegaF2F3 := (SSF2F3 - DFF2F3 * MSErr) / (SSDep + MSErr); + OmegaF1F2F3 := (SSF1F2F3 - DFF1F2F3 * MSErr) / (SSDep + MSErr); + Omega := OmegaF1 + OmegaF2 + OmegaF3 + OmegaF1F2 + OmegaF1F3 + + OmegaF2F3 + OmegaF1F2F3; + MeanDep := MeanDep / N; + + // f tests for fixed effects + if (Fact1Grp.ItemIndex = 0) and (Fact2Grp.ItemIndex = 0) and + (Fact3Grp.ItemIndex = 0) then + begin + FF1 := abs(MSF1 / MSErr); + FF2 := abs(MSF2 / MSErr); + FF3 := abs(MSF3 / MSErr); + FF1F2 := abs(MSF1F2 / MSErr); + FF1F3 := abs(MSF1F3 / MSErr); + FF2F3 := abs(MSF2F3 / MSErr); + FF1F2F3 := abs(MSF1F2F3 / MSErr); + ProbF1 := probf(FF1,DFF1,DFErr); + ProbF2 := probf(FF2,DFF2,DFErr); + ProbF3 := probf(FF3,DFF3,DFErr); + ProbF1F2 := probf(FF1F2,DFF1F2,DFErr); + ProbF1F3 := probf(FF1F3,DFF1F3,DFErr); + ProbF2F3 := probf(FF2F3,DFF2F3,DFErr); + ProbF1F2F3 := probf(FF1F2F3,DFF1F2F3,DFErr); + end; + + // f tests if all factors are random + for i := 1 to 14 do OKterms[i] := 1; // initialize as OK + if (Fact1Grp.ItemIndex = 1) and (Fact2Grp.ItemIndex = 1) and + (Fact3Grp.ItemIndex = 1) then + begin + if (MSF1F2 + MSF1F3 - MSF1F2F3) < 0.0 then OKTerms[1] := 0 else + FF1 := abs(MSF1 / (MSF1F2 + MSF1F3 - MSF1F2F3)); + if (MSF1F2 + MSF2F3 - MSF1F2F3) < 0.0 then OKTerms[2] := 0 else + FF2 := abs(MSF2 / (MSF1F2 + MSF2F3 - MSF1F2F3)); + if (MSF1F3 + MSF2F3 - MSF1F2F3) < 0.0 then OKTerms[3] := 0 else + FF3 := abs(MSF3 / (MSF1F3 + MSF2F3 - MSF1F2F3)); + FF1F2 := abs(MSF1F2 / MSF1F2F3); + FF1F3 := abs(MSF1F3 / MSF1F2F3); + FF2F3 := abs(MSF2F3 / MSF1F2F3); + FF1F2F3 := abs(MSF1F2F3 / MSErr); + ProbF1 := probf(FF1,DFF1,DFF1F2F3); + ProbF2 := probf(FF2,DFF2,DFF1F2F3); + ProbF3 := probf(FF3,DFF3,DFF1F2F3); + ProbF1F2 := probf(FF1F2,DFF1F2,DFF1F2F3); + probF1F3 := probf(FF1F3,DFF1F3,DFF1F2F3); + probF2F3 := probf(FF2F3,DFF2F3,DFF1F2F3); + probF1F2F3 := probf(FF1F2F3,DFF1F2F3,DFErr); + end; + + // f test if factor A is random, B and C Fixed + if (Fact1Grp.ItemIndex = 1) and (Fact2Grp.ItemIndex = 0) and + (Fact3Grp.ItemIndex = 0) then + begin + FF1 := abs(MSF1 / MSErr); + FF2 := abs(MSF2 / MSF1F2); + FF3 := abs(MSF3 / MSF1F3); + FF1F2 := abs(MSF1F2 / MSErr); + FF1F3 := abs(MSF1F3 / MSErr); + FF2F3 := abs(MSF2F3 / MSF1F2F3); + FF1F2F3 := abs(MSF1F2F3 / MSErr); + ProbF1 := probf(FF1,DFF1,DFErr); + ProbF2 := probf(FF2,DFF2,DFF1F2); + ProbF3 := probf(FF3,DFF3,DFF1F3); + ProbF1F2 := probf(FF1F2,DFF1F2,DFErr); + ProbF1F3 := probf(FF1F3,DFF1F3,DFErr); + ProbF2F3 := probf(FF2F3,DFF2F3,DFF1F2F3); + ProbF1F2F3 := probf(FF1F2F3,DFF1F2F3,DFErr); + end; + + // f test if factor b is random and A and C are Fixed + if (Fact1Grp.ItemIndex = 0) and (Fact2Grp.ItemIndex = 1) and + (Fact3Grp.ItemIndex = 0) then + begin + FF1 := abs(MSF1 / MSF1F2); + FF2 := abs(MSF2 / MSErr); + FF3 := abs(MSF3 / MSF2F3); + FF1F2 := abs(MSF1F2 / MSErr); + FF1F3 := abs(MSF1F3 / MSF1F2F3); + FF2F3 := abs(MSF2F3 / MSErr); + FF1F2F3 := abs(MSF1F2F3 / MSErr); + ProbF1 := probf(FF1,DFF1,DFF1F2); + ProbF2 := probf(FF2,DFF2,DFErr); + ProbF3 := probf(FF3,DFF3,DFF2F3); + ProbF1F2 := probf(FF1F2,DFF1F2,DFErr); + ProbF1F3 := probf(FF1F3,DFF1F3,DFF1F2F3); + ProbF2F3 := probf(FF2F3,DFF2F3,DFErr); + ProbF1F2F3 := probf(FF1F2F3,DFF1F2F3,DFErr); + end; + + // f test if factor c is random and A and B are Fixed + if (Fact1Grp.ItemIndex = 0) and (Fact2Grp.ItemIndex = 0) and + (Fact3Grp.ItemIndex = 1) then + begin + FF1 := abs(MSF1 / MSF1F3); + FF2 := abs(MSF2 / MSF2F3); + FF3 := abs(MSF3 / MSErr); + FF1F2 := abs(MSF1F2 / MSF1F2F3); + FF1F3 := abs(MSF1F3 / MSErr); + FF2F3 := abs(MSF2F3 / MSErr); + FF1F2F3 := abs(MSF1F2F3 / MSErr); + ProbF1 := probf(FF1,DFF1,DFF1F3); + ProbF2 := probf(FF2,DFF2,DFF2F3); + ProbF3 := probf(FF3,DFF3,DFErr); + ProbF1F2 := probf(FF1F2,DFF1F2,DFF1F2F3); + ProbF1F3 := probf(FF1F3,DFF1F3,DFErr); + ProbF2F3 := probf(FF2F3,DFF2F3,DFErr); + ProbF1F2F3 := probf(FF1F2F3,DFF1F2F3,DFErr); + end; + + // f tests if A is fixed, B and C are random + if (Fact1Grp.ItemIndex = 0) and (Fact2Grp.ItemIndex = 1) and + (Fact3Grp.ItemIndex = 1) then + begin + if (MSF1F3 + MSF1F2 - MSF1F2F3) < 0.0 then OKTerms[1] := 0 else + FF1 := abs(MSF1 / (MSF1F3 + MSF1F2 - MSF1F2F3)); + FF2 := abs(MSF2 / MSF2F3); + FF3 := abs(MSF3 / MSF2F3); + FF1F2 := abs(MSF1F2 / MSF1F2F3); + FF1F3 := abs(MSF1F3 / MSF1F2F3); + FF2F3 := abs(MSF2F3 / MSErr); + FF1F2F3 := abs(MSF1F2F3 / MSErr); + if (DFF1F3 + DFF1F2 - DFF1F2F3) <= 0 then OKTerms[8] := 0 else + ProbF1 := probf(FF1,DFF1,(DFF1F3 + DFF1F2 - DFF1F2F3)); + ProbF2 := probf(FF2,DFF2,DFF2F3); + ProbF3 := probf(FF3,DFF3,DFF2F3); + ProbF1F2 := probf(FF1F2,DFF1F2,DFF1F2F3); + ProbF1F3 := probf(FF1F3,DFF1F3,DFF1F2F3); + ProbF2F3 := probf(FF2F3,DFF2F3,DFErr); + ProbF1F2F3 := probf(FF1F2F3,DFF1F2F3,DFErr); + end; + // f tests if B is fixed, A and C are random + if (Fact1Grp.ItemIndex = 1) and (Fact2Grp.ItemIndex = 0) and + (Fact3Grp.ItemIndex = 1) then + begin + FF1 := abs(MSF2 / MSF1F3); + if (MSF2F3 + MSF1F2 - MSF1F2F3) <= 0.0 then OKTerms[2] := 0 else + FF2 := abs(MSF1 / (MSF2F3 + MSF1F2 - MSF1F2F3)); + FF3 := abs(MSF3 / MSF1F3); + FF1F2 := abs(MSF1F2 / MSF1F2F3); + FF1F3 := abs(MSF1F3 / MSErr); + FF2F3 := abs(MSF2F3 / MSF1F2F3); + FF1F2F3 := abs(MSF1F2F3 / MSErr); + ProbF1 := probf(FF2,DFF2,DFF1F3); + if (DFF2F3 + DFF1F2 - DFF1F2F3) <= 0 then OKTerms[9] := 0 else + ProbF2 := probf(FF1,DFF1,(DFF2F3 + DFF1F2 - DFF1F2F3)); + ProbF3 := probf(FF3,DFF3,DFF1F3); + ProbF1F2 := probf(FF1F2,DFF1F2,DFF1F2F3); + ProbF1F3 := probf(FF1F3,DFF1F3,DFErr); + ProbF2F3 := probf(FF2F3,DFF2F3,DFF1F2F3); + ProbF1F2F3 := probf(FF1F2F3,DFF1F2F3,DFErr); + end; + + // f tests if C is fixed A and B are random + if (Fact1Grp.ItemIndex = 1) and (Fact2Grp.ItemIndex = 1) and + (Fact3Grp.ItemIndex = 0) then + begin + FF1 := abs(MSF1 / MSF1F2); + FF2 := abs(MSF2 / MSF1F2); + if (MSF2F3 + MSF1F3 - MSF1F2F3) <= 0.0 then OKTerms[3] := 0 else + FF3 := abs(MSF3 / (MSF2F3 + MSF1F3 - MSF1F2F3)); + FF1F2 := abs(MSF2F3 / MSErr); + FF1F3 := abs(MSF1F2 / MSF1F2F3); + FF2F3 := abs(MSF1F3 / MSF1F2F3); + FF1F2F3 := abs(MSF1F2F3 / MSErr); + ProbF1 := probf(FF3,DFF3,DFF1F2); + ProbF2 := probf(FF2,DFF2,DFF1F2); + if (DFF2F3 + DFF1F3 - DFF1F2F3) <= 0 then OKTerms[10] := 0 else + ProbF3 := probf(FF1,DFF1,(DFF2F3 + DFF1F3 - DFF1F2F3)); + ProbF1F2 := probf(FF2F3,DFF2F3,DFErr); + ProbF1F3 := probf(FF1F2,DFF1F2,DFF1F2F3); + ProbF2F3 := probf(FF1F3,DFF1F3,DFF1F2F3); + ProbF1F2F3 := probf(FF1F2F3,DFF1F2F3,DFErr); + end; + if (ProbF1 > 1.0) then ProbF1 := 1.0; + if (ProbF2 > 1.0) then ProbF2 := 1.0; + if ProbF3 > 1.0 then ProbF3 := 1.0; + if (ProbF1F2 > 1.0) then ProbF1F2 := 1.0; + if ProbF1F3 > 1.0 then ProbF1F3 := 1.0; + if ProbF2F3 > 1.0 then ProbF2F3 := 1.0; + if ProbF1F2F3 > 1.0 then ProbF1F2F3 := 1.0; + + // Obtain omega squared (proportion of dependent variable explained) + if (OmegaF1 < 0.0) then OmegaF1 := 0.0; + if (OmegaF2 < 0.0) then OmegaF2 := 0.0; + if OmegaF3 < 0.0 then OmegaF3 := 0.0; + if (OmegaF1F2 < 0.0) then OmegaF1F2 := 0.0; + if OmegaF1F3 < 0.0 then OmegaF1F3 := 0.0; + if OmegaF2F3 < 0.0 then OmegaF2F3 := 0.0; + if OmegaF1F2F3 < 0.0 then OmegaF1F2F3 := 0.0; + if (Omega < 0.0) then Omega := 0.0; +end; + +procedure TBlksAnovaFrm.ThreeWayTable(Sender: TObject); +var + groupsize : integer; + MinVar, MaxVar, sumvars, sumDFrecip : double; + i, j, k : integer; + XBar, V, S, RowSS, ColSS, SlcSS : double; + sumfreqlogvar, c, bartlett, cochran, hartley, chiprob : double; + problem : boolean; + +begin + If CompError then exit; + OutPutFrm.RichEdit.Clear; + problem := false; + OutPutFrm.RichEdit.Lines.Add('Three Way Analysis of Variance'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Variable analyzed: %s',[DepVar.Text]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Factor A (rows) variable: %s',[Factor1.Text]); + if Fact1Grp.ItemIndex = 0 then outline := outline + ' (Fixed Levels)' + else outline := outline + ' (Random Levels)'; + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Factor B (columns) variable: %s',[Factor2.Text]); + if Fact2Grp.ItemIndex = 0 then outline := outline + ' (Fixed Levels)' + else outline := outline + ' (Random Levels)'; + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Factor C (slices) variable: %s',[Factor3.Text]); + if Fact3Grp.ItemIndex = 0 then outline := outline + ' (Fixed Levels)' + else outline := outline + ' (Random Levels)'; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('SOURCE D.F. SS MS F PROB.> F Omega Squared'); + OutPutFrm.RichEdit.Lines.Add(''); + if (OKTerms[1] = 1) and (OKTerms[8] = 1) then + begin + outline := format('Among Rows %4.0f %10.3f %10.3f %10.3f %6.3f %6.3f', + [DFF1,SSF1,MSF1,FF1,ProbF1,OmegaF1]); + OutPutFrm.RichEdit.Lines.Add(outline); + end + else begin + outline := format('Among Rows %4.0f %10.3f %10.3f --- error ---', + [DFF1, SSF1, MSF1 ]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if (OKTerms[2] = 1) and (OKTerms[9] = 1) then + begin + outline := format('Among Columns %4.0f %10.3f %10.3f %10.3f %6.3f %6.3f', + [DFF2,SSF2,MSF2,FF2,ProbF2,OmegaF2]); + OutPutFrm.RichEdit.Lines.Add(outline); + end + else begin + outline := format('Among Columns %4.0f %10.3f %10.3f --- error ---', + [DFF2,SSF2,MSF2]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if (OKTerms[3] = 1) and (OKTerms[10] = 1) then + begin + outline := format('Among Slices %4.0f %10.3f %10.3f %10.3f %6.3f %6.3f', + [DFF3,SSF3,MSF3,FF3,ProbF3,OmegaF3]); + OutPutFrm.RichEdit.Lines.Add(outline); + end + else begin + outline := format('Among Slices %4.0f %10.3f %10.3f --- error ---', + [DFF3,SSF3, MSF3]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := format('A x B Inter. %4.0f %10.3f %10.3f %10.3f %6.3f %6.3f', + [DFF1F2,SSF1F2,MSF1F2,FF1F2,ProbF1F2,OmegaF1F2]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('A x C Inter. %4.0f %10.3f %10.3f %10.3f %6.3f %6.3f', + [DFF1F3,SSF1F3,MSF1F3,FF1F3,ProbF1F3,OmegaF1F3]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('B x C Inter. %4.0f %10.3f %10.3f %10.3f %6.3f %6.3f', + [DFF2F3,SSF2F3,MSF2F3,FF2F3,ProbF2F3,OmegaF2F3]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('AxBxC Inter. %4.0f %10.3f %10.3f %10.3f %6.3f %6.3f', + [DFF1F2F3,SSF1F2F3,MSF1F2F3,FF1F2F3,ProbF1F2F3,OmegaF1F2F3]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Within Groups %4.0f %10.3f %10.3f', + [DFErr,SSErr,MSErr]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Total %4.0f %10.3f %10.3f', + [DFTot,SSDep,MSDep]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Omega squared for combined effects = %8.3f',[Omega]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + if (Fact1Grp.ItemIndex = 0) and (Fact2Grp.ItemIndex = 0) and + (Fact3Grp.ItemIndex = 0) then + OutPutFrm.RichEdit.Lines.Add('Note: MSErr denominator for all F ratios.'); + if (Fact1Grp.ItemIndex = 1) and (Fact2Grp.ItemIndex = 1) and + (Fact3Grp.ItemIndex = 1) then + begin + OutPutFrm.RichEdit.Lines.Add('Note: Error term for A is MSAxB + MSAxC - MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Error term for B is MSAxB + MSBxC - MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Error term for C is MSAxC + MSBxC - MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Error term for AxB, AxC and BxC is MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Error term for AxBxC is MSErr.'); + end; + if (Fact1Grp.ItemIndex = 1) and (Fact2Grp.ItemIndex = 0) and + (Fact3Grp.ItemIndex = 0) then + begin + OutPutFrm.RichEdit.Lines.Add('Note: Error term for A is MSErr'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for B is MSAxB'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for C is MSAxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxB is MSErr'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxC is MSErr'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for BxC is MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxBxC is MSErr'); + end; + if (Fact1Grp.ItemIndex = 0) and (Fact2Grp.ItemIndex = 1) and + (Fact3Grp.ItemIndex = 0) then + begin + OutPutFrm.RichEdit.Lines.Add('Note: Error term for A is MSAxB'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for B is MSErr'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for C is MSBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxB is MSErr'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxC is MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for BxC is MSErr'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxBxC is MSErr'); + end; + if (Fact1Grp.ItemIndex = 0) and (Fact2Grp.ItemIndex = 0) and + (Fact3Grp.ItemIndex = 1) then + begin + OutPutFrm.RichEdit.Lines.Add('Note: Error term for A is MSAxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for B is MSBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for C is MSErr'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxB is MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxC is MSErr'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for BxC is MSErr'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxBxC is MSErr'); + end; + if (Fact1Grp.ItemIndex = 0) and (Fact2Grp.ItemIndex = 1) and + (Fact3Grp.ItemIndex = 1) then + begin + OutPutFrm.RichEdit.Lines.Add('Note: Error term for A is MSAxC + MSAxB - MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for B is MSBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for C is MSBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxB is MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxC is MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for BxC is MSErr'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxBxC is MSErr'); + end; + if (Fact1Grp.ItemIndex = 1) and (Fact2Grp.ItemIndex = 0) and + (Fact3Grp.ItemIndex = 1) then + begin + OutPutFrm.RichEdit.Lines.Add('Note: Error term for A is MSAxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for B is MSBxC + MSAxB - MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for C is MSAxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxB is MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxC is MSErr'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for BxC is MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxBxC is MSErr'); + end; + if (Fact1Grp.ItemIndex = 1) and (Fact2Grp.ItemIndex = 1) and + (Fact3Grp.ItemIndex = 0) then + begin + OutPutFrm.RichEdit.Lines.Add('Note: Error term for A is MSAxB'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for B is MSAxB'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for C is MSBxC + MSAxC - MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxB is MSErr'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxC is MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for BxC is MSAxBxC'); + OutPutFrm.RichEdit.Lines.Add('Note: Error term for AxBxC is MSErr'); + end; + OutPutFrm.RichEdit.Lines.Add(''); + for i := 1 to 10 do if OKTerms[i] = 0 then problem := true; + if problem then + begin + OutPutFrm.RichEdit.Lines.Add('An error occurred due to either an estimate of MS being negative'); + OutPutFrm.RichEdit.Lines.Add('or the degrees of freedom being zero. This may occur in a design'); + OutPutFrm.RichEdit.Lines.Add('with random factors using the expected values for an exact F-test.'); + OutPutFrm.RichEdit.Lines.Add('Quasi-F statistics may be employed where this problem exists. See'); + OutPutFrm.RichEdit.Lines.Add('Winer, B.J., "Statistical Principles in Experimental Design, 1962'); + OutPutFrm.RichEdit.Lines.Add('Section 5.15, pages 199-202 and Glass, G.V. and Stanley, J.C.,'); + OutPutFrm.RichEdit.Lines.Add('1970, Section 18.10, pages 481-482.'); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Descriptive Statistics'); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('GROUP N MEAN VARIANCE STD.DEV.'); + groupsize := ncnt[1,1,1]; + equal_grp := true; + MaxVar := 0.0; + MinVar := 1e20; + sumvars := 0.0; + sumfreqlogvar := 0.0; + sumDFrecip := 0.0; + + // Display cell means, variances, standard deviations + for i := 0 to NoGrpsA-1 do + begin + for j := 0 to NoGrpsB-1 do + begin + for k := 0 to NoGrpsC-1 do + begin + XBar := wsum[i,j,k] / ncnt[i,j,k]; + V := wx2[i,j,k] - ( (wsum[i,j,k] * wsum[i,j,k]) / ncnt[i,j,k]); + V := V / (ncnt[i,j,k] - 1.0); + S := sqrt(V); + sumvars := sumvars + V; + if V > MaxVar then MaxVar := V; + if V < MinVar then MinVar := V; + sumDFrecip := sumDFrecip + (1.0 / (ncnt[i,j,k] - 1.0)); + sumfreqlogvar := sumfreqlogvar + ((ncnt[i,j,k] - 1.0) * ln(V)); + if ncnt[i,j,k] <> groupsize then equal_grp := false; + outline := format('Cell %3d %3d %3d %3d %8.3f %8.3f %8.3f', + [minf1+i,minf2+j,minf3+k,ncnt[i,j,k],XBar,V,S]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + end; + + //Display Row means, variances, standard deviations + for i := 0 to NoGrpsA-1 do + begin + XBar := RowSums[i] / RowCount[i]; + OrdMeansA[i] := XBar; + RowSS := 0.0; + for j := 0 to NoGrpsB-1 do + for k := 0 to NoGrpsC-1 do RowSS := RowSS + wx2[i,j,k]; + V := RowSS - (RowSums[i] * RowSums[i] / RowCount[i]); + V := V / (RowCount[i] - 1.0); + S := sqrt(V); + outline := format('Row %3d %3.0f %8.3f %8.3f %8.3f', + [minf1+i,RowCount[i],XBar,V,S]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + + //Display means, variances and standard deviations for columns + for j := 0 to NoGrpsB-1 do + begin + XBar := ColSums[j] / ColCount[j]; + OrdMeansB[j] := XBar; + ColSS := 0.0; + for i := 0 to NoGrpsA-1 do + for k := 0 to NoGrpsC-1 do ColSS := ColSS + wx2[i,j,k]; + V := ColSS - (ColSums[j] * ColSums[j] / ColCount[j]); + V := V / (ColCount[j] - 1.0); + S := sqrt(V); + outline := format('Col %3d %3.0f %8.3f %8.3f %8.3f', + [minf2+j,ColCount[j],XBar,V,S]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + + //Display means, variances and standard deviations for slices + for k := 0 to NoGrpsC-1 do + begin + XBar := SlcSums[k] / SlcCount[k]; + OrdMeansC[k] := XBar; + SlcSS := 0.0; + for i := 0 to NoGrpsA-1 do + for j := 0 to NoGrpsB-1 do SlcSS := SlcSS + wx2[i,j,k]; + V := SlcSS - (SlcSums[k] * SlcSums[k] / SlcCount[k]); + V := V / (SlcCount[k] - 1.0); + S := sqrt(V); + outline := format('Slice %3d %3.0f %8.3f %8.3f %8.3f', + [minf3+k,SlcCount[k],XBar,V,S]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + + outline := format('TOTAL %3d %8.3f %8.3f %8.3f', + [N,MeanDep,MSDep,sqrt(MSDep)]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); + + c := 1.0 + (1.0 / (3.0 * NoGrpsA * NoGrpsB * NoGrpsC - 1.0)) * (sumDFrecip - (1.0 / DFErr)); + bartlett := (2.303 / c) * ((DFErr * ln(MSErr)) - sumfreqlogvar); + chiprob := chisquaredprob(bartlett,round(NoGrpsA * NoGrpsB * NoGrpsC - 1)); + cochran := maxvar / sumvars; + hartley := maxvar / minvar; + OutPutFrm.RichEdit.Lines.Add('TESTS FOR HOMOGENEITY OF VARIANCE'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + outline := format('Hartley Fmax test statistic = %10.2f with deg.s freedom: %d and %d.', + [hartley, (NoGrpsA*NoGrpsB),(groupsize-1) ]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Cochran C statistic = %10.2f with deg.s freedom: %d and %d.', + [cochran, (NoGrpsA*NoGrpsB), (groupsize - 1)]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Bartlett Chi-square statistic = %10.2f with %4d D.F. Prob. larger = %6.3f', + [bartlett, (NoGrpsA*NoGrpsB - 1), 1.0 - chiprob]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); +end; + +procedure TBlksAnovaFrm.ThreeWayPlot(Sender: TObject); +var + i, j, k : integer; + maxmean, XBar : double; + XValue : DblDyneVec; + title : string; + plottype : integer; + setstring : string[11]; + +begin + if CompError then exit; + SetLength(XValue,totcells); + plottype := 2; + if PlotMeans.Checked then plottype := 2; + if Plot2DLines.Checked then plottype := 5; + if Plot3DLines.Checked then plottype := 6; + + // do Factor A first + setstring := 'FACTOR A'; + GraphFrm.SetLabels[1] := setstring; + maxmean := 0.0; + SetLength(GraphFrm.Xpoints,1,NF1cells); + SetLength(GraphFrm.Ypoints,1,NF1cells); + for i := 0 to NF1cells-1 do + begin + RowSums[i] := RowSums[i] / RowCount[i]; + GraphFrm.Ypoints[0,i] := RowSums[i]; + if RowSums[i] > maxmean then maxmean := RowSums[i]; + XValue[i] := minF1 + i; + GraphFrm.Xpoints[0,i] := XValue[i]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := NF1cells; + GraphFrm.Heading := Factor1.Text; + title := Factor1.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + + // do Factor B next + setstring := 'FACTOR B'; + GraphFrm.SetLabels[1] := setstring; + maxmean := 0.0; + SetLength(GraphFrm.Xpoints,1,NF2cells); + SetLength(GraphFrm.Ypoints,1,NF2cells); + for i := 0 to NF2cells-1 do + begin + ColSums[i] := ColSums[i] / ColCount[i]; + GraphFrm.Ypoints[0,i] := ColSums[i]; + if ColSums[i] > maxmean then maxmean := ColSums[i]; + XValue[i] := minF2 + i; + GraphFrm.Xpoints[0,i] := XValue[i]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := NF2cells; + GraphFrm.Heading := Factor2.Text; + title := Factor2.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + + // do Factor C next + setstring := 'FACTOR C'; + GraphFrm.SetLabels[1] := setstring; + maxmean := 0.0; + SetLength(GraphFrm.Xpoints,1,NF3cells); + SetLength(GraphFrm.Ypoints,1,NF3cells); + for i := 0 to NF3cells-1 do + begin + SlcSums[i] := SlcSums[i] / SlcCount[i]; + GraphFrm.Ypoints[0,i] := SlcSums[i]; + if SlcSums[i] > maxmean then maxmean := SlcSums[i]; + XValue[i] := minF3 + i; + GraphFrm.Xpoints[0,i] := XValue[i]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := NF3cells; + GraphFrm.Heading := Factor3.Text; + title := Factor2.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + + // do Factor A x B Interaction within each slice next + SetLength(GraphFrm.Ypoints,NF1cells,NF2cells); + SetLength(GraphFrm.Xpoints,1,NF2cells); + for k := 1 to NF3cells do + begin + maxmean := 0.0; + for i := 0 to NF1cells-1 do + begin + setstring := Factor1.Text + ' ' + IntToStr(i+1); + GraphFrm.SetLabels[i+1] := setstring; + for j := 0 to NF2cells-1 do + begin + XBar := wsum[i,j,k] / ncnt[i,j,k]; + if XBar > maxmean then maxmean := XBar; + GraphFrm.Ypoints[i,j] := XBar; + end; + end; + for j := 0 to NF2cells-1 do + begin + XValue[j] := minF2 + j ; + GraphFrm.Xpoints[0,j] := XValue[j]; + end; + + GraphFrm.nosets := NF1cells; + GraphFrm.nbars := NF2cells; + GraphFrm.Heading := 'Factor A x Factor B Within Slice' + IntToStr(k); + title := Factor2.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + + // do Factor A x C Interaction within each Column next + SetLength(GraphFrm.Ypoints,NF1cells,NF3cells); + SetLength(GraphFrm.Xpoints,1,NF3cells); + for j := 0 to NF2cells-1 do + begin + maxmean := 0.0; + for i := 0 to NF1cells-1 do + begin + setstring := Factor1.Text + ' ' + IntToStr(i+1); + GraphFrm.SetLabels[i+1] := setstring; + for k := 0 to NF3cells-1 do + begin + XBar := wsum[i,j,k] / ncnt[i,j,k]; + if XBar > maxmean then maxmean := XBar; + GraphFrm.Ypoints[i,k] := XBar; + end; + end; + for k := 0 to NF3cells-1 do + begin + XValue[k] := minF3 + k; + GraphFrm.Xpoints[0,k] := XValue[k]; + end; + + GraphFrm.nosets := NF1cells; + GraphFrm.nbars := NF3cells; + GraphFrm.Heading := 'Factor A x Factor C Within Column ' + IntToStr(j+1); + title := Factor3.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + + // do Factor B x C Interaction within each row next + SetLength(GraphFrm.Ypoints,NF2cells,NF3cells); + SetLength(GraphFrm.Xpoints,1,NF3cells); + for i := 0 to NF1cells-1 do + begin + maxmean := 0.0; + for j := 0 to NF2cells-1 do + begin + setstring := Factor2.Text + ' ' + IntToStr(j+1); + GraphFrm.SetLabels[j+1] := setstring; + for k := 0 to NF3cells-1 do + begin + XBar := wsum[i,j,k] / ncnt[i,j,k]; + if XBar > maxmean then maxmean := XBar; + GraphFrm.Ypoints[j,k] := XBar; + end; + end; + for j := 0 to NF2cells-1 do + begin + XValue[j] := minF2 + j; + GraphFrm.Xpoints[0,j] := XValue[j]; + end; + + GraphFrm.nosets := NF2cells; + GraphFrm.nbars := NF3cells; + GraphFrm.Heading := 'Factor B x Factor C Within Row ' + IntToStr(i+1); + title := Factor3.Text + ' Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; // next row + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + XValue := nil; +end; +//------------------------------------------------------------------- +procedure TBlksAnovaFrm.TwoWayContrasts(Sender: TObject); +var + i, j : integer; + value : double; + variances : DblDyneVec; + RowSS, ColSS : double; + +begin + If CompError then exit; + SetLength(variances,totcells); + // Do row comparisons + if (NF1cells > 2) then + if ProbF1 < allAlpha then + if Fact2Grp.ItemIndex = 0 then + begin + for i := 0 to NoGrpsA-1 do + begin + RowSS := 0.0; + for j := 0 to NoGrpsB-1 do RowSS := RowSS + vars[i,j]; + variances[i] := RowSS - (RowSums[i] * RowSums[i] / RowCount[i]); + variances[i] := variances[i] / (RowCount[i] - 1.0); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG ROWS'); + // get smallest group size + value := 1e20; + for i := 0 to NF1cells-1 do if RowCount[i] < value then value := RowCount[i]; + if Scheffe.Checked then + SCHEFFETEST(MSErr,RowSums,RowCount,minf1,maxf1,N); + if (TukeyHSD.Checked) and (equal_grp) then + Tukey(MSErr,DFErr,value,RowSums,RowCount,minf1,maxf1); + if (TukeyB.Checked) and (equal_grp) then + TUKEYBTEST(MSErr,DFErr,RowSums,RowCount,minf1,maxf1,value); + if (TukeyKramer.Checked) and (equal_grp) then + TUKEY_KRAMER(MSErr,DFErr,value,RowSums,RowCount,minf1,maxf1); + if (NewmanKeuls.Checked) and (equal_grp) then + Newman_Keuls(MSErr,DFErr,value,RowSums,RowCount,minf1,maxf1); + if Bonferoni.Checked then + Bonferroni(RowSums,RowCount,variances,minf1,maxf1); + if OrthoContrasts.Checked then + CONTRASTS(MSErr,DFErr,RowSums,RowCount,minf1,maxf1,AllAlpha); + end; + // Do column comparisons + if (NF2cells > 2) and (ProbF2 < allAlpha) and (Fact2Grp.ItemIndex = 0) then + begin + for j := 0 to NoGrpsB-1 do + begin + ColSS := 0.0; + for i := 0 to NoGrpsA-1 do ColSS := ColSS + vars[i,j]; + variances[j] := ColSS - (ColSums[j] * ColSums[j] / ColCount[j]); + variances[j] := variances[j] / (ColCount[j] - 1.0); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG COLUMNS'); + value := 1e20; + for i := 0 to NF2cells-1 do if ColCount[i] < value then value := ColCount[i]; + if Scheffe.Checked then + SCHEFFETEST(MSErr,ColSums,ColCount,minf2,maxf2,N); + if (TukeyHSD.Checked) and (equal_grp) then + Tukey(MSErr,DFErr,value,ColSums,ColCount,minf2,maxf2); + if (TukeyB.Checked) and (equal_grp) then + TUKEYBTEST(MSErr,DFErr,ColSums,ColCount,minf2,maxf2,value); + if (TukeyKramer.Checked) and (equal_grp) then + TUKEY_KRAMER(MSErr,DFErr,value,ColSums,ColCount,minf2,maxf2); + if (NewmanKeuls.Checked) and (equal_grp) then + Newman_Keuls(MSErr,DFErr,value,ColSums,ColCount,minf2,maxf2); + if Bonferoni.Checked then + Bonferroni(ColSums,ColCount,variances,minf2,maxf2); + if OrthoContrasts.Checked then + CONTRASTS(MSErr,DFErr,ColSums,ColCount,minf2,maxf2,AllAlpha); + end; + // do simple effects for columns within each row + if (ProbF3 < allAlpha) and + (Fact1Grp.ItemIndex = 0) and + (Fact2Grp.ItemIndex = 0) then + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG COLUMNS WITHIN EACH ROW'); + for i := 0 to NF1cells-1 do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('ROW %d COMPARISONS',[i+1]); + OutPutFrm.RichEdit.Lines.Add(outline); + // move cell sums and counts to cellsums and cellcnts + for j := 0 to NF2cells-1 do + begin + cellsums[j] := sums[i,j]; + cellcnts[j] := counts[i,j]; + cellvars[j] := vars[i,j]; + end; + value := 1e20; + for j := 0 to NF2cells-1 do if cellcnts[j] < value then value := cellcnts[j]; + if Scheffe.Checked then + SCHEFFETEST(MSErr,cellsums,cellcnts,minf2,maxf2,N); + if (TukeyHSD.Checked) and (equal_grp) then + Tukey(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); + if (TukeyB.Checked) and (equal_grp) then + TUKEYBTEST(MSErr,DFErr,cellsums,cellcnts,minf2,maxf2,value); + if (TukeyKramer.Checked) and (equal_grp) then + TUKEY_KRAMER(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); + if (NewmanKeuls.Checked) and (equal_grp) then + Newman_Keuls(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); + if Bonferoni.Checked then + Bonferroni(cellsums,cellcnts,cellvars,minf2,maxf2); + if OrthoContrasts.Checked then + CONTRASTS(MSErr,DFErr,cellsums,cellcnts,minf2,maxf2,0.05); + end; + end; + // do simple effects for rows within each column + if (ProbF3 < allAlpha) and (Fact1Grp.ItemIndex = 0) and (Fact2Grp.ItemIndex = 0) then + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG ROWS WITHIN EACH COLUMN'); + for j := 0 to NF2cells-1 do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('COLUMN %d COMPARISONS', [j+1]); + OutPutFrm.RichEdit.Lines.Add(outline); + // move cell sums and counts to cellsums and cellcnts + for i := 0 to NF1cells-1 do + begin + cellsums[i] := sums[i,j]; + cellcnts[i] := counts[i,j]; + cellvars[i] := vars[i,j]; + end; + value := 1e20; + for i := 0 to NF1cells-1 do if cellcnts[j] < value then value := cellcnts[j]; + if Scheffe.Checked then + SCHEFFETEST(MSErr,cellsums,cellcnts,minf1,maxf1,N); + if (TukeyHSD.Checked) and (equal_grp) then + Tukey(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); + if (TukeyB.Checked) and (equal_grp) then + TUKEYBTEST(MSErr,DFErr,cellsums,cellcnts,minf1,maxf1,value); + if (TukeyKramer.Checked) and (equal_grp) then + TUKEY_KRAMER(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); + if (NewmanKeuls.Checked) and (equal_grp) then + Newman_Keuls(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); + if Bonferoni.Checked then + Bonferroni(cellsums,cellcnts,cellvars,minf1,maxf1); + if OrthoContrasts.Checked then + CONTRASTS(MSErr,DFErr,cellsums,cellcnts,minf1,maxf1,0.05); + end; + end; + variances := nil; +end; + +procedure TBlksAnovaFrm.ThreeWayContrasts(Sender: TObject); +var + i, j, k : integer; + value : double; + variances : DblDyneVec; + RowSS, ColSS, SlcSS : double; + +begin + if CompError then exit; + if (Scheffe.Checked = false) and (TukeyHSD.Checked = false) and + (TukeyB.Checked = false) and (TukeyKramer.Checked = false) and + (NewmanKeuls.Checked = false) and (Bonferoni.Checked = false) and + (OrthoContrasts.Checked = false) then exit; + SetLength(variances,totcells); + // Do row comparisons + if (NF1cells > 2) and + (ProbF1 < allAlpha) then + begin + for i := 0 to NoGrpsA-1 do + begin + RowSS := 0.0; + for j := 0 to NoGrpsB-1 do + for k := 0 to NoGrpsC-1 do RowSS := RowSS + wx2[i,j,k]; + variances[i] := RowSS - (RowSums[i] * RowSums[i] / RowCount[i]); + variances[i] := variances[i] / (RowCount[i] - 1.0); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG ROWS'); + // get smallest group size + value := 1e20; + for i := 0 to NF1cells-1 do if RowCount[i] < value then value := RowCount[i]; + if Scheffe.Checked then + SCHEFFETEST(MSErr,RowSums,RowCount,minf1,maxf1,N); + if (TukeyHSD.Checked) and (equal_grp) then + Tukey(MSErr,DFErr,value,RowSums,RowCount,minf1,maxf1); + if (TukeyB.Checked) and (equal_grp) then + TUKEYBTEST(MSErr,DFErr,RowSums,RowCount,minf1,maxf1,value); + if (TukeyKramer.Checked) and (equal_grp) then + TUKEY_KRAMER(MSErr,DFErr,value,RowSums,RowCount,minf1,maxf1); + if (NewmanKeuls.Checked) and (equal_grp) then + Newman_Keuls(MSErr,DFErr,value,RowSums,RowCount,minf1,maxf1); + if Bonferoni.Checked then + Bonferroni(RowSums,RowCount,variances,minf1,maxf1); + if OrthoContrasts.Checked then + CONTRASTS(MSErr,DFErr,RowSums,RowCount,minf1,maxf1,AllAlpha); + end; + + // Do column comparisons + if (NF2cells > 2) and (ProbF2 < allAlpha) then + begin + for j := 0 to NoGrpsB-1 do + begin + ColSS := 0.0; + for i := 0 to NoGrpsA-1 do + for k := 0 to NoGrpsC-1 do ColSS := ColSS + wx2[i,j,k]; + variances[j] := ColSS - (ColSums[j] * ColSums[j] / ColCount[j]); + variances[j] := variances[j] / (ColCount[j] - 1.0); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG COLUMNS'); + value := 1e20; + for i := 0 to NF2cells-1 do if ColCount[i] < value then value := ColCount[i]; + if Scheffe.Checked then + SCHEFFETEST(MSErr,ColSums,ColCount,minf2,maxf2,N); + if (TukeyHSD.Checked) and (equal_grp) then + Tukey(MSErr,DFErr,value,ColSums,ColCount,minf2,maxf2); + if (TukeyB.Checked) and (equal_grp) then + TUKEYBTEST(MSErr,DFErr,ColSums,ColCount,minf2,maxf2,value); + if (TukeyKramer.Checked) and (equal_grp) then + TUKEY_KRAMER(MSErr,DFErr,value,ColSums,ColCount,minf2,maxf2); + if (NewmanKeuls.Checked) and (equal_grp) then + Newman_Keuls(MSErr,DFErr,value,ColSums,ColCount,minf2,maxf2); + if Bonferoni.Checked then + Bonferroni(ColSums,ColCount,variances,minf2,maxf2); + if OrthoContrasts.Checked then + CONTRASTS(MSErr,DFErr,ColSums,ColCount,minf2,maxf2,AllAlpha); + end; + + // Do slice comparisons + if (NF3cells > 2) and (ProbF3 < allAlpha) then + begin + for k := 0 to NoGrpsC-1 do + begin + SlcSS := 0.0; + for i := 0 to NoGrpsA-1 do + for j := 0 to NoGrpsB-1 do SlcSS := SlcSS + wx2[i,j,k]; + variances[k] := SlcSS - (SlcSums[k] * SlcSums[k] / SlcCount[k]); + variances[k] := variances[k] / (SlcCount[k] - 1.0); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG SLICES'); + value := 1e20; + for i := 0 to NF3cells-1 do if SlcCount[i] < value then value := SlcCount[i]; + if Scheffe.Checked then + SCHEFFETEST(MSErr,SlcSums,SlcCount,minf3,maxf3,N); + if (TukeyHSD.Checked) and (equal_grp) then + Tukey(MSErr,DFErr,value,SlcSums,SlcCount,minf3,maxf3); + if (TukeyB.Checked) and (equal_grp) then + TUKEYBTEST(MSErr,DFErr,SlcSums,SlcCount,minf3,maxf3,value); + if (TukeyKramer.Checked) and (equal_grp) then + TUKEY_KRAMER(MSErr,DFErr,value,SlcSums,SlcCount,minf3,maxf3); + if (NewmanKeuls.Checked) and (equal_grp) then + Newman_Keuls(MSErr,DFErr,value,SlcSums,SlcCount,minf3,maxf3); + if Bonferoni.Checked then + Bonferroni(SlcSums,SlcCount,variances,minf3,maxf3); + if OrthoContrasts.Checked then + CONTRASTS(MSErr,DFErr,SlcSums,SlcCount,minf3,maxf3,AllAlpha); + end; + + // do simple effects for columns within each row + if (ProbF1f2 < allAlpha) then + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG COLUMNS WITHIN EACH ROW'); + for i := 0 to NF1cells-1 do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('ROW %d COMPARISONS',[i+1]); + OutPutFrm.RichEdit.Lines.Add(outline); + // move cell sums and counts to cellsums and cellcnts + for j := 0 to NF2cells-1 do + begin + for k := 0 to NF3cells-1 do + begin + cellsums[j] := wsum[i,j,k]; + cellcnts[j] := ncnt[i,j,k]; + cellvars[j] := wx2[i,j,k]; + end; + end; + value := 1e20; + for j := 0 to NF2cells-1 do if cellcnts[j] < value then value := cellcnts[j]; + if Scheffe.Checked then + SCHEFFETEST(MSErr,cellsums,cellcnts,minf2,maxf2,N); + if (TukeyHSD.Checked) and (equal_grp) then + Tukey(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); + if (TukeyB.Checked) and (equal_grp) then + TUKEYBTEST(MSErr,DFErr,cellsums,cellcnts,minf2,maxf2,value); + if (TukeyKramer.Checked) and (equal_grp) then + TUKEY_KRAMER(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); + if (NewmanKeuls.Checked) and (equal_grp) then + Newman_Keuls(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); + if Bonferoni.Checked then + Bonferroni(cellsums,cellcnts,cellvars,minf2,maxf2); + if OrthoContrasts.Checked then + CONTRASTS(MSErr,DFErr,cellsums,cellcnts,minf2,maxf2,0.05); + end; + end; + + // do simple effects for rows within each column + if (ProbF1f2 < allAlpha) then + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG ROWS WITHIN EACH COLUMN'); + for j := 0 to NF2cells-1 do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('COLUMN %d COMPARISONS', [j+1]); + OutPutFrm.RichEdit.Lines.Add(outline); + // move cell sums and counts to cellsums and cellcnts + for i := 0 to NF1cells-1 do + begin + for k := 0 to NF3cells-1 do + begin + cellsums[i] := wsum[i,j,k]; + cellcnts[i] := ncnt[i,j,k]; + cellvars[i] := wx2[i,j,k]; + end; + end; + value := 1e20; + for i := 0 to NF1cells-1 do if cellcnts[j] < value then value := cellcnts[j]; + if Scheffe.Checked then + SCHEFFETEST(MSErr,cellsums,cellcnts,minf1,maxf1,N); + if (TukeyHSD.Checked) and (equal_grp) then + Tukey(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); + if (TukeyB.Checked) and (equal_grp) then + TUKEYBTEST(MSErr,DFErr,cellsums,cellcnts,minf1,maxf1,value); + if (TukeyKramer.Checked) and (equal_grp) then + TUKEY_KRAMER(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); + if (NewmanKeuls.Checked) and (equal_grp) then + Newman_Keuls(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); + if Bonferoni.Checked then + Bonferroni(cellsums,cellcnts,cellvars,minf1,maxf1); + if OrthoContrasts.Checked then + CONTRASTS(MSErr,DFErr,cellsums,cellcnts,minf1,maxf1,0.05); + end; + end; + + // do simple effects for columns within each slice + if (ProbF2F3 < allAlpha) then + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG COLUMNS WITHIN EACH SLICE'); + for k := 0 to NF3cells-1 do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('SLICE %d COMPARISONS',[k+1]); + OutPutFrm.RichEdit.Lines.Add(outline); + // move cell sums and counts to cellsums and cellcnts + for j := 0 to NF2cells-1 do + begin + for i := 0 to NF1cells-1 do + begin + cellsums[j] := wsum[i,j,k]; + cellcnts[j] := ncnt[i,j,k]; + cellvars[j] := wx2[i,j,k]; + end; + end; + value := 1e20; + for j := 1 to NF2cells do if cellcnts[j] < value then value := cellcnts[j]; + if Scheffe.Checked then + SCHEFFETEST(MSErr,cellsums,cellcnts,minf2,maxf2,N); + if (TukeyHSD.Checked) and (equal_grp) then + Tukey(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); + if (TukeyB.Checked) and (equal_grp) then + TUKEYBTEST(MSErr,DFErr,cellsums,cellcnts,minf2,maxf2,value); + if (TukeyKramer.Checked) and (equal_grp) then + TUKEY_KRAMER(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); + if (NewmanKeuls.Checked) and (equal_grp) then + Newman_Keuls(MSErr,DFErr,value,cellsums,cellcnts,minf2,maxf2); + if Bonferoni.Checked then + Bonferroni(cellsums,cellcnts,cellvars,minf2,maxf2); + if OrthoContrasts.Checked then + CONTRASTS(MSErr,DFErr,cellsums,cellcnts,minf2,maxf2,0.05); + end; + end; + + // do simple effects for rows within each slice + if (ProbF1F3 < allAlpha) then + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('COMPARISONS AMONG ROWS WITHIN EACH SLICE'); + for k := 0 to NF3cells-1 do + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('SLICE %d COMPARISONS',[k+1]); + OutPutFrm.RichEdit.Lines.Add(outline); + // move cell sums and counts to cellsums and cellcnts + for i := 0 to NF1cells-1 do + begin + for j := 0 to NF2cells-1 do + begin + cellsums[j] := wsum[i,j,k]; + cellcnts[j] := ncnt[i,j,k]; + cellvars[j] := wx2[i,j,k]; + end; + end; + value := 1e20; + for i := 0 to NF1cells-1 do if cellcnts[i] < value then value := cellcnts[i]; + if Scheffe.Checked then + SCHEFFETEST(MSErr,cellsums,cellcnts,minf1,maxf1,N); + if (TukeyHSD.Checked) and (equal_grp) then + Tukey(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); + if (TukeyB.Checked) and (equal_grp) then + TUKEYBTEST(MSErr,DFErr,cellsums,cellcnts,minf1,maxf1,value); + if (TukeyKramer.Checked) and (equal_grp) then + TUKEY_KRAMER(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); + if (NewmanKeuls.Checked) and (equal_grp) then + Newman_Keuls(MSErr,DFErr,value,cellsums,cellcnts,minf1,maxf1); + if Bonferoni.Checked then + Bonferroni(cellsums,cellcnts,cellvars,minf1,maxf1); + if OrthoContrasts.Checked then + CONTRASTS(MSErr,DFErr,cellsums,cellcnts,minf1,maxf1,0.05); + end; + end; + variances := nil +end; +//------------------------------------------------------------------- +procedure TBlksAnovaFrm.BrownForsytheOneWay(Sender: TObject); +Var i : integer; + c1 : array[1..50] of double; + cellmeans : array[1..50] of double; + sumc1 : double; + fdegfree : double; + Fnumerator, Fdenominator, NewF : double; + +begin + for i := 1 to 50 do + begin + c1[i] := 0.0; + cellmeans[i] := 0.0; + end; + for i := 1 to NoCases do + begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + intvalue := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F1Col,i]))); + X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[DepVarCol,i])); + intvalue := intvalue - minf1 + 1; + cellcnts[intvalue-1] := 0.0; + cellsums[intvalue-1] := 0.0; + cellvars[intvalue-1] := 0.0; + end; + MeanDep := 0.0; + SSDep := 0.0; + SSF1 := 0.0; + MSErr := 0.0; + N := 0; + for i := 1 to NoCases do + begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + intvalue := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F1Col,i]))); + X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[DepVarCol,i])); + intvalue := intvalue - minf1 + 1; + cellcnts[intvalue-1] := cellcnts[intvalue-1] + 1; + cellsums[intvalue-1] := cellsums[intvalue-1] + X; + cellvars[intvalue-1] := cellvars[intvalue-1] + (X * X); + MeanDep := MeanDep + X; + SSDep := SSDep + (X * X); + N := N + 1; + end; + DFF1 := 0; + for i := 0 to Nf1cells-1 do + begin + if cellcnts[i] > 0 then + begin + cellvars[i] := cellvars[i] - (cellsums[i] * cellsums[i] /cellcnts[i]); + cellvars[i] := cellvars[i] / (cellcnts[i] - 1.0); + SSF1 := SSF1 + (sqr(cellsums[i]) / cellcnts[i]); + DFF1 := DFF1 + 1; + end; + end; + SSF1 := SSF1 - (sqr(MeanDep) / N); + SSDep := SSDep - (sqr(MeanDep) / N); + SSErr := SSDep - SSF1; + DFTot := N - 1; + DFF1 := DFF1 - 1; + DFErr := DFTot - DFF1; + MSF1 := SSF1 / DFF1; + MSErr := SSErr / DFErr; + MSDep := SSDep / DFTot; + Omega := (SSF1 - DFF1 * MSErr) / (SSDep + MSErr); + F := MSF1 / MSErr; + ProbF1 := probf(F,DFF1,DFErr); + MeanDep := MeanDep / N; + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('BROWN-FORSYTHE ONE WAY ANALYSIS OF VARIANCE RESULTS'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Dependent variable is: %s, Independent variable is: %s', + [DepVar.Text,Factor1.Text]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Traditional One-Way ANOVA Results'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add('SOURCE D.F. SS MS F PROB.>F OMEGA SQR.'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + outline := format('BETWEEN %4.0f%10.2f%10.2f%10.2f%10.2f%10.2f', + [DFF1,SSF1,MSF1,F,ProbF1,Omega]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('WITHIN %4.0f%10.2f%10.2f',[DFErr,SSErr,MSErr]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('TOTAL %4.0f%10.2f',[DFTot,SSDep]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + + sumc1 := 0.0; + MSErr := 0.0; + for i := 0 to Nf1cells-1 do + begin +// MSErr := MSErr + (((1.0 - cellcnts[i] / N) * cellvars[i])); + c1[i+1] := (1.0 - (cellcnts[i] / N)) * cellvars[i]; + sumc1 := sumc1 + c1[i+1]; + end; +// MSErr := MSErr / DFF1; + for i := 1 to Nf1cells do + begin + c1[i] := c1[i] / sumc1; + end; + fdegfree := 0.0; + for i := 1 to Nf1cells do fdegfree := fdegfree + ((c1[i] * c1[i]) / (cellcnts[i-1]-1.0)); + fdegfree := round(1.0 / fdegfree); + + Fnumerator := 0.0; + Fdenominator := 0.0; + for i := 1 to Nf1cells do + begin + cellmeans[i] := cellsums[i-1] / cellcnts[i-1]; + Fnumerator := Fnumerator + (cellcnts[i-1] * (sqr(cellmeans[i] - MeanDep))); + Fdenominator := Fdenominator + ((1.0 - (cellcnts[i-1] / N)) * cellvars[i-1]); + end; + NewF := Fnumerator / Fdenominator; + ProbF1 := probf(NewF,DFF1, fdegfree); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + outline := format('Brown-Forsythe F statistic = %8.3f',[NewF]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Brown-Forsythe denominator degrees of freedom = %3.0f',[fdegfree]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Brown-Forsythe F probability = %5.3f',[probf1]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + OutPutFrm.ShowModal; + Welchttests(self); +end; +procedure TBlksAnovaFrm.WelchOneWay(Sender: TObject); +Var i : integer; + W, v, barx, numerator, denominator : double; + wj : array[1..50] of double; + c1 : array[1..50] of double; + barxj : array[1..50] of double; + sumc1 : double; + fdegfree, term1, term2, term3 : double; +begin + for i := 1 to 50 do + begin + wj[i] := 0.0; + c1[i] := 0.0; + barxj[i] := 0.0; + end; + for i := 1 to NoCases do + begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + intvalue := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F1Col,i]))); + X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[DepVarCol,i])); + intvalue := intvalue - minf1 + 1; + cellcnts[intvalue-1] := 0.0; + cellsums[intvalue-1] := 0.0; + cellvars[intvalue-1] := 0.0; + end; + MeanDep := 0.0; + SSDep := 0.0; + SSF1 := 0.0; + MSErr := 0.0; + N := 0; + for i := 1 to NoCases do + begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + intvalue := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[F1Col,i]))); + X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[DepVarCol,i])); + intvalue := intvalue - minf1 + 1; + cellcnts[intvalue-1] := cellcnts[intvalue-1] + 1; + cellsums[intvalue-1] := cellsums[intvalue-1] + X; + cellvars[intvalue-1] := cellvars[intvalue-1] + (X * X); + MeanDep := MeanDep + X; + SSDep := SSDep + (X * X); + barxj[intvalue] := barxj[intvalue] + X; + N := N + 1; + end; + DFF1 := 0; + W := 0.0; + barx := 0.0; + v := 0.0; + for i := 0 to Nf1cells-1 do + begin + if cellcnts[i] > 0 then + begin + cellvars[i] := cellvars[i] - (cellsums[i] * cellsums[i] /cellcnts[i]); + cellvars[i] := cellvars[i] / (cellcnts[i] - 1.0); + wj[i+1] := cellcnts[i] / cellvars[i]; + W := W + wj[i+1]; + barxj[i+1] := barxj[i+1] / cellcnts[i]; + SSF1 := SSF1 + (sqr(cellsums[i]) / cellcnts[i]); + DFF1 := DFF1 + 1; + end; + end; + for i := 1 to Nf1cells do barx := barx + (wj[i] * barxj[i]); + barx := barx / W; + numerator := 0.0; + for i := 1 to Nf1cells do + begin + numerator := numerator + (wj[i]* sqr(barxj[i]-barx)); + end; + numerator := numerator / (Nf1cells - 1.0); + denominator := 0.0; + for i := 1 to Nf1cells do + begin + v := v + ( (1.0 /(cellcnts[i-1]-1.0)) * (sqr(1.0 - wj[i]/W)) ); + end; + v := 3.0 * v; + term1 := sqr(Nf1cells) - 1.0; + v := term1 / v; + for i := 1 to Nf1cells do + begin + term1 := 1.0 / (cellcnts[i-1] - 1.0); + term2 := sqr(1.0 - (wj[i] / W)); + denominator := denominator + (term1 * term2); + end; + term1 := sqr(Nf1cells) - 1.0; + term2 := 2.0 * (Nf1cells - 2.0); + term3 := 1.0; + denominator := term3 + ((term2 / term1) * denominator); + F := numerator / denominator; + DFF1 := Nf1cells - 1; + SSF1 := SSF1 - (sqr(MeanDep) / float(N)); + SSDep := SSDep - (sqr(MeanDep) / float(N)); + SSErr := SSDep - SSF1; + DFTot := N - 1; + DFErr := DFTot - DFF1; + MSF1 := SSF1 / DFF1; + MeanDep := MeanDep / float(N); + sumc1 := 0.0; + for i := 0 to Nf1cells-1 do + begin + MSErr := MSErr + (((1.0 - cellcnts[i] / N) * cellvars[i])/ DFF1); + c1[i+1] := (1.0 - (cellcnts[i] / N)) * cellvars[i]; + sumc1 := sumc1 + c1[i+1]; + end; + for i := 1 to Nf1cells do + begin + c1[i] := c1[i] / sumc1; + end; + fdegfree := 0.0; + for i := 1 to Nf1cells do fdegfree := fdegfree + (c1[i] * c1[i]) / (cellcnts[i-1]-1.0); + fdegfree := round(1.0 / fdegfree); + MSDep := SSDep / DFTot; + Omega := (SSF1 - DFF1 * MSErr) / (SSDep + MSErr); +// F := MSF1 / MSErr; +// ProbF1 := probf(F,DFF1, DFErr); + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('WELCH ONE WAY ANALYSIS OF VARIANCE RESULTS'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Dependent variable is: %s, Independent variable is: %s', + [DepVar.Text,Factor1.Text]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); +{ OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add('SOURCE D.F. SS MS F PROB.>F OMEGA SQR.'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + outline := format('BETWEEN %4.0f%10.2f%10.2f%10.2f%10.2f%10.2f', + [DFF1,SSF1,MSF1,F,ProbF1,Omega]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('WITHIN %4.0f%10.2f%10.2f',[DFErr,SSErr,MSErr]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('TOTAL %4.0f%10.2f',[DFTot,SSDep]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(''); } + outline := format('Welch F statistic = %8.4f',[F]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Welch denominator degrees of freedom = %3.0f',[v]); + OutPutFrm.RichEdit.Lines.Add(outline); + probF1 := probf(F,DFF1,v); + outline := format('Welch F probability = %5.3f',[probf1]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + Welchttests(self); +end; + +procedure TBlksAnovaFrm.Welchttests(Sender: TObject); +VAR i, j, NoCompares : integer; + t : double; // Welch t value + gnu : double; // degrees of freedom + var1, var2 : double; // variance estimates for two variables + mean1, mean2 : double; // means for two variables + probability : double; // t probability + numerator, denominator, term1, term2 : double; // work values + v : integer; // rounded degrees of freedom +begin + NoCompares := Nf1cells; + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add('Welch t-tests among groups'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------------'); + for i := 1 to NoCompares - 1 do + begin + for j := i + 1 to NoCompares do + begin + outline := format('Comparison of group %d with group %d',[i,j]); + OutPutFrm.RichEdit.Lines.Add(outline); + mean1 := cellsums[i-1] / cellcnts[i-1]; + mean2 := cellsums[j-1] / cellcnts[j-1]; + var1 := cellvars[i-1]; + var2 := cellvars[j-1]; + denominator := sqrt((var1 / cellcnts[i-1]) + (var2 / cellcnts[j-1])); + numerator := mean1 - mean2; + t := numerator / denominator; + outline := format('Mean %d = %8.3f, Mean %d = %8.3f',[i,mean1,j,mean2]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Welch t = %8.3f',[t]); + OutPutFrm.RichEdit.Lines.Add(outline); + numerator := sqr((var1 /cellcnts[i-1]) + (var2 / cellcnts[j-1])); + term1 := sqr(var1) / (sqr(cellcnts[i-1]) * (cellcnts[i-1]-1.0)); + term2 := sqr(var2) / (sqr(cellcnts[j-1]) * (cellcnts[j-1]-1.0)); + denominator := term1 + term2; + numerator := sqr((var1 / cellcnts[i-1]) + (var2 / cellcnts[j-1])); + gnu := numerator / denominator; + outline := format('degrees of freedom = %8.3f',[gnu]); + OutPutFrm.RichEdit.Lines.Add(outline); + v := round(gnu); + outline := format('Rounded degrees of freedom = %d',[v]); + OutPutFrm.RichEdit.Lines.Add(outline); + probability := probt(t,gnu); + outline := format('Probability > t = %8.3f',[probability]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + end; + OutPutFrm.RichEdit.Lines.Add(''); + end; + OutPutFrm.ShowModal; +end; + +initialization + {$I blkanovaunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/BLKANOVAUNIT.lfm b/applications/lazstats/source_orig/BLKANOVAUNIT.lfm new file mode 100644 index 000000000..8b14d8f6d --- /dev/null +++ b/applications/lazstats/source_orig/BLKANOVAUNIT.lfm @@ -0,0 +1,730 @@ +object BlksAnovaFrm: TBlksAnovaFrm + Left = 143 + Height = 490 + Top = 110 + Width = 731 + Caption = 'One, Two or Three Way Analysis of Variance' + ClientHeight = 490 + ClientWidth = 731 + OnShow = FormShow + LCLVersion = '0.9.30.4' + object Label1: TLabel + Left = 8 + Height = 16 + Top = 11 + Width = 51 + Caption = 'Variables:' + ParentColor = False + end + object Label2: TLabel + Left = 408 + Height = 16 + Top = 104 + Width = 72 + Caption = 'Variable Type' + ParentColor = False + end + object Label3: TLabel + Left = 7 + Height = 16 + Top = 415 + Width = 150 + Caption = 'Alpha Level for Overall Tests' + ParentColor = False + end + object Label4: TLabel + Left = 223 + Height = 16 + Top = 415 + Width = 166 + Caption = 'Alpha Level for Post-Hoc Tests:' + ParentColor = False + end + object VarList: TListBox + Left = 8 + Height = 368 + Top = 29 + Width = 185 + ItemHeight = 0 + TabOrder = 0 + end + object DepIn: TBitBtn + Left = 208 + Height = 29 + Top = 25 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = DepInClick + TabOrder = 1 + end + object DepOut: TBitBtn + Left = 208 + Height = 29 + Top = 64 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = DepOutClick + TabOrder = 2 + end + object Fact1In: TBitBtn + Left = 208 + Height = 29 + Top = 120 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = Fact1InClick + TabOrder = 3 + end + object Fact1Out: TBitBtn + Left = 208 + Height = 29 + Top = 160 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = Fact1OutClick + TabOrder = 4 + end + object Fact2In: TBitBtn + Left = 208 + Height = 29 + Top = 216 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = Fact2InClick + TabOrder = 5 + end + object Fact2Out: TBitBtn + Left = 208 + Height = 29 + Top = 256 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = Fact2OutClick + TabOrder = 6 + end + object Fact3In: TBitBtn + Left = 208 + Height = 29 + Top = 312 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = Fact3InClick + TabOrder = 7 + end + object Fact3Out: TBitBtn + Left = 208 + Height = 29 + Top = 352 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = Fact3OutClick + TabOrder = 8 + end + object StaticText1: TStaticText + Left = 256 + Height = 15 + Top = 21 + Width = 73 + Caption = 'Dependent Variable' + TabOrder = 9 + end + object StaticText2: TStaticText + Left = 256 + Height = 17 + Top = 112 + Width = 83 + Caption = 'Factor 1 Variable' + TabOrder = 10 + end + object StaticText3: TStaticText + Left = 256 + Height = 13 + Top = 216 + Width = 95 + Caption = 'Factor 2 Variable' + TabOrder = 11 + end + object StaticText4: TStaticText + Left = 256 + Height = 12 + Top = 312 + Width = 88 + Caption = 'Factor 3 Clark' + TabOrder = 12 + end + object DepVar: TEdit + Left = 257 + Height = 23 + Top = 41 + Width = 135 + TabOrder = 13 + Text = 'DepVar' + end + object Factor1: TEdit + Left = 256 + Height = 23 + Top = 136 + Width = 135 + TabOrder = 14 + Text = 'Edit1' + end + object Factor2: TEdit + Left = 256 + Height = 23 + Top = 240 + Width = 135 + TabOrder = 15 + Text = 'Edit1' + end + object Factor3: TEdit + Left = 256 + Height = 23 + Top = 336 + Width = 135 + TabOrder = 16 + Text = 'Edit1' + end + object Fact1Grp: TRadioGroup + Left = 408 + Height = 64 + Top = 128 + Width = 122 + AutoFill = True + Caption = 'Factor 1' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 46 + ClientWidth = 118 + Items.Strings = ( + 'Fixed Levels' + 'Random Levels' + ) + TabOrder = 17 + end + object Fact2Grp: TRadioGroup + Left = 408 + Height = 64 + Top = 232 + Width = 124 + AutoFill = True + Caption = 'Factor 2' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 46 + ClientWidth = 120 + Items.Strings = ( + 'Fixed Levels' + 'Random Levels' + ) + TabOrder = 18 + end + object Fact3Grp: TRadioGroup + Left = 408 + Height = 61 + Top = 319 + Width = 124 + AutoFill = True + Caption = 'Factor 3' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 43 + ClientWidth = 120 + Items.Strings = ( + 'Fixed Levels' + 'Random Levels' + ) + TabOrder = 19 + end + object GroupBox1: TGroupBox + Left = 542 + Height = 201 + Top = 21 + Width = 171 + Caption = 'Post-Hoc Comparisons:' + ClientHeight = 183 + ClientWidth = 167 + TabOrder = 20 + object Scheffe: TCheckBox + Left = 8 + Height = 19 + Top = 8 + Width = 59 + Caption = 'Scheffe' + TabOrder = 0 + end + end + object TukeyHSD: TCheckBox + Left = 552 + Height = 19 + Top = 64 + Width = 115 + Caption = 'Tukey HSD (= n''s)' + TabOrder = 21 + end + object TukeyB: TCheckBox + Left = 552 + Height = 19 + Top = 88 + Width = 99 + Caption = 'Tukey B (= n''s)' + TabOrder = 22 + end + object TukeyKramer: TCheckBox + Left = 552 + Height = 19 + Top = 112 + Width = 95 + Caption = 'Tukey-Kramer' + TabOrder = 23 + end + object NewmanKeuls: TCheckBox + Left = 552 + Height = 19 + Top = 136 + Width = 138 + Caption = 'Newman-Keuls (= n''s)' + TabOrder = 24 + end + object Bonferoni: TCheckBox + Left = 552 + Height = 19 + Top = 160 + Width = 76 + Caption = 'Bonferroni' + TabOrder = 25 + end + object OrthoContrasts: TCheckBox + Left = 552 + Height = 19 + Top = 184 + Width = 134 + Caption = 'Orthogonal Contrasts' + TabOrder = 26 + end + object GroupBox2: TGroupBox + Left = 544 + Height = 168 + Top = 240 + Width = 169 + Caption = 'Options' + ClientHeight = 150 + ClientWidth = 165 + TabOrder = 27 + object PlotMeans: TCheckBox + Left = 8 + Height = 19 + Top = 6 + Width = 154 + Caption = 'Plot Means Using 3D bars' + TabOrder = 0 + end + object Plot2DLines: TCheckBox + Left = 6 + Height = 19 + Top = 29 + Width = 159 + Caption = 'Plot Means Using 2D Lines' + TabOrder = 1 + end + object Plot3DLines: TCheckBox + Left = 7 + Height = 19 + Top = 53 + Width = 159 + Caption = 'Plot Means Using 3D Lines' + TabOrder = 2 + end + object BrownForsythe: TCheckBox + Left = 8 + Height = 19 + Top = 104 + Width = 157 + Caption = 'Brown-Forsythe for 1-way' + TabOrder = 3 + end + object Welch: TCheckBox + Left = 7 + Height = 19 + Top = 128 + Width = 106 + Caption = 'Welch for 1-way' + TabOrder = 4 + end + object Label5: TLabel + Left = 8 + Height = 16 + Top = 80 + Width = 149 + Caption = 'Corrections for unequal Var.' + ParentColor = False + end + end + object OverallAlpha: TEdit + Left = 158 + Height = 23 + Top = 408 + Width = 45 + TabOrder = 28 + Text = 'OverallAlpha' + end + object PostAlpha: TEdit + Left = 384 + Height = 23 + Top = 408 + Width = 51 + TabOrder = 29 + Text = 'PostAlpha' + end + object ResetBtn: TButton + Left = 207 + Height = 32 + Top = 448 + Width = 77 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 30 + end + object CancelBtn: TButton + Left = 320 + Height = 32 + Top = 448 + Width = 77 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 31 + end + object ComputeBtn: TButton + Left = 432 + Height = 31 + Top = 448 + Width = 77 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 32 + end + object ReturnBtn: TButton + Left = 544 + Height = 31 + Top = 448 + Width = 77 + Caption = 'Return' + ModalResult = 1 + TabOrder = 33 + end + object HelpBtn: TButton + Tag = 107 + Left = 96 + Height = 32 + Top = 447 + Width = 78 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 34 + end +end diff --git a/applications/lazstats/source_orig/BLKANOVAUNIT.lrs b/applications/lazstats/source_orig/BLKANOVAUNIT.lrs new file mode 100644 index 000000000..cd8b8cb27 --- /dev/null +++ b/applications/lazstats/source_orig/BLKANOVAUNIT.lrs @@ -0,0 +1,512 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TBlksAnovaFrm','FORMDATA',[ + 'TPF0'#13'TBlksAnovaFrm'#12'BlksAnovaFrm'#4'Left'#3#143#0#6'Height'#3#234#1#3 + +'Top'#2'n'#5'Width'#3#219#2#7'Caption'#6'*One, Two or Three Way Analysis of ' + +'Variance'#12'ClientHeight'#3#234#1#11'ClientWidth'#3#219#2#6'OnShow'#7#8'Fo' + +'rmShow'#10'LCLVersion'#6#8'0.9.30.4'#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'He' + +'ight'#2#16#3'Top'#2#11#5'Width'#2'3'#7'Caption'#6#10'Variables:'#11'ParentC' + +'olor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#152#1#6'Height'#2#16#3'Top'#2'h'#5 + +'Width'#2'H'#7'Caption'#6#13'Variable Type'#11'ParentColor'#8#0#0#6'TLabel'#6 + +'Label3'#4'Left'#2#7#6'Height'#2#16#3'Top'#3#159#1#5'Width'#3#150#0#7'Captio' + +'n'#6#29'Alpha Level for Overall Tests'#11'ParentColor'#8#0#0#6'TLabel'#6'La' + +'bel4'#4'Left'#3#223#0#6'Height'#2#16#3'Top'#3#159#1#5'Width'#3#166#0#7'Capt' + +'ion'#6#31'Alpha Level for Post-Hoc Tests:'#11'ParentColor'#8#0#0#8'TListBox' + +#7'VarList'#4'Left'#2#8#6'Height'#3'p'#1#3'Top'#2#29#5'Width'#3#185#0#10'Ite' + +'mHeight'#2#0#8'TabOrder'#2#0#0#0#7'TBitBtn'#5'DepIn'#4'Left'#3#208#0#6'Heig' + +'ht'#2#29#3'Top'#2#25#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6' + +#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0 + +'d'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M' + +#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E' + +#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255 + +#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208 + +#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~' + +#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255 + +#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167 + +#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202 + +#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)' + +#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a' + +#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#9'NumGlyphs'#2#0#7'OnClick'#7#10'DepInClick'#8'TabOrder'#2#1#0#0#7'TBitBtn' + ,#6'DepOut'#4'Left'#3#208#0#6'Height'#2#29#3'Top'#2'@'#5'Width'#2' '#10'Glyph' + +'.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16 + +#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255 + +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$' + +#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156 + +#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255 + +#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255 + +'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138 + +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207 + +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}' + +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'DepOutClick'#8 + +'TabOrder'#2#2#0#0#7'TBitBtn'#7'Fact1In'#4'Left'#3#208#0#6'Height'#2#29#3'To' + +'p'#2'x'#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0 + +'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0 + +#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^' + +#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195 + +'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255 + +#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255 + +#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255 + +']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145 + +'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#12'Fact1InClick'#8'TabOrder'#2#3#0#0#7'TBitBtn'#8'Fact' + +'1Out'#4'Left'#3#208#0#6'Height'#2#29#3'Top'#3#160#0#5'Width'#2' '#10'Glyph.' + +'Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16 + +#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255 + +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$' + +#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156 + +#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255 + ,#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255 + +'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138 + +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207 + +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}' + +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#13'Fact1OutClick' + +#8'TabOrder'#2#4#0#0#7'TBitBtn'#7'Fact2In'#4'Left'#3#208#0#6'Height'#2#29#3 + +'Top'#3#216#0#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0 + +#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0 + +'d'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V' + +#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y' + +#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0 + +'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157 + +#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195 + +#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0 + +#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255 + +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144 + +#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201 + +#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190 + +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255 + +'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#9'NumGlyphs'#2#0#7'OnClick'#7#12'Fact2InClick'#8'TabOrder'#2#5#0#0#7'TBitBt' + +'n'#8'Fact2Out'#4'Left'#3#208#0#6'Height'#2#29#3'Top'#3#0#1#5'Width'#2' '#10 + +'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0 + +#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)' + +#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134 + +#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203 + +#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190 + +'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127 + +#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255 + +#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135 + +#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255 + +#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#13 + +'Fact2OutClick'#8'TabOrder'#2#6#0#0#7'TBitBtn'#7'Fact3In'#4'Left'#3#208#0#6 + +'Height'#2#29#3'Top'#3'8'#1#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0 + +'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4 + +#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\' + +#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?' + +#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0 + +#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255 + +#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137 + +#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255 + +#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158 + +#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255 + +#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255 + +'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q' + +#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#12'Fact3InClick'#8'TabOrder'#2#7 + +#0#0#7'TBitBtn'#8'Fact3Out'#4'Left'#3#208#0#6'Height'#2#29#3'Top'#3'`'#1#5'W' + +'idth'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0 + +'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0 + +#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O' + +#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V' + +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255 + +'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195 + +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255 + +#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135 + +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#13'Fact3OutClick'#8'TabOrder'#2#8#0#0#11'TStaticText' + +#11'StaticText1'#4'Left'#3#0#1#6'Height'#2#15#3'Top'#2#21#5'Width'#2'I'#7'Ca' + +'ption'#6#18'Dependent Variable'#8'TabOrder'#2#9#0#0#11'TStaticText'#11'Stat' + +'icText2'#4'Left'#3#0#1#6'Height'#2#17#3'Top'#2'p'#5'Width'#2'S'#7'Caption'#6 + +#17'Factor 1 Variable'#8'TabOrder'#2#10#0#0#11'TStaticText'#11'StaticText3'#4 + +'Left'#3#0#1#6'Height'#2#13#3'Top'#3#216#0#5'Width'#2'_'#7'Caption'#6#17'Fac' + +'tor 2 Variable'#8'TabOrder'#2#11#0#0#11'TStaticText'#11'StaticText4'#4'Left' + +#3#0#1#6'Height'#2#12#3'Top'#3'8'#1#5'Width'#2'X'#7'Caption'#6#14'Factor 3 C' + +'lark'#8'TabOrder'#2#12#0#0#5'TEdit'#6'DepVar'#4'Left'#3#1#1#6'Height'#2#23#3 + +'Top'#2')'#5'Width'#3#135#0#8'TabOrder'#2#13#4'Text'#6#6'DepVar'#0#0#5'TEdit' + +#7'Factor1'#4'Left'#3#0#1#6'Height'#2#23#3'Top'#3#136#0#5'Width'#3#135#0#8'T' + +'abOrder'#2#14#4'Text'#6#5'Edit1'#0#0#5'TEdit'#7'Factor2'#4'Left'#3#0#1#6'He' + +'ight'#2#23#3'Top'#3#240#0#5'Width'#3#135#0#8'TabOrder'#2#15#4'Text'#6#5'Edi' + +'t1'#0#0#5'TEdit'#7'Factor3'#4'Left'#3#0#1#6'Height'#2#23#3'Top'#3'P'#1#5'Wi' + +'dth'#3#135#0#8'TabOrder'#2#16#4'Text'#6#5'Edit1'#0#0#11'TRadioGroup'#8'Fact' + +'1Grp'#4'Left'#3#152#1#6'Height'#2'@'#3'Top'#3#128#0#5'Width'#2'z'#8'AutoFil' + +'l'#9#7'Caption'#6#8'Factor 1'#28'ChildSizing.LeftRightSpacing'#2#6#28'Child' + +'Sizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomo' + +'genousChildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildR' + +'esize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing' + +'.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftTo' + +'RightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight'#2 + +'.'#11'ClientWidth'#2'v'#13'Items.Strings'#1#6#12'Fixed Levels'#6#13'Random ' + +'Levels'#0#8'TabOrder'#2#17#0#0#11'TRadioGroup'#8'Fact2Grp'#4'Left'#3#152#1#6 + ,'Height'#2'@'#3'Top'#3#232#0#5'Width'#2'|'#8'AutoFill'#9#7'Caption'#6#8'Fact' + +'or 2'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing' + +#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27'Chi' + +'ldSizing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.Shr' + +'inkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crs' + +'ScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27 + +'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight'#2'.'#11'ClientWidth'#2'x' + +#13'Items.Strings'#1#6#12'Fixed Levels'#6#13'Random Levels'#0#8'TabOrder'#2 + +#18#0#0#11'TRadioGroup'#8'Fact3Grp'#4'Left'#3#152#1#6'Height'#2'='#3'Top'#3 + +'?'#1#5'Width'#2'|'#8'AutoFill'#9#7'Caption'#6#8'Factor 3'#28'ChildSizing.Le' + +'ftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.Enl' + +'argeHorizontal'#7#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVertic' + +'al'#7#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'cr' + +'sScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildS' + +'izing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPe' + +'rLine'#2#1#12'ClientHeight'#2'+'#11'ClientWidth'#2'x'#13'Items.Strings'#1#6 + +#12'Fixed Levels'#6#13'Random Levels'#0#8'TabOrder'#2#19#0#0#9'TGroupBox'#9 + +'GroupBox1'#4'Left'#3#30#2#6'Height'#3#201#0#3'Top'#2#21#5'Width'#3#171#0#7 + +'Caption'#6#21'Post-Hoc Comparisons:'#12'ClientHeight'#3#183#0#11'ClientWidt' + +'h'#3#167#0#8'TabOrder'#2#20#0#9'TCheckBox'#7'Scheffe'#4'Left'#2#8#6'Height' + +#2#19#3'Top'#2#8#5'Width'#2';'#7'Caption'#6#7'Scheffe'#8'TabOrder'#2#0#0#0#0 + +#9'TCheckBox'#8'TukeyHSD'#4'Left'#3'('#2#6'Height'#2#19#3'Top'#2'@'#5'Width' + +#2's'#7'Caption'#6#17'Tukey HSD (= n''s)'#8'TabOrder'#2#21#0#0#9'TCheckBox'#6 + +'TukeyB'#4'Left'#3'('#2#6'Height'#2#19#3'Top'#2'X'#5'Width'#2'c'#7'Caption'#6 + +#15'Tukey B (= n''s)'#8'TabOrder'#2#22#0#0#9'TCheckBox'#11'TukeyKramer'#4'Le' + +'ft'#3'('#2#6'Height'#2#19#3'Top'#2'p'#5'Width'#2'_'#7'Caption'#6#12'Tukey-K' + +'ramer'#8'TabOrder'#2#23#0#0#9'TCheckBox'#11'NewmanKeuls'#4'Left'#3'('#2#6'H' + +'eight'#2#19#3'Top'#3#136#0#5'Width'#3#138#0#7'Caption'#6#20'Newman-Keuls (=' + +' n''s)'#8'TabOrder'#2#24#0#0#9'TCheckBox'#9'Bonferoni'#4'Left'#3'('#2#6'Hei' + +'ght'#2#19#3'Top'#3#160#0#5'Width'#2'L'#7'Caption'#6#10'Bonferroni'#8'TabOrd' + +'er'#2#25#0#0#9'TCheckBox'#14'OrthoContrasts'#4'Left'#3'('#2#6'Height'#2#19#3 + +'Top'#3#184#0#5'Width'#3#134#0#7'Caption'#6#20'Orthogonal Contrasts'#8'TabOr' + +'der'#2#26#0#0#9'TGroupBox'#9'GroupBox2'#4'Left'#3' '#2#6'Height'#3#168#0#3 + +'Top'#3#240#0#5'Width'#3#169#0#7'Caption'#6#7'Options'#12'ClientHeight'#3#150 + +#0#11'ClientWidth'#3#165#0#8'TabOrder'#2#27#0#9'TCheckBox'#9'PlotMeans'#4'Le' + +'ft'#2#8#6'Height'#2#19#3'Top'#2#6#5'Width'#3#154#0#7'Caption'#6#24'Plot Mea' + +'ns Using 3D bars'#8'TabOrder'#2#0#0#0#9'TCheckBox'#11'Plot2DLines'#4'Left'#2 + +#6#6'Height'#2#19#3'Top'#2#29#5'Width'#3#159#0#7'Caption'#6#25'Plot Means Us' + +'ing 2D Lines'#8'TabOrder'#2#1#0#0#9'TCheckBox'#11'Plot3DLines'#4'Left'#2#7#6 + +'Height'#2#19#3'Top'#2'5'#5'Width'#3#159#0#7'Caption'#6#25'Plot Means Using ' + +'3D Lines'#8'TabOrder'#2#2#0#0#9'TCheckBox'#13'BrownForsythe'#4'Left'#2#8#6 + +'Height'#2#19#3'Top'#2'h'#5'Width'#3#157#0#7'Caption'#6#24'Brown-Forsythe fo' + +'r 1-way'#8'TabOrder'#2#3#0#0#9'TCheckBox'#5'Welch'#4'Left'#2#7#6'Height'#2 + +#19#3'Top'#3#128#0#5'Width'#2'j'#7'Caption'#6#15'Welch for 1-way'#8'TabOrder' + +#2#4#0#0#6'TLabel'#6'Label5'#4'Left'#2#8#6'Height'#2#16#3'Top'#2'P'#5'Width' + +#3#149#0#7'Caption'#6#28'Corrections for unequal Var.'#11'ParentColor'#8#0#0 + +#0#5'TEdit'#12'OverallAlpha'#4'Left'#3#158#0#6'Height'#2#23#3'Top'#3#152#1#5 + +'Width'#2'-'#8'TabOrder'#2#28#4'Text'#6#12'OverallAlpha'#0#0#5'TEdit'#9'Post' + +'Alpha'#4'Left'#3#128#1#6'Height'#2#23#3'Top'#3#152#1#5'Width'#2'3'#8'TabOrd' + +'er'#2#29#4'Text'#6#9'PostAlpha'#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#207#0#6 + +'Height'#2' '#3'Top'#3#192#1#5'Width'#2'M'#7'Caption'#6#5'Reset'#7'OnClick'#7 + +#13'ResetBtnClick'#8'TabOrder'#2#30#0#0#7'TButton'#9'CancelBtn'#4'Left'#3'@' + +#1#6'Height'#2' '#3'Top'#3#192#1#5'Width'#2'M'#7'Caption'#6#6'Cancel'#11'Mod' + +'alResult'#2#2#8'TabOrder'#2#31#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3#176#1 + +#6'Height'#2#31#3'Top'#3#192#1#5'Width'#2'M'#7'Caption'#6#7'Compute'#7'OnCli' + +'ck'#7#15'ComputeBtnClick'#8'TabOrder'#2' '#0#0#7'TButton'#9'ReturnBtn'#4'Le' + +'ft'#3' '#2#6'Height'#2#31#3'Top'#3#192#1#5'Width'#2'M'#7'Caption'#6#6'Retur' + +'n'#11'ModalResult'#2#1#8'TabOrder'#2'!'#0#0#7'TButton'#7'HelpBtn'#3'Tag'#2 + +'k'#4'Left'#2'`'#6'Height'#2' '#3'Top'#3#191#1#5'Width'#2'N'#7'Caption'#6#4 + +'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2'"'#0#0#0 +]); diff --git a/applications/lazstats/source_orig/BLKMREGUNIT.PAS b/applications/lazstats/source_orig/BLKMREGUNIT.PAS new file mode 100644 index 000000000..4d28b9522 --- /dev/null +++ b/applications/lazstats/source_orig/BLKMREGUNIT.PAS @@ -0,0 +1,478 @@ +unit BlkMRegUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, Globals, MainUnit, MatrixLib, OutPutUnit, + FunctionsLib, DataProcs, DictionaryUnit; + + +type + + { TBlkMregFrm } + + TBlkMregFrm = class(TForm) + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + CPChkBox: TCheckBox; + CovChkBox: TCheckBox; + CorrsChkBox: TCheckBox; + MeansChkBox: TCheckBox; + SaveDialog1: TSaveDialog; + VarChkBox: TCheckBox; + SDChkBox: TCheckBox; + MatSaveChkBox: TCheckBox; + PredictChkBox: TCheckBox; + GroupBox1: TGroupBox; + InProb: TEdit; + Label5: TLabel; + NextBlkBtn: TButton; + DepInBtn: TBitBtn; + DepOutBtn: TBitBtn; + BlockNoEdit: TEdit; + InBtn: TBitBtn; + Label4: TLabel; + OutBtn: TBitBtn; + AllBtn: TBitBtn; + DepVar: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + BlockList: TListBox; + VarList: TListBox; + procedure AllBtnClick(Sender: TObject); + procedure CancelBtnClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure DepInBtnClick(Sender: TObject); + procedure DepOutBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure InBtnClick(Sender: TObject); + procedure NextBlkBtnClick(Sender: TObject); + procedure OutBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + BlkVarCols : IntDyneMat; + NoBlocks : integer; + VarsInBlk : IntDyneVec; + NoVars : integer; + + public + { public declarations } + end; + +var + BlkMregFrm: TBlkMregFrm; + +implementation + +{ TBlkMregFrm } + +procedure TBlkMregFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + BlockList.Items.Clear; + VarList.Items.Clear; + BlockNoEdit.Text := '1'; + NoBlocks := 1; + for i := 1 to NoVariables do + begin + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + end; + InBtn.Enabled := true; + OutBtn.Enabled := false; + DepInBtn.Enabled := true; + DepOutBtn.Enabled := false; + CPChkBox.Checked := false; + CovChkBox.Checked := false; + CorrsChkBox.Checked := true; + MeansChkBox.Checked := true; + VarChkBox.Checked := false; + SDChkBox.Checked := true; + MatSaveChkBox.Checked := false; + PredictChkBox.Checked := false; +// HeteroChk.Checked := false; + NoVars := 0; + DepVar.Text := ''; + InProb.Text := '0.05'; + SetLength(BlkVarCols,NoVariables,NoVariables); + SetLength(VarsInBlk,NoVariables); +end; + +procedure TBlkMregFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TBlkMregFrm.AllBtnClick(Sender: TObject); +VAR count, index : integer; +begin + count := VarList.Items.Count; + for index := 0 to count-1 do + begin + BlockList.Items.Add(VarList.Items.Strings[index]); + end; + VarList.Clear; +end; + +procedure TBlkMregFrm.CancelBtnClick(Sender: TObject); +begin + if VarsInBlk <> nil then VarsInBlk := nil; + if BlkVarCols <> nil then BlkVarCols := nil; + BlkMRegFrm.Hide; +end; + +procedure TBlkMregFrm.ComputeBtnClick(Sender: TObject); +Label CleanUp; +var + i, j, k, col, mattype, errorcode, NCases : integer; + NoIndepVars, DepVarCol, NEntered, StepNo : integer; + R2, df1, df2, Y, z, BPG, chiprob : double; + StdErrEst, F, FProbF, OldR2 : double; + pdf1, pdf2, probin, prout : double; + BetaWeights : DblDyneVec; + cellstring, outline : string; + corrs : DblDyneMat; + Means : DblDyneVec; + Variances : DblDyneVec; + StdDevs : DblDyneVec; + title : string; + IndRowLabels : StrDyneVec; + IndColLabels : StrDyneVec; + IndepInverse : DblDyneMat; + IndepIndex : IntDyneVec; + XYCorrs : DblDyneVec; + Partial : DblDyneVec; + Candidate : IntDyneVec; + filename : string; + ColEntered : IntDyneVec; + constant : double; + errcode : boolean; +begin + SetLength(corrs,NoVariables+1,NoVariables+1); + SetLength(IndepInverse,NoVariables,NoVariables); + SetLength(Means,NoVariables); + SetLength(Variances,NoVariables); + SetLength(StdDevs,NoVariables); + SetLength(IndepIndex,NoVariables); + SetLength(IndColLabels,NoVariables); + SetLength(IndRowLabels,NoVariables); + SetLength(BetaWeights,NoVariables); + SetLength(Candidate,NoVariables); + SetLength(ColEntered,NoVariables); + + NextBlkBtnClick(self); + probin := StrToFloat(InProb.Text); // probability to include a block + prout := 1.0; + OutPutFrm.RichEdit.Clear; +// OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify; + OutPutFrm.RichEdit.Lines.Add('Block Entry Multiple Regression by Bill Miller'); + errorcode := 0; + + { get dependendent variable column } + if DepVar.Text = '' then + begin + ShowMessage('ERROR! No Dependent variable selected.'); + goto CleanUp; + end; + DepVarCol := 0; + NoVars := NoVars + 1; + for j := 1 to NoVariables do + if DepVar.Text = OS3MainFrm.DataGrid.Cells[j,0] then DepVarCol := j; + R2 := 0.0; + OldR2 := 0.0; + pdf1 := 0.0; + pdf2 := 0.0; + for i := 1 to NoBlocks-1 do Candidate[i-1] := i; + { Now, complete Mult. Regs by adding blocks in each step } + for StepNo := 1 to NoBlocks-1 do + begin + NEntered := 0; + for i := 1 to StepNo do + begin + if (Candidate[StepNo-1] <> 0) then + begin + for j := 1 to VarsInBlk[i-1] do + begin + NEntered := NEntered + 1; + ColEntered[NEntered-1] := BlkVarCols[i-1,j-1]; + k := BlkVarCols[i-1,j-1]; + IndRowLabels[NEntered-1] := OS3MainFrm.DataGrid.Cells[k,0]; + IndColLabels[NEntered-1] := OS3MainFrm.DataGrid.Cells[k,0]; + end; + end; + end; + NEntered := NEntered + 1; // dependent variable last + ColEntered[NEntered-1] := DepVarCol; + IndRowLabels[NEntered-1] := OS3MainFrm.DataGrid.Cells[DepVarCol,0]; + IndColLabels[NEntered-1] := OS3MainFrm.DataGrid.Cells[DepVarCol,0]; + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('----------------- Trial Block %d Variables Added ------------------',[StepNo]); + OutPutFrm.RichEdit.Lines.Add(outline); + if CPChkBox.Checked = true then + begin + title := 'Cross-Products Matrix'; + GridXProd(NEntered,ColEntered,Corrs,errcode,NCases); + MAT_PRINT(Corrs,NEntered,NEntered,title,IndRowLabels,IndColLabels,NCases); + end; + if CovChkBox.Checked = true then + begin + title := 'Variance-Covariance Matrix'; + GridCovar(NEntered,ColEntered,Corrs,Means,Variances, + StdDevs,errcode,NCases); + MAT_PRINT(Corrs,NEntered,NEntered,title,IndRowLabels,IndColLabels,NCases); + end; + Correlations(NEntered,ColEntered,Corrs,Means,Variances, + StdDevs,errcode,NCases); + if CorrsChkBox.Checked = true then + begin + title := 'Product-Moment Correlations Matrix'; + MAT_PRINT(Corrs,NEntered,NEntered,title,IndRowLabels,IndColLabels,NCases); + end; + title := 'Means'; + if MeansChkBox.Checked = true then + DynVectorPrint(Means,NEntered,title,IndColLabels,NCases); + title := 'Variances'; + if VarChkBox.Checked = true then + DynVectorPrint(Variances,NEntered,title,IndColLabels,NCases); + title := 'Standard Deviations'; + if SDChkBox.Checked = true then + DynVectorPrint(StdDevs,NEntered,title,IndColLabels,NCases); + if errorcode > 0 then + begin + ShowMessage('ERROR! A selected variable has no variability-run aborted.'); + goto CleanUp; + end; + NoIndepVars := NEntered - 1; + for i := 1 to NoIndepVars do IndepIndex[i-1] := i; + MReg2(NCases,NEntered,NoIndepVars,IndepIndex,corrs,IndepInverse, + IndRowLabels,R2,BetaWeights, + Means,Variances,errorcode,StdErrEst,constant,prout,true, false,false); + outline := format('Increase in R Squared = %6.3f',[R2-OldR2]); + OutPutFrm.RichEdit.Lines.Add(outline); + df1 := NoIndepVars - pdf1; + df2 := NCases - NoIndepVars - 1; + F := ((R2 - OldR2) / (1.0 - R2)) * df2 / df1; + FProbF := probf(F,df1,df2); + outline := format('F = %6.3f with probability = %6.3f',[F,FProbF]); + OutPutFrm.RichEdit.Lines.Add(outline); + if FProbF < probin then + begin + outline := format('Block %d met entry requirements',[StepNo]); + OutPutFrm.RichEdit.Lines.Add(outline); + end + else + begin + Candidate[StepNo-1] := 0; + NoIndepVars := NoIndepVars - VarsInBlk[StepNo-1]; + outline := format('Block %d did not meet entry requirements',[StepNo]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OldR2 := R2; + pdf1 := NoIndepVars; + end; + + { add [predicted scores, residual scores, etc. to grid if options elected } + if PredictChkBox.Checked = true then + begin + prout := 1.0; + Correlations(NEntered,ColEntered,Corrs,Means,Variances, + StdDevs,errcode,NCases); + + MReg2(NCases,NEntered,NoIndepVars,IndepIndex,corrs,IndepInverse, + IndRowLabels,R2,BetaWeights, + Means,Variances,errorcode,StdErrEst,constant,prout,true, false,false); + + Predict(ColEntered, NEntered, IndepInverse, Means, StdDevs, + BetaWeights, StdErrEst, IndepIndex, NoIndepVars); + end; + +{ if HeteroChk.Checked = true then // do BPG test + begin + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('====================================================='); + OutPutFrm.RichEdit.Lines.Add('Breusch-Pagan-Godfrey Test of Heteroscedasticity'); + OutPutFrm.RichEdit.Lines.Add('====================================================='); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Auxiliary Regression'); + OutPutFrm.RichEdit.Lines.Add(''); + BPG := 0.0; + col := NoVariables + 1; + DictionaryFrm.NewVar(col); + DictionaryFrm.DictGrid.Cells[1,col] := 'BPGResid.'; + OS3MainFrm.DataGrid.Cells[col,0] := 'BPGResid.'; + NoVariables := NoVariables + 1; + // get predicted raw score + for i := 1 to NCases do + begin + Y := 0.0; + for j := 1 to NoIndepVars do + begin + col := IndepIndex[j-1]; + k := ColEntered[col-1]; + z := (StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[k,i])) - + Means[col-1]) / StdDevs[col-1]; + Y := Y + (z * BetaWeights[j-1]); // predicted z score + end; + Y := Y * StdDevs[NEntered-1] + Means[NEntered-1]; // predicte raw + k := ColEntered[NEntered-1]; + Y := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[k,i])) - Y; // residual + BPG := BPG + (Y * Y); // sum of squared residuals + // save squared value for each case + OS3MainFrm.DataGrid.Cells[NoVariables,i] := FloatToStr(Y * Y); +// OS3MainFrm.DataGrid.Cells[NoVariables,i] := Format('%8.3f',[Y * Y]); + end; + BPG := BPG / NCases; + for i := 1 to NCases do + begin + Y := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[NoVariables,i])) / BPG; + OS3MainFrm.DataGrid.Cells[NoVariables,i] := Format('%8.3f',[Y]); + end; + // Now, regress Hetero values on the independent variables + DepVarCol := NoVariables; + ColEntered[NEntered-1] := NoVariables; + IndRowLabels[NEntered-1] := OS3MainFrm.DataGrid.Cells[DepVarCol,0]; + IndColLabels[NEntered-1] := OS3MainFrm.DataGrid.Cells[DepVarCol,0]; + Correlations(NEntered,ColEntered,Corrs,Means,Variances, + StdDevs,errcode,NCases); + if CorrsChkBox.Checked = true then + begin + title := 'Product-Moment Correlations Matrix'; + MAT_PRINT(Corrs,NEntered,NEntered,title,IndRowLabels,IndColLabels,NCases); + end; + title := 'Means'; + if MeansChkBox.Checked = true then + DynVectorPrint(Means,NEntered,title,IndColLabels,NCases); + title := 'Variances'; + if VarChkBox.Checked = true then + DynVectorPrint(Variances,NEntered,title,IndColLabels,NCases); + title := 'Standard Deviations'; + if SDChkBox.Checked = true then + DynVectorPrint(StdDevs,NEntered,title,IndColLabels,NCases); + MReg2(NCases,NEntered,NoIndepVars,IndepIndex,corrs,IndepInverse, + IndRowLabels,R2,BetaWeights, + Means,Variances,errorcode,StdErrEst,constant,prout,true, false,false); + BPG := ( R2 * Variances[NEntered-1] * (Ncases-1) ) / 2; + chiprob := 1.0 - chisquaredprob(BPG,NEntered-1); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Breusch-Pagan-Godfrey Test of Heteroscedasticity'); + outline := format('Chi-Square = %8.3f with probability greater value = %8.3f',[BPG,chiprob]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + end; +} + if MatSaveChkBox.Checked = true then + begin + SaveDialog1.Filter := 'FreeStat matrix files (*.MAT)|*.MAT|All files (*.*)|*.*'; + SaveDialog1.FilterIndex := 1; + if SaveDialog1.Execute then + begin + filename := SaveDialog1.FileName; + MATSAVE(Corrs,NoVars,NoVars,Means,StdDevs,NCases,IndRowLabels,IndColLabels,filename); + end; + end; + OutPutFrm.ShowModal; +CleanUp: + ColEntered := nil; + Candidate := nil; + BetaWeights := nil; + IndColLabels := nil; + IndRowLabels := nil; + IndepIndex := nil; + StdDevs := nil; + Variances := nil; + Means := nil; + IndepInverse := nil; + corrs := nil; + VarsInBlk := nil; + BlkVarCols := nil; +end; + +procedure TBlkMregFrm.DepInBtnClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + DepVar.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + DepOutBtn.Enabled := true; + DepInBtn.Enabled := false; +end; + +procedure TBlkMregFrm.DepOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(DepVar.Text); + DepVar.Text := ''; + DepInBtn.Enabled := true; +end; + +procedure TBlkMregFrm.InBtnClick(Sender: TObject); +VAR i, index : integer; +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + BlockList.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + OutBtn.Enabled := true; +end; + +procedure TBlkMregFrm.NextBlkBtnClick(Sender: TObject); +var + blkno, i, j, count : integer; + cellstring : string; +begin + {save columns of variables in the current block } + count := BlockList.Items.Count; + if count = 0 then + begin + VarsInBlk[NoBlocks-1] := 0; + exit; + end; + VarsInBlk[NoBlocks-1] := count; + for i := 0 to count-1 do + begin + for j := 1 to NoVariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[j,0]; + if cellstring = BlockList.Items.Strings[i] then + begin + BlkVarCols[NoBlocks-1,i] := j; + NoVars := NoVars + 1; + end; + end; + end; + blkno := StrToInt(BlockNoEdit.Text); + blkno := blkno + 1; + BlockNoEdit.Text := IntToStr(blkno); + NoBlocks := blkno; + BlockList.Clear; +end; + +procedure TBlkMregFrm.OutBtnClick(Sender: TObject); +VAR index : integer; +begin + index := BlockList.ItemIndex; + VarList.Items.Add(BlockList.Items.Strings[index]); + BlockList.Items.Delete(index); + InBtn.Enabled := true; + if BlockList.Items.Count = 0 then OutBtn.Enabled := false; +end; + +initialization + {$I blkmregunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/BLKMREGUNIT.lfm b/applications/lazstats/source_orig/BLKMREGUNIT.lfm new file mode 100644 index 000000000..088ac8f8f --- /dev/null +++ b/applications/lazstats/source_orig/BLKMREGUNIT.lfm @@ -0,0 +1,406 @@ +object BlkMregFrm: TBlkMregFrm + Left = 131 + Height = 331 + Top = 97 + Width = 613 + Caption = 'Block Entry Multiple Regression' + ClientHeight = 331 + ClientWidth = 613 + OnShow = FormShow + LCLVersion = '1.0.2.0' + object Label1: TLabel + Left = 6 + Height = 16 + Top = 8 + Width = 99 + Caption = 'Available Variables' + ParentColor = False + end + object Label2: TLabel + Left = 217 + Height = 16 + Top = 40 + Width = 104 + Caption = 'Dependent Variable' + ParentColor = False + end + object Label3: TLabel + Left = 214 + Height = 16 + Top = 112 + Width = 168 + Caption = 'Independent Var.s for this block' + ParentColor = False + end + object Label4: TLabel + Left = 181 + Height = 16 + Top = 12 + Width = 55 + Caption = 'Block No. ' + ParentColor = False + end + object Label5: TLabel + Left = 383 + Height = 16 + Top = 11 + Width = 164 + Caption = 'Minimum Prob. to enter block:' + ParentColor = False + end + object VarList: TListBox + Left = 6 + Height = 297 + Top = 23 + Width = 161 + ItemHeight = 0 + MultiSelect = True + TabOrder = 0 + end + object DepInBtn: TBitBtn + Left = 176 + Height = 29 + Top = 40 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = DepInBtnClick + TabOrder = 1 + end + object DepOutBtn: TBitBtn + Left = 176 + Height = 29 + Top = 72 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = DepOutBtnClick + TabOrder = 2 + end + object InBtn: TBitBtn + Left = 176 + Height = 29 + Top = 144 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = InBtnClick + TabOrder = 3 + end + object OutBtn: TBitBtn + Left = 176 + Height = 29 + Top = 176 + Width = 32 + 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 + } + NumGlyphs = 0 + OnClick = OutBtnClick + TabOrder = 4 + end + object AllBtn: TBitBtn + Left = 176 + Height = 29 + Top = 216 + Width = 32 + Caption = 'ALL' + NumGlyphs = 0 + OnClick = AllBtnClick + TabOrder = 5 + end + object DepVar: TEdit + Left = 216 + Height = 23 + Top = 56 + Width = 146 + TabOrder = 6 + Text = 'DepVar' + end + object BlockList: TListBox + Left = 214 + Height = 192 + Top = 128 + Width = 150 + ItemHeight = 0 + TabOrder = 7 + end + object BlockNoEdit: TEdit + Left = 239 + Height = 23 + Top = 5 + Width = 37 + TabOrder = 8 + Text = 'BlockNoEdit' + end + object NextBlkBtn: TButton + Left = 288 + Height = 25 + Top = 1 + Width = 72 + Caption = 'Next Block' + OnClick = NextBlkBtnClick + TabOrder = 9 + end + object InProb: TEdit + Left = 552 + Height = 23 + Top = 5 + Width = 44 + TabOrder = 10 + Text = 'InProb' + end + object GroupBox1: TGroupBox + Left = 382 + Height = 209 + Top = 40 + Width = 216 + Caption = 'Options' + ClientHeight = 191 + ClientWidth = 212 + TabOrder = 11 + object CPChkBox: TCheckBox + Left = 6 + Height = 19 + Top = 1 + Width = 169 + Caption = 'Show Cross-Products Matrix' + TabOrder = 0 + end + object CovChkBox: TCheckBox + Left = 6 + Height = 19 + Top = 22 + Width = 197 + Caption = 'Show Variance-Covariance Matrix' + TabOrder = 1 + end + object CorrsChkBox: TCheckBox + Left = 6 + Height = 19 + Top = 43 + Width = 169 + Caption = 'Show Intercorrelation Matrix' + TabOrder = 2 + end + object MeansChkBox: TCheckBox + Left = 7 + Height = 19 + Top = 64 + Width = 87 + Caption = 'Show Means' + TabOrder = 3 + end + object VarChkBox: TCheckBox + Left = 7 + Height = 19 + Top = 85 + Width = 102 + Caption = 'Show Variances' + TabOrder = 4 + end + object SDChkBox: TCheckBox + Left = 6 + Height = 19 + Top = 109 + Width = 157 + Caption = 'Show Standard Deviations' + TabOrder = 5 + end + object MatSaveChkBox: TCheckBox + Left = 6 + Height = 19 + Top = 132 + Width = 142 + Caption = 'Save Correlation Matrix' + TabOrder = 6 + end + object PredictChkBox: TCheckBox + Left = 7 + Height = 19 + Top = 154 + Width = 195 + Caption = 'Predictions,residuals,C.I.''s to Grid' + TabOrder = 7 + end + end + object ResetBtn: TButton + Left = 382 + Height = 26 + Top = 264 + Width = 66 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 12 + end + object CancelBtn: TButton + Left = 504 + Height = 26 + Top = 264 + Width = 66 + Caption = 'Cancel' + ModalResult = 2 + OnClick = CancelBtnClick + TabOrder = 13 + end + object ComputeBtn: TButton + Left = 382 + Height = 26 + Top = 296 + Width = 66 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 14 + end + object ReturnBtn: TButton + Left = 504 + Height = 26 + Top = 296 + Width = 66 + Caption = 'Return' + ModalResult = 1 + TabOrder = 15 + end + object SaveDialog1: TSaveDialog + left = 178 + top = 264 + end +end diff --git a/applications/lazstats/source_orig/BLKMREGUNIT.lrs b/applications/lazstats/source_orig/BLKMREGUNIT.lrs new file mode 100644 index 000000000..9fc2c44d9 --- /dev/null +++ b/applications/lazstats/source_orig/BLKMREGUNIT.lrs @@ -0,0 +1,263 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TBlkMregFrm','FORMDATA',[ + 'TPF0'#11'TBlkMregFrm'#10'BlkMregFrm'#4'Left'#3#131#0#6'Height'#3'K'#1#3'Top' + +#2'a'#5'Width'#3'e'#2#7'Caption'#6#31'Block Entry Multiple Regression'#12'Cl' + +'ientHeight'#3'K'#1#11'ClientWidth'#3'e'#2#6'OnShow'#7#8'FormShow'#10'LCLVer' + +'sion'#6#7'1.0.2.0'#0#6'TLabel'#6'Label1'#4'Left'#2#6#6'Height'#2#16#3'Top'#2 + +#8#5'Width'#2'c'#7'Caption'#6#19'Available Variables'#11'ParentColor'#8#0#0#6 + +'TLabel'#6'Label2'#4'Left'#3#217#0#6'Height'#2#16#3'Top'#2'('#5'Width'#2'h'#7 + +'Caption'#6#18'Dependent Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3' + +#4'Left'#3#214#0#6'Height'#2#16#3'Top'#2'p'#5'Width'#3#168#0#7'Caption'#6' I' + +'ndependent Var.s for this block'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4 + +'Left'#3#181#0#6'Height'#2#16#3'Top'#2#12#5'Width'#2'7'#7'Caption'#6#10'Bloc' + +'k No. '#11'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'Left'#3#127#1#6'Height' + +#2#16#3'Top'#2#11#5'Width'#3#164#0#7'Caption'#6#29'Minimum Prob. to enter bl' + +'ock:'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#6#6'Height'#3 + +')'#1#3'Top'#2#23#5'Width'#3#161#0#10'ItemHeight'#2#0#11'MultiSelect'#9#8'Ta' + +'bOrder'#2#0#0#0#7'TBitBtn'#8'DepInBtn'#4'Left'#3#176#0#6'Height'#2#29#3'Top' + +#2'('#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6' + +#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0 + +#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%' + +'i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a' + +#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D' + +#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255 + +#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152 + +#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193 + +#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h' + +#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255 + +#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139 + +#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255 + +#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h' + +#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z' + +#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I' + +#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O' + +#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7 + +'OnClick'#7#13'DepInBtnClick'#8'TabOrder'#2#1#0#0#7'TBitBtn'#9'DepOutBtn'#4 + +'Left'#3#176#0#6'Height'#2#29#3'Top'#2'H'#5'Width'#2' '#10'Glyph.Data'#10':' + +#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' ' + +#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255 + +#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213 + +#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135 + +#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r' + +#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138 + +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207 + +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}' + +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14'DepOutBtnClick' + +#8'TabOrder'#2#2#0#0#7'TBitBtn'#5'InBtn'#4'Left'#3#176#0#6'Height'#2#29#3'To' + +'p'#3#144#0#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0 + +#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd' + +#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^' + +#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195 + +'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255 + +#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255 + +#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255 + +']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145 + +'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#10'InBtnClick'#8'TabOrder'#2#3#0#0#7'TBitBtn'#6'OutBtn' + +#4'Left'#3#176#0#6'Height'#2#29#3'Top'#3#176#0#5'Width'#2' '#10'Glyph.Data' + +#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0 + +#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255 + ,#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213 + +#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135 + +#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r' + +#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138 + +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207 + +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}' + +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'OutBtnClick'#8 + +'TabOrder'#2#4#0#0#7'TBitBtn'#6'AllBtn'#4'Left'#3#176#0#6'Height'#2#29#3'Top' + +#3#216#0#5'Width'#2' '#7'Caption'#6#3'ALL'#9'NumGlyphs'#2#0#7'OnClick'#7#11 + +'AllBtnClick'#8'TabOrder'#2#5#0#0#5'TEdit'#6'DepVar'#4'Left'#3#216#0#6'Heigh' + +'t'#2#23#3'Top'#2'8'#5'Width'#3#146#0#8'TabOrder'#2#6#4'Text'#6#6'DepVar'#0#0 + +#8'TListBox'#9'BlockList'#4'Left'#3#214#0#6'Height'#3#192#0#3'Top'#3#128#0#5 + +'Width'#3#150#0#10'ItemHeight'#2#0#8'TabOrder'#2#7#0#0#5'TEdit'#11'BlockNoEd' + +'it'#4'Left'#3#239#0#6'Height'#2#23#3'Top'#2#5#5'Width'#2'%'#8'TabOrder'#2#8 + +#4'Text'#6#11'BlockNoEdit'#0#0#7'TButton'#10'NextBlkBtn'#4'Left'#3' '#1#6'He' + +'ight'#2#25#3'Top'#2#1#5'Width'#2'H'#7'Caption'#6#10'Next Block'#7'OnClick'#7 + +#15'NextBlkBtnClick'#8'TabOrder'#2#9#0#0#5'TEdit'#6'InProb'#4'Left'#3'('#2#6 + +'Height'#2#23#3'Top'#2#5#5'Width'#2','#8'TabOrder'#2#10#4'Text'#6#6'InProb'#0 + +#0#9'TGroupBox'#9'GroupBox1'#4'Left'#3'~'#1#6'Height'#3#209#0#3'Top'#2'('#5 + +'Width'#3#216#0#7'Caption'#6#7'Options'#12'ClientHeight'#3#191#0#11'ClientWi' + +'dth'#3#212#0#8'TabOrder'#2#11#0#9'TCheckBox'#8'CPChkBox'#4'Left'#2#6#6'Heig' + +'ht'#2#19#3'Top'#2#1#5'Width'#3#169#0#7'Caption'#6#26'Show Cross-Products Ma' + +'trix'#8'TabOrder'#2#0#0#0#9'TCheckBox'#9'CovChkBox'#4'Left'#2#6#6'Height'#2 + +#19#3'Top'#2#22#5'Width'#3#197#0#7'Caption'#6#31'Show Variance-Covariance Ma' + +'trix'#8'TabOrder'#2#1#0#0#9'TCheckBox'#11'CorrsChkBox'#4'Left'#2#6#6'Height' + +#2#19#3'Top'#2'+'#5'Width'#3#169#0#7'Caption'#6#28'Show Intercorrelation Mat' + +'rix'#8'TabOrder'#2#2#0#0#9'TCheckBox'#11'MeansChkBox'#4'Left'#2#7#6'Height' + +#2#19#3'Top'#2'@'#5'Width'#2'W'#7'Caption'#6#10'Show Means'#8'TabOrder'#2#3#0 + +#0#9'TCheckBox'#9'VarChkBox'#4'Left'#2#7#6'Height'#2#19#3'Top'#2'U'#5'Width' + +#2'f'#7'Caption'#6#14'Show Variances'#8'TabOrder'#2#4#0#0#9'TCheckBox'#8'SDC' + +'hkBox'#4'Left'#2#6#6'Height'#2#19#3'Top'#2'm'#5'Width'#3#157#0#7'Caption'#6 + +#24'Show Standard Deviations'#8'TabOrder'#2#5#0#0#9'TCheckBox'#13'MatSaveChk' + +'Box'#4'Left'#2#6#6'Height'#2#19#3'Top'#3#132#0#5'Width'#3#142#0#7'Caption'#6 + +#23'Save Correlation Matrix'#8'TabOrder'#2#6#0#0#9'TCheckBox'#13'PredictChkB' + +'ox'#4'Left'#2#7#6'Height'#2#19#3'Top'#3#154#0#5'Width'#3#195#0#7'Caption'#6 + +'$Predictions,residuals,C.I.''s to Grid'#8'TabOrder'#2#7#0#0#0#7'TButton'#8 + +'ResetBtn'#4'Left'#3'~'#1#6'Height'#2#26#3'Top'#3#8#1#5'Width'#2'B'#7'Captio' + +'n'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#12#0#0#7'TButton' + +#9'CancelBtn'#4'Left'#3#248#1#6'Height'#2#26#3'Top'#3#8#1#5'Width'#2'B'#7'Ca' + +'ption'#6#6'Cancel'#11'ModalResult'#2#2#7'OnClick'#7#14'CancelBtnClick'#8'Ta' + +'bOrder'#2#13#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3'~'#1#6'Height'#2#26#3 + +'Top'#3'('#1#5'Width'#2'B'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBt' + +'nClick'#8'TabOrder'#2#14#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#248#1#6'Heig' + ,'ht'#2#26#3'Top'#3'('#1#5'Width'#2'B'#7'Caption'#6#6'Return'#11'ModalResult' + +#2#1#8'TabOrder'#2#15#0#0#11'TSaveDialog'#11'SaveDialog1'#4'left'#3#178#0#3 + +'top'#3#8#1#0#0#0 +]); diff --git a/applications/lazstats/source_orig/BlankUnit.lfm b/applications/lazstats/source_orig/BlankUnit.lfm new file mode 100644 index 000000000..3ba2118a3 --- /dev/null +++ b/applications/lazstats/source_orig/BlankUnit.lfm @@ -0,0 +1,56 @@ +object BlankFrm: TBlankFrm + Left = 37 + Top = 21 + BorderStyle = bsDialog + Caption = 'Test Item Administration' + ClientHeight = 514 + ClientWidth = 623 + Color = clBtnFace + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Times New Roman' + Font.Style = [] + OnShow = FormShow + PixelsPerInch = 96 + object Label1: TLabel + Left = 8 + Top = 488 + Width = 37 + Height = 14 + Caption = 'Answer:' + end + object Image1: TImage + Left = 0 + Top = 0 + Width = 623 + Height = 449 + Align = alTop + end + object ContinueBtn: TButton + Left = 544 + Top = 480 + Width = 73 + Height = 25 + Caption = 'Continue' + ModalResult = 1 + TabOrder = 0 + OnClick = ContinueBtnClick + end + object AnswerEdit: TEdit + Left = 48 + Top = 480 + Width = 33 + Height = 22 + TabOrder = 1 + end + object AnswerMemo: TMemo + Left = 48 + Top = 456 + Width = 481 + Height = 49 + ScrollBars = ssVertical + TabOrder = 2 + Visible = False + end +end diff --git a/applications/lazstats/source_orig/BlankUnit.pas b/applications/lazstats/source_orig/BlankUnit.pas new file mode 100644 index 000000000..b88c5c196 --- /dev/null +++ b/applications/lazstats/source_orig/BlankUnit.pas @@ -0,0 +1,388 @@ +unit BlankUnit; + +{$MODE Delphi} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, ExtCtrls, ItemBankGlobals, FunctionsUnit; + +type + TBlankFrm = class(TForm) + ContinueBtn: TButton; + Label1: TLabel; + AnswerEdit: TEdit; + Image1: TImage; + AnswerMemo: TMemo; + procedure ContinueBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + private + { Private declarations } + FontHi, FontWide, Indent, LineWidth, LineHi, PageHi, PageWide : integer; + ImageHi, ImageWide, linecnt : integer; + Grect : TRect; + Bitmap : TBitmap; + R1 : MatchItemsRcd; + R2 : BlankItemRcd; + R3 : MCItemRcd; + R4 : EssayItemRcd; + R5 : TFItemRcd; + public + { Public declarations } + Response : string; + CorrectAnswer : string; + Cont : boolean; + itemtype, itemno, item : integer; + procedure ShowMCItem(Sender : TObject; itemno,item : integer); + procedure ShowTFItem(Sender : TObject; itemno,item : integer); + procedure ShowMAItem(Sender : TObject; itemno,item : integer); + procedure ShowCOItem(Sender : TObject; itemno,item : integer); + procedure ShowESItem(Sender : TObject; itemno,item : integer); + end; + +var + BlankFrm: TBlankFrm; + +implementation + +uses CompTestUnit; + +{$R *.lfm} + +procedure TBlankFrm.ContinueBtnClick(Sender: TObject); +var + i : integer; + +begin + Response := ''; + case itemtype of + 1,2 : Response := AnswerEdit.Text; // MC, TF items + 3,4,5 : begin // MA, CO items + for i := 0 to AnswerMemo.Lines.Count-1 do + Response := Response + AnswerMemo.Lines[i]; + end; + end; + Cont := true; + BlankFrm.Hide; +end; +//------------------------------------------------------------------- +procedure TBlankFrm.ShowMCItem(Sender : TObject; itemno,item : integer); +var + i, j : integer; + S : string; + X, Y : integer; + +begin + ReadMCItem(item, R3); + CorrectAnswer := ''; + for i := 1 to 5 do + begin + if R3.CorWeights[i] > 0.0 then + begin + CorrectAnswer := CorrectAnswer + R3.CorChoices[i] + '*' + FloatToStr(R3.CorWeights[i]); + if i < 5 then CorrectAnswer := CorrectAnswer + ' '; + end; + end; + linecnt := 1; + Y := linecnt * LineHi; + X := indent; + S := format('Item %d (Multiple Choice)',[itemno]); + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 1; + if length(R3.Picture) > 0 then + begin + Grect.Top := linecnt * LineHi; + Grect.Left := indent; + Grect.Right := (3 * ClientWidth div 4) - indent; + Grect.Bottom := Grect.Top + ClientHeight div 3; + BitMap := TBitMap.Create; + if FileExists(R3.Picture) { *Converted from FileExists* } then + begin + Bitmap.LoadFromFile(R3.Picture); + Image1.Canvas.stretchdraw(Grect,Bitmap); + end + else ShowMessage('Image ' + R3.Picture + ' missing.'); + Bitmap.Free; + linecnt := linecnt + (ClientHeight div 3) div LineHi; + linecnt := linecnt + 2; + end; + for j := 1 to 10 do + begin + if length(R3.ItemStem[j]) > 0 then + begin + S := trim(R3.ItemStem[j]); + X := indent; + Y := linecnt * LineHi; + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 1; + end; + end; + for j := 1 to 5 do + begin + if length(R3.Choices[j]) > 0 then + begin + S := chr(j-1 + ord('A')) + ': '; + S := S + R3.Choices[j]; + X := indent + 50; + Y := linecnt * LineHi; + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 1; + end; + end; +end; +//------------------------------------------------------------------- + +procedure TBlankFrm.ShowTFItem(Sender : TObject; itemno,item : integer); +var + j : integer; + S : string; + X, Y : integer; + +begin + ReadTFItem(item,R5); + CorrectAnswer := ''; + CorrectAnswer := CorrectAnswer + R5.CorChoice; + linecnt := 1; + Y := linecnt * LineHi; + X := indent; + S := format('Item %d (True-False)',[itemno]); + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 1; + if length(R5.Picture) > 0 then + begin + Grect.Top := linecnt * LineHi; + Grect.Left := indent; + Grect.Right := (3 * ClientWidth div 4) - indent; + Grect.Bottom := Grect.Top + ClientHeight div 3; + BitMap := TBitMap.Create; + if FileExists(R5.Picture) { *Converted from FileExists* } then + begin + Bitmap.LoadFromFile(R5.Picture); + Image1.Canvas.stretchdraw(Grect,Bitmap); + end + else ShowMessage('Image ' + R5.Picture + ' missing.'); + Bitmap.Free; + linecnt := linecnt + (ClientHeight div 3) div LineHi; + linecnt := linecnt + 2; + end; + for j := 1 to 10 do + begin + if length(R5.ItemStem[j]) > 0 then + begin + S := trim(R5.ItemStem[j]); + X := indent; + Y := linecnt * LineHi; + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 1; + end; + end; + S := chr(ord('A')) + ': '; + S := S + 'TRUE'; + X := indent + 50; + Y := linecnt * LineHi; + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 1; + S := chr(1 + ord('A')) + ': '; + S := S + 'FALSE'; + X := indent + 50; + Y := linecnt * LineHi; + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 1; +end; +//------------------------------------------------------------------- + +procedure TBlankFrm.ShowMAItem(Sender : TObject; itemno,item : integer); +var + i,j : integer; + S : string; + X, Y : integer; + anscol, itemstartY : integer; + +begin + linecnt := 1; + anscol := indent + Image1.Width div 2; + ReadMAItem(item, R1); + CorrectAnswer := ''; + for i := 1 to R1.NoItems do + begin + CorrectAnswer := CorrectAnswer + R1.CorChoices[i]; + if i < R1.NoItems then CorrectAnswer := CorrectAnswer + ', '; + end; + X := 1; + Y := linecnt * LineHi; + S := 'Directions: Enter a sequence of letter choices separated by commas'; + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 1; + Y := linecnt * LineHi; + S := ' in the answer area below the items.'; + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 2; + Y := linecnt * LineHi; + X := 1; + S := format('Matching Item Set %d',[R1.SetNo]); + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 1; + if length(R1.Picture) > 0 then + begin + Grect.Top := linecnt * LineHi; + Grect.Left := indent; + Grect.Right := (3 * ClientWidth div 4) - indent; + Grect.Bottom := Grect.Top + ClientHeight div 3; + BitMap := TBitMap.Create; + if FileExists(R1.Picture) { *Converted from FileExists* } then + begin + Bitmap.LoadFromFile(R1.Picture); + Image1.Canvas.stretchdraw(Grect,Bitmap); + end + else ShowMessage('Image ' + R1.Picture + ' missing.'); + Bitmap.Free; + linecnt := linecnt + (ClientHeight div 3) div LineHi; + linecnt := linecnt + 2; + end; + itemstartY := linecnt; + for j := 1 to R1.NoItems do + begin + X := 1; + Y := linecnt * LineHi; + S := format('Item %d (Matching Item)',[itemno]); + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 1; + S := trim(R1.ItemStems[j]); + X := 10; + Y := linecnt * LineHi; + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 1; + itemno := itemno + 1; + end; + linecnt := itemstartY; + for j := 1 to R1.NoChoices do + begin + S := chr(j-1 + ord('A')) + ': '; + S := S + trim(R1.ItemChoices[j]); + X := anscol; + Y := linecnt * LineHi; + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 2; + end; + CompTestFrm.itemno := itemno - 1; +end; +//------------------------------------------------------------------- + +procedure TBlankFrm.ShowCOItem(Sender : TObject; itemno,item : integer); +var + j : integer; + S : string; + X, Y : integer; + +begin + linecnt := 1; + ReadCOItem(item,R2); + CorrectAnswer := ''; + CorrectAnswer := CorrectAnswer + R2.BestAns; + Y := linecnt * LineHi; + X := indent; + S := format('Item %d (Completion)',[itemno]); + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 1; + if length(R2.Picture) > 0 then + begin + Grect.Top := linecnt * LineHi; + Grect.Left := indent; + Grect.Right := (3 * ClientWidth div 4) - indent; + Grect.Bottom := Grect.Top + ClientHeight div 3; + BitMap := TBitMap.Create; + if FileExists(R2.Picture) { *Converted from FileExists* } then + begin + Bitmap.LoadFromFile(R2.Picture); + Image1.Canvas.stretchdraw(Grect,Bitmap); + end + else ShowMessage('Image ' + R2.Picture + ' missing.'); + Bitmap.Free; + linecnt := linecnt + (ClientHeight div 3) div LineHi; + linecnt := linecnt + 2; + end; + for j := 1 to 10 do + begin + if length(R2.ItemStem[j]) > 0 then + begin + S := trim(R2.ItemStem[j]); + X := indent; + Y := linecnt * LineHi; + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 1; + end; + end; +end; +//------------------------------------------------------------------- + +procedure TBlankFrm.ShowESItem(Sender : TObject; itemno,item : integer); +var + j : integer; + S : string; + X, Y : integer; + +begin + linecnt := 1; + ReadESItem(item, R4); + CorrectAnswer := 'None Given'; + Y := linecnt * LineHi; + X := indent; + S := format('Item %d (Essay Item)',[itemno]); + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 1; + if length(R4.Picture) > 0 then + begin + Grect.Top := linecnt * LineHi; + Grect.Left := indent; + Grect.Right := (3 * ClientWidth div 4) - indent; + Grect.Bottom := Grect.Top + ClientHeight div 3; + BitMap := TBitMap.Create; + if FileExists(R4.Picture) { *Converted from FileExists* } then + begin + Bitmap.LoadFromFile(R4.Picture); + Image1.Canvas.stretchdraw(Grect,Bitmap); + end + else ShowMessage('Image ' + R4.Picture + ' missing.'); + Bitmap.Free; + linecnt := linecnt + (ClientHeight div 3) div LineHi; + linecnt := linecnt + 2; + end; + for j := 1 to 20 do + begin + if length(R4.ItemStem[j]) > 0 then + begin + S := trim(R4.ItemStem[j]); + X := indent; + Y := linecnt * LineHi; + Image1.Canvas.TextOut(X,Y,S); + linecnt := linecnt + 1; + end; + end; +end; +//------------------------------------------------------------------- + +procedure TBlankFrm.FormShow(Sender: TObject); +begin + // setup parameters + FontHi := Image1.Canvas.TextHeight('M'); + FontWide := Image1.Canvas.TextWidth('M'); + Indent := 10 * FontWide; + LineWidth := 60 * FontWide; + LineHi := FontHi + 5; + PageHi := Image1.ClientHeight; + ImageHi := PageHi; + PageWide := Image1.ClientWidth; + ImageWide := PageWide; + Image1.Canvas.Brush.Color := clWhite; + Image1.Canvas.Rectangle(0,0,ImageWide,ImageHi); + case itemtype of + 1: ShowMCItem(Self,itemno,item); + 2: ShowTFItem(Self,itemno,item); + 3: ShowMAItem(Self,itemno,item); + 4: ShowCOItem(Self,itemno,item); + 5: ShowESItem(Self,itemno,item); + end; +end; + +end. diff --git a/applications/lazstats/source_orig/abcnestedunit.lfm b/applications/lazstats/source_orig/abcnestedunit.lfm new file mode 100644 index 000000000..0151fe300 --- /dev/null +++ b/applications/lazstats/source_orig/abcnestedunit.lfm @@ -0,0 +1,542 @@ +object ABCNestedForm: TABCNestedForm + Left = 288 + Height = 504 + Top = 161 + Width = 726 + Caption = 'ABCNestedForm' + ClientHeight = 504 + ClientWidth = 726 + OnShow = ResetBtnClick + LCLVersion = '0.9.30' + object Label1: TLabel + Left = 16 + Height = 16 + Top = 8 + Width = 102 + Caption = 'Available Variables:' + ParentColor = False + end + object Label2: TLabel + Left = 255 + Height = 16 + Top = 24 + Width = 90 + Caption = 'Factor A Variable' + ParentColor = False + end + object Label3: TLabel + Left = 255 + Height = 16 + Top = 96 + Width = 116 + Caption = 'Factor B (Nested in A)' + ParentColor = False + end + object Label4: TLabel + Left = 248 + Height = 16 + Top = 240 + Width = 104 + Caption = 'Dependent Variable' + ParentColor = False + end + object VarList: TListBox + Left = 16 + Height = 344 + Top = 24 + Width = 181 + ItemHeight = 0 + MultiSelect = True + TabOrder = 0 + end + object AInBtn: TBitBtn + Left = 211 + Height = 26 + Top = 24 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = AInBtnClick + TabOrder = 1 + end + object AOutBtn: TBitBtn + Left = 211 + Height = 26 + Top = 56 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = AOutBtnClick + TabOrder = 2 + end + object BInBtn: TBitBtn + Left = 210 + Height = 26 + Top = 96 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = BInBtnClick + TabOrder = 3 + end + object BOutBtn: TBitBtn + Left = 210 + Height = 26 + Top = 128 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = BOutBtnClick + TabOrder = 4 + end + object DepInBtn: TBitBtn + Left = 211 + Height = 26 + Top = 240 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = DepInBtnClick + TabOrder = 5 + end + object DepOutBtn: TBitBtn + Left = 211 + Height = 26 + Top = 272 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = DepOutBtnClick + TabOrder = 6 + end + object FactorAEdit: TEdit + Left = 255 + Height = 23 + Top = 40 + Width = 139 + TabOrder = 7 + Text = 'FactorAEdit' + end + object FactorBEdit: TEdit + Left = 255 + Height = 23 + Top = 112 + Width = 138 + TabOrder = 8 + Text = 'FactorBEdit' + end + object ResetBtn: TButton + Left = 24 + Height = 27 + Top = 392 + Width = 89 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 9 + end + object CancelBtn: TButton + Left = 24 + Height = 27 + Top = 440 + Width = 89 + Cancel = True + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 10 + end + object ComputeBtn: TButton + Left = 200 + Height = 27 + Top = 392 + Width = 89 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 11 + end + object ReturnBtn: TButton + Left = 200 + Height = 27 + Top = 440 + Width = 89 + Caption = 'Return' + ModalResult = 1 + TabOrder = 12 + end + object DepEdit: TEdit + Left = 248 + Height = 23 + Top = 256 + Width = 132 + TabOrder = 13 + Text = 'DepEdit' + end + object OptionsBox: TRadioGroup + Left = 423 + Height = 131 + Top = 344 + Width = 273 + AutoFill = True + Caption = 'OptionsBox' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 113 + ClientWidth = 269 + 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 = 14 + end + object Memo1: TMemo + Left = 424 + Height = 320 + Top = 8 + Width = 272 + Lines.Strings = ( + 'Directions: This analysis assumes that levels of ' + 'Factor B are Nested within levels of Factor A.' + 'It is assumed that all factors are fixed level ' + 'factors.' + '' + 'The 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.' + '' + 'Click 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.' + ) + TabOrder = 15 + end + object CInBtn: TBitBtn + Left = 210 + Height = 26 + Top = 168 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = CInBtnClick + TabOrder = 16 + end + object COutBtn: TBitBtn + Left = 210 + Height = 26 + Top = 200 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = COutBtnClick + TabOrder = 17 + end + object FactorCEdit: TEdit + Left = 253 + Height = 23 + Top = 186 + Width = 139 + TabOrder = 18 + Text = 'FactorCEdit' + end + object Label5: TLabel + Left = 253 + Height = 16 + Top = 168 + Width = 90 + Caption = 'Factor C Variable' + ParentColor = False + end +end diff --git a/applications/lazstats/source_orig/abcnestedunit.lrs b/applications/lazstats/source_orig/abcnestedunit.lrs new file mode 100644 index 000000000..cd638cc40 --- /dev/null +++ b/applications/lazstats/source_orig/abcnestedunit.lrs @@ -0,0 +1,468 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TABCNestedForm','FORMDATA',[ + 'TPF0'#14'TABCNestedForm'#13'ABCNestedForm'#4'Left'#3' '#1#6'Height'#3#248#1#3 + +'Top'#3#161#0#5'Width'#3#214#2#7'Caption'#6#13'ABCNestedForm'#12'ClientHeigh' + +'t'#3#248#1#11'ClientWidth'#3#214#2#6'OnShow'#7#13'ResetBtnClick'#10'LCLVers' + +'ion'#6#6'0.9.30'#0#6'TLabel'#6'Label1'#4'Left'#2#16#6'Height'#2#16#3'Top'#2 + +#8#5'Width'#2'f'#7'Caption'#6#20'Available Variables:'#11'ParentColor'#8#0#0 + +#6'TLabel'#6'Label2'#4'Left'#3#255#0#6'Height'#2#16#3'Top'#2#24#5'Width'#2'Z' + +#7'Caption'#6#17'Factor A Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3' + +#4'Left'#3#255#0#6'Height'#2#16#3'Top'#2'`'#5'Width'#2't'#7'Caption'#6#22'Fa' + +'ctor B (Nested in A)'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#3 + +#248#0#6'Height'#2#16#3'Top'#3#240#0#5'Width'#2'h'#7'Caption'#6#18'Dependent' + +' Variable'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#16#6'Heig' + +'ht'#3'X'#1#3'Top'#2#24#5'Width'#3#181#0#10'ItemHeight'#2#0#11'MultiSelect'#9 + +#8'TabOrder'#2#0#0#0#7'TBitBtn'#6'AInBtn'#4'Left'#3#211#0#6'Height'#2#26#3'T' + +'op'#2#24#5'Width'#2#30#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0 + +#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0 + +#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^' + +#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195 + +'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255 + +#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255 + +#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255 + +']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145 + +'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#11'AInBtnClick'#8'TabOrder'#2#1#0#0#7'TBitBtn'#7'AOutB' + ,'tn'#4'Left'#3#211#0#6'Height'#2#26#3'Top'#2'8'#5'Width'#2#30#10'Glyph.Data' + +#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0 + +#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255 + +#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213 + +#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135 + +#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r' + +#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138 + +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207 + +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}' + +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#12'AOutBtnClick'#8 + +'TabOrder'#2#2#0#0#7'TBitBtn'#6'BInBtn'#4'Left'#3#210#0#6'Height'#2#26#3'Top' + +#2'`'#5'Width'#2#30#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6' + +#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0 + +#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%' + +'i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a' + +#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D' + +#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255 + +#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152 + +#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193 + +#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h' + +#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255 + +#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139 + +#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255 + +#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h' + +#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z' + +#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I' + +#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O' + +#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7 + +'OnClick'#7#11'BInBtnClick'#8'TabOrder'#2#3#0#0#7'TBitBtn'#7'BOutBtn'#4'Left' + +#3#210#0#6'Height'#2#26#3'Top'#3#128#0#5'Width'#2#30#10'Glyph.Data'#10':'#4#0 + +#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0 + +#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h' + +#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255 + +';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255 + +#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152 + +#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255 + ,#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!' + +'c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216 + +#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142 + +#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255 + +'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't' + +#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199 + +'t'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't' + +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#12'BOutBtnClick'#8'TabOrd' + +'er'#2#4#0#0#7'TBitBtn'#8'DepInBtn'#4'Left'#3#211#0#6'Height'#2#26#3'Top'#3 + +#240#0#5'Width'#2#30#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0 + +'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0 + +#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^' + +#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195 + +'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255 + +#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255 + +#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255 + +']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145 + +'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#13'DepInBtnClick'#8'TabOrder'#2#5#0#0#7'TBitBtn'#9'Dep' + +'OutBtn'#4'Left'#3#211#0#6'Height'#2#26#3'Top'#3#16#1#5'Width'#2#30#10'Glyph' + +'.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16 + +#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255 + +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$' + +#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156 + +#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255 + +#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255 + +'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138 + +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207 + +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}' + +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14'DepOutBtnClick' + +#8'TabOrder'#2#6#0#0#5'TEdit'#11'FactorAEdit'#4'Left'#3#255#0#6'Height'#2#23 + +#3'Top'#2'('#5'Width'#3#139#0#8'TabOrder'#2#7#4'Text'#6#11'FactorAEdit'#0#0#5 + +'TEdit'#11'FactorBEdit'#4'Left'#3#255#0#6'Height'#2#23#3'Top'#2'p'#5'Width'#3 + +#138#0#8'TabOrder'#2#8#4'Text'#6#11'FactorBEdit'#0#0#7'TButton'#8'ResetBtn'#4 + +'Left'#2#24#6'Height'#2#27#3'Top'#3#136#1#5'Width'#2'Y'#7'Caption'#6#5'Reset' + +#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#9#0#0#7'TButton'#9'CancelBtn'#4 + +'Left'#2#24#6'Height'#2#27#3'Top'#3#184#1#5'Width'#2'Y'#6'Cancel'#9#7'Captio' + +'n'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#10#0#0#7'TButton'#10'Compu' + +'teBtn'#4'Left'#3#200#0#6'Height'#2#27#3'Top'#3#136#1#5'Width'#2'Y'#7'Captio' + +'n'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#11#0#0#7'TBu' + +'tton'#9'ReturnBtn'#4'Left'#3#200#0#6'Height'#2#27#3'Top'#3#184#1#5'Width'#2 + +'Y'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#12#0#0#5'TEdit' + +#7'DepEdit'#4'Left'#3#248#0#6'Height'#2#23#3'Top'#3#0#1#5'Width'#3#132#0#8'T' + +'abOrder'#2#13#4'Text'#6#7'DepEdit'#0#0#11'TRadioGroup'#10'OptionsBox'#4'Lef' + +'t'#3#167#1#6'Height'#3#131#0#3'Top'#3'X'#1#5'Width'#3#17#1#8'AutoFill'#9#7 + +'Caption'#6#10'OptionsBox'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizi' + +'ng.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogeno' + +'usChildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildResiz' + +'e'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.Shr' + +'inkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRigh' + +'tThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight'#2'q' + +#11'ClientWidth'#3#13#1#13'Items.Strings'#1#6'#Plot means using 2D Horizonta' + +'l Bars'#6'#Plot means using 3D Horizontal Bars'#6'!Plot means using 2D Vert' + +'ical Bars'#6'!Plot means using 3D Vertical Bars'#0#8'TabOrder'#2#14#0#0#5'T' + +'Memo'#5'Memo1'#4'Left'#3#168#1#6'Height'#3'@'#1#3'Top'#2#8#5'Width'#3#16#1 + +#13'Lines.Strings'#1#6'2Directions: This analysis assumes that levels of '#6 + +'.Factor B are Nested within levels of Factor A.'#6'/It is assumed that all ' + +'factors are fixed level '#6#8'factors.'#6#0#6',The variables for the group ' + +'coding should be'#6'-defined as integers. The dependent variable '#6'/shou' + +'ld be defined as a floating point variable.'#6'-The number of cases for eac' + +'h ABC group should'#6'.be equal and the number of B treatments in in '#6'.e' + +'ach A level should be equal. The number of C'#6'/treatment levels should b' + +'e the same for each AB'#6#12'combination.'#6#0#6'3Click the variable for ea' + +'ch factor variable and the'#6'/corresponding arrow to enter it in the edit ' + +'box'#6'3for that variable. Select the type of plot desired'#6'1for the mea' + +'ns (if any.) Click the Compute button'#6#12'to continue.'#0#8'TabOrder'#2 + +#15#0#0#7'TBitBtn'#6'CInBtn'#4'Left'#3#210#0#6'Height'#2#26#3'Top'#3#168#0#5 + +'Width'#2#30#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0 + +'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0 + +#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)' + +#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190 + +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255 + +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139 + +'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160 + +#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255 + +#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128 + +#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199 + ,'t'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150 + +#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255 + +#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255 + +#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255 + +'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163 + +'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247 + +';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187 + +'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnCl' + +'ick'#7#11'CInBtnClick'#8'TabOrder'#2#16#0#0#7'TBitBtn'#7'COutBtn'#4'Left'#3 + +#210#0#6'Height'#2#26#3'Top'#3#200#0#5'Width'#2#30#10'Glyph.Data'#10':'#4#0#0 + +'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0 + +#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h' + +#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255 + +';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255 + +#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152 + +#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255 + +#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!' + +'c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216 + +#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142 + +#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255 + +'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't' + +#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199 + +'t'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't' + +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#12'COutBtnClick'#8'TabOrd' + +'er'#2#17#0#0#5'TEdit'#11'FactorCEdit'#4'Left'#3#253#0#6'Height'#2#23#3'Top' + +#3#186#0#5'Width'#3#139#0#8'TabOrder'#2#18#4'Text'#6#11'FactorCEdit'#0#0#6'T' + +'Label'#6'Label5'#4'Left'#3#253#0#6'Height'#2#16#3'Top'#3#168#0#5'Width'#2'Z' + +#7'Caption'#6#17'Factor C Variable'#11'ParentColor'#8#0#0#0 +]); diff --git a/applications/lazstats/source_orig/abcnestedunit.pas b/applications/lazstats/source_orig/abcnestedunit.pas new file mode 100644 index 000000000..806a5bb26 --- /dev/null +++ b/applications/lazstats/source_orig/abcnestedunit.pas @@ -0,0 +1,952 @@ +unit ABCNestedUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, ExtCtrls, MainUnit, OutPutUnit, FunctionsLib, GraphLib, + Globals, DataProcs, MatrixLib; + +type + + { TABCNestedForm } + + TABCNestedForm = class(TForm) + FactorCEdit: TEdit; + FactorAEdit: TEdit; + AInBtn: TBitBtn; + AOutBtn: TBitBtn; + FactorBEdit: TEdit; + BInBtn: TBitBtn; + BOutBtn: TBitBtn; + CancelBtn: TButton; + ComputeBtn: TButton; + DepEdit: TEdit; + DepInBtn: TBitBtn; + CInBtn: TBitBtn; + DepOutBtn: TBitBtn; + COutBtn: TBitBtn; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + Memo1: TMemo; + OptionsBox: TRadioGroup; + ResetBtn: TButton; + ReturnBtn: TButton; + VarList: TListBox; + procedure AInBtnClick(Sender: TObject); + procedure AOutBtnClick(Sender: TObject); + procedure BInBtnClick(Sender: TObject); + procedure BOutBtnClick(Sender: TObject); + procedure CInBtnClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure COutBtnClick(Sender: TObject); + procedure DepInBtnClick(Sender: TObject); + procedure DepOutBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + CellCount : IntDyneCube; + ASS, BSS, CSS, ASumSqr, BSumSqr, CSumSqr, AMeans, BMeans, ASDs : DblDyneVec; + CMeans, BSDs, CSDs : DblDyneVec; + ACSS,ACSumSqr, ACMeans, ACSDs, ABSS, ABSumSqr, ABMeans, ABSDs : DblDyneMat; + ACount, BCount, CCount : IntDyneVec; + ACCount, ABCount : IntDyneMat; + CellSDs, SS, SumSqr, CellMeans : DblDyneCube; + MinA, MinB, MaxA, MaxB, NoALevels, NoBLevels, ACol, BCol, YCol : integer; + CCol, MinC, MaxC, NoCLevels : integer; + DepVar, FactorA, FactorB, FactorC : string; + SSTot, SumSqrTot, TotMean, MSTot, SSA, MSA, SSB, MSB, SSW, MSW : double; + SSC, MSC, SSAC, MSAC, SSBwAC, SSAB, MSBwAC : double; + TotN, dfA, dfBwA, dfwcell, dftotal, dfC, dfAC, dfBwAC : integer; + ColNoSelected : IntDyneVec; + + procedure GetVars(Sender: TObject); + procedure GetMemory(Sender: TOBject); + procedure GetSums(Sender: TObject); + procedure ShowMeans(Sender: TObject); + procedure GetResults(Sender: TObject); + procedure ShowResults(Sender: TObject); + procedure ReleaseMemory(Sender: TObject); + procedure TwoWayPlot(Sender: TObject); + + public + { public declarations } + end; + +var + ABCNestedForm: TABCNestedForm; + +implementation + +{ TABCNestedForm } + +procedure TABCNestedForm.ResetBtnClick(Sender: TObject); +VAR + i : integer; +begin + VarList.Items.Clear; + FactorAEdit.Text := ''; + FactorBEdit.Text := ''; + FactorCEdit.Text := ''; + DepEdit.Text := ''; + AInBtn.Visible := true; + AOutBtn.Visible := false; + BInBtn.Visible := true; + BOutBtn.Visible := false; + CInBtn.Visible := true; + COutBtn.Visible := false; + DepInBtn.Visible := true; + DepoutBtn.Visible := false; + OptionsBox.ItemIndex := 3; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + OptionsBox.ItemIndex := 3; +end; + +procedure TABCNestedForm.AInBtnClick(Sender: TObject); +VAR + index : integer; +begin + index := VarList.ItemIndex; + FactorAEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + AinBtn.Visible := false; + AOutBtn.Visible := true; +end; + +procedure TABCNestedForm.AOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(FactorAEdit.Text); + FactorAEdit.Text := ''; + AinBtn.Visible := true; + AOutBtn.Visible := false; +end; + +procedure TABCNestedForm.BInBtnClick(Sender: TObject); +VAR + index : integer; +begin + index := VarList.ItemIndex; + FactorBEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + BInBtn.Visible := false; + BOutBtn.Visible := true; +end; + +procedure TABCNestedForm.BOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(FactorBEdit.Text); + FactorBEdit.Text := ''; + BInBtn.Visible := true; + BOutBtn.Visible := false; +end; + +procedure TABCNestedForm.CInBtnClick(Sender: TObject); +VAR + index : integer; +begin + index := VarList.ItemIndex; + FactorCEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + BInBtn.Visible := false; + BOutBtn.Visible := true; +end; + +procedure TABCNestedForm.ComputeBtnClick(Sender: TObject); +begin + GetVars(self); + GetMemory(self); + GetSums(self); + ShowMeans(self); + GetResults(self); + ShowResults(self); + TwoWayPlot(self); + ReleaseMemory(self); +end; + +procedure TABCNestedForm.COutBtnClick(Sender: TObject); +begin + VarList.Items.Add(FactorCEdit.Text); + FactorCEdit.Text := ''; + BInBtn.Visible := true; + BOutBtn.Visible := false; +end; + +procedure TABCNestedForm.DepInBtnClick(Sender: TObject); +VAR + index : integer; +begin + index := VarList.ItemIndex; + DepEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + DepOutBtn.Visible := true; + DepInBtn.Visible := false; +end; + +procedure TABCNestedForm.DepOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(DepEdit.Text); + DepEdit.Text := ''; + DepInBtn.Visible := true; + DepOutBtn.Visible := false; +end; + +procedure TABCNestedForm.GetVars(Sender: TObject); +VAR + result, intvalue, i, group : integer; + AValue, BValue, CValue, dblvalue : double; + strvalue, cellstring : string; +begin + SetLength(ColNoSelected,4); + DepVar := DepEdit.Text; + FactorA := FactorAEdit.Text; + FactorB := FactorBEdit.Text; + FactorC := FactorCEdit.Text; + ACol := 0; + BCol := 0; + CCol := 0; + YCol := 0; + MinA := 1000; + MaxA := -1000; + MinB := 1000; + MaxB := -1000; + MinC := 1000; + MaxC := -1000; + for i := 1 to NoVariables do + begin + strvalue := Trim(OS3MainFrm.DataGrid.Cells[i,0]); + if FactorA = strvalue then + begin + ACol := i; + ColNoSelected[0] := i; + end; + if FactorB = strvalue then + begin + BCol := i; + ColNoSelected[1] := i; + end; + if FactorC = strvalue then + begin + CCol := i; + ColNoSelected[2] := i; + end; + if DepVar = strvalue then + begin + YCol := i; + ColNoSelected[3] := i; + end; + end; + if (ACol = 0) or (BCol = 0) or (CCol = 0) or (YCol = 0) then + begin + ShowMessage('ERROR! Select a variable for each entry box.'); + 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; +end; + +procedure TABCNestedForm.GetMemory(Sender: TOBject); +begin + SetLength(SS,NoBLevels,NoALevels,NoCLevels); + SetLength(SumSqr,NoBLevels,NoALevels,NoCLevels); + SetLength(CellCount,NoBLevels,NoALevels,NoCLevels); + SetLength(CellMeans,NoBLevels,NoALevels,NoCLevels); + SetLength(CellSDs,NoBLevels,NoALevels,NoCLevels); + SetLength(ASS,NoALevels); + SetLength(BSS,NoBLevels); + SetLength(CSS,NoCLevels); + SetLength(ASumSqr,NoALevels); + SetLength(BSumSqr,NoBLevels); + SetLength(CSumSqr,NoCLevels); + SetLength(AMeans,NoALevels); + SetLength(BMeans,NoBLevels); + SetLength(CMeans,NoCLevels); + SetLength(ACount,NoALevels); + SetLength(BCount,NoBLevels); + SetLength(CCount,NoCLevels); + SetLength(ASDs,NoALevels); + SetLength(BSDs,NoBLevels); + SetLength(CSDs,NoCLevels); + SetLength(ACSS,NoALevels,NoCLevels); + SetLength(ACSumSqr,NoALevels,NoCLevels); + SetLength(ACCount,NoALevels,NoCLevels); + SetLength(ACMeans,NoALevels,NoCLevels); + SetLength(ACSDs,NoALevels,NoCLevels); + SetLength(ABSS,NoALevels,NoBLevels); + SetLength(ABSumSqr,NoALevels,NoBLevels); + SetLength(ABMeans,NoALevels,NoBLevels); + SetLength(ABCount,NoALevels,NoBLevels); + SetLength(ABSDs,NoALevels,NoBLevels); +end; + +procedure TABCNestedForm.GetSums(Sender: TObject); +VAR + Aindex, Bindex, Cindex, result, intvalue, i, j, k : integer; + dblvalue, YValue : double; + strvalue : string; +begin + // clear memory + SSTot := 0.0; + SumSqrTot := 0.0; + for i := 0 to NoBLevels-1 do + begin + for j := 0 to NoALevels-1 do + begin + for k := 0 to NoCLevels-1 do + begin + SS[i,j,k] := 0.0; + SumSqr[i,j,k] := 0.0; + CellCount[i,j,k] := 0; + CellMeans[i,j,k] := 0.0; + end; + end; + end; + + for i := 0 to NoALevels-1 do + begin + ACount[i] := 0; + AMeans[i] := 0.0; + ASS[i] := 0.0; + ASumSqr[i] := 0.0; + end; + for j := 0 to NoBLevels-1 do + begin + BCount[j] := 0; + BMeans[j] := 0.0; + BSS[j] := 0.0; + BSumSqr[j] := 0.0; + end; + for k := 0 to NoCLevels-1 do + begin + CCount[k] := 0; + CMeans[k] := 0.0; + CSS[k] := 0.0; + CSumSqr[k] := 0.0; + end; + + for i := 0 to NoALevels-1 do + begin + for j := 0 to NoBLevels-1 do + begin + ABSS[i,j] := 0.0; + ABSumSqr[i,j] := 0.0; + ABCount[i,j] := 0; + ABSDs[i,j] := 0.0; + end; + end; + for i := 0 to NoALevels-1 do + begin + for k := 0 to NoCLevels-1 do + begin + ACSS[i,k] := 0.0; + ACSumSqr[i,k] := 0.0; + ACCount[i,k] := 0; + ACSDs[i,k] := 0.0; + end; + end; + + // accumulate sums and sums of squared values + for i := 1 to NoCases do + begin + strvalue := Trim(OS3MainFrm.DataGrid.Cells[ACol,i]); + Aindex := round(StrToFloat(strvalue)); + strvalue := Trim(OS3MainFrm.DataGrid.Cells[BCol,i]); + Bindex := round(StrToFloat(strvalue)); + strvalue := Trim(OS3MainFrm.DataGrid.Cells[CCol,i]); + Cindex := round(StrToFloat(strvalue)); + strvalue := Trim(OS3MainFrm.DataGrid.Cells[YCol,i]); + YValue := StrToFloat(strvalue); + Aindex := Aindex - MinA; + Bindex := Bindex - MinB; + Cindex := Cindex - MinC; + SS[Bindex,Aindex,Cindex] := SS[Bindex,Aindex,Cindex] + YValue * YValue; + SumSqr[Bindex,Aindex,Cindex] := SumSqr[Bindex,Aindex,Cindex] + YValue; + CellCount[Bindex,Aindex,Cindex] := CellCount[Bindex,Aindex,Cindex] + 1; + ACount[Aindex] := ACount[Aindex] + 1; + BCount[Bindex] := BCount[Bindex] + 1; + CCount[Cindex] := CCount[Cindex] + 1; + ASS[Aindex] := ASS[Aindex] + YValue * YValue; + BSS[Bindex] := BSS[Bindex] + YValue * YValue; + CSS[Cindex] := CSS[Cindex] + YValue * YValue; + ASumSqr[Aindex] := ASumSqr[Aindex] + YValue; + BSumSqr[Bindex] := BSumSqr[Bindex] + YValue; + CSumSqr[Cindex] := CSumSqr[Cindex] + YValue; + ACSS[Aindex,Cindex] := ACSS[Aindex,Cindex] + YValue * YValue; + ACSumSqr[Aindex,Cindex] := ACSumSqr[Aindex,Cindex] + YValue; + ACCount[Aindex,Cindex] := ACCount[Aindex,Cindex] + 1; + ABSS[Aindex,Bindex] := ABSS[Aindex,Bindex] + YValue * YValue; + ABSumSqr[Aindex,Bindex] := ABSumSqr[Aindex,Bindex] + YValue; + ABCount[Aindex,Bindex] := ABCount[Aindex,Bindex] + 1; + SSTot := SSTot + YValue * YValue; + SumSqrTot := SumSqrTot + YValue; + TotN := TotN + 1; + end; + + // get cell means and marginal means plus square of sums + for i := 0 to NoBLevels-1 do + begin + for j := 0 to NoALevels-1 do + begin + for k := 0 to NoCLevels-1 do + begin + if CellCount[i,j,k] > 0 then + begin + CellMeans[i,j,k] := SumSqr[i,j,k] / CellCount[i,j,k]; + SumSqr[i,j,k] := SumSqr[i,j,k] * SumSqr[i,j,k]; + CellSDs[i,j,k] := SS[i,j,k] - (SumSqr[i,j,k] / CellCount[i,j,k]); + CellSDs[i,j,k] := CellSDs[i,j,k] / (CellCount[i,j,k] - 1); + CellSDs[i,j,k] := sqrt(CellSDs[i,j,k]); + end; + end; + end; + end; + for i := 0 to NoBLevels-1 do + begin + if BCount[i] > 0 then + begin + BMeans[i] := BSumSqr[i] / BCount[i]; + BSumSqr[i] := BSumSqr[i] * BSumSqr[i]; + BSDs[i] := BSS[i] - (BSumSqr[i] / BCount[i]); + BSDs[i] := BSDs[i] / (BCount[i] - 1); + BSDs[i] := sqrt(BSDs[i]); + end; + end; + for i := 0 to NoALevels-1 do + begin + AMeans[i] := ASumSqr[i] / ACount[i]; + ASumSqr[i] := ASumSqr[i] * ASumSqr[i]; + ASDs[i] := ASS[i] - (ASumSqr[i] / ACount[i]); + ASDs[i] := ASDs[i] / (ACount[i] - 1); + ASDs[i] := Sqrt(ASDs[i]); + end; + for i := 0 to NoCLevels-1 do + begin + CMeans[i] := CSumSqr[i] / CCount[i]; + CSumSqr[i] := CSumSqr[i] * CSumSqr[i]; + CSDs[i] := CSS[i] - (CSumSqr[i] / CCount[i]); + CSDs[i] := CSDs[i] / (CCount[i] - 1); + CSDs[i] := sqrt(CSDs[i]); + end; + for i := 0 to NoALevels-1 do + begin + for k := 0 to NoCLevels-1 do + begin + ACMeans[i,k] := ACMeans[i,k] / ACCount[i,k]; + ACSumSqr[i,k] := ACSumSqr[i,k] * ACSumSqr[i,k]; + ACSDs[i,k] := ACSS[i,k] - (ACSumSqr[i,k] / ACCount[i,k]); + ACSDs[i,k] := ACSDs[i,k] / (ACCount[i,k] - 1); + ACSDs[i,k] := sqrt(ACSDs[i,k]); + end; + end; + for i := 0 to NoALevels-1 do + begin + for j := 0 to NoBLevels-1 do + begin + if ABCount[i,j] > 0 then + begin + ABMeans[i,j] := ABSumSqr[i,j] / ABCount[i,j]; + ABSumSqr[i,j] := ABSumSqr[i,j] * ABSumSqr[i,j]; + ABSDs[i,j] :=ABSS[i,j] - (ABSumSqr[i,j] / ABCount[i,j]); + ABSDs[i,j] := ABSDs[i,j] / (ABCount[i,j] - 1); + ABSDs[i,j] := sqrt(ABSDs[i,j]); + end; + end; + end; + TotMean := SumSqrTot / TotN; + SumSqrTot := SumSqrTot * SumSqrTot; +end; + +procedure TABCNestedForm.ShowMeans(Sender: TObject); +VAR + outvalue : string; + i, j, k : integer; +begin + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Nested ANOVA by Bill Miller'); + outvalue := format('File Analyzed = %s',[OS3MainFrm.FileNameEdit.Text]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('CELL MEANS'); + OutPutFrm.RichEdit.Lines.Add('A LEVEL BLEVEL CLEVEL MEAN STD.DEV.'); + for i := 0 to NoALevels-1 do + begin + for j := 0 to NoBLevels-1 do + begin + for k := 0 to NoCLevels-1 do + begin + if CellCount[j,i,k] > 0 then + begin + outvalue := format('%5D %5D %5D %10.4f %10.4f', + [i+MinA,j+MinB,k+MinC,CellMeans[j,i,k],CellSDs[j,i,k]]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + end; + end; + end; + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('A MARGIN MEANS'); + OutPutFrm.RichEdit.Lines.Add('A LEVEL MEAN STD.DEV.'); + for i := 0 to NoALevels-1 do + begin + outvalue := format('%5d %10.3f %10.3f',[i+MinA,AMeans[i],ASDs[i]]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('B MARGIN MEANS'); + OutPutFrm.RichEdit.Lines.Add('B LEVEL MEAN STD.DEV.'); + for i := 0 to NoBLevels-1 do + begin + if BCount[i] > 0 then + begin + outvalue := format('%5d %10.3f %10.3f',[i+MinB,BMeans[i],BSDs[i]]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + end; + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('C MARGIN MEANS'); + OutPutFrm.RichEdit.Lines.Add('C LEVEL MEAN STD.DEV.'); + for i := 0 to NoCLevels-1 do + begin + if CCount[i] > 0 then + begin + outvalue := format('%5d %10.3f %10.3f',[i+MinC,CMeans[i],CSDs[i]]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + end; + end; + + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('AB MARGIN MEANS'); + OutPutFrm.RichEdit.Lines.Add('A LEVEL B LEVEL MEAN STD.DEV.'); + for i := 0 to NoALevels-1 do + begin + for j := 0 to NoBLevels-1 do + begin + if ABCount[i,j] > 0 then + begin + outvalue := format('%5d %5D %10.3f %10.3f',[i+MinA,j+MinB,ABMeans[i,j],ABSDs[i,j]]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + end; + end; + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('AC MARGIN MEANS'); + OutPutFrm.RichEdit.Lines.Add('A LEVEL C LEVEL MEAN STD.DEV.'); + for i := 0 to NoALevels-1 do + begin + for j := 0 to NoCLevels-1 do + begin + if ACCount[i,j] > 0 then + begin + outvalue := format('%5d %5D %10.3f %10.3f',[i+MinA,j+MinC,ACMeans[i,j],ACSDs[i,j]]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + end; + end; + end; + OutPutFrm.RichEdit.Lines.Add(''); + outvalue := format('GRAND MEAN = %10.3f',[TotMean]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + OutPutFrm.RichEdit.Lines.Add(''); +// OutPutFrm.ShowModal; +end; + +procedure TABCNestedForm.GetResults(Sender: TObject); +VAR + temp, temp2, temp3, temp4, constant : double; + NoBLevelsInA, BLevCount, i, j, k, celln : integer; + strvalue : string; + +begin + celln := 0; + for i := 0 to NoALevels-1 do + begin + for j := 0 to NoBLevels-1 do + begin + for k := 0 to NoCLevels-1 do + begin + if CellCount[j,i,k] > celln then celln := CellCount[j,i,k]; + end; + end; + end; + // assume all cells have same n size + // get no. of levels in A + BLevCount := 0; + for i := 0 to NoALevels-1 do + begin + NoBLevelsInA := 0; + for j := 0 to NoBLevels-1 do + begin + if CellCount[j,i,0] > 0 then NoBLevelsInA := NoBLevelsInA + 1; + end; + if NoBLevelsInA > BLevCount then BLevCount := NoBLevelsInA; + end; + dfA := NoALevels - 1; + dfBwA := NoALevels * (BLevCount - 1); + dfC := NoCLevels - 1; + dfAC := (NoALevels-1) * (NoCLevels-1); + dfBwAC := NoALevels * (BLevCount-1) * (NoCLevels -1); + dfwcell := NoALevels * BLevCount * NoCLevels * (celln - 1); + dftotal := TotN - 1; + + constant := SumSqrTot / TotN; + SSTot := SSTot - constant; + MSTot := SSTot / dftotal; + + // get A Effects + SSA := 0.0; + for i := 0 to NoALevels-1 do SSA := SSA + (ASumSqr[i] / ACount[i]); + temp := SSA; + SSA := SSA - constant; + MSA := SSA / dfA; + + //Get C Effects + SSC := 0.0; + for i := 0 to NoCLevels-1 do SSC := SSC + (CSumSqr[i] / CCount[i]); + temp2 := SSC; + SSC := SSC - constant; + MSC := SSC / dfC; + + // get B within A + SSB := 0.0; + for i := 0 to NoALevels - 1 do + begin + for j := 0 to NoBLevels-1 do + begin + if ABCount[i,j] > 0 then SSB := SSB + (ABSumSqr[i,j] / ABCount[i,j]); + end; + end; + temp3 := SSB; + SSB := SSB - temp; + MSB := SSB / dfBwA; + + // get AC interaction + SSAC := 0.0; + for i := 0 to NoALevels-1 do + begin + for j := 0 to NoCLevels-1 do SSAC := SSAC + ACSumSqr[i,j] / ACCount[i,j] + end; + temp4 := SSAC; + SSAC := SSAC - temp - temp2 + constant; + MSAC := SSAC / dfAC; + + // get B within A x C interaction + SSBwAC := 0.0; + for i := 0 to NoALevels-1 do + begin + for j := 0 to NoBLevels-1 do + begin + for k := 0 to NoCLevels-1 do + begin + if CellCount[j,i,k] > 0 then SSBwAC := SSBwAC + + (SumSqr[j,i,k] / CellCount[j,i,k]); + end; + end; + end; + SSBwAC := SSBwAC - temp3 - temp4 + temp; + MSBwAC := SSBwAC / dfBwAC; + + SSW := SSTot - SSA - SSB - SSAB - SSAC - SSBwAC; + MSW := SSW / dfwcell; +end; + +procedure TABCNestedForm.ShowResults(Sender: TObject); +VAR + outvalue : string; + F, PF : double; +begin + OutPutFrm.RichEdit.Lines.Add('ANOVA TABLE'); + OutPutFrm.RichEdit.Lines.Add('SOURCE D.F. SS MS F PROB.'); + F := MSA / MSW; + PF := probf(F,dfA,dfwcell); + outvalue := format('A %4D %10.3f%10.3f%10.3f%10.3f',[dfA,SSA,MSA,F,PF]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + F := MSB / MSW; + PF := probf(F,dfBwA,dfwcell); + outvalue := format('B(A) %4D %10.3f%10.3f%10.3f%10.3f',[dfBwA,SSB,MSB,F,PF]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + F := MSC / MSW; + PF := probf(F,dfC,dfwcell); + outvalue := format('C %4D %10.3f%10.3f%10.3f%10.3f',[dfC,SSC,MSC,F,PF]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + F := MSAC / MSW; + PF := probf(F,dfAC,dfwcell); + outvalue := format('AxC %4D %10.3f%10.3f%10.3f%10.3f',[dfAC,SSAC,MSAC,F,PF]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + F := MSBwAC / MSW; + PF := probf(F,dfBwAC,dfwcell); + outvalue := format('B(A)xC %4D %10.3f%10.3f%10.3f%10.3f',[dfBwAC,SSBwAC,MSBwAC,F,PF]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + outvalue := format('w.cells %4D %10.3f%10.3f',[dfwcell,SSW,MSW]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + outvalue := format('Total %4D %10.3f',[dftotal,SSTot]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + OutPutFrm.ShowModal; +end; + +procedure TABCNestedForm.ReleaseMemory(Sender: TObject); +begin + ColNoSelected := nil; + ABSDs := nil; + ABCount := nil; + ABMeans := nil; + ABSumSqr := nil; + ABSS := nil; + ACSDs := nil; + ACMeans := nil; + ACCount := nil; + ACSumSqr := nil; + ACSS := nil; + CSDs := nil; + BSDs := nil; + ASDs := nil; + CCount := nil; + BCount := nil; + ACount := nil; + CMeans := nil; + BMeans := nil; + AMeans := nil; + CSumSqr := nil; + BSumSqr := nil; + ASumSqr := nil; + CSS := nil; + BSS := nil; + ASS := nil; + CellSDs := nil; + CellMeans := nil; + CellCount := nil; + SumSqr := nil; + SS := nil; +end; + +procedure TABCNestedForm.TwoWayPlot(Sender: TObject); +VAR + plottype, i, j, k : integer; + maxmean, XBar : double; + title, setstring : string; + XValue : DblDyneVec; +begin + plottype := OptionsBox.ItemIndex + 1; + if plottype = 3 then plottype := 1 + else if plottype = 4 then plottype := 2 + else if plottype = 1 then plottype := 9 + else if plottype = 2 then plottype := 10; + + // Factor A first + maxmean := -1000.0; + SetLength(XValue,NoALevels); + setstring := 'FACTOR A'; + GraphFrm.SetLabels[1] := setstring; + SetLength(GraphFrm.Xpoints,1,NoALevels); + SetLength(GraphFrm.Ypoints,1,NoALevels); + for i := 1 to NoALevels do + begin + GraphFrm.Ypoints[0,i-1] := AMeans[i-1]; + if AMeans[i-1] > maxmean then maxmean := AMeans[i-1]; + XValue[i-1] := MinA + i -1; + GraphFrm.Xpoints[0,i-1] := XValue[i-1]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := NoALevels; + GraphFrm.Heading := FactorA; + title := FactorA + ' Group Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + XValue := nil; + + // Factor B next + SetLength(XValue,NoBLevels); + setstring := 'FACTOR B'; + GraphFrm.SetLabels[1] := setstring; + maxmean := -1000.0; + SetLength(GraphFrm.Xpoints,1,NoBLevels); + SetLength(GraphFrm.Ypoints,1,NoBLevels); + for i := 1 to NoBLevels do + begin + GraphFrm.Ypoints[0,i-1] := BMeans[i-1]; + if BMeans[i-1] > maxmean then maxmean := BMeans[i-1]; + XValue[i-1] := MinB + i - 1; + GraphFrm.Xpoints[0,i-1] := XValue[i-1]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := NoBLevels; + GraphFrm.Heading := 'FACTOR B'; + title := FactorB + ' Group Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + XValue := nil; + + // Factor C next + SetLength(XValue,NoCLevels); + setstring := 'FACTOR C'; + GraphFrm.SetLabels[1] := setstring; + maxmean := -1000.0; + SetLength(GraphFrm.Xpoints,1,NoCLevels); + SetLength(GraphFrm.Ypoints,1,NoCLevels); + for i := 0 to NoCLevels-1 do + begin + GraphFrm.Ypoints[0,i] := CMeans[i]; + if CMeans[i] > maxmean then maxmean := CMeans[i]; + XValue[i] := MinC + i - 1; + GraphFrm.Xpoints[0,i] := XValue[i]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := NoCLevels; + GraphFrm.Heading := 'FACTOR C'; + title := FactorB + ' Group Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + XValue := nil; + + // Factor A x B interaction within each slice next + SetLength(XValue,NoALevels + NoBLevels); + SetLength(GraphFrm.Ypoints,NoALevels,NoBLevels); + SetLength(GraphFrm.Xpoints,1,NoBLevels); + for k := 0 to NoCLevels-1 do + begin + maxmean := -1000.0; + for i := 0 to NoALevels-1 do + begin + setstring := 'FACTOR A ' + IntToStr(i+1); + GraphFrm.SetLabels[i+1] := setstring; + for j := 0 to NoBLevels-1 do + begin + if ABCount[i,j] > 0 then + begin + if ABMeans[i,j] > maxmean then maxmean := ABMeans[i,j]; + GraphFrm.Ypoints[i,j] := ABMeans[i,j]; + end; + end; + end; + for j := 0 to NoBLevels-1 do + begin + XValue[j] := MinB + j - 1; + GraphFrm.Xpoints[0,j] := XValue[j]; + end; + GraphFrm.nosets := NoALevels; + GraphFrm.nbars := NoBLevels; + GraphFrm.Heading := 'FACTOR A x Factor B within C' + IntToStr(k+1); + title := FactorB + ' Group Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + XValue := nil; + + //Factor A x C Interaction within each column next + setLength(XValue,NoALevels+NoCLevels); + SetLength(GraphFrm.Xpoints,1,NoCLevels); + SetLength(GraphFrm.Ypoints,NoALevels,NoCLevels); + for j := 0 to NoBLevels-1 do + begin + maxmean := 0.0; + for i := 0 to NoALevels-1 do + begin + setstring := 'Factor A ' + IntToStr(i+1); + GraphFrm.SetLabels[i+1] := setstring; + for k := 0 to NoCLevels-1 do + begin + XBar := ACMeans[i,k]; + if XBar > maxmean then maxmean := XBar; + GraphFrm.Ypoints[i,k] := XBar; + end; + end; + for k := 0 to NoCLevels-1 do + begin + XValue[k] := MinC + k - 1; + GraphFrm.Xpoints[0,k] := XValue[k]; + end; + GraphFrm.nosets := NoALevels; + GraphFrm.nbars := NoCLevels; + GraphFrm.Heading := 'FACTOR A x Factor C within B ' + IntToStr(j+1); + title := FactorC + ' Group Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; +// GraphFrm.ShowModal; + end; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + XValue := nil; + end; + +initialization + {$I abcnestedunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/anovatestsunit.pas b/applications/lazstats/source_orig/anovatestsunit.pas new file mode 100644 index 000000000..294ccb623 --- /dev/null +++ b/applications/lazstats/source_orig/anovatestsunit.pas @@ -0,0 +1,653 @@ +unit ANOVATESTSUnit; + +{$mode objfpc}{$H+} + +interface + +uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + FunctionsLib, OutPutUnit, Globals, MainUnit, DataProcs; + +procedure TUKEY(error_ms : double; { mean squared for residual } + error_df : double; { deg. freedom for residual } + value : double; { size of smallest group } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { no. of cases in a group } + min_grp : integer; { minimum group code } + max_grp : integer); { maximum group code } + +procedure SCHEFFETEST(error_ms : double; { mean squared residual } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { count of cases in a group } + min_grp : integer; { code of first group } + max_grp : integer; { code of last group } + total_n : double); { total number of cases } + +procedure Newman_Keuls(error_ms : double; { residual mean squared } + error_df : double; { deg. freedom for error } + value : double; { number in smallest group } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { count of cases in a group } + min_grp : integer; { lowest group code } + max_grp : integer); { largest group code } + +procedure TUKEY_KRAMER(error_ms : double; { residual mean squared } + error_df : double; { deg. freedom for error } + value : double; { number in smallest group } + group_total : DblDyneVec; { sum of scores in group } + group_count : DblDyneVec; { number of caes in group } + min_grp : integer; { code of lowest group } + max_grp : integer); { code of highst group } + +procedure CONTRASTS(error_ms : double; { residual ms } + error_df : double; { residual df } + group_total : DblDyneVec; { group sums } + group_count : DblDyneVec; { group cases } + min_grp : integer; { lowest code } + max_grp : integer; { highest code } + overall_probf : double); { prob of overall test } + +procedure Bonferroni( group_total : DblDyneVec; { sum of scores in group } + group_count : DblDyneVec; { number of caes in group } + group_var : DblDyneVec; { group variances } + min_grp : integer; { code of lowest group } + max_grp : integer); { code of highst group } + +procedure TUKEYBTEST(ErrorMS : double; // within groups error + ErrorDF : double; // degrees of freedom within + group_total : DblDyneVec; // vector of group sums + group_count : DblDyneVec; // vector of group n's + min_grp : integer; // smallest group code + max_grp : integer; // largest group code + groupsize : double); // size of groups (all equal) + +procedure HomogeneityTest(GroupCol : integer; + VarColumn : integer; + NoCases : integer); + +implementation +Uses BlkAnovaUnit; + +procedure TUKEY(error_ms : double; { mean squared for residual } + error_df : double; { deg. freedom for residual } + value : double; { size of smallest group } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { no. of cases in a group } + min_grp : integer; { minimum group code } + max_grp : integer); { maximum group code } +var + sig : boolean; + divisor : double; + df1 : integer; + alpha : double; + contrast, mean1, mean2 : double; + q_stat : double; + i,j : integer; + outline : string; + +begin + alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Tukey HSD Test for Differences Between Means'); + outline := format(' alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('Groups Difference Statistic Probability Significant?'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + divisor := sqrt(error_ms / value ); + for i := min_grp to max_grp - 1 do + for j := i + 1 to max_grp do + begin + outline := format('%2d - %2d ',[i,j]); + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + contrast := mean1 - mean2; + outline := outline + format('%7.3f q = ',[contrast]); + contrast := abs(contrast / divisor) ; + outline := outline + format('%6.3f ',[contrast]); + df1 := max_grp - min_grp + 1; + q_stat := STUDENT(contrast,error_df,df1); + outline := outline + format(' %6.4f',[q_stat]); + if alpha >= q_stat then sig := TRUE else sig := FALSE; + if sig = TRUE then outline := outline + ' YES ' + else outline := outline + ' NO'; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); +end; + +{ ------------------------------------------------------------------------ } + +procedure SCHEFFETEST(error_ms : double; { mean squared residual } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { count of cases in a group } + min_grp : integer; { code of first group } + max_grp : integer; { code of last group } + total_n : double); { total number of cases } + +var + statistic, stat_var, stat_sd : double; + mean1, mean2, alpha, difference, prob_scheffe, f_prob, df1, df2 : double; + outline : string; + i, j : integer; +begin + alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Scheffe contrasts among pairs of means.'); + outline := format(' alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('Group vs Group Difference Scheffe Critical Significant?'); + OutPutFrm.RichEdit.Lines.Add(' Statistic Value'); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------'); + alpha := 1.0 - alpha ; + for i:= min_grp to max_grp - 1 do + for j := i + 1 to max_grp do + begin + outline := format('%2d %2d ',[i,j]); + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + difference := mean1 - mean2; + outline := outline + format('%8.2f ',[difference]); + stat_var := error_ms * + ( 1.0 / group_count[i-1] + 1.0 / group_count[j-1]); + stat_sd := sqrt(stat_var); + statistic := abs(difference / stat_sd); + outline := outline + format('%8.2f ',[statistic]); + df1 := max_grp - min_grp; + df2 := total_n - df1 + 1; + f_prob := fpercentpoint(alpha,round(df1),round(df2) ); + prob_scheffe := sqrt(df1 * f_prob); + outline := outline + format('%8.3f ',[prob_scheffe]); + if statistic > prob_scheffe then outline := outline + 'YES' + else outline := outline + 'NO'; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------'); +end; + +{ ----------------------------------------------------------------------- } + +procedure Newman_Keuls(error_ms : double; { residual mean squared } + error_df : double; { deg. freedom for error } + value : double; { number in smallest group } + group_total : DblDyneVec; { sum of scores in a group } + group_count : DblDyneVec; { count of cases in a group } + min_grp : integer; { lowest group code } + max_grp : integer); { largest group code } +var + i, j : integer; + temp1, temp2 : double; + groupno : IntDyneVec; + alpha : double; + contrast, mean1, mean2 : double; + q_stat : double; + divisor : double; + tempno : integer; + df1 : integer; + sig : boolean; + outline : string; + +begin + SetLength(groupno,max_grp-min_grp+1); + for i := min_grp to max_grp do groupno[i-1] := i; + for i := min_grp to max_grp - 1 do + begin + for j := i + 1 to max_grp do + begin + if group_total[i-1] / group_count[i-1] > + group_total[j-1] / group_count[j-1] then + begin + temp1 := group_total[i-1]; + temp2 := group_count[i-1]; + tempno := groupno[i-1]; + group_total[i-1] := group_total[j-1]; + group_count[i-1] := group_count[j-1]; + groupno[i-1] := groupno[j-1]; + group_total[j-1] := temp1; + group_count[j-1] := temp2; + groupno[j-1] := tempno; + end; + end; + end; + alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Neuman-Keuls Test for Contrasts on Ordered Means'); + outline := format(' alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Group Mean'); + for i := 1 to max_grp do + begin + outline := format('%3d %10.3f',[groupno[i-1],group_total[i-1] / group_count[i-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Groups Difference Statistic d.f. Probability Significant?'); + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------'); + divisor := sqrt(error_ms / value); + for i := min_grp to max_grp - 1 do + begin + for j := i + 1 to max_grp do + begin + outline := format('%2d - %2d ',[groupno[i-1],groupno[j-1]]); + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + contrast := mean1 - mean2; + outline := outline + format('%7.3f q = ',[contrast]); + contrast := abs(contrast / divisor ); + df1 := j - i + 1; + outline := outline + format('%6.3f %2d %3.0f ',[contrast,df1,error_df]); + q_stat := STUDENT(contrast,error_df,df1); + outline := outline + format(' %6.4f',[q_stat]); + if alpha > q_stat then sig := TRUE else sig := FALSE; + if sig = TRUE then outline := outline + ' YES' + else outline := outline + ' NO'; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------'); + groupno := nil; +end; + +{ ----------------------------------------------------------------------- } + +procedure TUKEY_KRAMER(error_ms : double; { residual mean squared } + error_df : double; { deg. freedom for error } + value : double; { number in smallest group } + group_total : DblDyneVec; { sum of scores in group } + group_count : DblDyneVec; { number of caes in group } + min_grp : integer; { code of lowest group } + max_grp : integer); { code of highst group } +var + sig : boolean; + divisor : double; + df1 : integer; + alpha : double; + contrast, mean1, mean2 : double; + q_stat : double; + outline : string; + i, j : integer; + +begin + alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Tukey-Kramer Test for Differences Between Means'); + outline := format(' alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('Groups Difference Statistic Probability Significant?'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + for i := min_grp to max_grp - 1 do + for j := i + 1 to max_grp do + begin + outline := format('%2d - %2d ',[i,j]); + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + contrast := mean1 - mean2; + outline := outline + format('%7.3f q = ',[contrast]); + divisor := sqrt(error_ms * + ( ( 1.0/group_count[i-1] + 1.0/group_count[j-1] ) / 2 ) ); + contrast := abs(contrast / divisor) ; + outline := outline + format('%6.3f ',[contrast]); + df1 := max_grp - min_grp + 1; + q_stat := STUDENT(contrast,error_df,df1); + outline := outline + format(' %6.4f',[q_stat]); + if alpha >= q_stat then sig := TRUE else sig := FALSE; + if sig = TRUE then outline := outline + ' YES ' + else outline := outline + ' NO'; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); +end; + +{ ------------------------------------------------------------------------ } + +procedure CONTRASTS(error_ms : double; { residual ms } + error_df : double; { residual df } + group_total : DblDyneVec; { group sums } + group_count : DblDyneVec; { group cases } + min_grp : integer; { lowest code } + max_grp : integer; { highest code } + overall_probf : double); { prob of overall test } +var + nocontrasts, i, j, k : integer; + df1, df2, probstat, statistic, alpha : double; + coefficients : array[1..20,1..20] of double; + nonorthog : boolean; + weight, sumcross : double; + response : string[5]; + outline : string; + prompt : string; + +begin + outline := format('Enter the number of contrasts (less than %2d or 0:',[max_grp-min_grp+1]); + response := InputBox('ORTHOGONAL CONTRASTS',outline,'0'); + nocontrasts := StrToInt(response); + if nocontrasts > 0 then + begin + for i := 1 to nocontrasts do + begin + outline := format('Contrast number %2d',[i]); + for j := 1 to (max_grp - min_grp+1) do + begin + prompt := format('Group %2d coefficient = ',[j]); + response := InputBox(outline,prompt,'1'); + coefficients[i,j] := StrToFloat(response); + end; + end; + { Check for orthogonality } + nonorthog := FALSE; + for i := 1 to nocontrasts - 1 do + begin + for j := i + 1 to nocontrasts do + begin + sumcross := 0; + for k := 1 to (max_grp - min_grp + 1) do + begin + sumcross := sumcross + + coefficients[i,k]*coefficients[j,k]; + end; + if sumcross <> 0 then nonorthog := TRUE; + if sumcross <> 0 then + begin + outline := format('contrasts %2d and %2d not orthogonal.',[i,j]); + ShowMessage('ERROR!' + outline); + end; + end; + end; + if NOT nonorthog then + begin + alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + if overall_probf > alpha then + begin + OutPutFrm.RichEdit.Lines.Add('No contrasts significant.'); + exit; + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' ORTHOGONAL CONTRASTS'); + OutPutFrm.RichEdit.Lines.Add('Contrast Statistic Probability Critical Value Significant?'); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + for i := 1 to nocontrasts do + begin + statistic := 0.0; + weight := 0.0; + for j := 1 to (max_grp - min_grp + 1) do + begin + statistic := statistic + (coefficients[i,j] * + (group_total[j-1] / group_count[j-1])); + weight := weight + (sqr(coefficients[i,j]) / + group_count[j-1]); + end; + statistic := sqr(statistic); + statistic := statistic / (error_ms * weight); + outline := format('%3d %9.4f ',[i,statistic]); + df1 := 1; + df2 := error_df; + probstat := probf(statistic,round(df1),round(df2)) / 2; + outline := outline + format('%8.3f %5.2f ',[probstat,alpha]); + if probstat < alpha then outline := outline + 'YES' + else outline := outline + 'NO'; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Contrast Coefficients Used:'); + for i := 1 to nocontrasts do + begin + outline := format('Contrast %2d ',[i]); + for j := 1 to (max_grp - min_grp + 1) do + outline := outline + format('%4.1f ',[coefficients[i,j]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; { if orthogonal } + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + end; { if nocontrasts > 0 } +end; { of procedure CONTRASTS } +{ ----------------------------------------------------------------------- } + +procedure Bonferroni( group_total : DblDyneVec; { sum of scores in group } + group_count : DblDyneVec; { number of cases in group } + group_var : DblDyneVec; { group variances } + min_grp : integer; { code of lowest group } + max_grp : integer); { code of highst group } +var + i, j : integer; + alpha : double; + contrast, mean1, mean2 : double; + divisor : double; + df2 : integer; + outline : string; + testalpha : double; + NoGrps : integer; + tprob : double; + sig : string[6]; + SS1, SS2 : double; +begin + alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Bonferroni Test for Differences Between Means'); + outline := format(' Overall alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + NoGrps := max_grp - min_grp + 1; + testalpha := alpha / ( (NoGrps * (NoGrps-1)) / 2.0 ); + outline := format('Comparisons made at alpha / no. comparisons = %5.3f',[testalpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Groups Difference Statistic Prob > Value Significant?'); + for i := 1 to NoGrps - 1 do + begin + for j := i+1 to NoGrps do + begin + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + SS1 := group_var[i-1] * (group_count[i-1] - 1.0); + SS2 := group_var[j-1] * (group_count[j-1] - 1.0); + divisor := (SS1 + SS2) / (group_count[i-1] + group_count[j-1] - 2.0); + divisor := sqrt(divisor * ( 1.0 / group_count[i-1] + 1.0 / group_count[j-1])); + contrast := abs(mean1-mean2) / divisor; + df2 := round(group_count[i-1] + group_count[j-1] - 2.0); + tprob := probt(contrast,df2); + if testalpha >= tprob then sig := 'YES' else sig := 'NO'; + outline := format('%3d - %3d %10.3f %10.3f %10.3f %s', + [min_grp+i-1,min_grp+j-1,mean1-mean2,contrast,tprob,sig]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; +end; +//------------------------------------------------------------------- + +procedure TUKEYBTEST(ErrorMS : double; // within groups error + ErrorDF : double; // degrees of freedom within + group_total : DblDyneVec; // vector of group sums + group_count : DblDyneVec; // vector of group n's + min_grp : integer; // smallest group code + max_grp : integer; // largest group code + groupsize : double); // size of groups (all equal) +var + alpha : double; + outline : string; + i, j : integer; + df1 : double; + qstat : double; + tstat : double; + groupno : IntDyneVec; + temp1, temp2 : double; + tempno : integer; + NoGrps : integer; + contrast : double; + mean1, mean2 : double; + sig : string[6]; + groups : double; + response : string[5]; + divisor : double; + +begin + SetLength(groupno,max_grp-min_grp+1); + alpha := StrToFloat(BlksAnovaFrm.PostAlpha.Text); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(' Tukey B Test for Contrasts on Ordered Means'); + outline := format(' alpha selected = %4.2f',[alpha]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('---------------------------------------------------------------'); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Groups Difference Statistic d.f. Prob.>value Significant?'); + divisor := sqrt(ErrorMS / groupsize); + NoGrps := max_grp - min_grp + 1; + for i := min_grp to max_grp do groupno[i-1] := i; + for i := 1 to NoGrps - 1 do + begin + for j := i + 1 to NoGrps do + begin + if group_total[i-1] / group_count[i-1] > + group_total[j-1] / group_count[j-1] then + begin + temp1 := group_total[i-1]; + temp2 := group_count[i-1]; + tempno := groupno[i-1]; + group_total[i-1] := group_total[j-1]; + group_count[i-1] := group_count[j-1]; + groupno[i-1] := groupno[j-1]; + group_total[j-1] := temp1; + group_count[j-1] := temp2; + groupno[j-1] := tempno; + end; + end; + end; + + for i := 1 to NoGrps-1 do + begin + for j := i+1 to NoGrps do + begin + mean1 := group_total[i-1] / group_count[i-1]; + mean2 := group_total[j-1] / group_count[j-1]; + contrast := abs((mean1 - mean2) / divisor); + df1 := j - i + 1.0; + qstat := STUDENT(contrast,ErrorDF,df1); + groups := NoGrps; + tstat := STUDENT(contrast,ErrorDF,groups); + qstat := (qstat + tstat) / 2.0; + if alpha >= qstat then sig := 'YES' else sig := 'NO'; + outline := format('%3d - %3d %10.3f %10.3f %4.0f,%4.0f %5.3f %s', + [groupno[i-1],groupno[j-1], + mean1-mean2,contrast,df1,ErrorDF,qstat,sig]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + groupno := nil; +end; +procedure HomogeneityTest(GroupCol : integer; + VarColumn : integer; + NoCases : integer); +Var + i, j, k, N, intvalue, intvalue2, Nf1cells, tempi : integer; + min, max : integer; + zscores : DblDyneMat; + medians : DblDyneVec; + cellcnts : IntDyneVec; + cellvars : DblDyneVec; + cellsums : DblDyneVec; + X, X2, temp : double; + DFF1, DFErr, DFTot : integer; + SSF1, SSDep, SSErr : double; + MSF1, MSDep, MSErr : double; + Omega, F, ProbF1, MeanDep : double; + outline : string; +begin + // complete a one-way anova on z scores obtained as the absolute difference + // between between the observed score and the median of a group. + + // get min and max group codes + min := 100000; + max := 0; + N := 0; + + for i := 1 to NoCases do + begin + intvalue := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[GroupCol,i]))); + if intvalue < min then min := intvalue; + if intvalue > max then max := intvalue; + end; + Nf1cells := max - min + 1; + + setlength(zscores,Nf1cells,NoCases); + setlength(medians,Nf1cells); + setlength(cellcnts,Nf1cells); + setlength(cellvars,Nf1cells); + setlength(cellsums,Nf1cells); + + // Get cell counts + for i := 1 to NoCases do + begin + intvalue := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[GroupCol,i]))); + intvalue := intvalue - min + 1; + cellcnts[intvalue-1] := cellcnts[intvalue-1] + 1; + end; + + // get working totals + for j := 0 to Nf1cells do + begin + k := 0; + for i := 1 to NoCases do + begin + if not ValidValue(i,VarColumn) then continue; + intvalue := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[GroupCol,i]))); + intvalue := intvalue - min; + if intvalue <> j then continue; + X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[VarColumn,i])); + zscores[intvalue,k] := X; + k := k + 1; + end; + end; + + //sort on z scores and obtain the median for each group + for i := 0 to Nf1cells-1 do // sort scores in each group + begin + for j := 0 to cellcnts[i]-2 do + begin + for k := j+1 to cellcnts[i]-1 do + begin + X := zscores[i,j]; + X2 := zscores[i,k]; + if X2 < X then // swap + begin + temp := X; + X := X2; + X2 := temp; + end; + end; + end; + end; + + for i := 0 to Nf1cells-1 do + begin + medians[i] := zscores[i,cellcnts[i] div 2]; + end; + + // Get deviations from the medians + for i := 0 to Nf1cells-1 do + begin + for j := 0 to cellcnts[i]-1 do + zscores[i,j] := zscores[i,j] - medians[i]; + end; + + // place group membership and z deviation scores in columns and + // do a regular one-way ANOVA + k := 0; + for i := 0 to Nf1cells-1 do + begin + for j := 0 to cellcnts[i]-1 do + begin + k := k +1; + OS3MainFrm.DataGrid.Cells[GroupCol,k] := IntToStr(i+1); + OS3MainFrm.DataGrid.Cells[VarColumn,k] := FloatToStr(abs(zscores[i,j])); + end; + end; + outline := 'Data have been placed in the grid. Do a one-way ANOVA'; + ShowMessage(outline); +end; + +end. + diff --git a/applications/lazstats/source_orig/avglinkunit.lfm b/applications/lazstats/source_orig/avglinkunit.lfm new file mode 100644 index 000000000..4b489f953 --- /dev/null +++ b/applications/lazstats/source_orig/avglinkunit.lfm @@ -0,0 +1,71 @@ +object AvgLinkFrm: TAvgLinkFrm + Left = 241 + Height = 112 + Top = 105 + Width = 328 + Caption = 'Average Linkage Hierarchical Clustering' + ClientHeight = 112 + ClientWidth = 328 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object RadioGroup1: TRadioGroup + Left = 8 + Height = 67 + Top = 8 + Width = 116 + AutoFill = True + Caption = 'Matrix Type Is:' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 49 + ClientWidth = 112 + Items.Strings = ( + 'Similarities' + 'Dissimilarities' + ) + TabOrder = 0 + end + object CancelBtn: TButton + Left = 136 + Height = 33 + Top = 16 + Width = 78 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 1 + end + object ComputeBtn: TButton + Left = 136 + Height = 33 + Top = 64 + Width = 78 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 2 + end + object ReturnBtn: TButton + Left = 224 + Height = 33 + Top = 64 + Width = 78 + Caption = 'Return' + ModalResult = 1 + TabOrder = 3 + end + object HelpBtn: TButton + Tag = 105 + Left = 224 + Height = 32 + Top = 16 + Width = 78 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 4 + end +end diff --git a/applications/lazstats/source_orig/avglinkunit.lrs b/applications/lazstats/source_orig/avglinkunit.lrs new file mode 100644 index 000000000..b5f7c7cc6 --- /dev/null +++ b/applications/lazstats/source_orig/avglinkunit.lrs @@ -0,0 +1,25 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TAvgLinkFrm','FORMDATA',[ + 'TPF0'#11'TAvgLinkFrm'#10'AvgLinkFrm'#4'Left'#3#241#0#6'Height'#2'p'#3'Top'#2 + +'i'#5'Width'#3'H'#1#7'Caption'#6'''Average Linkage Hierarchical Clustering' + +#12'ClientHeight'#2'p'#11'ClientWidth'#3'H'#1#6'OnShow'#7#8'FormShow'#10'LCL' + +'Version'#6#8'0.9.28.2'#0#11'TRadioGroup'#11'RadioGroup1'#4'Left'#2#8#6'Heig' + +'ht'#2'C'#3'Top'#2#8#5'Width'#2't'#8'AutoFill'#9#7'Caption'#6#15'Matrix Type' + +' Is:'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing' + +#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27'Chi' + +'ldSizing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.Shr' + +'inkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crs' + +'ScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27 + +'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight'#2'1'#11'ClientWidth'#2'p' + +#13'Items.Strings'#1#6#12'Similarities'#6#15'Dissimilarities'#0#8'TabOrder'#2 + +#0#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#136#0#6'Height'#2'!'#3'Top'#2#16#5 + +'Width'#2'N'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#1#0#0#7 + +'TButton'#10'ComputeBtn'#4'Left'#3#136#0#6'Height'#2'!'#3'Top'#2'@'#5'Width' + +#2'N'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2 + +#2#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#224#0#6'Height'#2'!'#3'Top'#2'@'#5 + +'Width'#2'N'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#3#0#0#7 + +'TButton'#7'HelpBtn'#3'Tag'#2'i'#4'Left'#3#224#0#6'Height'#2' '#3'Top'#2#16#5 + +'Width'#2'N'#7'Caption'#6#4'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2 + +#4#0#0#0 +]); diff --git a/applications/lazstats/source_orig/avglinkunit.pas b/applications/lazstats/source_orig/avglinkunit.pas new file mode 100644 index 000000000..15cd40a61 --- /dev/null +++ b/applications/lazstats/source_orig/avglinkunit.pas @@ -0,0 +1,504 @@ +unit AvgLinkUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, ExtCtrls, MainUnit, functionslib, Globals, matrixlib, dataprocs, + outputunit, strutils, contexthelpunit; + +type + + { TAvgLinkFrm } + + TAvgLinkFrm = class(TForm) + CancelBtn: TButton; + ComputeBtn: TButton; + HelpBtn: TButton; + ReturnBtn: TButton; + RadioGroup1: TRadioGroup; + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure TreePlot(Clusters : IntDyneMat; Lst : IntDyneVec; NoPoints : integer); + procedure PreTree(NN, CRIT : integer; LST : IntDyneVec; KLUS : IntDyneMat); + + private + { private declarations } + public + { public declarations } + end; + +var + AvgLinkFrm: TAvgLinkFrm; + +implementation + +{ TAvgLinkFrm } + +procedure TAvgLinkFrm.FormShow(Sender: TObject); +begin + RadioGroup1.ItemIndex := 0; +end; + +procedure TAvgLinkFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TAvgLinkFrm.ComputeBtnClick(Sender: TObject); +VAR + X : DblDyneMat; // similarity or dissimilarity matrix + KLUS : IntDyneMat; + LST : IntDyneVec; + RX, SAV, SAV2, RRRMIN : double; + NIN, NVAR : IntDyneVec; + I, J, NI, NJ, Ina, ICOL, K, L, M, MN, N, CRIT, ITR, LIMIT : integer; + INEND, JCOL, JPRE, JEND, NHOLD, MSH, KSH, NLINES, INDX : integer; +// ROWS : StrDyneVec; + DIS, Title : string; + outline : string; + nvalues : integer; +label label300, label60, label70; + +begin + // Reference: Anderberg, M. R. (1973). Cluster analysis for + // applications. New York: Academic press. + // + // Almost any text on cluster analysis should have a good + // description of the average-linkage hierarchical clustering + // algorithm. The algorithm begins with an initial similarity + // or dissimilarity matrix between pairs of objects. The + // algorithm proceeds in an iterative way. At each iteration + // the two most similar (we assume similarities for explanation) + // objects are combined into one group. At each successive + // iteration, the two most similar objects or groups of objects are + // merged. Similarity between groups is defined as the average + // similarity between objects in one group with objects in the other. + // + // INPUT: A correlation matrix (or some other similarity or + // dissimilarity matrix) in a file named MATRIX.DAT + // This must contain all the elements of a full + // (n x n), symmetrical matrix. Any format is + // allowable, as long as numbers are separated by + // blanks. + // + // OUTPUT: Output consists of a cluster history and a tree + // diagram (dendogram). The cluster history + // indicates, for each iteration, the objects + // or clusters merged, and the average pairwise + // similarity or dissimilarity in the resulting + // cluster. + // + // Author: John Uebersax + + nvalues := NoVariables; + if (NoVariables <= 0) then + begin + ShowMessage('ERROR! You must first load a matrix into the grid.'); + exit; + end; + + SetLength(X,nvalues+1,nvalues+1); + SetLength(KLUS,nvalues+1,3); + SetLength(LST,nvalues+1); + SetLength(NIN,nvalues+1); + SetLength(NVAR,nvalues+1); + + Title := 'Average Linkage Cluster Analysis. Adopted from ClusBas by John S. Uebersax'; + + // This section does the cluster analysis, taking data from the Main Form. + // Parameters controlling the analysis are obtained from the dialog form. + DIS := 'DIS'; + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add(Title); + OutPutFrm.RichEdit.Lines.Add(''); + M := nvalues; + CRIT := RadioGroup1.ItemIndex; // 0 := Similarity, 1 := dissimilarity + + // get matrix of data from OS3MainFrm + for i := 1 to NoVariables do + begin + for j := 1 to NoVariables do + X[i,j] := StrToFloat(OS3MainFrm.DataGrid.Cells[i,j]); + end; + + LIMIT := M - 1; + for i := 1 to M do + begin + NVAR[i] := i; + NIN[i] := 1; + end; + + // cluster analysis + ITR := 0; + +label300: + ITR := ITR + 1; + // + // determine groups to be merged this iteration + // + if (CRIT = 1) then // (BSCAN) dissimilarity matrix + begin + // This section looks for the minimum dissimilarity. It finds + // element (K, L), where K and L are the most dissimilar objects + // or groups. + // + N := 1; + RRRMIN := 1000000.0; + MN := M - 1; + for i := 1 to MN do + begin + N := N + 1; + for j := N to M do + begin + if (RRRMIN < 0.0) then continue; + K := i; + L := j; + RRRMIN := X[i,j]; + end; + end; + RX := RRRMIN; + end else // SCAN procedure + begin + // This section looks for the maximum similarity. It finds + // element (K, L), where K and L are the most similar objects or + // groups. + // + N := 1; + RX := -10000.0; + for i := 1 to M do + begin + N := N + 1; + for j := N to M do + begin + if (RX - X[i,j] > 0.0) then continue; + K := i; + L := j; + RX := X[i,j]; + end; + end; + end; + + // ARRANGE + // + // This section updates the similarity or dissimilarity matrix. + // If two objects/groups K and L are merged, it calculates the + // similarity or dissimilarity of the new group with all other objects + // or groups. It does this by averaging the elements in row K of + // X() with those in row L, and similarly for columns K and L. + // The new elements are put in row K and column L (K < L). Row K + // and column L are deleted. Columns and rows greater than L are + // shifted up one column or row to fill in the gap. The resulting + // matrix X() thus has one less column and row then at the beginning + // of the subroutine. + + MN := M - 1; + SAV := X[K,L]; + SAV2 := X[K,K]; + // Calculate similarity or dissimilarity of group formed by merging I + // and J to all other groups by averaging the similarities or + // dissimilarities of I and J with other groups + for I := 1 to M do + begin + X[I,K] := (X[I,K] * NIN[K] + X[I,L] * NIN[L]) / (NIN[K] + NIN[L]); + X[K,I] := X[I,K]; + end; + X[K,K] := SAV2 * NIN[K] * (NIN[K] - 1) + X[L,L] * NIN[L] * (NIN[L] - 1); + X[K,K] := X[K,K] + SAV * 2 * NIN[K] * NIN[L]; + X[K,K] := X[K,K] / ((NIN[K] + NIN[L]) * (NIN[K] + NIN[L] - 1)); + if (L = M) then goto label60; + for I := 1 to M do + begin + // Shift columns after J up one place + for J := L to MN do X[I,J] := X[I,J+1]; + end; + for I := L to MN do + begin + // Shift rows after J up one place + for J := 1 to M do X[I,J] := X[I+1,J]; + end; + NIN[K] := NIN[K] + NIN[L]; + for I := L to MN do NIN[I] := NIN[I+1]; + goto label70; +label60: + // Update number of objects in each cluster + NIN[K] := NIN[K] + NIN[L]; +label70: // end of ARRANGE procedure + + // continuation of CLUSV1 procedure + // OUTPUT + if (CRIT = 0) then + begin + outline := format('Group %3d is joined by group %3d. N is %3d ITER := %3d SIM := %10.3f', + [NVAR[K], NVAR[L],NIN[K],ITR,RX]); + OutPutFrm.RichEdit.Lines.Add(outline); + end else + begin + outline := format('Group %3d is joined by group %3d. N is %3d ITER := %3d DIS := %10.3f', + [NVAR[K], NVAR[L],NIN[K],ITR,RX]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + KLUS[ITR,1] := NVAR[K]; // save in KLUS rather than write out to file as in + KLUS[ITR,2] := NVAR[L]; // original program + if not(L = M) then + begin + MN := M - 1; + for i := L to MN do NVAR[i] := NVAR[i+1]; + end; + M := M - 1; + if (ITR < LIMIT) then goto label300; + OutPutFrm.RichEdit.Lines.Add(''); +// OutPutFrm.ShowModal; + // End of CLUSV1 procedure + + // do pre-tree processing + PreTree(nvalues, CRIT, LST, KLUS); + OutPutFrm.ShowModal; + // do TREE procedure + TreePlot(KLUS,LST,nvalues); + OutPutFrm.ShowModal; + + // cleanup + NVAR := nil; + NIN := nil; + LST := nil; + KLUS := nil; + X := nil; +end; + + procedure TAvgLinkFrm.TreePlot(Clusters : IntDyneMat; Lst : IntDyneVec; NoPoints : integer); +VAR + outline : array[0..501] of char; + aline : array[0..82] of char; + valstr : string; + tempstr : string; + plotline : string; + star : char; + blank : char; + endit : char; + col1, col2, colpos1, colpos2 : integer; + noparts, startcol, endcol : integer; + Results : StrDyneVec; + ColPos : IntDyneVec; + i, j, k, L, linecount, newcol, howlong, count, strlong : integer; + done : boolean; +begin + linecount := 1; + star := '*'; + blank := ' '; + SetLength(ColPos,NoPoints+2); + SetLength(Results,NoPoints*2+3); + OutPutFrm.RichEdit.Lines.Add(''); + done := false; + // store initial column positions of vertical linkages + for i := 1 to NoPoints do ColPos[Lst[i]] := 4 + (i * 5); + + // create column heading indented 10 spaces + tempstr := 'UNIT '; + for i := 1 to NoPoints do + begin + valstr := format('%5d',[Lst[i]]); + tempstr := tempstr + valstr; + end; + Results[linecount] := tempstr; + linecount := linecount + 1; + + // create beginning of vertical linkages + plotline := 'STEP '; + for i := 1 to NoPoints do plotline := plotline + ' *'; + Results[linecount] := plotline; + linecount := linecount + 1; + + // start dendoplot + for i := 1 to NoPoints - 1 do + begin + outline := ''; + valstr := format('%5d',[i]); // put step no. first + outline := valstr; + // clear remainder of outline + for j := 5 to (5 + NoPoints * 5) do outline[j] := ' '; + outline[6 + NoPoints * 5] := #0; + col1 := Clusters[i,1]; + col2 := Clusters[i,2]; + // find column positions for each variable + colpos1 := ColPos[col1]; + colpos2 := ColPos[col2]; + + for k := colpos1 to colpos2 do outline[k] := star; + // change column positions 1/2 way between the matched ones + newcol := colpos1 + ((colpos2 - colpos1) div 2); + for k := 1 to NoPoints do + if ((ColPos[k] = colpos1) or (ColPos[k] = colpos2)) then ColPos[k] := newcol; + for k := 1 to NoPoints do + begin + L := ColPos[k]; + if ((L <> colpos1) and (L <> colpos2)) then outline[L] := star; + end; + Results[linecount] := outline; + linecount := linecount + 1; + + // add a line of connectors to next grouping + outline := ' '; + for j := 5 to (5 + NoPoints * 5) do outline[j] := blank; + for j := 1 to NoPoints do + begin + colpos1 := ColPos[j]; + outline[colpos1] := star; + end; + Results[linecount] := outline; + linecount := linecount + 1; + end; + + // output the Results in parts + // determine number of pages needed for whole plot + noparts := 0; + howlong := Length(Results[1]); + noparts := round(howlong / 80.0); + if (noparts <= 0) then noparts := 1; + + if (noparts = 1) then // simply print the list + begin + for i := 0 to linecount - 1 do + begin + OutPutFrm.RichEdit.Lines.Add(Results[i]); + end; + end + else // break lines into strings of 15 units + begin + startcol := 0; + endcol := 80; + for i := 1 to noparts do + begin + outline := format('PART %d OUTPUT',[i]); + OutPutFrm.RichEdit.Lines.Add(outline); + for j := 0 to 80 do aline[j] := blank; + + for j := 0 to linecount - 1 do + begin + count := 0; + outline := Results[j]; + for k := startcol to endcol do + begin + aline[count] := outline[k]; + count := count + 1; + end; + aline[count+1] := #0; + OutPutFrm.RichEdit.Lines.Add(aline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + startcol := endcol + 1; + endcol := endcol + 80; + if (endcol > howlong) then endcol := howlong; + end; + end; + Results := nil; + ColPos := nil; +end; + + procedure TAvgLinkFrm.PreTree(NN, CRIT : integer; LST : IntDyneVec; KLUS : IntDyneMat); +VAR + I, II, J, NI, NJ, L, M, N, Ina, INEND, NHOLD, NLINES, INDX, ICOL, JCOL : integer; + KSH, JEND, MSH : integer; + JHOLD, NIN1 : IntDyneVec; + outline, outvalue : string; +label label2015, label2020, label2030, label2040, label2055, label2060; + +begin + // PRETRE procedure + SetLength(JHOLD,NN+1); + SetLength(NIN1,NN+1); +// int NN := nvalues; + N := NN - 1; + outline := format('No. of objects := %3d',[NN]); + OutPutFrm.RichEdit.Lines.Add(outline); + if (CRIT = 0) then outline := 'Matrix defined similarities among objects.' + else outline := 'Matrix defined dissimilarities among objects.'; + OutPutFrm.RichEdit.Lines.Add(outline); + + for I := 1 to NN do + begin + LST[I] := I; + NIN1[I] := 1; + end; + + for II := 1 to N do + begin + // name tabs + I := KLUS[II][1]; + J := KLUS[II][2]; + NI := NIN1[I]; + NJ := NIN1[J]; + L := 1; +label2015: + if (LST[L] = I) then goto label2020; + L := L + 1; + if (L <= NN) then goto label2015; +label2020: + ICOL := L; + Ina := ICOL + NI; + INEND := Ina + NJ - 1; + L := L + 1; +label2030: + if (LST[L] = J) then goto label2040; + L := L + 1; + if (L <= NN) then goto label2030; +label2040: + JCOL := L; + JEND := JCOL + NJ - 1; + NHOLD := 1; + + // remove J vector and store in HOLD + for M := JCOL to JEND do + begin + JHOLD[NHOLD] := LST[M]; + NHOLD := NHOLD + 1; + end; + + // shift + MSH := JEND; +label2055: + if (MSH = INEND) then goto label2060; + KSH := MSH - NJ; + LST[MSH] := LST[KSH]; + MSH := MSH - 1; + goto label2055; + + // insert hold vector +label2060: + NHOLD := 1; + for M := Ina to INEND do + begin + LST[M] := JHOLD[NHOLD]; + NHOLD := NHOLD + 1; + end; + NIN1[I] := NI + NJ; + end; + + NLINES := (NN div 20) + 1; + INDX := 0; + for I := 1 to NLINES do + begin + outline := ' '; + for J := 1 to 20 do + begin + INDX := INDX + 1; + if (INDX <= NN) then + begin + outvalue := format(' %3d',[LST[INDX]]); + outline := outline + outvalue; + end; + end; + end; + NIN1 := nil; + JHOLD := nil; + // End of PRETRE procedure +end; + +initialization + {$I avglinkunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/bartletttestunit.lfm b/applications/lazstats/source_orig/bartletttestunit.lfm new file mode 100644 index 000000000..863b6ca14 --- /dev/null +++ b/applications/lazstats/source_orig/bartletttestunit.lfm @@ -0,0 +1,253 @@ +object BartlettTestForm: TBartlettTestForm + Left = 229 + Height = 308 + Top = 141 + Width = 668 + Caption = 'Bartlett Test of Sphericity' + ClientHeight = 308 + ClientWidth = 668 + OnShow = ResetBtnClick + LCLVersion = '0.9.30' + object Label2: TLabel + Left = 8 + Height = 16 + Top = 8 + Width = 48 + Caption = 'Variables' + ParentColor = False + end + object Label3: TLabel + Left = 239 + Height = 16 + Top = 8 + Width = 45 + Caption = 'Selected' + ParentColor = False + end + object VarList: TListBox + Left = 8 + Height = 225 + Top = 24 + Width = 166 + ItemHeight = 0 + MultiSelect = True + TabOrder = 0 + end + object SelList: TListBox + Left = 239 + Height = 225 + Top = 24 + Width = 161 + ItemHeight = 0 + TabOrder = 1 + end + object ResetBtn: TButton + Left = 564 + Height = 32 + Top = 136 + Width = 80 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 2 + end + object CancelBtn: TButton + Left = 425 + Height = 30 + Top = 176 + Width = 82 + Cancel = True + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 3 + end + object ComputeBtn: TButton + Left = 564 + Height = 30 + Top = 176 + Width = 80 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 4 + end + object InBtn: TBitBtn + Left = 184 + Height = 39 + Top = 24 + Width = 38 + 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 + } + NumGlyphs = 0 + OnClick = InBtnClick + TabOrder = 5 + end + object OutBtn: TBitBtn + Left = 184 + Height = 39 + Top = 72 + Width = 38 + 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 + } + NumGlyphs = 0 + OnClick = OutBtnClick + TabOrder = 6 + end + object AllBtn: TBitBtn + Left = 184 + Height = 39 + Top = 136 + Width = 38 + Caption = 'ALL' + NumGlyphs = 0 + OnClick = AllBtnClick + TabOrder = 7 + end + object HelpBtn: TButton + Tag = 119 + Left = 425 + Height = 32 + Top = 136 + Width = 82 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 8 + end + object Memo1: TMemo + Left = 425 + Height = 109 + Top = 13 + Width = 219 + Lines.Strings = ( + 'This is the Bartlett test of sphericity for' + ' three or more variables. Enter three or' + ' more of the variables listed in the left' + ' box and press the compute button to' + ' obtain the results.' + ) + TabOrder = 9 + end + object Label1: TLabel + Left = 9 + Height = 16 + Top = 270 + Width = 68 + Caption = 'Chisquare = ' + ParentColor = False + end + object ChiSqrEdit: TEdit + Left = 80 + Height = 23 + Top = 265 + Width = 92 + TabOrder = 10 + Text = 'ChiSqrEdit' + end + object Label4: TLabel + Left = 239 + Height = 16 + Top = 270 + Width = 72 + Caption = 'Probability = ' + ParentColor = False + end + object ProbEdit: TEdit + Left = 316 + Height = 23 + Top = 263 + Width = 84 + TabOrder = 11 + Text = 'ProbEdit' + end + object Label5: TLabel + Left = 425 + Height = 16 + Top = 270 + Width = 89 + Caption = 'Deg. Freedom = ' + ParentColor = False + end + object DFEdit: TEdit + Left = 521 + Height = 23 + Top = 265 + Width = 40 + TabOrder = 12 + Text = 'DFEdit' + end + object ReturnBtn: TButton + Left = 488 + Height = 35 + Top = 216 + Width = 88 + Caption = 'Return' + ModalResult = 1 + TabOrder = 13 + end +end diff --git a/applications/lazstats/source_orig/bartletttestunit.lrs b/applications/lazstats/source_orig/bartletttestunit.lrs new file mode 100644 index 000000000..0fa316f4d --- /dev/null +++ b/applications/lazstats/source_orig/bartletttestunit.lrs @@ -0,0 +1,145 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TBartlettTestForm','FORMDATA',[ + 'TPF0'#17'TBartlettTestForm'#16'BartlettTestForm'#4'Left'#3#229#0#6'Height'#3 + +'4'#1#3'Top'#3#141#0#5'Width'#3#156#2#7'Caption'#6#27'Bartlett Test of Spher' + +'icity'#12'ClientHeight'#3'4'#1#11'ClientWidth'#3#156#2#6'OnShow'#7#13'Reset' + +'BtnClick'#10'LCLVersion'#6#6'0.9.30'#0#6'TLabel'#6'Label2'#4'Left'#2#8#6'He' + +'ight'#2#16#3'Top'#2#8#5'Width'#2'0'#7'Caption'#6#9'Variables'#11'ParentColo' + +'r'#8#0#0#6'TLabel'#6'Label3'#4'Left'#3#239#0#6'Height'#2#16#3'Top'#2#8#5'Wi' + +'dth'#2'-'#7'Caption'#6#8'Selected'#11'ParentColor'#8#0#0#8'TListBox'#7'VarL' + +'ist'#4'Left'#2#8#6'Height'#3#225#0#3'Top'#2#24#5'Width'#3#166#0#10'ItemHeig' + +'ht'#2#0#11'MultiSelect'#9#8'TabOrder'#2#0#0#0#8'TListBox'#7'SelList'#4'Left' + +#3#239#0#6'Height'#3#225#0#3'Top'#2#24#5'Width'#3#161#0#10'ItemHeight'#2#0#8 + +'TabOrder'#2#1#0#0#7'TButton'#8'ResetBtn'#4'Left'#3'4'#2#6'Height'#2' '#3'To' + +'p'#3#136#0#5'Width'#2'P'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClic' + +'k'#8'TabOrder'#2#2#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#169#1#6'Height'#2 + +#30#3'Top'#3#176#0#5'Width'#2'R'#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'Modal' + +'Result'#2#2#8'TabOrder'#2#3#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3'4'#2#6 + +'Height'#2#30#3'Top'#3#176#0#5'Width'#2'P'#7'Caption'#6#7'Compute'#7'OnClick' + +#7#15'ComputeBtnClick'#8'TabOrder'#2#4#0#0#7'TBitBtn'#5'InBtn'#4'Left'#3#184 + +#0#6'Height'#2''''#3'Top'#2#24#5'Width'#2'&'#10'Glyph.Data'#10':'#4#0#0'6'#4 + +#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0 + +#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169 + +'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255 + +'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255 + +#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161 + +#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198 + +#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196 + +#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255 + +#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149 + +#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P' + +#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195 + +'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255 + +'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#10'InBtnClick'#8'TabOrder'#2#5#0 + +#0#7'TBitBtn'#6'OutBtn'#4'Left'#3#184#0#6'Height'#2''''#3'Top'#2'H'#5'Width' + +#2'&'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0 + +#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8' + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255 + +'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%' + +'i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200 + +#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139 + +#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v' + +#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201 + +#127#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159 + +#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197 + +#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X' + +#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B' + +#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11 + +'OutBtnClick'#8'TabOrder'#2#6#0#0#7'TBitBtn'#6'AllBtn'#4'Left'#3#184#0#6'Hei' + +'ght'#2''''#3'Top'#3#136#0#5'Width'#2'&'#7'Caption'#6#3'ALL'#9'NumGlyphs'#2#0 + +#7'OnClick'#7#11'AllBtnClick'#8'TabOrder'#2#7#0#0#7'TButton'#7'HelpBtn'#3'Ta' + +'g'#2'w'#4'Left'#3#169#1#6'Height'#2' '#3'Top'#3#136#0#5'Width'#2'R'#7'Capti' + +'on'#6#4'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2#8#0#0#5'TMemo'#5 + +'Memo1'#4'Left'#3#169#1#6'Height'#2'm'#3'Top'#2#13#5'Width'#3#219#0#13'Lines' + +'.Strings'#1#6'+This is the Bartlett test of sphericity for'#6') three or mo' + +'re variables. Enter three or'#6') more of the variables listed in the left' + +#6'$ box and press the compute button to'#6#20' obtain the results.'#0#8'Tab' + ,'Order'#2#9#0#0#6'TLabel'#6'Label1'#4'Left'#2#9#6'Height'#2#16#3'Top'#3#14#1 + +#5'Width'#2'D'#7'Caption'#6#12'Chisquare = '#11'ParentColor'#8#0#0#5'TEdit' + +#10'ChiSqrEdit'#4'Left'#2'P'#6'Height'#2#23#3'Top'#3#9#1#5'Width'#2'\'#8'Tab' + +'Order'#2#10#4'Text'#6#10'ChiSqrEdit'#0#0#6'TLabel'#6'Label4'#4'Left'#3#239#0 + +#6'Height'#2#16#3'Top'#3#14#1#5'Width'#2'H'#7'Caption'#6#14'Probability = ' + +#11'ParentColor'#8#0#0#5'TEdit'#8'ProbEdit'#4'Left'#3'<'#1#6'Height'#2#23#3 + +'Top'#3#7#1#5'Width'#2'T'#8'TabOrder'#2#11#4'Text'#6#8'ProbEdit'#0#0#6'TLabe' + +'l'#6'Label5'#4'Left'#3#169#1#6'Height'#2#16#3'Top'#3#14#1#5'Width'#2'Y'#7'C' + +'aption'#6#15'Deg. Freedom = '#11'ParentColor'#8#0#0#5'TEdit'#6'DFEdit'#4'Le' + +'ft'#3#9#2#6'Height'#2#23#3'Top'#3#9#1#5'Width'#2'('#8'TabOrder'#2#12#4'Text' + +#6#6'DFEdit'#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#232#1#6'Height'#2'#'#3'To' + +'p'#3#216#0#5'Width'#2'X'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOr' + +'der'#2#13#0#0#0 +]); diff --git a/applications/lazstats/source_orig/bartletttestunit.pas b/applications/lazstats/source_orig/bartletttestunit.pas new file mode 100644 index 000000000..fe3b1875e --- /dev/null +++ b/applications/lazstats/source_orig/bartletttestunit.pas @@ -0,0 +1,208 @@ +unit BartlettTestUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, MainUnit, Globals, functionsLib, OutPutUnit, DataProcs, + DictionaryUnit, MatrixLib, contexthelpunit, matmanunit; + +type + + { TBartlettTestForm } + + TBartlettTestForm = class(TForm) + AllBtn: TBitBtn; + ReturnBtn: TButton; + CancelBtn: TButton; + ChiSqrEdit: TEdit; + DFEdit: TEdit; + Label5: TLabel; + ProbEdit: TEdit; + HelpBtn: TButton; + InBtn: TBitBtn; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Memo1: TMemo; + ComputeBtn: TButton; + OutBtn: TBitBtn; + ResetBtn: TButton; + SelList: TListBox; + VarList: TListBox; + procedure AllBtnClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure InBtnClick(Sender: TObject); + procedure OutBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + BartlettTestForm: TBartlettTestForm; + +implementation + +{ TBartlettTestForm } + +procedure TBartlettTestForm.ResetBtnClick(Sender: TObject); +VAR i :integer; +begin + ChiSqrEdit.Text := ''; + ProbEdit.Text := ''; + DFEdit.Text := ''; + InBtn.Visible := true; + OutBtn.Visible := false; + VarList.Clear; + SelList.Clear; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; + +procedure TBartlettTestForm.InBtnClick(Sender: TObject); +VAR i, index : integer; +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + SelList.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + OutBtn.Enabled := true; +end; + +procedure TBartlettTestForm.AllBtnClick(Sender: TObject); +VAR i : integer; +begin + for i := 0 to VarList.Items.Count-1 do + SelList.Items.Add(VarList.Items.Strings[i]); + VarList.Clear; + OutBtn.Enabled := true; + InBtn.Enabled := false; +end; + +procedure TBartlettTestForm.ComputeBtnClick(Sender: TObject); +VAR + matrix, temp, eigenvectors : DblDyneMat; + eigenvalues, means, variances, stddevs : DblDyneVec; + sumroots, determinant, chisquare, probability, natlogdet, natlogp : double; + i, j, k, df, p, result, intvalue, ncases, colno : integer; + aline, strvalue, ytitle, title, probvalue, chivalue : string; + ColNoSelected : IntDyneVec; + dblvalue : double; + DataGrid : DblDyneMat; + RowLabels, ColLabels : StrDyneVec; + errorcode : boolean; +begin + p := SelList.Count; + SetLength(matrix,p+1,p+1); + SetLength(temp,p+1,p+1); + SetLength(eigenvectors,p,p); + SetLength(eigenvalues,p); + SetLength(means,p+1); + SetLength(stddevs,p+1); + SetLength(variances,p+1); + SetLength(ColNoSelected,p+1); + SetLength(DataGrid,NoCases,p+1); + SetLength(RowLabels,p+1); + SetLength(ColLabels,p+1); + + for j := 0 to p-1 do + begin + for i := 1 to NoVariables do + begin + if SelList.Items.Strings[j] = OS3MainFrm.DataGrid.Cells[i,0] then + begin + ColNoSelected[j] := i; + RowLabels[j] := OS3MainFrm.DataGrid.Cells[i,0]; + ColLabels[j] := OS3MainFrm.DataGrid.Cells[i,0]; + end; + end; + end; + ncases := 0; + ytitle := 'Variable'; + errorcode := false; + + // get data into the datagrid + for j := 0 to p-1 do + begin + for i := 1 to NoCases do + begin + if not GoodRecord(i,p,ColNoSelected) then continue; + colno := ColNoSelected[j]; + dblvalue := StrToFloat(OS3MainFrm.DataGrid.Cells[colno,i]); + DataGrid[i-1,j] := dblvalue; + ncases := ncases + 1; + end; + end; + OutPutFrm.RichEdit.Clear; + ncases := 0; + Correlations(p,ColNoSelected,matrix,means,variances,stddevs,errorcode,ncases); + title := 'CORRELATION MATRIX'; + MAT_PRINT(matrix,p,p,title,RowLabels,ColLabels,ncases); + OutPutFrm.RichEdit.Lines.Add(''); + DETERM(matrix,p,p,determinant,errorcode); + strvalue := format('Determinant of matrix = %8.3f',[determinant]); + OutPutFrm.RichEdit.Lines.Add(strvalue); + OutPutFrm.RichEdit.Lines.Add(''); + natlogp := ln(1.0 / p); + chisquare := -((ncases-1) - (2.0*p-5)/6) * ln(determinant); + df := ((p * p) - p) div 2; + probability := chisquaredprob(chisquare,df); + chivalue := format('%8.3f',[chisquare]); + probvalue := format('%8.3f',[1.0-probability]); + chisqrEdit.Text := chivalue; + ProbEdit.Text := probvalue; + DFEdit.Text := IntToStr(df); + aline := format('chisquare = %s, D.F. = %D, Proabability greater value = %s', + [chivalue,df,probvalue]); + OutPutFrm.RichEdit.Lines.Add(aline); + ColLabels := nil; + RowLabels := nil; + DataGrid := nil; + ColNoSelected := nil; + variances := nil; + stddevs := nil; + means := nil; + eigenvalues := nil; + eigenvectors := nil; + temp := nil; + matrix := nil; + OutPutFrm.ShowModal; +end; + +procedure TBartlettTestForm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TBartlettTestForm.OutBtnClick(Sender: TObject); +VAR index : integer; +begin + index := SelList.ItemIndex; + VarList.Items.Add(SelList.Items.Strings[index]); + SelList.Items.Delete(index); + InBtn.Enabled := true; + if SelList.Items.Count = 0 then OutBtn.Enabled := false; + +end; + +initialization + {$I bartletttestunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/blankfrmunit.lfm b/applications/lazstats/source_orig/blankfrmunit.lfm new file mode 100644 index 000000000..8ed652227 --- /dev/null +++ b/applications/lazstats/source_orig/blankfrmunit.lfm @@ -0,0 +1,65 @@ +object BlankFrm: TBlankFrm + Left = 41 + Height = 557 + Top = 96 + Width = 751 + BorderStyle = bsSingle + Caption = 'BlankFrm' + ClientHeight = 557 + ClientWidth = 751 + OnShow = FormShow + LCLVersion = '0.9.30' + object Image1: TImage + Left = 0 + Height = 496 + Top = 0 + Width = 751 + Align = alClient + end + object Panel1: TPanel + Left = 0 + Height = 61 + Top = 496 + Width = 751 + Align = alBottom + ClientHeight = 61 + ClientWidth = 751 + TabOrder = 0 + object PrintBtn: TButton + Left = 439 + Height = 28 + Top = 17 + Width = 97 + Caption = 'Print' + OnClick = PrintBtnClick + TabOrder = 0 + end + object SaveBtn: TButton + Left = 296 + Height = 27 + Top = 17 + Width = 92 + Caption = 'Save Image' + OnClick = SaveBtnClick + TabOrder = 1 + end + end + object CloseBtn: TButton + Left = 592 + Height = 30 + Top = 512 + Width = 97 + Caption = 'Close' + OnClick = CloseBtnClick + TabOrder = 1 + end + object SavePictureDialog1: TSavePictureDialog + Title = 'Save file as' + left = 47 + top = 508 + end + object OpenPictureDialog1: TOpenPictureDialog + left = 91 + top = 508 + end +end diff --git a/applications/lazstats/source_orig/blankfrmunit.lrs b/applications/lazstats/source_orig/blankfrmunit.lrs new file mode 100644 index 000000000..6ebb24c20 --- /dev/null +++ b/applications/lazstats/source_orig/blankfrmunit.lrs @@ -0,0 +1,20 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TBlankFrm','FORMDATA',[ + 'TPF0'#9'TBlankFrm'#8'BlankFrm'#4'Left'#2')'#6'Height'#3'-'#2#3'Top'#2'`'#5'W' + +'idth'#3#239#2#11'BorderStyle'#7#8'bsSingle'#7'Caption'#6#8'BlankFrm'#12'Cli' + +'entHeight'#3'-'#2#11'ClientWidth'#3#239#2#6'OnShow'#7#8'FormShow'#10'LCLVer' + +'sion'#6#6'0.9.30'#0#6'TImage'#6'Image1'#4'Left'#2#0#6'Height'#3#240#1#3'Top' + +#2#0#5'Width'#3#239#2#5'Align'#7#8'alClient'#0#0#6'TPanel'#6'Panel1'#4'Left' + +#2#0#6'Height'#2'='#3'Top'#3#240#1#5'Width'#3#239#2#5'Align'#7#8'alBottom'#12 + +'ClientHeight'#2'='#11'ClientWidth'#3#239#2#8'TabOrder'#2#0#0#7'TButton'#8'P' + +'rintBtn'#4'Left'#3#183#1#6'Height'#2#28#3'Top'#2#17#5'Width'#2'a'#7'Caption' + +#6#5'Print'#7'OnClick'#7#13'PrintBtnClick'#8'TabOrder'#2#0#0#0#7'TButton'#7 + +'SaveBtn'#4'Left'#3'('#1#6'Height'#2#27#3'Top'#2#17#5'Width'#2'\'#7'Caption' + +#6#10'Save Image'#7'OnClick'#7#12'SaveBtnClick'#8'TabOrder'#2#1#0#0#0#7'TBut' + +'ton'#8'CloseBtn'#4'Left'#3'P'#2#6'Height'#2#30#3'Top'#3#0#2#5'Width'#2'a'#7 + +'Caption'#6#5'Close'#7'OnClick'#7#13'CloseBtnClick'#8'TabOrder'#2#1#0#0#18'T' + +'SavePictureDialog'#18'SavePictureDialog1'#5'Title'#6#12'Save file as'#4'lef' + +'t'#2'/'#3'top'#3#252#1#0#0#18'TOpenPictureDialog'#18'OpenPictureDialog1'#4 + +'left'#2'['#3'top'#3#252#1#0#0#0 +]); diff --git a/applications/lazstats/source_orig/blankfrmunit.pas b/applications/lazstats/source_orig/blankfrmunit.pas new file mode 100644 index 000000000..d838b03ae --- /dev/null +++ b/applications/lazstats/source_orig/blankfrmunit.pas @@ -0,0 +1,84 @@ +unit BlankFrmUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + ExtCtrls, StdCtrls, ExtDlgs, Clipbrd, printers; + +type + + { TBlankFrm } + + TBlankFrm = class(TForm) + SaveBtn: TButton; + PrintBtn: TButton; + CloseBtn: TButton; + OpenPictureDialog1: TOpenPictureDialog; + Image1: TImage; + Panel1: TPanel; + SavePictureDialog1: TSavePictureDialog; + procedure CloseBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure PrintBtnClick(Sender: TObject); + procedure SaveBtnClick(Sender: TObject); + private + Bitmap : TBitMap; + jp: TJpegImage; //Requires the "jpeg" unit added to "uses" clause. + + { private declarations } + public + { public declarations } + end; + +var + BlankFrm: TBlankFrm; + +implementation + +{ TBlankFrm } + +procedure TBlankFrm.CloseBtnClick(Sender: TObject); +begin +// Bitmap.FreeImage; + BlankFrm.Hide; +end; + +procedure TBlankFrm.FormShow(Sender: TObject); +begin +// Image1.Canvas.Clear; +// Bitmap := GetFormImage; +// Clipboard.Assign(Bitmap); +// Image1.Picture.Assign(Clipboard); +end; + +procedure TBlankFrm.PrintBtnClick(Sender: TObject); +var + r : Trect; + +begin + with Printer do + begin + Printer.Orientation := poPortrait; + r := Rect(20,20,printer.pagewidth-20,printer.pageheight div 2 + 20); + BeginDoc; + Canvas.StretchDraw(r,Image1.Picture.BitMap); + EndDoc; + end; +end; + +procedure TBlankFrm.SaveBtnClick(Sender: TObject); +begin + if SavePictureDialog1.Execute then + begin + Image1.Picture.SaveToFile(SavePictureDialog1.FileName); + end; +end; + +initialization + {$I blankfrmunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/bnestaunit.lfm b/applications/lazstats/source_orig/bnestaunit.lfm new file mode 100644 index 000000000..d9e1a6772 --- /dev/null +++ b/applications/lazstats/source_orig/bnestaunit.lfm @@ -0,0 +1,435 @@ +object BNestedAForm: TBNestedAForm + Left = 288 + Height = 402 + Top = 161 + Width = 686 + Caption = 'Factor B Nested in Factor A Analysis of Variance' + ClientHeight = 402 + ClientWidth = 686 + OnShow = ResetBtnClick + LCLVersion = '0.9.30' + object Label1: TLabel + Left = 16 + Height = 16 + Top = 8 + Width = 102 + Caption = 'Available Variables:' + ParentColor = False + end + object Label2: TLabel + Left = 255 + Height = 16 + Top = 24 + Width = 90 + Caption = 'Factor A Variable' + ParentColor = False + end + object Label3: TLabel + Left = 255 + Height = 16 + Top = 96 + Width = 116 + Caption = 'Factor B (Nested in A)' + ParentColor = False + end + object Label4: TLabel + Left = 256 + Height = 16 + Top = 197 + Width = 104 + Caption = 'Dependent Variable' + ParentColor = False + end + object VarList: TListBox + Left = 16 + Height = 239 + Top = 24 + Width = 181 + ItemHeight = 0 + MultiSelect = True + TabOrder = 0 + end + object AInBtn: TBitBtn + Left = 211 + Height = 26 + Top = 24 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = AInBtnClick + TabOrder = 1 + end + object AOutBtn: TBitBtn + Left = 211 + Height = 26 + Top = 56 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = AOutBtnClick + TabOrder = 2 + end + object BInBtn: TBitBtn + Left = 210 + Height = 26 + Top = 96 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = BInBtnClick + TabOrder = 3 + end + object BOutBtn: TBitBtn + Left = 210 + Height = 26 + Top = 128 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = BOutBtnClick + TabOrder = 4 + end + object DepInBtn: TBitBtn + Left = 211 + Height = 26 + Top = 200 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = DepInBtnClick + TabOrder = 5 + end + object DepOutBtn: TBitBtn + Left = 211 + Height = 26 + Top = 232 + Width = 30 + 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 + } + NumGlyphs = 0 + OnClick = DepOutBtnClick + TabOrder = 6 + end + object ACodes: TEdit + Left = 255 + Height = 23 + Top = 40 + Width = 139 + TabOrder = 7 + Text = 'ACodes' + end + object BCodes: TEdit + Left = 255 + Height = 23 + Top = 112 + Width = 138 + TabOrder = 8 + Text = 'BCodes' + end + object ResetBtn: TButton + Left = 24 + Height = 27 + Top = 296 + Width = 89 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 9 + end + object CancelBtn: TButton + Left = 24 + Height = 27 + Top = 344 + Width = 89 + Cancel = True + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 10 + end + object ComputeBtn: TButton + Left = 240 + Height = 27 + Top = 296 + Width = 89 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 11 + end + object ReturnBtn: TButton + Left = 240 + Height = 27 + Top = 344 + Width = 89 + Caption = 'Return' + ModalResult = 1 + TabOrder = 12 + end + object DepEdit: TEdit + Left = 255 + Height = 23 + Top = 216 + Width = 132 + TabOrder = 13 + Text = 'DepEdit' + end + object OptionsBox: TRadioGroup + Left = 400 + Height = 131 + Top = 240 + Width = 273 + AutoFill = True + Caption = 'OptionsBox' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 113 + ClientWidth = 269 + 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 = 14 + end + object Memo1: TMemo + Left = 400 + Height = 197 + Top = 16 + Width = 272 + Lines.Strings = ( + '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.' + '' + 'The number of cases for each B group should be' + 'equal and the number of B treatements in each ' + 'A level should be equal.' + ) + TabOrder = 15 + end + object RandomBChk: TCheckBox + Left = 211 + Height = 19 + Top = 168 + Width = 135 + Caption = 'B is random, not fixed' + TabOrder = 16 + end +end diff --git a/applications/lazstats/source_orig/bnestaunit.lrs b/applications/lazstats/source_orig/bnestaunit.lrs new file mode 100644 index 000000000..500828f4e --- /dev/null +++ b/applications/lazstats/source_orig/bnestaunit.lrs @@ -0,0 +1,359 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TBNestedAForm','FORMDATA',[ + 'TPF0'#13'TBNestedAForm'#12'BNestedAForm'#4'Left'#3' '#1#6'Height'#3#146#1#3 + +'Top'#3#161#0#5'Width'#3#174#2#7'Caption'#6'0Factor B Nested in Factor A Ana' + +'lysis of Variance'#12'ClientHeight'#3#146#1#11'ClientWidth'#3#174#2#6'OnSho' + +'w'#7#13'ResetBtnClick'#10'LCLVersion'#6#6'0.9.30'#0#6'TLabel'#6'Label1'#4'L' + +'eft'#2#16#6'Height'#2#16#3'Top'#2#8#5'Width'#2'f'#7'Caption'#6#20'Available' + +' Variables:'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#255#0#6'He' + +'ight'#2#16#3'Top'#2#24#5'Width'#2'Z'#7'Caption'#6#17'Factor A Variable'#11 + +'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#3#255#0#6'Height'#2#16#3'Top' + +#2'`'#5'Width'#2't'#7'Caption'#6#22'Factor B (Nested in A)'#11'ParentColor'#8 + +#0#0#6'TLabel'#6'Label4'#4'Left'#3#0#1#6'Height'#2#16#3'Top'#3#197#0#5'Width' + +#2'h'#7'Caption'#6#18'Dependent Variable'#11'ParentColor'#8#0#0#8'TListBox'#7 + +'VarList'#4'Left'#2#16#6'Height'#3#239#0#3'Top'#2#24#5'Width'#3#181#0#10'Ite' + +'mHeight'#2#0#11'MultiSelect'#9#8'TabOrder'#2#0#0#0#7'TBitBtn'#6'AInBtn'#4'L' + +'eft'#3#211#0#6'Height'#2#26#3'Top'#2#24#5'Width'#2#30#10'Glyph.Data'#10':'#4 + +#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0 + +#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255 + +#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211 + +#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130 + +#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$' + +#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171 + +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204 + +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J' + +#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255 + +'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161 + +'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'AInBtnClick'#8'TabOrde' + ,'r'#2#1#0#0#7'TBitBtn'#7'AOutBtn'#4'Left'#3#211#0#6'Height'#2#26#3'Top'#2'8' + +#5'Width'#2#30#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0 + +#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0 + +#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O' + +#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V' + +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255 + +'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195 + +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255 + +#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135 + +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#12'AOutBtnClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#6'BInB' + +'tn'#4'Left'#3#210#0#6'Height'#2#26#3'Top'#2'`'#5'Width'#2#30#10'Glyph.Data' + +#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0 + +#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^' + +' '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255 + +#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255 + +#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142 + +#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J' + +#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162 + +#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255 + +#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130 + +#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199 + +'t'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5' + +#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'BInBtnClick'#8 + +'TabOrder'#2#3#0#0#7'TBitBtn'#7'BOutBtn'#4'Left'#3#210#0#6'Height'#2#26#3'To' + +'p'#3#128#0#5'Width'#2#30#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0 + +#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd' + +#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G' + +#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161 + +'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131 + +#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/' + +'x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e' + +#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255 + ,#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132 + +#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255 + +#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154 + +#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255 + +#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201 + +#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'Num' + +'Glyphs'#2#0#7'OnClick'#7#12'BOutBtnClick'#8'TabOrder'#2#4#0#0#7'TBitBtn'#8 + +'DepInBtn'#4'Left'#3#211#0#6'Height'#2#26#3'Top'#3#200#0#5'Width'#2#30#10'Gl' + +'yph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0 + +#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$' + +#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X' + +#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B' + +#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255 + +#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165 + +#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201 + +#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140 + +'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255 + +#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154 + +#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194 + +#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h' + +#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\' + +#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/' + +'x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#13'DepInBtnClick' + +#8'TabOrder'#2#5#0#0#7'TBitBtn'#9'DepOutBtn'#4'Left'#3#211#0#6'Height'#2#26#3 + +'Top'#3#232#0#5'Width'#2#30#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0 + +#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0 + +'d'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V' + +#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217 + +'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193 + +#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255 + +#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157 + +#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195 + +#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0 + +#255#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255 + +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144 + +#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|' + +#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153 + +'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14'DepOutBtnClick'#8'TabOrder'#2#6#0#0#5 + +'TEdit'#6'ACodes'#4'Left'#3#255#0#6'Height'#2#23#3'Top'#2'('#5'Width'#3#139#0 + +#8'TabOrder'#2#7#4'Text'#6#6'ACodes'#0#0#5'TEdit'#6'BCodes'#4'Left'#3#255#0#6 + +'Height'#2#23#3'Top'#2'p'#5'Width'#3#138#0#8'TabOrder'#2#8#4'Text'#6#6'BCode' + +'s'#0#0#7'TButton'#8'ResetBtn'#4'Left'#2#24#6'Height'#2#27#3'Top'#3'('#1#5'W' + +'idth'#2'Y'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder' + +#2#9#0#0#7'TButton'#9'CancelBtn'#4'Left'#2#24#6'Height'#2#27#3'Top'#3'X'#1#5 + +'Width'#2'Y'#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrd' + +'er'#2#10#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3#240#0#6'Height'#2#27#3'Top' + +#3'('#1#5'Width'#2'Y'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClic' + +'k'#8'TabOrder'#2#11#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#240#0#6'Height'#2 + +#27#3'Top'#3'X'#1#5'Width'#2'Y'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8 + +'TabOrder'#2#12#0#0#5'TEdit'#7'DepEdit'#4'Left'#3#255#0#6'Height'#2#23#3'Top' + +#3#216#0#5'Width'#3#132#0#8'TabOrder'#2#13#4'Text'#6#7'DepEdit'#0#0#11'TRadi' + +'oGroup'#10'OptionsBox'#4'Left'#3#144#1#6'Height'#3#131#0#3'Top'#3#240#0#5'W' + +'idth'#3#17#1#8'AutoFill'#9#7'Caption'#6#10'OptionsBox'#28'ChildSizing.LeftR' + +'ightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.Enlarg' + +'eHorizontal'#7#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVertical' + +#7#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsSca' + +'leChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizin' + +'g.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLin' + +'e'#2#1#12'ClientHeight'#2'q'#11'ClientWidth'#3#13#1#13'Items.Strings'#1#6'#' + +'Plot means using 2D Horizontal Bars'#6'#Plot means using 3D Horizontal Bars' + +#6'!Plot means using 2D Vertical Bars'#6'!Plot means using 3D Vertical Bars' + +#0#8'TabOrder'#2#14#0#0#5'TMemo'#5'Memo1'#4'Left'#3#144#1#6'Height'#3#197#0#3 + +'Top'#2#16#5'Width'#3#16#1#13'Lines.Strings'#1#6'2Directions: This analysis' + +' assumes that levels of '#6'.Factor B are Nested within levels of Factor A.' + +#6'.Unless otherwise specified, it is assumed that'#6'5Factors A and B are f' + +'ixed level factors. If Factor B'#6'/is a random variable, check the provid' + +'ed box to'#6#14'indicate this.'#6#0#6'.The number of cases for each B group' + +' should be'#6'.equal and the number of B treatements in each '#6#24'A level' + +' should be equal.'#0#8'TabOrder'#2#15#0#0#9'TCheckBox'#10'RandomBChk'#4'Lef' + +'t'#3#211#0#6'Height'#2#19#3'Top'#3#168#0#5'Width'#3#135#0#7'Caption'#6#22'B' + +' is random, not fixed'#8'TabOrder'#2#16#0#0#0 +]); diff --git a/applications/lazstats/source_orig/bnestaunit.pas b/applications/lazstats/source_orig/bnestaunit.pas new file mode 100644 index 000000000..9ed87b971 --- /dev/null +++ b/applications/lazstats/source_orig/bnestaunit.pas @@ -0,0 +1,540 @@ +unit BNestAUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, ExtCtrls, MainUnit, OutPutUnit, FunctionsLib, GraphLib, + Globals, DataProcs, MatrixLib; + +type + + { TBNestedAForm } + + TBNestedAForm = class(TForm) + ACodes: TEdit; + AInBtn: TBitBtn; + AOutBtn: TBitBtn; + BCodes: TEdit; + BInBtn: TBitBtn; + BOutBtn: TBitBtn; + CancelBtn: TButton; + RandomBChk: TCheckBox; + DepInBtn: TBitBtn; + ComputeBtn: TButton; + DepOutBtn: TBitBtn; + DepEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Memo1: TMemo; + OptionsBox: TRadioGroup; + ResetBtn: TButton; + ReturnBtn: TButton; + VarList: TListBox; + procedure AInBtnClick(Sender: TObject); + procedure AOutBtnClick(Sender: TObject); + procedure BInBtnClick(Sender: TObject); + procedure BOutBtnClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure DepInBtnClick(Sender: TObject); + procedure DepOutBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + SS, SumSqr, CellMeans, CellSDs : DblDyneMat; + CellCount : IntDyneMat; + ASS, BSS, ASumSqr, BSumSqr, AMeans, BMeans, ASDs : DblDyneVec; + ACount, BCount : IntDyneVec; + MinA, MinB, MaxA, MaxB, NoALevels, NoBLevels, ACol, BCol, YCol : integer; + DepVar, FactorA, FactorB : string; + SSTot, SumSqrTot, TotMean, MSTot, SSA, MSA, SSB, MSB, SSW, MSW : double; + TotN, dfA, dfBwA, dfwcell, dftotal : integer; + + procedure GetVars(Sender: TObject); + procedure GetMemory(Sender: TOBject); + procedure GetSums(Sender: TObject); + procedure ShowMeans(Sender: TObject); + procedure GetResults(Sender: TObject); + procedure ShowResults(Sender: TObject); + procedure ReleaseMemory(Sender: TObject); + procedure TwoWayPlot(Sender: TObject); + + public + { public declarations } + end; + +var + BNestedAForm: TBNestedAForm; + +implementation + +{ TBNestedAForm } + +procedure TBNestedAForm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + VarList.Items.Clear; + ACodes.Text := ''; + BCodes.Text := ''; + DepEdit.Text := ''; + AInBtn.Visible := true; + AOutBtn.Visible := false; + BInBtn.Visible := true; + BOutBtn.Visible := false; + DepInBtn.Visible := true; + DepoutBtn.Visible := false; + OptionsBox.ItemIndex := 0; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + OptionsBox.ItemIndex := 3; +end; + +procedure TBNestedAForm.AInBtnClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + ACodes.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + AinBtn.Visible := false; + AOutBtn.Visible := true; +end; + +procedure TBNestedAForm.AOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(ACodes.Text); + ACodes.Text := ''; + AinBtn.Visible := true; + AOutBtn.Visible := false; +end; + +procedure TBNestedAForm.BInBtnClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + BCodes.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + BInBtn.Visible := false; + BOutBtn.Visible := true; +end; + +procedure TBNestedAForm.BOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(BCodes.Text); + BCodes.Text := ''; + BInBtn.Visible := true; + BOutBtn.Visible := false; +end; + +procedure TBNestedAForm.ComputeBtnClick(Sender: TObject); +begin + GetVars(self); + GetMemory(self); + GetSums(self); + ShowMeans(self); + GetResults(self); + ShowResults(self); + TwoWayPlot(self); + ReleaseMemory(self); +end; + +procedure TBNestedAForm.DepInBtnClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + DepEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + DepOutBtn.Visible := true; + DepInBtn.Visible := false; +end; + +procedure TBNestedAForm.DepOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(DepEdit.Text); + DepEdit.Text := ''; + DepInBtn.Visible := true; + DepOutBtn.Visible := false; +end; + +procedure TBNestedAForm.GetVars(Sender: TObject); +VAR + result, intvalue, i, group : integer; + AValue, BValue : integer; + strvalue, cellstring : string; +begin + DepVar := DepEdit.Text; + FactorA := ACodes.Text; + FactorB := BCodes.Text; + ACol := 0; + BCol := 0; + YCol := 0; + MinA := 1000; + MaxA := -1000; + MinB := 1000; + MaxB := -1000; + for i := 1 to NoVariables do + begin + strvalue := Trim(OS3MainFrm.DataGrid.Cells[i,0]); + if FactorA = strvalue then ACol := i; + if FactorB = strvalue then BCol := i; + if DepVar = strvalue then YCol := i; + end; + if (ACol = 0) or (BCol = 0) or (YCol = 0) then + begin + ShowMessage('ERROR! Select a variable for each entry box.'); + 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; + end; + NoALevels := MaxA - MinA + 1; + NoBLevels := MaxB - MinB + 1; + +end; + +procedure TBNestedAForm.GetMemory(Sender: TOBject); +begin + SetLength(SS,NoBLevels,NoALevels); + SetLength(SumSqr,NoBLevels,NoALevels); + SetLength(CellCount,NoBLevels,NoALevels); + SetLength(CellMeans,NoBLevels,NoALevels); + SetLength(CellSDs,NoBLevels,NoALevels); + SetLength(ASS,NoALevels); + SetLength(BSS,NoBLevels); + SetLength(ASumSqr,NoALevels); + SetLength(BSumSqr,NoBLevels); + SetLength(AMeans,NoALevels); + SetLength(BMeans,NoBLevels); + SetLength(ACount,NoALevels); + SetLength(BCount,NoBLevels); + SetLength(ASDs,NoALevels); +end; + +procedure TBNestedAForm.GetSums(Sender: TObject); +VAR + Aindex, Bindex, result, intvalue, i, j : integer; + YValue : double; + strvalue : string; +begin + // initialize memory + for i := 0 to NoBLevels-1 do + begin + for j := 0 to NoALevels-1 do + begin + SS[i,j] := 0.0; + SumSqr[i,j] := 0.0; + CellCount[i,j] := 0; + end; + end; + for i := 0 to NoALevels-1 do + begin + ACount[i] := 0; + AMeans[i] := 0.0; + ASS[i] := 0.0; + ASumSqr[i] := 0.0; + end; + for j := 0 to NoBLevels-1 do + begin + BCount[i] := 0; + BMeans[i] := 0.0; + BSS[i] := 0.0; + BSumSqr[i] := 0.0; + end; + // Accumulate sums and sums of squared values + for i := 1 to NoCases do + begin + strvalue := Trim(OS3MainFrm.DataGrid.Cells[ACol,i]); + Aindex := round(StrToFloat(strvalue)); + strvalue := Trim(OS3MainFrm.DataGrid.Cells[BCol,i]); + Bindex := round(StrToFloat(strvalue)); + strvalue := Trim(OS3MainFrm.DataGrid.Cells[YCol,i]); + YValue := StrToFloat(strvalue); + Aindex := Aindex - MinA; + Bindex := Bindex - MinB; + SS[Bindex,Aindex] := SS[Bindex,Aindex] + YValue * YValue; + SumSqr[Bindex,Aindex] := SumSqr[Bindex,Aindex] + YValue; + CellCount[Bindex,Aindex] := CellCount[Bindex,Aindex] + 1; + ACount[Aindex] := ACount[Aindex] + 1; + BCount[Bindex] := BCount[Bindex] + 1; + ASS[Aindex] := ASS[Aindex] + YValue * YValue; + BSS[Bindex] := BSS[Bindex] + YValue * YValue; + ASumSqr[Aindex] := ASumSqr[Aindex] + YValue; + BSumSqr[Bindex] := BSumSqr[Bindex] + YValue; + SSTot := SSTot + YValue * YValue; + SumSqrTot := SumSqrTot + YValue; + TotN := TotN + 1; + end; + //get cell means and marginal means, SDs plus square of sums + for i := 0 to NoBlevels-1 do + begin + for j := 0 to NoALevels-1 do + begin + if CellCount[i,j] > 0 then + begin + CellMeans[i,j] := SumSqr[i,j] / CellCount[i,j]; + SumSqr[i,j] := SumSqr[i,j] * SumSqr[i,j]; + CellSDs[i,j] := SS[i,j] - (SumSqr[i,j] / CellCount[i,j]); + CellSDs[i,j] := CellSDs[i,j] / (CellCount[i,j] - 1); + CellSDs[i,j] := Sqrt(CellSDs[i,j]); + end; + end; + end; + for i := 0 to NoBLevels-1 do + begin + BMeans[i] := BSumSqr[i] / BCount[i]; + BSumSqr[i] := BSumSqr[i] * BSumSqr[i]; + end; + for i := 0 to NoALevels-1 do + begin + AMeans[i] := ASumSqr[i] / ACount[i]; + ASumSqr[i] := ASumSqr[i] * ASumSqr[i]; + ASDs[i] := ASS[i] - (ASumSqr[i] / ACount[i]); + ASDs[i] := ASDs[i] / (ACount[i] - 1); + ASDs[i] := Sqrt(ASDs[i]); + end; + TotMean := SumSqrTot / TotN; + SumSqrTot := SumSqrTot * SumSqrTot; +end; + +procedure TBNestedAForm.ShowMeans(Sender: TObject); +VAR + outvalue : string; + i, j : integer; +begin + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Nested ANOVA by Bill Miller'); + outvalue := format('File Analyzed = %s',[OS3MainFrm.FileNameEdit.Text]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('CELL MEANS'); + OutPutFrm.RichEdit.Lines.Add('A LEVEL BLEVEL MEAN STD.DEV.'); + for i := 0 to NoALevels-1 do + begin + for j := 0 to NoBLevels-1 do + begin + if CellCount[j,i] > 0 then + begin + outvalue := format('%5d %5d %10.3f %10.3f', + [i+MinA,j+MinB,CellMeans[j,i],CellSDs[j,i]]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + end; + end; + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('A MARGIN MEANS'); + OutPutFrm.RichEdit.Lines.Add('A LEVEL MEAN STD.DEV.'); + for i := 0 to NoALevels-1 do + begin + outvalue := format('%5d %10.3f %10.3f',[i+MinA,AMeans[i],ASDs[i]]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + end; + OutPutFrm.RichEdit.Lines.Add(''); + outvalue := format('GRAND MEAN = %10.3f',[TotMean]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + OutPutFrm.RichEdit.Lines.Add(''); +// OutPutFrm.ShowModal; +end; + +procedure TBNestedAForm.GetResults(Sender: TObject); +VAR + temp, constant : double; + NoBLevelsInA, BLevCount, i, j, celln : integer; + strvalue : string; +begin + celln := 0; + for i := 0 to NoALevels-1 do + begin + for j := 0 to NoBLevels-1 do + begin + if CellCount[j,i] > celln then celln := CellCount[j,i]; + end; + end; + // assume all cells have same n size + // get no. of levels in A + BLevCount := 0; + for i := 0 to NoALevels-1 do + begin + NoBLevelsInA := 0; + for j := 0 to NoBLevels-1 do + begin + if CellCount[j,i] > 0 then NoBLevelsInA := NoBLevelsInA + 1; + end; + if NoBLevelsInA > BLevCount then BLevCount := NoBLevelsInA; + end; + dfA := NoALevels - 1; + dfBwA := NoALevels * (BLevCount - 1); + dfwcell := NoALevels * BLevCount * (celln - 1); + dftotal := TotN - 1; + constant := SumSqrTot / TotN; + SSTot := SSTot - constant; + MSTot := SSTot / dftotal; + SSA := 0.0; + for i := 0 to NoALevels-1 do SSA := SSA + (ASumSqr[i] / ACount[i]); + temp := SSA; + SSA := SSA - constant; + MSA := SSA / dfA; + SSB := 0.0; + for i := 0 to NoALevels - 1 do + begin + for j := 0 to NoBLevels-1 do + begin + if CellCount[j,i] > 0 then SSB := SSB + (SumSqr[j,i] / CellCount[j,i]); + end; + end; + SSB := SSB - temp; + MSB := SSB / dfBwA; + SSW := SSTot - SSA - SSB; + MSW := SSW / dfwcell; + (* + OutPutFrm.RichEdit.Clear; + strvalue := format('SSA = %10.3f MSA = %10.3f SSB = %10.3f MSB = %10.3f', + [SSA,MSA,SSB,MSB]); + OutPutFrm.RichEdit.Lines.Add(strvalue); + strvalue := format('SSW = %10.3f MSW = %10.3f',[SSW,MSW]); + OutPutFrm.RichEdit.Lines.Add(strvalue); + OutPutFrm.ShowModal; +*) +end; + +procedure TBNestedAForm.ShowResults(Sender: TObject); +VAR + outvalue : string; + F, PF : double; +begin + OutPutFrm.RichEdit.Lines.Add('ANOVA TABLE'); + OutPutFrm.RichEdit.Lines.Add('SOURCE D.F. SS MS F PROB.'); + if RandomBChk.Checked then + begin + F := MSA / MSB; + PF := probf(F,dfA,dfBwA); + end else + begin + F := MSA / MSW; + PF := probf(F,dfA,dfwcell); + end; + outvalue := format('A %4D %10.3f%10.3f%10.3f%10.3f',[dfA,SSA,MSA,F,PF]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + F := MSB / MSW; + PF := probf(F,dfBwA,dfwcell); + outvalue := format('B(W) %4D %10.3f%10.3f%10.3f%10.3f',[dfBwA,SSB,MSB,F,PF]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + outvalue := format('w.cells %4D %10.3f%10.3f',[dfwcell,SSW,MSW]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + outvalue := format('Total %4D %10.3f',[dftotal,SSTot]); + OutPutFrm.RichEdit.Lines.Add(outvalue); + OutPutFrm.ShowModal; +end; + +procedure TBNestedAForm.ReleaseMemory(Sender: TObject); +begin + ASDs := nil; + BCount := nil; + ACount := nil; + BMeans := nil; + AMeans := nil; + BSumSqr := nil; + ASumSqr := nil; + BSS := nil; + ASS := nil; + CellSDs := nil; + CellMeans := nil; + CellCount := nil; + SumSqr := nil; + SS := nil; +end; + +procedure TBNestedAForm.TwoWayPlot(Sender: TObject); +VAR + plottype, i, j : integer; + maxmean, XBar : double; + title, setstring : string; + XValue : DblDyneVec; +begin + maxmean := -1000.0; + SetLength(XValue,NoALevels+NoBLevels); + setstring := 'FACTOR A'; + plottype := OptionsBox.ItemIndex + 1; + if plottype = 3 then plottype := 1 + else if plottype = 4 then plottype := 2 + else if plottype = 1 then plottype := 9 + else if plottype = 2 then plottype := 10; + GraphFrm.SetLabels[1] := setstring; + SetLength(GraphFrm.Xpoints,1,NoALevels); + SetLength(GraphFrm.Ypoints,1,NoALevels); + for i := 1 to NoALevels do + begin + GraphFrm.Ypoints[0,i-1] := AMeans[i-1]; + if AMeans[i-1] > maxmean then maxmean := AMeans[i-1]; + XValue[i-1] := MinA + i -1; + GraphFrm.Xpoints[0,i-1] := XValue[i-1]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := NoALevels; + GraphFrm.Heading := FactorA; + title := FactorA + ' Group Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + + // Factor B next + setstring := 'FACTOR B'; + GraphFrm.SetLabels[1] := setstring; + maxmean := 0.0; + SetLength(GraphFrm.Xpoints,1,NoBLevels); + SetLength(GraphFrm.Ypoints,1,NoBLevels); + for i := 1 to NoBLevels do + begin + GraphFrm.Ypoints[0,i-1] := BMeans[i-1]; + if BMeans[i-1] > maxmean then maxmean := BMeans[i-1]; + XValue[i-1] := MinB + i - 1; + GraphFrm.Xpoints[0,i-1] := XValue[i-1]; + end; + GraphFrm.nosets := 1; + GraphFrm.nbars := NoBLevels; + GraphFrm.Heading := 'FACTOR B'; + title := FactorB + ' Group Codes'; + GraphFrm.XTitle := title; + GraphFrm.YTitle := 'Mean'; + GraphFrm.barwideprop := 0.5; + GraphFrm.AutoScale := false; + GraphFrm.miny := 0.0; + GraphFrm.maxy := maxmean; + GraphFrm.GraphType := plottype; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + XValue := nil; +end; + +initialization + {$I bnestaunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/boxplotunit.lfm b/applications/lazstats/source_orig/boxplotunit.lfm new file mode 100644 index 000000000..e323d45cc --- /dev/null +++ b/applications/lazstats/source_orig/boxplotunit.lfm @@ -0,0 +1,134 @@ +object BoxPlotFrm: TBoxPlotFrm + Left = 258 + Height = 254 + Top = 105 + Width = 420 + Caption = 'Box Plot' + ClientHeight = 254 + ClientWidth = 420 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 8 + Height = 14 + Top = 8 + Width = 90 + Caption = 'Available Variables' + ParentColor = False + end + object Label2: TLabel + Left = 167 + Height = 14 + Top = 24 + Width = 71 + Caption = 'Group Variable' + ParentColor = False + end + object Label3: TLabel + Left = 167 + Height = 14 + Top = 112 + Width = 102 + Caption = 'Meaurement Variable' + ParentColor = False + end + object VarList: TListBox + Left = 8 + Height = 208 + Top = 24 + Width = 142 + ItemHeight = 0 + OnClick = VarListClick + TabOrder = 0 + end + object GroupEdit: TEdit + Left = 166 + Height = 21 + Top = 40 + Width = 129 + TabOrder = 1 + Text = 'GroupEdit' + end + object MeasEdit: TEdit + Left = 167 + Height = 21 + Top = 128 + Width = 130 + TabOrder = 2 + Text = 'MeasEdit' + end + object GroupBox1: TGroupBox + Left = 166 + Height = 65 + Top = 168 + Width = 129 + Caption = 'Options' + ClientHeight = 47 + ClientWidth = 125 + TabOrder = 3 + object PrintChk: TCheckBox + Left = 8 + Height = 17 + Top = 4 + Width = 84 + Caption = 'Print Box Plot' + TabOrder = 0 + end + object ShowChk: TCheckBox + Left = 8 + Height = 17 + Top = 23 + Width = 107 + Caption = 'Show Frequencies' + TabOrder = 1 + end + end + object ResetBtn: TButton + Left = 315 + Height = 32 + Top = 56 + Width = 78 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 4 + end + object CancelBtn: TButton + Left = 315 + Height = 32 + Top = 104 + Width = 79 + Caption = 'Cancel' + ModalResult = 2 + OnClick = CancelBtnClick + TabOrder = 5 + end + object ComputeBtn: TButton + Left = 315 + Height = 32 + Top = 152 + Width = 79 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 6 + end + object OKBtn: TButton + Left = 315 + Height = 33 + Top = 200 + Width = 79 + Caption = 'Return' + ModalResult = 1 + OnClick = OKBtnClick + TabOrder = 7 + end + object HelpBtn: TButton + Tag = 108 + Left = 315 + Height = 32 + Top = 8 + Width = 78 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 8 + end +end diff --git a/applications/lazstats/source_orig/boxplotunit.lrs b/applications/lazstats/source_orig/boxplotunit.lrs new file mode 100644 index 000000000..e24a6f0d2 --- /dev/null +++ b/applications/lazstats/source_orig/boxplotunit.lrs @@ -0,0 +1,35 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TBoxPlotFrm','FORMDATA',[ + 'TPF0'#11'TBoxPlotFrm'#10'BoxPlotFrm'#4'Left'#3#2#1#6'Height'#3#254#0#3'Top'#2 + +'i'#5'Width'#3#164#1#7'Caption'#6#8'Box Plot'#12'ClientHeight'#3#254#0#11'Cl' + +'ientWidth'#3#164#1#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#8'0.9.28.2'#0#6 + +'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2#14#3'Top'#2#8#5'Width'#2'Z'#7'Cap' + +'tion'#6#19'Available Variables'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4 + +'Left'#3#167#0#6'Height'#2#14#3'Top'#2#24#5'Width'#2'G'#7'Caption'#6#14'Grou' + +'p Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#3#167#0#6'Hei' + +'ght'#2#14#3'Top'#2'p'#5'Width'#2'f'#7'Caption'#6#19'Meaurement Variable'#11 + +'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#8#6'Height'#3#208#0#3'T' + +'op'#2#24#5'Width'#3#142#0#10'ItemHeight'#2#0#7'OnClick'#7#12'VarListClick'#8 + +'TabOrder'#2#0#0#0#5'TEdit'#9'GroupEdit'#4'Left'#3#166#0#6'Height'#2#21#3'To' + +'p'#2'('#5'Width'#3#129#0#8'TabOrder'#2#1#4'Text'#6#9'GroupEdit'#0#0#5'TEdit' + +#8'MeasEdit'#4'Left'#3#167#0#6'Height'#2#21#3'Top'#3#128#0#5'Width'#3#130#0#8 + +'TabOrder'#2#2#4'Text'#6#8'MeasEdit'#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#3 + +#166#0#6'Height'#2'A'#3'Top'#3#168#0#5'Width'#3#129#0#7'Caption'#6#7'Options' + +#12'ClientHeight'#2'/'#11'ClientWidth'#2'}'#8'TabOrder'#2#3#0#9'TCheckBox'#8 + +'PrintChk'#4'Left'#2#8#6'Height'#2#17#3'Top'#2#4#5'Width'#2'T'#7'Caption'#6 + +#14'Print Box Plot'#8'TabOrder'#2#0#0#0#9'TCheckBox'#7'ShowChk'#4'Left'#2#8#6 + +'Height'#2#17#3'Top'#2#23#5'Width'#2'k'#7'Caption'#6#16'Show Frequencies'#8 + +'TabOrder'#2#1#0#0#0#7'TButton'#8'ResetBtn'#4'Left'#3';'#1#6'Height'#2' '#3 + +'Top'#2'8'#5'Width'#2'N'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick' + +#8'TabOrder'#2#4#0#0#7'TButton'#9'CancelBtn'#4'Left'#3';'#1#6'Height'#2' '#3 + +'Top'#2'h'#5'Width'#2'O'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#7'OnClic' + +'k'#7#14'CancelBtnClick'#8'TabOrder'#2#5#0#0#7'TButton'#10'ComputeBtn'#4'Lef' + +'t'#3';'#1#6'Height'#2' '#3'Top'#3#152#0#5'Width'#2'O'#7'Caption'#6#7'Comput' + +'e'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#6#0#0#7'TButton'#5'OKBtn' + +#4'Left'#3';'#1#6'Height'#2'!'#3'Top'#3#200#0#5'Width'#2'O'#7'Caption'#6#6'R' + +'eturn'#11'ModalResult'#2#1#7'OnClick'#7#10'OKBtnClick'#8'TabOrder'#2#7#0#0#7 + +'TButton'#7'HelpBtn'#3'Tag'#2'l'#4'Left'#3';'#1#6'Height'#2' '#3'Top'#2#8#5 + +'Width'#2'N'#7'Caption'#6#4'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2 + +#8#0#0#0 +]); diff --git a/applications/lazstats/source_orig/boxplotunit.pas b/applications/lazstats/source_orig/boxplotunit.pas new file mode 100644 index 000000000..d8d4dab55 --- /dev/null +++ b/applications/lazstats/source_orig/boxplotunit.pas @@ -0,0 +1,676 @@ +unit BoxPlotUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, MainUnit, Globals, DataProcs, OutPutUnit, + GraphLib, Printers, BlankFrmUnit, contexthelpunit; + + +type + + { TBoxPlotFrm } + + TBoxPlotFrm = class(TForm) + HelpBtn: TButton; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + OKBtn: TButton; + ShowChk: TCheckBox; + PrintChk: TCheckBox; + GroupBox1: TGroupBox; + MeasEdit: TEdit; + GroupEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + VarList: TListBox; + procedure CancelBtnClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure OKBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure VarListClick(Sender: TObject); + private + { private declarations } + function Percentile(nscrgrps : integer; + pcnt : double; + VAR freq : DblDyneVec; + VAR cumfreq : DblDyneVec; + VAR scores : DblDyneVec) : double; + procedure pBoxPlot(nbars : integer; + max, min : double; + VAR lowqrtl : DblDyneVec; + VAR hiqrtl : DblDyneVec; + VAR tenpcnt : DblDyneVec; + VAR ninetypcnt : DblDyneVec; + VAR means : DblDyneVec; + VAR median : DblDyneVec); + procedure BoxPlot(nbars : integer; + max, min : double; + VAR lowqrtl : DblDyneVec; + VAR hiqrtl : DblDyneVec; + VAR tenpcnt : DblDyneVec; + VAR ninetypcnt : DblDyneVec; + VAR means : DblDyneVec; + VAR median : DblDyneVec); + + public + { public declarations } + end; + +var + BoxPlotFrm: TBoxPlotFrm; + +implementation + +{ TBoxPlotFrm } + +procedure TBoxPlotFrm.ResetBtnClick(Sender: TObject); +var i : integer; + +begin + VarList.Clear; + GroupEdit.Text := ''; + MeasEdit.Text := ''; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; + +procedure TBoxPlotFrm.VarListClick(Sender: TObject); +var + index : integer; + +begin + index := VarList.ItemIndex; + if GroupEdit.Text = '' then GroupEdit.Text := VarList.Items.Strings[index] + else MeasEdit.Text := VarList.Items.Strings[index]; +end; + +procedure TBoxPlotFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TBoxPlotFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TBoxPlotFrm.OKBtnClick(Sender: TObject); +begin + BoxPlotFrm.Hide; +end; + +procedure TBoxPlotFrm.CancelBtnClick(Sender: TObject); +begin + BoxPlotFrm.Hide; +end; + +procedure TBoxPlotFrm.ComputeBtnClick(Sender: TObject); +label cleanup; +var + i, j, k, GrpVar, MeasVar, mingrp, maxgrp, G, NoGrps, cnt : integer; + nscrgrps : integer; + X, tenpcnt, ninepcnt, qrtile1, qrtile2, qrtile3 : double; + minscr, maxscr, intvlsize, lastX : double; + cellstring, outline : string; + means, lowqrtl, hiqrtl, tenpcntile, ninetypcntile, median : DblDyneVec; + freq : DblDyneVec; + Scores : DblDyneVec; + cumfreq : DblDyneVec; + prank : DblDyneVec; + grpsize : IntDyneVec; + scrgrp : DblDyneVec; + done : boolean; + NoSelected : integer; + ColNoSelected : IntDyneVec; + +begin + SetLength(ColNoSelected,NoVariables); + SetLength(freq,2 * NoCases + 1); + SetLength(Scores,2 * NoCases + 1); + SetLength(cumfreq,2 * NoCases + 1); + SetLength(prank,2 * NoCases + 1); + + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Box Plot of Groups'); + OutPutFrm.RichEdit.Lines.Add(''); + + GrpVar := 1; + MeasVar := 2; + for i := 1 to NoVariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[i,0]; + if cellstring = GroupEdit.Text then GrpVar := i; + if cellstring = MeasEdit.Text then MeasVar := i; + end; + NoSelected := 2; + ColNoSelected[0] := GrpVar; + ColNoSelected[1] := MeasVar; + + // get minimum and maximum group values + mingrp := 10000; + maxgrp := -10000; + for i := 1 to NoCases do + begin + if Not GoodRecord(i,NoSelected,ColNoSelected) then continue; + G := round(StrToFloat(OS3MainFrm.DataGrid.Cells[GrpVar,i])); + if G < mingrp then mingrp := G; + if G > maxgrp then maxgrp := G; + end; + NoGrps := maxgrp - mingrp + 1; + if NoGrps > 30 then + begin + ShowMessage('ERROR! Too many groups for meaningful plot.'); + goto cleanup; + end; + SetLength(grpsize,NoGrps+1); + SetLength(means,NoGrps+1); + SetLength(lowqrtl,NoGrps+1); + SetLength(hiqrtl,NoGrps+1); + SetLength(tenpcntile,NoGrps+1); + SetLength(ninetypcntile,NoGrps+1); + SetLength(median,NoGrps+1); + SetLength(scrgrp,NoGrps+1); + + // initialize + for j := 1 to NoGrps do + begin + means[j-1] := 0.0; + grpsize[j-1] := 0; + end; + + // get minimum and maximum scores and score interval + intvlsize := 10000.0; + lastX := 0.0; + X := StrToFloat(OS3MainFrm.DataGrid.Cells[MeasVar,1]); + minscr := X; + maxscr := X; + for i := 1 to NoCases do + begin + if Not GoodRecord(i,NoSelected,ColNoSelected) then continue; + X := StrToFloat(OS3MainFrm.DataGrid.Cells[MeasVar,i]); + if X > maxscr then maxscr := X; + if X < minscr then minscr := X; + if i > 1 then // get interval size as minimum difference between 2 scores + begin + if (X <> lastX) and (abs(X - lastX) < intvlsize) then + intvlsize := abs(X - lastX); + lastX := X; + end + else lastX := X; + end; + + // check for excess no. of intervals and reset if needed + nscrgrps := round((maxscr - minscr) / intvlsize); + if nscrgrps > (2 * NoCases) then + intvlsize := (maxscr - minscr) / NoCases; + + // setup score groups + done := false; + Scores[0] := minscr - (intvlsize / 2.0); + nscrgrps := 0; + lastX := maxscr + intvlsize + (intvlsize / 2.0); + + while not done do + begin + nscrgrps := nscrgrps + 1; + Scores[nscrgrps] := minscr + (nscrgrps * intvlsize) - (intvlsize / 2.0); + if Scores[nscrgrps] > lastX then done := true; + end; + Scores[nscrgrps+1] := Scores[nscrgrps] + intvlsize; + if Scores[0] < minscr then minscr := Scores[0]; + if Scores[nscrgrps] > maxscr then maxscr := Scores[nscrgrps]; + + // do analysis for each group + for j := 1 to NoGrps do // group + begin + // get score groups for this group j + for i := 0 to nscrgrps do + begin + cumfreq[i] := 0.0; + freq[i] := 0.0; + end; + cnt := 0; + for i := 1 to NoCases do + begin // get scores for this group j + if Not GoodRecord(i,NoSelected,ColNoSelected) then continue; + G := round(StrToFloat(OS3MainFrm.DataGrid.Cells[GrpVar,i])); + G := G - mingrp + 1; + if G = j then // subject in this group + begin + cnt := cnt + 1; + X := StrToFloat(OS3MainFrm.DataGrid.Cells[MeasVar,i]); + means[j-1] := means[j-1] + X; + // find score interval and add to the frequency + for k := 0 to nscrgrps do + if (X >= Scores[k]) and (X < Scores[k+1]) then + freq[k] := freq[k] + 1; + end; + end; + grpsize[j-1] := cnt; + if grpsize[j-1] > 0 then means[j-1] := means[j-1] / grpsize[j-1]; + + // accumulate frequencies + cumfreq[0] := freq[0]; + for i := 1 to nscrgrps-1 do + cumfreq[i] := cumfreq[i-1] + freq[i]; + cumfreq[nscrgrps] := cumfreq[nscrgrps-1]; + + // get percentile ranks + prank[0] := ((cumfreq[0] / 2.0) / grpsize[j-1]) * 100.0; + for i := 1 to nscrgrps-1 do + prank[i] := ((cumfreq[i-1] + (freq[i] / 2.0)) / grpsize[j-1]) * 100.0; + + // get centiles required. + tenpcnt := 0.10 * grpsize[j-1]; + tenpcntile[j-1] := Percentile(nscrgrps,tenpcnt,freq,cumfreq,scores); + ninepcnt := 0.90 * grpsize[j-1]; + ninetypcntile[j-1] := Percentile(nscrgrps,ninepcnt,freq,cumfreq,scores); + qrtile1 := 0.25 * grpsize[j-1]; + lowqrtl[j-1] := Percentile(nscrgrps,qrtile1,freq,cumfreq,scores); + qrtile2 := 0.50 * grpsize[j-1]; + median[j-1] := Percentile(nscrgrps,qrtile2,freq,cumfreq,scores); + qrtile3 := 0.75 * grpsize[j-1]; + hiqrtl[j-1] := Percentile(nscrgrps,qrtile3,freq,cumfreq,scores); + if ShowChk.Checked then + begin + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Results for group %d, mean = %8.3f',[j, means[j-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('Centile Value'); + outline := format('Ten %6.3f',[tenpcntile[j-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Twenty five %6.3f',[lowqrtl[j-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Median %6.3f',[median[j-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Seventy five %6.3f',[hiqrtl[j-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Ninety %6.3f',[ninetypcntile[j-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('Score Range Frequency Cum.Freq. Percentile Rank'); + OutPutFrm.RichEdit.Lines.Add('______________ _________ _________ _______________'); + for i := 0 to nscrgrps-1 do + begin + outline := format('%6.2f - %6.2f %6.2f %6.2f %6.2f', + [Scores[i],Scores[i+1],freq[i],cumfreq[i],prank[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + end; // get values for next group + if ShowChk.Checked then OutPutFrm.ShowModal; + + // plot the boxes + BoxPlot(NoGrps,maxscr,minscr,lowqrtl,hiqrtl,tenpcntile,ninetypcntile,means,median); + if PrintChk.Checked then + pBoxPlot(NoGrps,maxscr,minscr,lowqrtl,hiqrtl,tenpcntile,ninetypcntile,means,median); + + //cleanup the heap + cleanup: + scrgrp := nil; + median := nil; + ninetypcntile := nil; + tenpcntile := nil; + hiqrtl := nil; + lowqrtl := nil; + means := nil; + grpsize := nil; + cumfreq := nil; + scores := nil; + freq := nil; + ColNoSelected := nil; +end; + +function TBoxPlotFrm.Percentile(nscrgrps : integer; + pcnt : double; + VAR freq : DblDyneVec; + VAR cumfreq : DblDyneVec; + VAR scores : DblDyneVec) : double; +var + i, interval : integer; + pcntile, Llimit, Ulimit, cumlower, intvlfreq : double; + +begin + interval := 0; + for i := 0 to nscrgrps-1 do + begin + if cumfreq[i] > pcnt then + begin + interval := i; + Break; + end; + end; + if interval > 0 then + begin + Llimit := Scores[interval]; + Ulimit := Scores[interval+1]; + cumlower := cumfreq[interval-1]; + intvlfreq := freq[interval]; + end + else + begin // Percentile in first interval + Llimit := Scores[0]; + Ulimit := Scores[1]; + cumlower := 0.0; + intvlfreq := freq[0]; + end; + if intvlfreq > 0 then + pcntile := Llimit + ((pcnt - cumlower) / intvlfreq) * (Ulimit- Llimit) + else pcntile := Llimit; + Result := pcntile; +end; +//------------------------------------------------------------------- + +procedure TBoxPlotFrm.pBoxPlot(nbars : integer; + max, min : double; + VAR lowqrtl : DblDyneVec; + VAR hiqrtl : DblDyneVec; + VAR tenpcnt : DblDyneVec; + VAR ninetypcnt : DblDyneVec; + VAR means : DblDyneVec; + VAR median : DblDyneVec); +var + i, HTickSpace, imagewide, imagehi, vtop, vbottom, offset : integer; + vhi, hleft, hright, hwide, barwidth, Xpos, Ypos, strhi, strwide : integer; +// coords : array [1..5] of TPoint; + X, Y, colcycle : integer; + X1, X2, X3, X9, X10 : integer; // X coordinates for box and lines + Y1, Y2, Y3, Y4, Y9 : integer; // Y coordinates for box and lines + Title : string; + valincr, Yvalue : double; + +begin + Printer.Orientation := poLandscape; + Printer.BeginDoc; + Title := 'BOXPLOT FOR : ' + OS3MainFrm.FileNameEdit.Text; + imagewide := Printer.PageWidth; + imagehi := Printer.PageHeight; + vtop := 400; + vbottom := round(imagehi) - 400; +// vhi := vbottom - vtop; + hleft := 400; + hright := imagewide - 40; + hwide := hright - hleft; + + // show title + Printer.Canvas.Brush.Color := clWhite; + strhi := Printer.Canvas.TextWidth(Title) div 2; + strhi := imagewide div 2 - strhi; + Printer.Canvas.TextOut(strhi,50,Title); + + // show legend + Y := Printer.Canvas.TextHeight(Title) * 2; + Y := Y + 50; + Title := 'RED: mean, BLACK: median, BOX: 25th to 75th percentile, WISKERS: 10th and 90th percentile'; + X := imagewide div 2 - Printer.Canvas.TextWidth(Title) div 2; + Printer.Canvas.TextOut(X,Y,Title); + + Printer.Canvas.Pen.Color := clBlack; + Printer.Canvas.Brush.Color := clWhite; + + // Draw chart border + Printer.Canvas.Rectangle(hleft,vtop,hright,vbottom); + vbottom := vbottom - 400; // decrease bottom + vhi := vbottom - vtop; + + // Draw vertical axis + valincr := (max - min) / 20.0; + for i := 1 to 21 do + begin + Title := format('%8.2f',[max - ((i-1)*valincr)]); + strwide := Printer.Canvas.TextWidth(Title); + strhi := Printer.Canvas.TextHeight(Title); + xpos := 20 + hleft; + Yvalue := max - (valincr * (i-1)); + ypos := round(vhi * ( (max - Yvalue) / (max - min))); + ypos := ypos + vtop - strhi div 2; + Printer.Canvas.TextOut(xpos,ypos,Title); + end; + Printer.Canvas.MoveTo(hleft + strwide + 50,vtop); + Printer.Canvas.LineTo(hleft + strwide + 50,vbottom+20); + hwide := hwide - (strwide + 50); + hleft := hleft + strwide + 50; + HTickSpace := hwide div (nbars + 1); + barwidth := HTickSpace div 2; + + // draw horizontal axis + Printer.Canvas.MoveTo(hleft,vbottom + 20); + Printer.Canvas.LineTo(hright,vbottom + 20); + for i := 1 to nbars do + begin + ypos := vbottom + 10; + xpos := round((hwide / (nbars+1))* i + hleft); + Printer.Canvas.MoveTo(xpos,ypos); + ypos := ypos + 10; + Printer.Canvas.LineTo(xpos,ypos); + Title := format('%d',[i]); + offset := Printer.Canvas.TextWidth(Title) div 2; + strhi := Printer.Canvas.TextHeight(Title); + xpos := xpos - offset; + ypos := ypos + strhi; + Printer.Canvas.Pen.Color := clBlack; + Printer.Canvas.TextOut(xpos,ypos,Title); + xpos := hleft; + Printer.Canvas.TextOut(xpos,ypos,'GROUPS:'); + end; + + for i := 1 to nbars do + begin + colcycle := i mod 4; // select a color for box + if (colcycle = 0) then Printer.Canvas.Brush.Color := clBlue; + if (colcycle = 1) then Printer.Canvas.Brush.Color := clGreen; + if (colcycle = 2) then Printer.Canvas.Brush.Color := clFuchsia; + if (colcycle = 3) then Printer.Canvas.Brush.Color := clLime; + + // plot the box front face + X9 := round(hleft + ((i) * HTickSpace) - (barwidth / 2)); + X10 := X9 + barwidth; + X1 := X9; + X2 := X10; + Ypos:= round((((max - hiqrtl[i-1]) / (max - min)) * vhi) + vtop); + Y1 := Ypos; + Ypos := round((((max - lowqrtl[i-1]) / (max - min)) * vhi) + vtop); + Y2 := Ypos; + Printer.Canvas.Rectangle(X1,Y1,X2,Y2); + + // draw upper 90th percentile line and end + X3 := round(X1 + barwidth / 2); + Printer.Canvas.MoveTo(X3,Y1); + Ypos := round((((max - ninetypcnt[i-1]) / (max - min)) * vhi) + vtop); + Y3 := Ypos; + Printer.Canvas.LineTo(X3,Y3); + Printer.Canvas.MoveTo(X1,Y3); + Printer.Canvas.LineTo(X2,Y3); + + // draw lower 10th percentile line and end + Printer.Canvas.MoveTo(X3,Y2); + Ypos := round((((max - tenpcnt[i-1]) / (max - min)) * vhi) + vtop); + Y4 := Ypos; + Printer.Canvas.LineTo(X3,Y4); + Printer.Canvas.MoveTo(X1,Y4); + Printer.Canvas.LineTo(X2,Y4); + + //plot the mean line + Printer.Canvas.Pen.Width := 10; + Printer.Canvas.Pen.Color := clRed; + Printer.Canvas.Pen.Style := psDot; + Ypos := round((((max - means[i-1]) / (max - min)) * vhi) + vtop); + Y9 := Ypos; + Printer.Canvas.MoveTo(X9,Y9); + Printer.Canvas.LineTo(X10,Y9); + Printer.Canvas.Pen.Color := clBlack; + Printer.Canvas.Pen.Style := psSolid; + + //plot the median line + Printer.Canvas.Pen.Color := clBlack; + Ypos := round((((max - median[i-1]) / (max - min)) * vhi) + vtop); + Y9 := Ypos; + Printer.Canvas.MoveTo(X9,Y9); + Printer.Canvas.LineTo(X10,Y9); + Printer.Canvas.Pen.Color := clBlack; + + end; + Printer.EndDoc; + Printer.Orientation := poPortrait; +end; +//-------------------------------------------------------------------------- + +procedure TBoxPlotFrm.BoxPlot(nbars : integer; + max, min : double; + VAR lowqrtl : DblDyneVec; + VAR hiqrtl : DblDyneVec; + VAR tenpcnt : DblDyneVec; + VAR ninetypcnt : DblDyneVec; + VAR means : DblDyneVec; + VAR median : DblDyneVec); +var + i, HTickSpace, imagewide, imagehi, vtop, vbottom, offset : integer; + vhi, hleft, hright, hwide, barwidth, Xpos, Ypos, strhi : integer; + XOffset, YOffset : integer; +// coords : array [1..5] of TPoint; + X, Y, colcycle : integer; + X1, X2, X3, X9, X10 : integer; // X coordinates for box and lines + Y1, Y2, Y3, Y4, Y9 : integer; // Y coordinates for box and lines + Title : string; + valincr, Yvalue : double; + +begin + BlankFrm.Show; + BlankFrm.Image1.Canvas.Clear; + Title := 'BOXPLOT FOR : ' + OS3MainFrm.FileNameEdit.Text; + imagewide := BlankFrm.width; + imagehi := BlankFrm.Height; + XOffset := imagewide div 10; + YOffset := imagehi div 10; + + vtop := YOffset; + vbottom := imagehi - YOffset; + vhi := vbottom - vtop; + hleft := XOffset; + hright := imagewide - hleft - XOffset; + hwide := hright - hleft; + BlankFrm.Image1.Canvas.Brush.Color := clWhite; + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + // Show title + BlankFrm.Caption := Title; + // show legend + Y := BlankFrm.Image1.Canvas.TextHeight(Title) * 2; + Y := Y + vtop; + Title := 'RED: mean, BLACK: median, BOX: 25th to 75th percentile, WISKERS: 10th and 90th percentile'; + X := imagewide div 2 - BlankFrm.Canvas.TextWidth(Title) div 2; + BlankFrm.Image1.Canvas.TextOut(X,Y,Title); + + HTickSpace := hwide div nbars; + barwidth := HTickSpace div 2; + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.Brush.Color := clWhite; + + // Draw chart border + BlankFrm.Image1.Canvas.Rectangle(0,0,imagewide,imagehi); + + // Draw vertical axis + valincr := (max - min) / 20.0; + for i := 1 to 21 do + begin + Title := format('%8.2f',[max - ((i-1)*valincr)]); + strhi := BlankFrm.Image1.Canvas.TextHeight(Title); + xpos := XOffset; + Yvalue := max - (valincr * (i-1)); + ypos := round(vhi * ( (max - Yvalue) / (max - min))); + ypos := ypos + vtop - strhi div 2; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + end; + BlankFrm.Image1.Canvas.MoveTo(hleft,vtop); + BlankFrm.Image1.Canvas.LineTo(hleft,vbottom); + + // draw horizontal axis + BlankFrm.Image1.Canvas.MoveTo(hleft,vbottom + 10 ); + BlankFrm.Image1.Canvas.LineTo(hright,vbottom + 10); + for i := 1 to nbars do + begin + ypos := vbottom + 10; + xpos := round((hwide / nbars)* i + hleft); + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + ypos := ypos + 10; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + Title := format('%d',[i]); + offset := BlankFrm.Image1.Canvas.TextWidth(Title) div 2; + strhi := BlankFrm.Image1.Canvas.TextHeight(Title); + xpos := xpos - offset; + ypos := ypos + strhi; + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + xpos := 20; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,'GROUPS:'); + end; + + for i := 1 to nbars do + begin + colcycle := i mod 4; // select a color for box + if (colcycle = 0) then BlankFrm.Image1.Canvas.Brush.Color := clBlue; + if (colcycle = 1) then BlankFrm.Image1.Canvas.Brush.Color := clGreen; + if (colcycle = 2) then BlankFrm.Image1.Canvas.Brush.Color := clFuchsia; + if (colcycle = 3) then BlankFrm.Image1.Canvas.Brush.Color := clLime; + + // plot the box front face + X9 := round(hleft + ((i) * HTickSpace) - (barwidth / 2)); + X10 := X9 + barwidth; + X1 := X9; + X2 := X10; + Ypos:= round((((max - hiqrtl[i-1]) / (max - min)) * vhi) + vtop); + Y1 := Ypos; + Ypos := round((((max - lowqrtl[i-1]) / (max - min)) * vhi) + vtop); + Y2 := Ypos; + BlankFrm.Image1.Canvas.Rectangle(X1,Y1,X2,Y2); + + // draw upper 90th percentile line and end + X3 := round(X1 + barwidth / 2); + BlankFrm.Image1.Canvas.MoveTo(X3,Y1); + Ypos := round((((max - ninetypcnt[i-1]) / (max - min)) * vhi) + vtop); + Y3 := Ypos; + BlankFrm.Image1.Canvas.LineTo(X3,Y3); + BlankFrm.Image1.Canvas.MoveTo(X1,Y3); + BlankFrm.Image1.Canvas.LineTo(X2,Y3); + + // draw lower 10th percentile line and end + BlankFrm.Image1.Canvas.MoveTo(X3,Y2); + Ypos := round((((max - tenpcnt[i-1]) / (max - min)) * vhi) + vtop); + Y4 := Ypos; + BlankFrm.Image1.Canvas.LineTo(X3,Y4); + BlankFrm.Image1.Canvas.MoveTo(X1,Y4); + BlankFrm.Image1.Canvas.LineTo(X2,Y4); + + //plot the means line + BlankFrm.Image1.Canvas.Pen.Color := clRed; + BlankFrm.Image1.Canvas.Pen.Style := psDot; + Ypos := round((((max - means[i-1]) / (max - min)) * vhi) + vtop); + Y9 := Ypos; + BlankFrm.Image1.Canvas.MoveTo(X9,Y9); + BlankFrm.Image1.Canvas.LineTo(X10,Y9); + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.Pen.Style := psSolid; + + //plot the median line + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + Ypos := round((((max - median[i-1]) / (max - min)) * vhi) + vtop); + Y9 := Ypos; + BlankFrm.Image1.Canvas.MoveTo(X9,Y9); + BlankFrm.Image1.Canvas.LineTo(X10,Y9); + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + + end; +end; +//-------------------------------------------------------------------------- + +initialization + {$I boxplotunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/breakdownunit.lfm b/applications/lazstats/source_orig/breakdownunit.lfm new file mode 100644 index 000000000..e4ca296eb --- /dev/null +++ b/applications/lazstats/source_orig/breakdownunit.lfm @@ -0,0 +1,302 @@ +object BreakDownFrm: TBreakDownFrm + Left = 180 + Height = 292 + Top = 103 + Width = 599 + Caption = 'Breakdown' + ClientHeight = 292 + ClientWidth = 599 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object AvailLabel: TLabel + Left = 7 + Height = 14 + Top = 7 + Width = 90 + Caption = 'Available Variables' + ParentColor = False + end + object AnalLabel: TLabel + Left = 231 + Height = 14 + Top = 7 + Width = 98 + Caption = 'Variables to Analyze' + ParentColor = False + end + object SelLabel: TLabel + Left = 231 + Height = 14 + Top = 224 + Width = 140 + Caption = 'Selected Continuous Variable' + ParentColor = False + end + object VarList: TListBox + Left = 6 + Height = 256 + Top = 24 + Width = 168 + ItemHeight = 0 + MultiSelect = True + TabOrder = 0 + end + object ListBox1: TListBox + Left = 232 + Height = 185 + Top = 23 + Width = 176 + ItemHeight = 0 + TabOrder = 1 + end + object DepVar: TEdit + Left = 231 + Height = 21 + Top = 240 + Width = 175 + TabOrder = 2 + Text = 'DepVar' + end + object CheckGroup1: TCheckGroup + Left = 424 + Height = 41 + Top = 8 + Width = 167 + AutoFill = True + Caption = 'Option' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + Items.Strings = ( + 'One Way ANOVA' + ) + TabOrder = 3 + Data = { + 0100000002 + } + end + object ResetBtn: TButton + Left = 464 + Height = 29 + Top = 112 + Width = 78 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 4 + end + object CancelBtn: TButton + Left = 464 + Height = 29 + Top = 160 + Width = 78 + Caption = 'Cancel' + ModalResult = 2 + OnClick = CancelBtnClick + TabOrder = 5 + end + object OKBtn: TButton + Left = 464 + Height = 29 + Top = 209 + Width = 78 + Caption = 'Continue' + ModalResult = 1 + OnClick = OKBtnClick + TabOrder = 6 + end + object InBtn: TBitBtn + Left = 184 + Height = 30 + Top = 26 + Width = 34 + 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 + } + NumGlyphs = 0 + OnClick = InBtnClick + TabOrder = 7 + end + object OutBtn: TBitBtn + Left = 184 + Height = 30 + Top = 56 + Width = 34 + 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 + } + NumGlyphs = 0 + OnClick = OutBtnClick + TabOrder = 8 + end + object SelVarInBtn: TBitBtn + Left = 184 + Height = 30 + Top = 216 + Width = 34 + 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 + } + NumGlyphs = 0 + OnClick = SelVarInBtnClick + TabOrder = 9 + end + object SelVarOutBtn: TBitBtn + Left = 184 + Height = 30 + Top = 248 + Width = 34 + 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 + } + NumGlyphs = 0 + OnClick = SelVarOutBtnClick + TabOrder = 10 + end + object HelpBtn: TButton + Tag = 109 + Left = 464 + Height = 28 + Top = 64 + Width = 78 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 11 + end +end diff --git a/applications/lazstats/source_orig/breakdownunit.lrs b/applications/lazstats/source_orig/breakdownunit.lrs new file mode 100644 index 000000000..acf94ddd2 --- /dev/null +++ b/applications/lazstats/source_orig/breakdownunit.lrs @@ -0,0 +1,242 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TBreakDownFrm','FORMDATA',[ + 'TPF0'#13'TBreakDownFrm'#12'BreakDownFrm'#4'Left'#3#180#0#6'Height'#3'$'#1#3 + +'Top'#2'g'#5'Width'#3'W'#2#7'Caption'#6#9'Breakdown'#12'ClientHeight'#3'$'#1 + +#11'ClientWidth'#3'W'#2#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#8'0.9.28.2' + +#0#6'TLabel'#10'AvailLabel'#4'Left'#2#7#6'Height'#2#14#3'Top'#2#7#5'Width'#2 + +'Z'#7'Caption'#6#19'Available Variables'#11'ParentColor'#8#0#0#6'TLabel'#9'A' + +'nalLabel'#4'Left'#3#231#0#6'Height'#2#14#3'Top'#2#7#5'Width'#2'b'#7'Caption' + +#6#20'Variables to Analyze'#11'ParentColor'#8#0#0#6'TLabel'#8'SelLabel'#4'Le' + +'ft'#3#231#0#6'Height'#2#14#3'Top'#3#224#0#5'Width'#3#140#0#7'Caption'#6#28 + +'Selected Continuous Variable'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4 + +'Left'#2#6#6'Height'#3#0#1#3'Top'#2#24#5'Width'#3#168#0#10'ItemHeight'#2#0#11 + +'MultiSelect'#9#8'TabOrder'#2#0#0#0#8'TListBox'#8'ListBox1'#4'Left'#3#232#0#6 + +'Height'#3#185#0#3'Top'#2#23#5'Width'#3#176#0#10'ItemHeight'#2#0#8'TabOrder' + +#2#1#0#0#5'TEdit'#6'DepVar'#4'Left'#3#231#0#6'Height'#2#21#3'Top'#3#240#0#5 + +'Width'#3#175#0#8'TabOrder'#2#2#4'Text'#6#6'DepVar'#0#0#11'TCheckGroup'#11'C' + +'heckGroup1'#4'Left'#3#168#1#6'Height'#2')'#3'Top'#2#8#5'Width'#3#167#0#8'Au' + +'toFill'#9#7'Caption'#6#6'Option'#28'ChildSizing.LeftRightSpacing'#2#6#28'Ch' + +'ildSizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsH' + +'omogenousChildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChi' + +'ldResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSiz' + +'ing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLef' + +'tToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1#13'Items.Strin' + +'gs'#1#6#13'One Way ANOVA'#0#8'TabOrder'#2#3#4'Data'#10#5#0#0#0#1#0#0#0#2#0#0 + +#7'TButton'#8'ResetBtn'#4'Left'#3#208#1#6'Height'#2#29#3'Top'#2'p'#5'Width'#2 + +'N'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#4#0#0 + +#7'TButton'#9'CancelBtn'#4'Left'#3#208#1#6'Height'#2#29#3'Top'#3#160#0#5'Wid' + +'th'#2'N'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#7'OnClick'#7#14'CancelB' + +'tnClick'#8'TabOrder'#2#5#0#0#7'TButton'#5'OKBtn'#4'Left'#3#208#1#6'Height'#2 + +#29#3'Top'#3#209#0#5'Width'#2'N'#7'Caption'#6#8'Continue'#11'ModalResult'#2#1 + +#7'OnClick'#7#10'OKBtnClick'#8'TabOrder'#2#6#0#0#7'TBitBtn'#5'InBtn'#4'Left' + +#3#184#0#6'Height'#2#30#3'Top'#2#26#5'Width'#2'"'#10'Glyph.Data'#10':'#4#0#0 + +'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0 + +#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255 + +#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211 + +#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130 + +#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$' + +#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171 + +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204 + +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J' + +#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255 + +'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161 + +'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#10'InBtnClick'#8'TabOrder' + +#2#7#0#0#7'TBitBtn'#6'OutBtn'#4'Left'#3#184#0#6'Height'#2#30#3'Top'#2'8'#5'W' + +'idth'#2'"'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0 + +'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0 + +#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O' + +#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V' + +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255 + +'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195 + +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255 + +#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135 + +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#11'OutBtnClick'#8'TabOrder'#2#8#0#0#7'TBitBtn'#11'SelV' + +'arInBtn'#4'Left'#3#184#0#6'Height'#2#30#3'Top'#3#216#0#5'Width'#2'"'#10'Gly' + +'ph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0 + +#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$' + +#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X' + +#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B' + +#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255 + +#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165 + +#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201 + +#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140 + +'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255 + +#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154 + +#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194 + +#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h' + +#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\' + +#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/' + +'x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#16'SelVarInBtnCli' + +'ck'#8'TabOrder'#2#9#0#0#7'TBitBtn'#12'SelVarOutBtn'#4'Left'#3#184#0#6'Heigh' + +'t'#2#30#3'Top'#3#248#0#5'Width'#2'"'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM' + +'6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0 + +#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169 + +'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{' + +#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0 + +#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255 + +#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137 + +#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255 + +#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158 + +#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255 + +#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255 + +'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139 + +#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255 + +'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195 + +'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't' + +#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#17'SelVarOutBtnClick'#8'TabOrder'#2 + +#10#0#0#7'TButton'#7'HelpBtn'#3'Tag'#2'm'#4'Left'#3#208#1#6'Height'#2#28#3'T' + +'op'#2'@'#5'Width'#2'N'#7'Caption'#6#4'Help'#7'OnClick'#7#12'HelpBtnClick'#8 + +'TabOrder'#2#11#0#0#0 +]); diff --git a/applications/lazstats/source_orig/breakdownunit.pas b/applications/lazstats/source_orig/breakdownunit.pas new file mode 100644 index 000000000..c8a7e3fab --- /dev/null +++ b/applications/lazstats/source_orig/breakdownunit.pas @@ -0,0 +1,559 @@ +unit BreakDownUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, ExtCtrls, Buttons, MainUnit, Globals, functionsLib, OutPutUnit, + DataProcs, contexthelpunit; + +type + + { TBreakDownFrm } + + TBreakDownFrm = class(TForm) + HelpBtn: TButton; + InBtn: TBitBtn; + OutBtn: TBitBtn; + SelVarInBtn: TBitBtn; + SelVarOutBtn: TBitBtn; + ResetBtn: TButton; + CancelBtn: TButton; + OKBtn: TButton; + CheckGroup1: TCheckGroup; + DepVar: TEdit; + AvailLabel: TLabel; + AnalLabel: TLabel; + SelLabel: TLabel; + ListBox1: TListBox; + VarList: TListBox; + procedure CancelBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure InBtnClick(Sender: TObject); + procedure OKBtnClick(Sender: TObject); + procedure OutBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure SelVarInBtnClick(Sender: TObject); + procedure SelVarOutBtnClick(Sender: TObject); + private + { private declarations } + { Private declarations } + Minimum, Maximum, levels, displace, subscript : IntDyneVec; + Freq : IntDyneVec; + Selected : IntDyneVec; + mean, variance, Stddev, SS : DblDyneVec; + index, NoSelected, ListSize, Dependentvar, X, length_array : integer; + ptr1, ptr2, sum, grandsum : integer; + xsumtotal, xsqrtotal, grandsumx, grandsumx2, value, SD : double; + SST, SSW, SSB, MSW, MSB, F, FProb, DF1, DF2 : double; + cellstring : string; + outline : string; + valstr : string; + dataread : boolean; + function Index_Pos(VAR X1 : IntDyneVec; + VAR displace1 : IntDyneVec; + ListSize1 : integer; + Sender: TObject) : integer; + + public + { public declarations } + end; + +var + BreakDownFrm: TBreakDownFrm; + +implementation + +{ TBreakDownFrm } + +procedure TBreakDownFrm.ResetBtnClick(Sender: TObject); +var + i : integer; + +begin + VarList.Clear; + ListBox1.Clear; + DepVar.Text := ''; + InBtn.Visible := true; + OutBtn.Visible := false; + SelVarInBtn.Visible := true; + SelVarOutBtn.Visible := false; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; + +procedure TBreakDownFrm.SelVarInBtnClick(Sender: TObject); +var + index1 : integer; +begin + index1 := VarList.ItemIndex; + DepVar.Text := VarList.Items.Strings[index1]; + SelVarInBtn.Visible := false; + SelVarOutBtn.Visible := true; +end; + +procedure TBreakDownFrm.SelVarOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(DepVar.Text); + SelVarOutBtn.Visible := false; + SelVarInBtn.Visible := true; +end; + +procedure TBreakDownFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TBreakDownFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TBreakDownFrm.CancelBtnClick(Sender: TObject); +begin + BreakDownFrm.Hide; +end; + +procedure TBreakDownFrm.InBtnClick(Sender: TObject); +var + index1, i : integer; + +begin + index1 := VarList.Items.Count; + i := 0; + while i < index1 do + begin + if (VarList.Selected[i]) then + begin + ListBox1.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index1 := index1 - 1; + i := 0; + end + else i := i + 1; + end; + OutBtn.Visible := true; + if VarList.Items.Count = 0 then InBtn.Visible := false; +end; + +procedure TBreakDownFrm.OKBtnClick(Sender: TObject); +label Label1, Label3, Label4, NextStep, FirstOne, SecondOne, ThirdOne, LastStep; +var + i, j : integer; + tempval : string; + +begin + // Identify columns of variables to analyze and the dependent var. + NoSelected := ListBox1.Items.Count; + + // Get column no. of dependent variable + cellstring := DepVar.Text; + for i := 1 to NoVariables do + if cellstring = OS3MainFrm.DataGrid.Cells[i,0] then dependentvar := i; + + // Allocate heap + SetLength(Minimum,NoVariables); + SetLength(Maximum,NoVariables); + SetLength(levels,NoVariables); + SetLength(displace,NoVariables); + SetLength(subscript,NoVariables); + SetLength(Selected,NoVariables); + + // Get selected variables + for i := 1 to NoSelected do + begin + cellstring := ListBox1.Items.Strings[i-1]; + for j := 1 to NoVariables do + if cellstring = OS3MainFrm.DataGrid.Cells[j,0] then Selected[i-1] := j; + end; + Selected[NoSelected] := dependentvar; + ListSize := NoSelected; + + // Get maximum and minimum levels in each variable + for i := 1 to ListSize do + begin + index := Selected[i-1]; + Minimum[i-1] := round(StrToFloat(OS3MainFrm.DataGrid.Cells[index,1])); + Maximum[i-1] := Minimum[i-1]; + for j := 1 to NoCases do + begin + if GoodRecord(j,NoSelected,Selected) then + begin + X := round(StrToFloat(OS3MainFrm.DataGrid.Cells[index,j])); + if X < Minimum[i-1] then Minimum[i-1] := X; + if X > Maximum[i-1] then Maximum[i-1] := X; + end; + end; + end; + + // Calculate number of levels for each variable + for i := 1 to ListSize do + levels[i-1] := Maximum[i-1] - Minimum[i-1] + 1; + displace[ListSize-1] := 1; + if ListSize > 1 then + begin + for i := ListSize-1 downto 1 do + displace[i-1] := levels[i] * displace[i]; + end; + + // Now, tabulate + length_array := 1; + for i := 1 to ListSize do length_array := Length_array * levels[i-1]; + + // initialize values + SetLength(Freq,length_array+1); + SetLength(mean,length_array+1); + SetLength(variance,length_array+1); + SetLength(Stddev,length_array+1); + SetLength(SS,length_array+1); + + for i := 0 to length_array do + begin + Freq[i] := 0; + mean[i] := 0.0; + variance[i] := 0.0; + Stddev[i] := 0.0; + SS[i] := 0.0; + end; + + // tabulate + for i := 1 to NoCases do + begin + dataread := false; + if GoodRecord(i,NoSelected,Selected) then + begin + for j := 1 to ListSize do + begin + index := Selected[j-1]; + X := round(StrToFLoat(OS3MainFrm.DataGrid.Cells[index,i])); + X := X - Minimum[j-1] + 1; + subscript[j-1] := X; + dataread := true; + end; + end; + if dataread then + begin + j := Index_Pos(subscript,displace,ListSize, self); + Freq[j] := Freq[j] + 1; + index := dependentvar; + tempval := Trim(OS3MainFrm.DataGrid.Cells[index,i]); + if tempval <> '' then + begin + value := StrToFloat(tempval); + mean[j] := mean[j] + value; + variance[j] := variance[j] + (value * value); + end; + end; + end; + + // setup the output + OutPutFrm.RichEdit.Clear; +// OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify; + OutPutFrm.RichEdit.Lines.Add('BREAKDOWN ANALYSIS PROGRAM'); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('VARIABLE SEQUENCE FOR THE BREAKDOWN:'); + for i := 1 to ListSize do + begin + index := Selected[i-1]; + outline := format('%-10s (Variable %3d) Lowest level = %2d Highest level = %2d', + [OS3MainFrm.DataGrid.Cells[index,0],i, Minimum[i-1], Maximum[i-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + //OutPutFrm.ShowModal; + + // Breakdown the data + ptr1 := ListSize - 1; + ptr2 := ListSize; + for i := 1 to ListSize do subscript[i-1] := 1; + sum := 0; + xsumtotal := 0.0; + xsqrtotal := 0.0; + grandsum := 0; + grandsumx := 0.0; + grandsumx2 := 0.0; + +Label1: + index := Index_Pos(subscript,displace,ListSize,self); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Variable levels: '); + for i := 1 to ListSize do + begin + j := Selected[i-1]; + outline := format('%-10s level = %3d', + [OS3MainFrm.DataGrid.Cells[j,0], + Minimum[i-1] + subscript[i-1] - 1]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + sum := sum + Freq[index]; + xsumtotal := xsumtotal + mean[index]; + xsqrtotal := xsqrtotal + variance[index]; + OutPutFrm.RichEdit.Lines.Add('Freq. Mean Std. Dev.'); + outline := format('%3d',[Freq[index]]); + if Freq[index] > 0 then + begin + valstr := format(' %8.3f ',[mean[index] / Freq[index]]); + outline := outline + valstr; + end + else outline := outline +' ******** '; + if Freq[index] > 1 then + begin + SS[index] := variance[index]; + variance[index] := variance[index] - (mean[index] * mean[index] / Freq[index]); + variance[index] := variance[index] / (Freq[index] - 1); + Stddev[index] := sqrt(variance[index]); + valstr := format('%8.3f ',[Stddev[index]]); + outline := outline + valstr; + end + else outline := outline + '********'; + OutPutFrm.RichEdit.Lines.Add(outline); + + subscript[ptr2-1] := subscript[ptr2-1] + 1; + if subscript[ptr2-1] <= levels[ptr2-1] then goto Label1; + outline := format('Number of observations accross levels = %3d',[sum]); + OutPutFrm.RichEdit.Lines.Add(outline); + if sum > 0 then + begin + outline := format('Mean accross levels = %8.3f',[ xsumtotal / sum]); + OutPutFrm.RichEdit.Lines.Add(outline); + end + else OutPutFrm.RichEdit.Lines.Add('Mean accross levels = ********'); + if sum > 1 then + begin + SD := sqrt( (xsqrtotal - (xsumtotal * xsumtotal) / sum) / (sum - 1)); + outline := format('Std. Dev. accross levels = %8.3f',[SD]); + OutPutFrm.RichEdit.Lines.Add(outline); + end + else OutPutFrm.RichEdit.Lines.Add('Std. Dev. accross levels = *******'); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + grandsum := grandsum + sum; + grandsumx := grandsumx + xsumtotal; + grandsumx2 := grandsumx2 + xsqrtotal; + sum := 0; + xsumtotal := 0.0; + xsqrtotal := 0.0; + if ptr1 < 1 then goto NextStep; + subscript[ptr1-1] :=subscript[ptr1-1] + 1; + if subscript[ptr1-1] <= levels[ptr1-1] then goto Label4; + +Label3: + ptr1 := ptr1 - 1; + if ptr1 < 1 then goto NextStep; + if subscript[ptr1-1] > levels[ptr1-1] then goto Label3; + subscript[ptr1-1] := subscript[ptr1-1] + 1; + if subscript[ptr1-1] > levels[ptr1-1] then goto Label3; + +Label4: + for i := ptr1+1 to ListSize do subscript[i-1] := 1; + ptr1 := ListSize - 1; + if ptr1 < 1 then goto NextStep; + goto Label1; + +NextStep: + outline := format('Grand number of observations accross all categories = %3d', + [grandsum]); + OutPutFrm.RichEdit.Lines.Add(outline); + if grandsum > 0 then + begin + outline := format('Overall Mean = %8.3f',[grandsumx / grandsum]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + if grandsum > 1 then + begin + SD := sqrt((grandsumx2 - (grandsumx * grandsumx) / grandsum) / (grandsum - 1)); + outline := format('Overall standard deviation = %8.3f',[SD]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + // Do ANOVA's if requested + if CheckGroup1.CheckEnabled[0] then + begin + OutPutFrm.RichEdit.Lines.Add('ANALYSES OF VARIANCE SUMMARY TABLES'); + OutPutFrm.RichEdit.Lines.Add(''); + ptr1 := ListSize - 1; + ptr2 := ListSize; + for i := 1 to ListSize do subscript[i-1] := 1; + SSB := 0.0; + SSW := 0.0; + MSB := 0.0; + MSW := 0.0; + grandsum := 0; + grandsumx := 0.0; + grandsumx2 := 0.0; + DF1 := 0.0; + DF2 := 0.0; +FirstOne: + index := Index_Pos(subscript,displace,ListSize, self); + if Freq[index] > 0 then + begin + OutPutFrm.RichEdit.Lines.Add('Variable levels: '); + for i := 1 to ListSize do + begin + j := Selected[i-1]; + outline := format('%-10s level = %3d', + [OS3MainFrm.DataGrid.Cells[j,0], Minimum[i-1] + subscript[i-1] - 1]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + // build sumsof squares for this set + DF1 := DF1 + 1; + DF2 := DF2 + Freq[index] - 1; + grandsum := grandsum + Freq[index]; + grandsumx := grandsumx + mean[index]; + grandsumx2 := grandsumx2 + SS[index]; + SSW := SSW + SS[index] - (mean[index] * mean[index] / Freq[index]); + end; + subscript[ptr2-1] := subscript[ptr2-1] + 1; + if subscript[ptr2-1] <= levels[ptr2-1] then goto FirstOne; + + if ((grandsum > 0.0) and (DF1 > 1) and (DF2 > 1) and (SSW > 0.0)) then + begin + // build and show anova table + SST := grandsumx2 - (grandsumx * grandsumx / grandsum); + SSB := SST - SSW; + DF1 := DF1 - 1.0; // no. of groups - 1 + MSB := SSB / DF1; + MSW := SSW / DF2; + F := MSB / MSW; + FProb := probf(DF1,DF2,F); + OutPutFrm.RichEdit.Lines.Add('SOURCE D.F. SS MS F Prob.>F'); + outline := format('GROUPS %2.0f %8.2f %8.2f %8.3f %6.4f', + [DF1,SSB,MSB,F,FProb]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('WITHIN %2.0f %8.2f %8.2f', + [DF2,SSW,MSW]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('TOTAL %2d %8.2f',[grandsum-1,SST]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end + else begin + OutPutFrm.RichEdit.Lines.Add('Insufficient data for ANOVA'); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + SSB := 0.0; + SSW := 0.0; + MSB := 0.0; + MSW := 0.0; + grandsum := 0; + grandsumx := 0.0; + grandsumx2 := 0.0; + DF1 := 0.0; + DF2 := 0.0; + if ptr1 < 1 then goto LastStep; + subscript[ptr1-1] := subscript[ptr1-1] + 1; + if subscript[ptr1-1] <= levels[ptr1-1] then goto ThirdOne; +SecondOne: + ptr1 := ptr1 - 1; + if ptr1 < 1 then goto LastStep; + if subscript[ptr1-1] > levels[ptr1-1] then goto SecondOne; + subscript[ptr1-1] := subscript[ptr1-1] + 1; + if subscript[ptr1-1] > levels[ptr1-1] then goto SecondOne; +ThirdOne: + for i := ptr1+1 to ListSize do subscript[i-1] := 1; + ptr1 := ListSize - 1; + if ptr1 < 1 then goto LastStep; + goto FirstOne; +LastStep: + // do anova for all cells + OutPutFrm.RichEdit.Lines.Add('ANOVA FOR ALL CELLS'); + OutPutFrm.RichEdit.Lines.Add(''); + SST := 0.0; + SSW := 0.0; + DF2 := 0.0; + DF1 := 0.0; + grandsumx := 0.0; + grandsum := 0; + for i := 1 to length_array do + begin + if Freq[i] > 0 then + begin + SST := SST + SS[i]; + grandsum := grandsum + Freq[i]; + grandsumx := grandsumx + mean[i]; + SSW := SSW + (SS[i] - (mean[i] * mean[i] / Freq[i])); + DF1 := DF1 + 1.0; + DF2 := DF2 + (Freq[i] - 1); + end; + end; + if ( (DF1 > 1.0) and (DF2 > 1.0) and (SSW > 0.0)) then + begin + SST := SST - (grandsumx * grandsumx / grandsum); + SSB := SST - SSW; + DF1 := DF1 - 1; + MSB := SSB / DF1; + MSW := SSW / DF2; + F := MSB / MSW; + FProb := probf(DF1, DF2, F); + OutPutFrm.RichEdit.Lines.Add('SOURCE D.F. SS MS F Prob.>F'); + outline := format('GROUPS %2.0f %8.2f %8.2f %8.3f %6.4f', + [DF1,SSB,MSB,F,FProb]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('WITHIN %2.0f %8.2f %8.2f', + [DF2,SSW,MSW]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('TOTAL %2d %8.2f',[grandsum-1,SST]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add('FINISHED'); + OutPutFrm.ShowModal; + end + else + begin + OutPutFrm.RichEdit.Lines.Add('Only 1 group. No ANOVA possible.'); + OutPutFrm.ShowModal; + end; + end; + + SS := nil; + Stddev := nil; + variance := nil; + mean := nil; + Freq := nil; + selected := nil; + subscript := nil; + displace := nil; + levels := nil; + Maximum := nil; + Minimum := nil; + + BreakDownFrm.Hide; +end; + +procedure TBreakDownFrm.OutBtnClick(Sender: TObject); +var + index1: integer; + +begin + index1 := ListBox1.ItemIndex; + VarList.Items.Add(ListBox1.Items.Strings[index1]); + ListBox1.Items.Delete(index1); + InBtn.Visible := true; + if ListBox1.Items.Count = 0 then OutBtn.Visible := false; +end; + +function TBreakDownFrm.Index_Pos(var X1: IntDyneVec; var displace1: IntDyneVec; + ListSize1: integer; Sender: TObject): integer; +var + index1, i : integer; + +begin + index1 := X1[ListSize-1]; + for i := 1 to ListSize - 1 do + index1 := index1 + ((X1[i-1] - 1) * displace[i-1]); + Result := index1; +end; + +initialization + {$I breakdownunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/bubbleplotunit.lfm b/applications/lazstats/source_orig/bubbleplotunit.lfm new file mode 100644 index 000000000..597819b8d --- /dev/null +++ b/applications/lazstats/source_orig/bubbleplotunit.lfm @@ -0,0 +1,553 @@ +object BubbleForm: TBubbleForm + Left = 133 + Height = 412 + Top = 122 + Width = 550 + Caption = 'Repeated Measures Bubble Plot' + ClientHeight = 412 + ClientWidth = 550 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 8 + Height = 14 + Top = 16 + Width = 48 + Caption = 'Variables:' + ParentColor = False + end + object Label2: TLabel + Left = 230 + Height = 14 + Top = 32 + Width = 172 + Caption = 'Bubble Identification Nuber Variable' + ParentColor = False + end + object Label3: TLabel + Left = 231 + Height = 14 + Top = 104 + Width = 77 + Caption = 'X Value Variable' + ParentColor = False + end + object Label4: TLabel + Left = 230 + Height = 14 + Top = 176 + Width = 77 + Caption = 'Y Value Variable' + ParentColor = False + end + object Label5: TLabel + Left = 230 + Height = 14 + Top = 248 + Width = 96 + Caption = 'Bubble Size Variable' + ParentColor = False + end + object Label6: TLabel + Left = 8 + Height = 14 + Top = 328 + Width = 50 + Caption = 'Main Title:' + ParentColor = False + end + object Label7: TLabel + Left = 8 + Height = 14 + Top = 360 + Width = 39 + Caption = 'X Label:' + ParentColor = False + end + object Label8: TLabel + Left = 240 + Height = 14 + Top = 360 + Width = 39 + Caption = 'Y Label:' + ParentColor = False + end + object VarList: TListBox + Left = 8 + Height = 274 + Top = 32 + Width = 173 + ItemHeight = 0 + TabOrder = 0 + end + object IDInBtn: TBitBtn + Left = 192 + Height = 26 + Top = 32 + Width = 29 + 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 + } + NumGlyphs = 0 + OnClick = IDInBtnClick + TabOrder = 1 + end + object IDOutBtn: TBitBtn + Left = 192 + Height = 26 + Top = 64 + Width = 29 + 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 + } + NumGlyphs = 0 + OnClick = IDOutBtnClick + TabOrder = 2 + end + object XInBtn: TBitBtn + Left = 192 + Height = 26 + Top = 104 + Width = 29 + 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 + } + NumGlyphs = 0 + OnClick = XInBtnClick + TabOrder = 3 + end + object XOutBtn: TBitBtn + Left = 192 + Height = 26 + Top = 136 + Width = 29 + 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 + } + NumGlyphs = 0 + OnClick = XOutBtnClick + TabOrder = 4 + end + object YInBtn: TBitBtn + Left = 192 + Height = 26 + Top = 176 + Width = 29 + 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 + } + NumGlyphs = 0 + OnClick = YInBtnClick + TabOrder = 5 + end + object YOutBtn: TBitBtn + Left = 192 + Height = 26 + Top = 208 + Width = 29 + 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 + } + NumGlyphs = 0 + OnClick = YOutBtnClick + TabOrder = 6 + end + object SizeInBtn: TBitBtn + Left = 192 + Height = 26 + Top = 248 + Width = 29 + 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 + } + NumGlyphs = 0 + OnClick = SizeInBtnClick + TabOrder = 7 + end + object SizeOutBtn: TBitBtn + Left = 192 + Height = 26 + Top = 280 + Width = 29 + 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 + } + NumGlyphs = 0 + OnClick = SizeOutBtnClick + TabOrder = 8 + end + object BubbleEdit: TEdit + Left = 232 + Height = 21 + Top = 48 + Width = 167 + TabOrder = 9 + Text = 'BubbleEdit' + end + object XEdit: TEdit + Left = 230 + Height = 21 + Top = 120 + Width = 166 + TabOrder = 10 + Text = 'XEdit' + end + object YEdit: TEdit + Left = 230 + Height = 21 + Top = 192 + Width = 165 + TabOrder = 11 + Text = 'YEdit' + end + object SizeEdit: TEdit + Left = 230 + Height = 21 + Top = 264 + Width = 166 + TabOrder = 12 + Text = 'SizeEdit' + end + object ResetBtn: TButton + Left = 443 + Height = 40 + Top = 80 + Width = 94 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 13 + end + object CancelBtn: TButton + Left = 440 + Height = 38 + Top = 144 + Width = 98 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 14 + end + object ComputeBtn: TButton + Left = 440 + Height = 38 + Top = 208 + Width = 98 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 15 + end + object ReturnBtn: TButton + Left = 440 + Height = 38 + Top = 272 + Width = 98 + Caption = 'Return' + ModalResult = 1 + TabOrder = 16 + end + object TitleEdit: TEdit + Left = 63 + Height = 21 + Top = 321 + Width = 332 + TabOrder = 17 + Text = 'TitleEdit' + end + object XLabelEdit: TEdit + Left = 63 + Height = 21 + Top = 353 + Width = 157 + TabOrder = 18 + Text = 'XLabelEdit' + end + object YLabelEdit: TEdit + Left = 280 + Height = 21 + Top = 353 + Width = 159 + TabOrder = 19 + Text = 'YLabelEdit' + end + object TransformChk: TCheckBox + Left = 8 + Height = 17 + Top = 384 + Width = 335 + Caption = 'Transform Data Grid for ANOVA (Treatments by Subjects ANOVA)' + TabOrder = 20 + end + object HelpBtn: TButton + Tag = 110 + Left = 440 + Height = 42 + Top = 16 + Width = 96 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 21 + end +end diff --git a/applications/lazstats/source_orig/bubbleplotunit.lrs b/applications/lazstats/source_orig/bubbleplotunit.lrs new file mode 100644 index 000000000..c04421d41 --- /dev/null +++ b/applications/lazstats/source_orig/bubbleplotunit.lrs @@ -0,0 +1,460 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TBubbleForm','FORMDATA',[ + 'TPF0'#11'TBubbleForm'#10'BubbleForm'#4'Left'#3#133#0#6'Height'#3#156#1#3'Top' + +#2'z'#5'Width'#3'&'#2#7'Caption'#6#29'Repeated Measures Bubble Plot'#12'Clie' + +'ntHeight'#3#156#1#11'ClientWidth'#3'&'#2#6'OnShow'#7#8'FormShow'#10'LCLVers' + +'ion'#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2#14#3'Top'#2 + +#16#5'Width'#2'0'#7'Caption'#6#10'Variables:'#11'ParentColor'#8#0#0#6'TLabel' + +#6'Label2'#4'Left'#3#230#0#6'Height'#2#14#3'Top'#2' '#5'Width'#3#172#0#7'Cap' + +'tion'#6'$Bubble Identification Nuber Variable'#11'ParentColor'#8#0#0#6'TLab' + +'el'#6'Label3'#4'Left'#3#231#0#6'Height'#2#14#3'Top'#2'h'#5'Width'#2'M'#7'Ca' + +'ption'#6#16'X Value Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'L' + +'eft'#3#230#0#6'Height'#2#14#3'Top'#3#176#0#5'Width'#2'M'#7'Caption'#6#16'Y ' + +'Value Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'Left'#3#230#0#6 + +'Height'#2#14#3'Top'#3#248#0#5'Width'#2'`'#7'Caption'#6#20'Bubble Size Varia' + +'ble'#11'ParentColor'#8#0#0#6'TLabel'#6'Label6'#4'Left'#2#8#6'Height'#2#14#3 + +'Top'#3'H'#1#5'Width'#2'2'#7'Caption'#6#11'Main Title:'#11'ParentColor'#8#0#0 + +#6'TLabel'#6'Label7'#4'Left'#2#8#6'Height'#2#14#3'Top'#3'h'#1#5'Width'#2'''' + +#7'Caption'#6#8'X Label:'#11'ParentColor'#8#0#0#6'TLabel'#6'Label8'#4'Left'#3 + +#240#0#6'Height'#2#14#3'Top'#3'h'#1#5'Width'#2''''#7'Caption'#6#8'Y Label:' + +#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#8#6'Height'#3#18#1#3 + +'Top'#2' '#5'Width'#3#173#0#10'ItemHeight'#2#0#8'TabOrder'#2#0#0#0#7'TBitBtn' + +#7'IDInBtn'#4'Left'#3#192#0#6'Height'#2#26#3'Top'#2' '#5'Width'#2#29#10'Glyp' + +'h.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0 + +#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$' + +#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X' + +#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B' + +#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255 + +#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165 + +#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201 + +#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140 + +'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255 + +#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154 + +#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194 + +#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h' + +#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\' + +#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/' + +'x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#12'IDInBtnClick'#8 + +'TabOrder'#2#1#0#0#7'TBitBtn'#8'IDOutBtn'#4'Left'#3#192#0#6'Height'#2#26#3'T' + +'op'#2'@'#5'Width'#2#29#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0 + +#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0 + +#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G' + +#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161 + +'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131 + +#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/' + +'x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e' + +#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255 + +#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132 + +#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255 + +#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154 + +#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255 + +#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201 + +#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'Num' + +'Glyphs'#2#0#7'OnClick'#7#13'IDOutBtnClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#6 + +'XInBtn'#4'Left'#3#192#0#6'Height'#2#26#3'Top'#2'h'#5'Width'#2#29#10'Glyph.D' + +'ata'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0 + +#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184 + +#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255 + +#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255 + +#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142 + +#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J' + +#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162 + +#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255 + +#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130 + +#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199 + +'t'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5' + +#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'XInBtnClick'#8 + +'TabOrder'#2#3#0#0#7'TBitBtn'#7'XOutBtn'#4'Left'#3#192#0#6'Height'#2#26#3'To' + +'p'#3#136#0#5'Width'#2#29#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0 + +#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd' + +#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G' + +#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161 + ,'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131 + +#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/' + +'x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e' + +#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255 + +#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132 + +#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255 + +#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154 + +#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255 + +#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201 + +#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'Num' + +'Glyphs'#2#0#7'OnClick'#7#12'XOutBtnClick'#8'TabOrder'#2#4#0#0#7'TBitBtn'#6 + +'YInBtn'#4'Left'#3#192#0#6'Height'#2#26#3'Top'#3#176#0#5'Width'#2#29#10'Glyp' + +'h.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0 + +#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$' + +#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X' + +#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B' + +#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255 + +#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165 + +#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201 + +#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140 + +'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255 + +#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154 + +#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194 + +#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h' + +#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\' + ,#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/' + +'x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'YInBtnClick'#8 + +'TabOrder'#2#5#0#0#7'TBitBtn'#7'YOutBtn'#4'Left'#3#192#0#6'Height'#2#26#3'To' + +'p'#3#208#0#5'Width'#2#29#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0 + +#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd' + +#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G' + +#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161 + +'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131 + +#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/' + +'x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e' + +#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255 + +#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132 + +#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255 + +#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154 + +#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255 + +#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201 + +#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'Num' + +'Glyphs'#2#0#7'OnClick'#7#12'YOutBtnClick'#8'TabOrder'#2#6#0#0#7'TBitBtn'#9 + +'SizeInBtn'#4'Left'#3#192#0#6'Height'#2#26#3'Top'#3#248#0#5'Width'#2#29#10'G' + +'lyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0 + +#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184 + +'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255 + +';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$' + +#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255 + +#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147 + +#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|' + +#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218 + +#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147 + +#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255 + +'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't' + +#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\' + +#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14'SizeInBt' + +'nClick'#8'TabOrder'#2#7#0#0#7'TBitBtn'#10'SizeOutBtn'#4'Left'#3#192#0#6'Hei' + +'ght'#2#26#3'Top'#3#24#1#5'Width'#2#29#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'B' + +'M6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0 + +#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169 + +'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{' + +#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0 + +#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255 + +#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137 + +#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255 + +#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158 + +#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255 + +#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255 + +'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139 + +#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255 + +'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195 + +'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't' + +#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#15'SizeOutBtnClick'#8'TabOrder'#2#8 + +#0#0#5'TEdit'#10'BubbleEdit'#4'Left'#3#232#0#6'Height'#2#21#3'Top'#2'0'#5'Wi' + +'dth'#3#167#0#8'TabOrder'#2#9#4'Text'#6#10'BubbleEdit'#0#0#5'TEdit'#5'XEdit' + +#4'Left'#3#230#0#6'Height'#2#21#3'Top'#2'x'#5'Width'#3#166#0#8'TabOrder'#2#10 + +#4'Text'#6#5'XEdit'#0#0#5'TEdit'#5'YEdit'#4'Left'#3#230#0#6'Height'#2#21#3'T' + +'op'#3#192#0#5'Width'#3#165#0#8'TabOrder'#2#11#4'Text'#6#5'YEdit'#0#0#5'TEdi' + +'t'#8'SizeEdit'#4'Left'#3#230#0#6'Height'#2#21#3'Top'#3#8#1#5'Width'#3#166#0 + +#8'TabOrder'#2#12#4'Text'#6#8'SizeEdit'#0#0#7'TButton'#8'ResetBtn'#4'Left'#3 + +#187#1#6'Height'#2'('#3'Top'#2'P'#5'Width'#2'^'#7'Caption'#6#5'Reset'#7'OnCl' + +'ick'#7#13'ResetBtnClick'#8'TabOrder'#2#13#0#0#7'TButton'#9'CancelBtn'#4'Lef' + +'t'#3#184#1#6'Height'#2'&'#3'Top'#3#144#0#5'Width'#2'b'#7'Caption'#6#6'Cance' + +'l'#11'ModalResult'#2#2#8'TabOrder'#2#14#0#0#7'TButton'#10'ComputeBtn'#4'Lef' + +'t'#3#184#1#6'Height'#2'&'#3'Top'#3#208#0#5'Width'#2'b'#7'Caption'#6#7'Compu' + +'te'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#15#0#0#7'TButton'#9'Retu' + +'rnBtn'#4'Left'#3#184#1#6'Height'#2'&'#3'Top'#3#16#1#5'Width'#2'b'#7'Caption' + +#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#16#0#0#5'TEdit'#9'TitleEdit'#4 + +'Left'#2'?'#6'Height'#2#21#3'Top'#3'A'#1#5'Width'#3'L'#1#8'TabOrder'#2#17#4 + +'Text'#6#9'TitleEdit'#0#0#5'TEdit'#10'XLabelEdit'#4'Left'#2'?'#6'Height'#2#21 + ,#3'Top'#3'a'#1#5'Width'#3#157#0#8'TabOrder'#2#18#4'Text'#6#10'XLabelEdit'#0#0 + +#5'TEdit'#10'YLabelEdit'#4'Left'#3#24#1#6'Height'#2#21#3'Top'#3'a'#1#5'Width' + +#3#159#0#8'TabOrder'#2#19#4'Text'#6#10'YLabelEdit'#0#0#9'TCheckBox'#12'Trans' + +'formChk'#4'Left'#2#8#6'Height'#2#17#3'Top'#3#128#1#5'Width'#3'O'#1#7'Captio' + +'n'#6' SizeEdit.Text) then SizeCol := i; + end; + if ((BubbleCol = 0) or (XCol = 0) or (YCol = 0) or (SizeCol = 0)) then + begin + ShowMessage('ERROR! One or more variables not found!'); + Exit; + end; + + // get number of bubbles and replications per bubble (number of bubble id's) + minrep := 1000; + maxrep := -1; + for i := 1 to NoCases do + begin + intcell := StrToInt(OS3MainFrm.DataGrid.Cells[BubbleCol,i]); + if (intcell > maxrep) then maxrep := intcell; + if (intcell < minrep) then minrep := intcell; + end; + nobubbles := maxrep - minrep + 1; + noreplications := 1; + intcell := StrToInt(OS3MainFrm.DataGrid.Cells[BubbleCol,1]); + for i := 2 to NoCases do + begin + cell := StrToInt(OS3MainFrm.DataGrid.Cells[BubbleCol,i]); + if (cell = intcell) then noreplications := noreplications + 1; + end; + + // get min, max and range of Y + Ymin := 1.0e300; + Ymax := -1.0e300; + for i := 1 to NoCases do + begin + cellvalue := StrToFloat(OS3MainFrm.DataGrid.Cells[YCol,i]); + if (cellvalue > Ymax) then Ymax := cellvalue; + if (cellvalue < Ymin) then Ymin := cellvalue; + end; + Yrange := Ymax - Ymin; + Ystep := Yrange / 10; + + // get min, max and range of X + Xmin := 10000; + Xmax := -1; + for i := 1 to NoCases do + begin + intcell := StrToInt(OS3MainFrm.DataGrid.Cells[XCol,i]); + if (intcell > Xmax) then Xmax := intcell; + if (intcell < Xmin) then Xmin := intcell; + end; + Xrange := Xmax - Xmin; + Xstep := Xrange div (noreplications-1); + + // get min, max, range, and increment of bubble sizes + BubMin := 1.0e300; + BubMax := -1.0e300; + for i := 1 to NoCases do + begin + cellvalue := StrToFloat(OS3MainFrm.DataGrid.Cells[SizeCol,i]); + if (cellvalue > BubMax) then BubMax := cellvalue; + if (cellvalue < BubMin) then BubMin := cellvalue; + end; + BubRange := BubMax - BubMin; + + // Display basic statistics + ncases := NoCases div noreplications; + GrandYMean := 0.0; + GrandSizeMean := 0.0; + SetLength(CaseYMeans,ncases); + SetLength(CaseSizeMeans,ncases); + SetLength(Ymeans,noreplications); + SetLength(SizeMeans,noreplications); + for i := 0 to ncases - 1 do + begin + CaseYMeans[i] := 0.0; + CaseSizeMeans[i] := 0.0; + end; + for i := 0 to noreplications - 1 do + begin + Ymeans[i] := 0.0; + SizeMeans[i] := 0.0; + end; + i := 1; + + while ( i <= NoCases) do + begin + for j := 1 to noreplications do + begin + bubbleID := StrToInt(OS3MainFrm.DataGrid.Cells[BubbleCol,i]); + yvalue := StrToFloat(OS3MainFrm.DataGrid.Cells[YCol,i]); + sizevalue := StrToFloat(OS3MainFrm.DataGrid.Cells[SizeCol,i]); + GrandYMean:= GrandYMean + yvalue; + GrandSizeMean := GrandSizeMean + sizevalue; + Ymeans[j-1] := Ymeans[j-1] + yvalue; + SizeMeans[j-1] := SizeMeans[j-1] + sizevalue; + CaseYMeans[bubbleID-1] := CaseYMeans[bubbleID-1] + yvalue; + CaseSizeMeans[bubbleID-1] := CaseSizeMeans[bubbleID-1] + sizevalue; + i := i + 1; + end; + end; + + GrandYMean := GrandYMean / (ncases * noreplications); + GrandSizeMean := GrandSizeMean / (ncases * noreplications); + for j := 0 to noreplications - 1 do + begin + Ymeans[j] := Ymeans[j] / ncases; + SizeMeans[j] := SizeMeans[j] / ncases; + end; + for i := 0 to ncases - 1 do + begin + CaseYMeans[i] := CaseYMeans[i] / noreplications; + CaseSizeMeans[i] := CaseSizeMeans[i] / noreplications; + end; + + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('MEANS FOR Y AND SIZE VARIABLES'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Grand Mean for Y := %8.3f',[GrandYMean]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Grand Mean for Size := %8.3f',[GrandSizeMean]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('REPLICATION MEAN Y VALUES (ACROSS OBJECTS)'); + for j := 0 to noreplications - 1 do + begin + outline := format('Replication %5d Mean := %8.3f',[j+1,Ymeans[j]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('REPLICATION MEAN SIZE VALUES (ACROSS OBJECTSend;'); + for j := 0 to noreplications - 1 do + begin + outline := format('Replication %5d Mean := %8.3f',[j+1,SizeMeans[j]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + + OutPutFrm.RichEdit.Lines.Add('MEAN Y VALUES FOR EACH BUBBLE (OBJECT)'); + for i := 0 to ncases - 1 do + begin + outline := format('Object %5d Mean := %8.3f',[i+1,CaseYMeans[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('MEAN SIZE VALUES FOR EACH BUBBLE (OBJECT)'); + for i := 0 to ncases - 1 do + begin + outline := format('Object %5d Mean := %8.3f',[i+1,CaseSizeMeans[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + SizeMeans := nil; + Ymeans := nil; + CaseSizeMeans := nil; + CaseYMeans := nil; +//-------------------------------------------------------------------------- +// Plotting Section +//--------------------------------------------------------------------------- + BlankFrm.Image1.Canvas.Clear; + BlankFrm.Show; + BlankFrm.Caption := 'Bubble Plot of ' + OS3MainFrm.FileNameEdit.Text; + Xlabel := XlabelEdit.Text; + Ylabel := YlabelEdit.Text; + Title := TitleEdit.Text; + ImageHi := BlankFrm.Image1.Height; + ImageWide := BlankFrm.Image1.Width; + Xstart := ImageWide div 10; + Xend := (ImageWide * 9) div 10; + Ystart := ImageHi div 10; + Yend := (ImageHi * 8) div 10; + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.Brush.Color := clWhite; + BlankFrm.Image1.Canvas.Rectangle(0,0,ImageWide,ImageHi); + BlankFrm.Image1.Canvas.FloodFill(0,0,clWhite,fsBorder); + BlankFrm.Image1.Canvas.TextOut(Xstart-10,Ystart-30,Ylabel); + LabelWide := BlankFrm.Image1.Canvas.TextWidth(Xlabel); + BlankFrm.Image1.Canvas.TextOut((Xend-Xstart) div 2 - LabelWide,Yend + 40,Xlabel); + LabelWide := BlankFrm.Image1.Canvas.TextWidth(Title); + BlankFrm.Image1.Canvas.TextOut((Xend-Xstart) div 2 - LabelWide div 2, Ystart - 40,Title); + + // draw axis lines + BlankFrm.Image1.Canvas.MoveTo(Xstart,Yend); + BlankFrm.Image1.Canvas.LineTo(Xend,Yend); + BlankFrm.Image1.Canvas.MoveTo(Xstart,Yend); + BlankFrm.Image1.Canvas.LineTo(Xstart,Ystart); + + + // create y axis values + Yincr := (Yend - Ystart) div 10; + for i := 0 to 10 do // print Y axis values + begin + place := Yend - (i * Yincr); + value := Ymin + (Ystep * i); + valstr := format('%4.2f',[value]); + astring := valstr; + TextHi := BlankFrm.Image1.Canvas.TextHeight(astring); + BlankFrm.Image1.Canvas.TextOut(Xstart-30,place-TextHi,astring); + end; + + // create x axis values + for i := 1 to noreplications do // print x axis + begin + value := Xmin + ((i-1) * Xstep); + ratio := i / noreplications; + Xpos := round(ratio * (Xend - Xstart)); + valstr := format('%4.0f',[value]); + astring := valstr; + BlankFrm.Image1.Canvas.TextOut(Xpos,Yend + 20,astring); + end; + + // Plot the bubbles + for i := 1 to NoCases do + begin + intcell := StrToInt(OS3MainFrm.DataGrid.Cells[BubbleCol,i]); + xvalue := StrToFloat(OS3MainFrm.DataGrid.Cells[XCol,i]); + cellvalue := StrToFloat(OS3MainFrm.DataGrid.Cells[YCol,i]); + yprop := Yend - round(((cellvalue-Ymin) / Yrange) * (Yend - Ystart)); + cellvalue := StrToFloat(OS3MainFrm.DataGrid.Cells[SizeCol,i]); + astring := Trim(OS3MainFrm.DataGrid.Cells[BubbleCol,i]); + cellvalue := ((cellvalue - BubMin) / BubRange) * 20; + cellvalue := cellvalue + 10; + ratio := ((xvalue - Xmin) / Xstep) + 1; + ratio := (ratio / noreplications) * (Xend - Xstart); + Xpos := ceil(ratio); + Bubcolor := intcell - 1; + while (Bubcolor > 11) do Bubcolor := 12 - Bubcolor; + BlankFrm.Image1.Canvas.Brush.Color := Colors[Bubcolor]; + X1 := Xpos - ceil(cellvalue); + Y1 := yprop - ceil(cellvalue); + X2 := Xpos + ceil(cellvalue); + Y2 := yprop + ceil(cellvalue); + BlankFrm.Image1.Canvas.Ellipse(X1,Y1,X2,Y2); + BlankFrm.Image1.Canvas.Brush.Color := clWhite; + BlankFrm.Image1.Canvas.TextOut(Xpos,yprop,astring); + end; + + // Transform data matrix if elected + if (TransformChk.Checked = true) then + begin + ncases := nobubbles; + ncols := noreplications * 3 + 1; + // Note - columns: 1:=object ID, 2 to noreplications := X, + // next noreplications := Y, next noreplications := size + SetLength(Data,ncases,ncols); + i := 1; + while (i <= NoCases) do + begin + for j := 1 to noreplications do + begin + bubbleID := StrToInt(OS3MainFrm.DataGrid.Cells[BubbleCol,i]); + xvalue := StrToFloat(OS3MainFrm.DataGrid.Cells[XCol,i]); + yvalue := StrToFloat(OS3MainFrm.DataGrid.Cells[YCol,i]); + sizevalue := StrToFloat(OS3MainFrm.DataGrid.Cells[SizeCol,i]); + Data[bubbleID-1,0] := bubbleID; + Data[bubbleID-1,j] := xvalue; + Data[bubbleID-1,noreplications+j] := yvalue; + Data[bubbleID-1,noreplications*2+j] := sizevalue; + i := i + 1; + end; + end; + SetLength(labels,NoVariables+1); + for i := 1 to NoVariables do labels[i] := OS3MainFrm.DataGrid.Cells[i,0]; + ClearGrid; + OS3MainFrm.DataGrid.RowCount := ncases + 1; + OS3MainFrm.DataGrid.ColCount := ncols + 1; + for i := 1 to ncases do + begin + OS3MainFrm.DataGrid.Cells[0,i] := IntToStr(i); + for j := 1 to ncols do + OS3MainFrm.DataGrid.Cells[j,i] := FloatToStr(Data[i-1,j-1]); + end; + OS3MainFrm.DataGrid.Cells[1,0] := labels[1]; + for j := 2 to NoVariables do // clear dictionary + begin + for i := 0 to 7 do DictionaryFrm.DictGrid.Cells[i,j] := ''; + DictionaryFrm.DictGrid.RowCount := DictionaryFrm.DictGrid.RowCount - 1; + VarDefined[j] := false; + end; + DictionaryFrm.DictGrid.Cells[1,1] := labels[1]; + for j := 1 to noreplications do + begin + outline := labels[2] + IntToStr(j); + newcol := j + 1; + if (newcol+1 > DictionaryFrm.DictGrid.RowCount) then + DictionaryFrm.DictGrid.RowCount := DictionaryFrm.DictGrid.RowCount + 1; + DictionaryFrm.Defaults(Self,newcol); + VarDefined[newcol] := true; + DictionaryFrm.DictGrid.Cells[1,newcol] := outline; + OS3MainFrm.DataGrid.Cells[newcol,0] := outline; + end; + for j := 1 to noreplications do + begin + outline := labels[3] + IntToStr(j); + newcol := j + 1 + noreplications; + OS3MainFrm.DataGrid.Cells[newcol,0] := outline; + if (newcol+1 > DictionaryFrm.DictGrid.RowCount) then + DictionaryFrm.DictGrid.RowCount := DictionaryFrm.DictGrid.RowCount + 1; + DictionaryFrm.Defaults(Self,newcol); + VarDefined[newcol] := true; + DictionaryFrm.DictGrid.Cells[1,newcol] := outline; + end; + for j := 1 to noreplications do + begin + outline := labels[4] + IntToStr(j); + newcol := j + 1 + noreplications * 2; + OS3MainFrm.DataGrid.Cells[newcol,0] := outline; + if (newcol+1 > DictionaryFrm.DictGrid.RowCount) then + DictionaryFrm.DictGrid.RowCount := DictionaryFrm.DictGrid.RowCount + 1; + DictionaryFrm.Defaults(Self,newcol); + VarDefined[newcol] := true; + + DictionaryFrm.DictGrid.Cells[1,newcol] := outline; + end; + NoVariables := ncols; + NoCases := ncases; + OS3MainFrm.NoCasesEdit.Text := IntToStr(NoCases); + OS3MainFrm.NoVarsEdit.Text := IntToStr(NoVariables); + Data := nil; + labels := nil; + end; +end; + +procedure TBubbleForm.IDOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(BubbleEdit.Text); + IDInBtn.Visible := true; + IDOutBtn.Visible := false; +end; + +procedure TBubbleForm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + BubbleEdit.Text := ''; + XEdit.Text := ''; + YEdit.Text := ''; + SizeEdit.Text := ''; + IDInBtn.Visible := true; + IDOutBtn.Visible := false; + XInBtn.Visible := true; + XOutBtn.Visible := false; + YInBtn.Visible := true; + YOutBtn.Visible := false; + SizeInBtn.Visible := true; + SizeOutBtn.Visible := false; + VarList.Clear; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; + +procedure TBubbleForm.SizeInBtnClick(Sender: TObject); +VAR + index, i : integer; +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + SizeEdit.Text := VarList.Items.Strings[i]; + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + SizeOutBtn.Visible := true; + SizeInBtn.Visible := false; +end; + +procedure TBubbleForm.SizeOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(SizeEdit.Text); + SizeInBtn.Visible := true; + SizeOutBtn.Visible := false; +end; + +procedure TBubbleForm.XInBtnClick(Sender: TObject); +VAR + i, index : integer; +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + XEdit.Text := VarList.Items.Strings[i]; + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + XOutBtn.Visible := true; + XInBtn.Visible := false; +end; + +procedure TBubbleForm.XOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(XEdit.Text); + XInBtn.Visible := true; + XOutBtn.Visible := false; +end; + +procedure TBubbleForm.YInBtnClick(Sender: TObject); +VAR + index, i : integer; +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + YEdit.Text := VarList.Items.Strings[i]; + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + YOutBtn.Visible := true; + YInBtn.Visible := false; +end; + +procedure TBubbleForm.YOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(YEdit.Text); + YInBtn.Visible := true; + YOutBtn.Visible := false; +end; + +initialization + {$I bubbleplotunit.lrs} + +end. +