From fe372ec99d52fc0b5684f6b43fbbed852940f1fb Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sat, 18 Apr 2020 20:50:34 +0000 Subject: [PATCH] LazStats: Refactor CompRelUnit. Add help text. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7389 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../lazstats/docs/HelpNDoc/LazStats.hnd | Bin 6955008 -> 6987776 bytes .../measurement_programs/comprelunit.lfm | 60 ++- .../measurement_programs/comprelunit.pas | 359 ++++++++++-------- 3 files changed, 217 insertions(+), 202 deletions(-) diff --git a/applications/lazstats/docs/HelpNDoc/LazStats.hnd b/applications/lazstats/docs/HelpNDoc/LazStats.hnd index acf66974d7da9fe71a9d748d1ba103104f4d1c4c..658a6d724aa071cf2766f6f313225d921387a18a 100644 GIT binary patch delta 23423 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 C6y|RL diff --git a/applications/lazstats/source/forms/analysis/measurement_programs/comprelunit.lfm b/applications/lazstats/source/forms/analysis/measurement_programs/comprelunit.lfm index c3f77e139..aa004683d 100644 --- a/applications/lazstats/source/forms/analysis/measurement_programs/comprelunit.lfm +++ b/applications/lazstats/source/forms/analysis/measurement_programs/comprelunit.lfm @@ -108,91 +108,74 @@ object CompRelFrm: TCompRelFrm end end object ResetBtn: TButton - AnchorSideRight.Control = CancelBtn + AnchorSideRight.Control = ComputeBtn AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom - Left = 286 + Left = 374 Height = 25 Top = 328 Width = 54 Anchors = [akRight, akBottom] AutoSize = True - BorderSpacing.Left = 12 + BorderSpacing.Left = 8 BorderSpacing.Top = 8 - BorderSpacing.Right = 12 + BorderSpacing.Right = 8 BorderSpacing.Bottom = 8 Caption = 'Reset' OnClick = ResetBtnClick TabOrder = 9 end - object CancelBtn: TButton - AnchorSideRight.Control = ComputeBtn - AnchorSideBottom.Control = Owner - AnchorSideBottom.Side = asrBottom - Left = 352 - Height = 25 - Top = 328 - Width = 62 - Anchors = [akRight, akBottom] - AutoSize = True - BorderSpacing.Left = 12 - BorderSpacing.Top = 8 - BorderSpacing.Right = 12 - BorderSpacing.Bottom = 8 - Caption = 'Cancel' - ModalResult = 2 - TabOrder = 10 - end object ComputeBtn: TButton - AnchorSideRight.Control = ReturnBtn + AnchorSideRight.Control = CloseBtn AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom - Left = 426 + Left = 436 Height = 25 Top = 328 Width = 76 Anchors = [akRight, akBottom] AutoSize = True - BorderSpacing.Left = 12 + BorderSpacing.Left = 8 BorderSpacing.Top = 8 - BorderSpacing.Right = 12 + BorderSpacing.Right = 8 BorderSpacing.Bottom = 8 Caption = 'Compute' OnClick = ComputeBtnClick - TabOrder = 11 + TabOrder = 10 end - object ReturnBtn: TButton + object CloseBtn: TButton AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom - Left = 514 + Left = 520 Height = 25 Top = 328 - Width = 61 + Width = 55 Anchors = [akRight, akBottom] AutoSize = True + BorderSpacing.Left = 8 BorderSpacing.Top = 8 BorderSpacing.Right = 8 BorderSpacing.Bottom = 8 - Caption = 'Return' - ModalResult = 1 - TabOrder = 12 + Caption = 'Close' + ModalResult = 11 + TabOrder = 11 end object HelpBtn: TButton Tag = 114 AnchorSideRight.Control = ResetBtn AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom - Left = 223 + Left = 315 Height = 25 Top = 328 Width = 51 Anchors = [akRight, akBottom] AutoSize = True - BorderSpacing.Left = 12 + BorderSpacing.Left = 8 BorderSpacing.Top = 8 - BorderSpacing.Right = 12 + BorderSpacing.Right = 8 BorderSpacing.Bottom = 8 Caption = 'Help' OnClick = HelpBtnClick @@ -202,7 +185,7 @@ object CompRelFrm: TCompRelFrm AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom - AnchorSideBottom.Control = ReturnBtn + AnchorSideBottom.Control = CloseBtn Left = 0 Height = 8 Top = 312 @@ -251,6 +234,7 @@ object CompRelFrm: TCompRelFrm Constraints.MinHeight = 200 ItemHeight = 0 MultiSelect = True + OnSelectionChange = ItemListSelectionChange TabOrder = 0 end object InBtn: TBitBtn @@ -313,6 +297,8 @@ object CompRelFrm: TCompRelFrm BorderSpacing.Top = 2 BorderSpacing.Bottom = 8 ItemHeight = 0 + MultiSelect = True + OnSelectionChange = ItemListSelectionChange TabOrder = 4 end object Bevel2: TBevel diff --git a/applications/lazstats/source/forms/analysis/measurement_programs/comprelunit.pas b/applications/lazstats/source/forms/analysis/measurement_programs/comprelunit.pas index 75a829a03..a9f17742c 100644 --- a/applications/lazstats/source/forms/analysis/measurement_programs/comprelunit.pas +++ b/applications/lazstats/source/forms/analysis/measurement_programs/comprelunit.pas @@ -1,3 +1,5 @@ +// File for testing: CompRelData.laz, use all variables + unit CompRelUnit; {$mode objfpc}{$H+} @@ -22,9 +24,8 @@ type OutBtn: TBitBtn; AllBtn: TBitBtn; ResetBtn: TButton; - CancelBtn: TButton; ComputeBtn: TButton; - ReturnBtn: TButton; + CloseBtn: TButton; RMatChk: TCheckBox; GridScrChk: TCheckBox; GroupBox1: TGroupBox; @@ -44,6 +45,7 @@ type procedure FormShow(Sender: TObject); procedure HelpBtnClick(Sender: TObject); procedure InBtnClick(Sender: TObject); + procedure ItemListSelectionChange(Sender: TObject; User: boolean); procedure OutBtnClick(Sender: TObject); procedure RelListClick(Sender: TObject); procedure ResetBtnClick(Sender: TObject); @@ -51,6 +53,7 @@ type private { private declarations } FAutoSized: Boolean; + procedure UpdateBtnStates; public { public declarations } end; @@ -61,30 +64,31 @@ var implementation uses - Math; + Math, Utils; + { TCompRelFrm } procedure TCompRelFrm.ResetBtnClick(Sender: TObject); -VAR i : integer; +var + i: integer; begin - VarList.Clear; - ItemList.Clear; - RelList.Clear; - WeightList.Clear; - OutBtn.Enabled := false; - InBtn.Enabled := true; - for i := 1 to NoVariables do - VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + VarList.Clear; + ItemList.Clear; + RelList.Clear; + WeightList.Clear; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + UpdateBtnStates; end; procedure TCompRelFrm.WeightListClick(Sender: TObject); var - response : string; - index : integer; + response: string; + index: integer; begin - response := InputBox('Test Weight','Test weight = ','1.0'); - index := WeightList.ItemIndex; - WeightList.Items.Strings[index] := response; + response := InputBox('Test Weight', 'Test weight:', '1.0'); + index := WeightList.ItemIndex; + WeightList.Items.Strings[index] := response; end; procedure TCompRelFrm.FormActivate(Sender: TObject); @@ -94,12 +98,11 @@ begin if FAutoSized then exit; - w := MaxValue([HelpBtn.Width, ResetBtn.Width, CancelBtn.Width, ComputeBtn.Width, ReturnBtn.Width]); + w := MaxValue([HelpBtn.Width, ResetBtn.Width, ComputeBtn.Width, CloseBtn.Width]); HelpBtn.Constraints.MinWidth := w; ResetBtn.Constraints.MinWidth := w; - CancelBtn.Constraints.MinWidth := w; ComputeBtn.Constraints.MinWidth := w; - ReturnBtn.Constraints.MinWidth := w; + CloseBtn.Constraints.MinWidth := w; w := Max(Label1.Width, Label3.Width); VarList.Constraints.MinWidth := w; @@ -145,36 +148,39 @@ end; procedure TCompRelFrm.AllBtnClick(Sender: TObject); var - i, count : integer; - cellstring : string; + i, count : integer; + cellstring : string; begin - count := VarList.Items.Count; - for i := 1 to count do - begin - ItemList.Items.Add(VarList.Items.Strings[i-1]); - cellstring := '1.0'; - RelList.Items.Add(cellstring); - WeightList.Items.Add(cellstring); - end; - VarList.Clear; - InBtn.Enabled := false; - OutBtn.Enabled := true; + cellstring := '1.0'; + for i := 1 to VarList.Items.Count do + begin + ItemList.Items.Add(VarList.Items[i-1]); + RelList.Items.Add(cellstring); + WeightList.Items.Add(cellstring); + end; + VarList.Clear; + InBtn.Enabled := false; + OutBtn.Enabled := true; end; procedure TCompRelFrm.ComputeBtnClick(Sender: TObject); var - i, j, NoVars, count, col : integer; - Rmat, RelMat : DblDyneMat; - Weights, Reliabilities, VectProd, means, variances, stddevs : DblDyneVec; - CompRel, numerator, denominator, compscore : double; - colnoselected : IntDyneVec; - outline, cellstring : string; - title : string; - RowLabels : StrDyneVec; - errorcode : boolean = false; + errorcode: boolean = false; + i, j, NoVars, count, col: integer; + Rmat, RelMat: DblDyneMat; + Weights, Reliabilities, VectProd, means, variances, stddevs: DblDyneVec; + CompRel, numerator, denominator, compscore: double; + colnoselected: IntDyneVec; + outline, cellstring: string; + title: string; + RowLabels: StrDyneVec; + lReport: TStrings; begin - if OutputFrm = nil then - Application.CreateForm(TOutputFrm, OutputFrm); + if ItemList.Count = 0 then + begin + MessageDlg('No items selected.', mtError, [mbOK], 0); + exit; + end; SetLength(colnoselected,NoVariables); SetLength(Rmat,NoVariables+1,NoVariables+1); @@ -187,7 +193,6 @@ begin SetLength(stddevs,NoVariables); SetLength(RowLabels,NoVariables); - OutputFrm.RichEdit.Clear; // get variable col. no.s selected NoVars := ItemList.Items.Count; for i := 1 to NoVars do @@ -195,149 +200,173 @@ begin cellstring := ItemList.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; - end; + if (cellstring = OS3MainFrm.DataGrid.Cells[j,0]) then + begin + colnoselected[i-1] := j; + RowLabels[i-1] := cellstring; + end; end; end; count := NoCases; - OutputFrm.RichEdit.Lines.Add('Composite Test Reliability'); - OutputFrm.RichEdit.Lines.Add(''); - outline := 'File Analyzed: ' + OS3MainFrm.FileNameEdit.Text; - OutputFrm.RichEdit.Lines.Add(outline); - OutputFrm.RichEdit.Lines.Add(''); - // get correlation matrix - Correlations(NoVars,colnoselected,Rmat,means,variances,stddevs,errorcode,count); - if (errorcode) then - ShowMessage('ERROR! Zero variance found for a variable.'); - if RmatChk.Checked then - begin - title := 'Correlations Among Tests'; - MAT_PRINT(Rmat,NoVars,NoVars,title,RowLabels,RowLabels,count); - title := 'Means'; - DynVectorPrint(means,NoVars,title,RowLabels,count); - title := 'Variances'; - DynVectorPrint(variances,NoVars,title,RowLabels,count); - title := 'Standard Deviations'; - DynVectorPrint(stddevs,NoVars,title,RowLabels,count); - end; - for i := 1 to NoVars do - for j := 1 to NoVars do + lReport := TStringList.Create; + try + lReport.Add('COMPOSITE TEST RELIABILITY'); + lReport.Add(''); + lReport.Add('File Analyzed: ' + OS3MainFrm.FileNameEdit.Text); + lReport.Add(''); + + // get correlation matrix + Correlations(NoVars, colnoselected, Rmat, means, variances, stddevs, errorcode, count); + + if errorcode then + MessageDlg('Zero variance found for a variable.', mtError, [mbOK], 0); + + if RmatChk.Checked then + begin + title := 'Correlations Among Tests'; + MatPrint(Rmat, NoVars, NoVars, title, RowLabels, RowLabels, count, lReport); + title := 'Means'; + DynVectorPrint(means, NoVars, title, RowLabels, count, lReport); + title := 'Variances'; + DynVectorPrint(variances, NoVars, title, RowLabels, count, lReport); + title := 'Standard Deviations'; + DynVectorPrint(stddevs, NoVars, title, RowLabels, count, lReport); + end; + + for i := 1 to NoVars do + for j := 1 to NoVars do RelMat[i-1,j-1] := Rmat[i-1,j-1]; - for i := 1 to NoVars do - begin - Reliabilities[i-1] := StrToFloat(RelList.Items.Strings[i-1]); - RelMat[i-1,i-1] := Reliabilities[i-1]; - Weights[i-1] := StrToFloat(WeightList.Items.Strings[i-1]); - end; - // get numerator and denominator of composite reliability - for i := 1 to NoVars do VectProd[i-1] := 0.0; - numerator := 0.0; - denominator := 0.0; - for i := 1 to NoVars do - for j := 1 to NoVars do + + for i := 1 to NoVars do + begin + Reliabilities[i-1] := StrToFloat(RelList.Items.Strings[i-1]); + RelMat[i-1,i-1] := Reliabilities[i-1]; + Weights[i-1] := StrToFloat(WeightList.Items.Strings[i-1]); + end; + + // get numerator and denominator of composite reliability + for i := 1 to NoVars do VectProd[i-1] := 0.0; + numerator := 0.0; + denominator := 0.0; + for i := 1 to NoVars do + for j := 1 to NoVars do VectProd[i-1] := VectProd[i-1] + (Weights[i-1] * RelMat[j-1,i-1]); - for i := 1 to NoVars do numerator := numerator + (VectProd[i-1] * Weights[i-1]); + for i := 1 to NoVars do + numerator := numerator + (VectProd[i-1] * Weights[i-1]); - for i := 1 to NoVars do VectProd[i-1] := 0.0; - for i := 1 to NoVars do - for j := 1 to NoVars do + for i := 1 to NoVars do + VectProd[i-1] := 0.0; + for i := 1 to NoVars do + for j := 1 to NoVars do VectProd[i-1] := VectProd[i-1] + (Weights[i-1] * Rmat[j-1,i-1]); - for i := 1 to NoVars do denominator := denominator + - (VectProd[i-1] * Weights[i-1]); - CompRel := numerator / denominator; - OutputFrm.RichEdit.Lines.Add(''); - title := 'Test Weights'; - DynVectorPrint(Weights,NoVars,title,RowLabels,count); - title := 'Test Reliabilities'; - DynVectorPrint(Reliabilities,NoVars,title,RowLabels,count); - outline := format('Composite reliability = %6.3f',[CompRel]); - OutputFrm.RichEdit.Lines.Add(outline); - OutputFrm.ShowModal; - if GridScrChk.Checked then - begin - cellstring := 'Composite'; - col := NoVariables + 1; - DictionaryFrm.NewVar(col); - DictionaryFrm.DictGrid.Cells[1,col] := cellstring; - col := NoVariables; - OS3MainFrm.DataGrid.Cells[col,0] := cellstring; - col := NoVariables; - for i := 1 to NoCases do - begin - compscore := 0.0; - if not GoodRecord(i,NoVars,ColNoSelected) then continue; - for j := 1 to NoVars do - begin - compscore := compscore + (Weights[j-1] * - StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[colnoselected[j-1],i]))); - end; - OS3MainFrm.DataGrid.Cells[col,i] := FloatToStr(compscore); - end; - end; + for i := 1 to NoVars do + denominator := denominator + VectProd[i-1] * Weights[i-1]; + CompRel := numerator / denominator; - RowLabels := nil; - stddevs := nil; - variances := nil; - means := nil; - VectProd := nil; - Reliabilities := nil; - Weights := nil; - RelMat := nil; - Rmat := nil; - colnoselected := nil; + title := 'Test Weights'; + DynVectorPrint(Weights, NoVars, title, RowLabels, count, lReport); + title := 'Test Reliabilities'; + DynVectorPrint(Reliabilities, NoVars, title, RowLabels, count, lReport); + lReport.Add('Composite reliability: %6.3f', [CompRel]); + + DisplayReport(lReport); + + if GridScrChk.Checked then + begin + cellstring := 'Composite'; + col := NoVariables + 1; + DictionaryFrm.NewVar(col); + DictionaryFrm.DictGrid.Cells[1,col] := cellstring; + col := NoVariables; + OS3MainFrm.DataGrid.Cells[col,0] := cellstring; + col := NoVariables; + for i := 1 to NoCases do + begin + compscore := 0.0; + if not GoodRecord(i, NoVars, ColNoSelected) then continue; + for j := 1 to NoVars do + compscore := compscore + (Weights[j-1] * StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[colnoselected[j-1],i]))); + OS3MainFrm.DataGrid.Cells[col,i] := FloatToStr(compscore); + end; + end; + + finally + lReport.Free; + RowLabels := nil; + stddevs := nil; + variances := nil; + means := nil; + VectProd := nil; + Reliabilities := nil; + Weights := nil; + RelMat := nil; + Rmat := nil; + colnoselected := nil; + end; end; procedure TCompRelFrm.InBtnClick(Sender: TObject); var - index, i : integer; - cellstring : string; + i: integer; + cellstring: string; begin - index := VarList.Items.Count; - i := 0; - while i < index do - begin - if (VarList.Selected[i]) then - begin - ItemList.Items.Add(VarList.Items.Strings[i]); - cellstring := '1.0'; - RelList.Items.Add(cellstring); - WeightList.Items.Add(cellstring); - VarList.Items.Delete(i); - index := index - 1; - i := 0; - end - else i := i + 1; - end; - OutBtn.Enabled := true; + cellstring := '1.0'; + while i < VarList.Items.Count do + begin + if VarList.Selected[i] then + begin + ItemList.Items.Add(VarList.Items[i]); + RelList.Items.Add(cellstring); + WeightList.Items.Add(cellstring); + VarList.Items.Delete(i); + i := 0; + end + else + inc(i); + end; + UpdateBtnStates; +end; + +procedure TCompRelFrm.ItemListSelectionChange(Sender: TObject; User: boolean); +begin + UpdateBtnStates; end; procedure TCompRelFrm.OutBtnClick(Sender: TObject); -VAR index : integer; +var + i: Integer; begin - index := ItemList.ItemIndex; - if index < 0 then - begin - OutBtn.Enabled := false; - exit; - end; - VarList.Items.Add(ItemList.Items.Strings[index]); - ItemList.Items.Delete(index); - RelList.Items.Delete(index); - WeightList.Items.Delete(index); + while i < ItemList.Items.Count do + begin + if ItemList.Selected[i] then + begin + VarList.Items.Add(ItemList.Items[i]); + ItemList.Items.Delete(i); + RelList.Items.Delete(i); + WeightList.Items.Delete(i); + i := 0; + end else + inc(i); + end; + UpdateBtnStates; end; procedure TCompRelFrm.RelListClick(Sender: TObject); var - response : string; - index : integer; + response: string; + index: integer; begin - response := InputBox('Reliability','Reliability estimate = ','1.0'); - index := RelList.ItemIndex; - RelList.Items.Strings[index] := response; + response := InputBox('Reliability', 'Reliability estimate: ', '1.0'); + index := RelList.ItemIndex; + RelList.Items[index] := response; +end; + +procedure TCompRelFrm.UpdateBtnStates; +begin + InBtn.Enabled := AnySelected(VarList); + OutBtn.Enabled := AnySelected(ItemList); + AllBtn.Enabled := VarList.Items.Count > 0; end; initialization