From 9eaa49b4c604027cc52c002ec72f487c1a3a4c58 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Wed, 13 May 2020 20:23:26 +0000 Subject: [PATCH] LazStats: Remove remaining code in GLMUnit writing a report directly to OutputFrm (instead of to a StringList). git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7453 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../lazstats/docs/HelpNDoc/LazStats.hnd | Bin 10403840 -> 10403840 bytes .../forms/analysis/comparisons/ancovaunit.pas | 2 - .../forms/analysis/comparisons/glmunit.pas | 229 +++++++++--------- 3 files changed, 114 insertions(+), 117 deletions(-) diff --git a/applications/lazstats/docs/HelpNDoc/LazStats.hnd b/applications/lazstats/docs/HelpNDoc/LazStats.hnd index 68c05666d7ae3e0b9dc32e0ca5b69be6fb9b1fe6..0eabaafbcb7986550c469f734c75a62586f486c1 100644 GIT binary patch delta 905 zcmXZWNla655C-tq*HT_tq_`EKKnqet#TFD5*CG`ZC<203WqFDUMNvQzS8P!RH?+9$ zm!gDdLL%`n7kLmbCf+g8#KeOU6E7xUIC&u^ekLA%$v2tFmk9(G3;_rw>ADB3g}Uyb z+N~ioO_^9t;oxMu-FjOb`Xp5CgHW2;#sD@vs<{z*1NS%fSK(@UJ@& zlE4bdkOHY-(_&oq-*_Njvo|Z>A~m zis{yHy!bU&ZWXFOoG&VptFpv=hc8yl)RigPcz=4aOrdlNt)x)KM97gFWvnhTc)hX+ z4iDM-d|?M^M7LPqJAVx(Nad8pW=v}#4h3-;#}hO z#2bk7h&K{%BHm1#PrQYAEAcks?Zi8XcM`ja3y60S7ZQ7jcM}&87ZdLx-b-9UTuNL< z>?JNI-bY+PTuEF-yq~z5xQ6%u@j+rA@gd^F6MV$;Szn!@7wUi`t?H)ucz%=cXv>CUpSHzDOrg+i# zF)mS5yeg}cufooRc(uzY!>)3#BD`wy1`&L!?-0pNx=my)uYD#8pXxc{!Pf(&W63T? z+MJrOf61_l(T2VfQJL$XCm&vOR;i-!b8%86=8VLqM`AOEW3D{2sk&4P1XK~e)2l~o z`dpZaS#V=E<{%q6$dxsHp22Z(YMO!3b469ZJ5~I%J1o*a;CY!Otlbf_7~RuuiYh}M zc;Q1H=3*Y^BOeP;06!LD5f)h@&`$<2ZpPoWv=d#u=Q&Ih;o`F5n_U2%`m;a2c(LAc{7$;|e-(71wYbHxNT7 zx^NS>(2X7l+(s|@a0hpBPu55Jg}diRfk{&giOOSN=(pJtzQ3!bIxf)ic16G-j=D5m NW_LK=Xk&k!@gFHDXrcfB diff --git a/applications/lazstats/source/forms/analysis/comparisons/ancovaunit.pas b/applications/lazstats/source/forms/analysis/comparisons/ancovaunit.pas index 83a24d117..e805e92e7 100644 --- a/applications/lazstats/source/forms/analysis/comparisons/ancovaunit.pas +++ b/applications/lazstats/source/forms/analysis/comparisons/ancovaunit.pas @@ -303,8 +303,6 @@ end; procedure TANCOVAfrm.FormCreate(Sender: TObject); begin Assert(OS3MainFrm <> nil); - if OutputFrm = nil then - Application.CreateForm(TOutputFrm, OutputFrm); if GraphFrm = nil then Application.CreateForm(TGraphFrm, GraphFrm); end; diff --git a/applications/lazstats/source/forms/analysis/comparisons/glmunit.pas b/applications/lazstats/source/forms/analysis/comparisons/glmunit.pas index f8a3ecc85..6fece61ab 100644 --- a/applications/lazstats/source/forms/analysis/comparisons/glmunit.pas +++ b/applications/lazstats/source/forms/analysis/comparisons/glmunit.pas @@ -198,11 +198,11 @@ type procedure PartIEntry; procedure PartIIEntry; procedure ModelIAnalysis(AReport: TStrings); - procedure ModelIIAnalysis; + procedure ModelIIAnalysis(AReport: TStrings); procedure ModelIIIAnalysis(AReport: TStrings); function CntIntActVecs(linestr : string) : integer; procedure GenInterVecs(linestr : string); - procedure CanCor(NLeft : integer; NRight : integer; GridPlace : IntDyneVec); + procedure CanCor(NLeft : integer; NRight : integer; GridPlace : IntDyneVec; AReport: TStrings); procedure UpdateBtnStates; public @@ -603,13 +603,13 @@ var begin if (NContDep = 0) and (NCatDep = 0) and (NReptDep = 0) then begin - MessageDlg('No variables selected.', mtError, [mbOK], 0); + ErrorMsg('No variables selected.'); exit; end; if (NContDep > 0) and (NReptDep > 0) then begin - MessageDlg('One cannot have both continuous and repeated dependent variables!', mtError, [mbOK], 0); + ErrorMsg('One cannot have both continuous and repeated dependent variables!'); exit; end; @@ -619,6 +619,7 @@ begin GetIDs; // get var. no.s of dependent and independent variables novars := GetVarCount; // get total no. of variables to generate AllocateGridMem; // create data array for values and codes + // Note, the Data Grid first subscript is row (subject) and second the var. if (NCatDep > 0) or (NContDep > 1) then model := 2 @@ -649,7 +650,7 @@ begin // Now, do the analyses case model of 1: ModelIAnalysis(lReport); // models with 1 dependent variable - 2: ModelIIAnalysis; // models with 2 or more dependent var.s + 2: ModelIIAnalysis(lReport); // models with 2 or more dependent var.s 3: ModelIIIAnalysis(lReport); // Repeated measures designs end; @@ -1187,7 +1188,7 @@ begin DynCorrelations(nvars, ColSelected, DataGrid, rmatrix, means, vars, StdDevs, ncases, 3); AReport.Add(''); - AReport.Add('======================================================================================='); + AReport.Add(DIVIDER); AReport.Add(''); if DescChk.Checked then @@ -1371,7 +1372,7 @@ begin DataGrid[i-1,gencount + vect - 1] := CodePattern[group,vect]; end; ReptIndepPos[vect-1] := gencount + vect - 1; - cellstring := format('p%d',[vect]); + cellstring := Format('p%d', [vect]); GenLabels[gencount + vect - 1] := cellstring; end; gencount := gencount + (max - min); // new no. of variables @@ -1701,7 +1702,7 @@ begin StdErrEst := sqrt(VarEst) else begin - MessageDlg('Error in computing variance estimate.', mtError, [mbOK], 0); + ErrorMsg('Error in computing variance estimate.'); StdErrEst := 0.0; end; if (R2 < 1.0) and (df2 > 0.0) then @@ -1765,7 +1766,7 @@ begin AReport.Add(' and Prob > F %10.3f', [FProbF]); AReport.Add(''); - AReport.Add('======================================================================================='); + AReport.Add(DIVIDER); AReport.Add(''); OldR2 := R2; @@ -1851,7 +1852,7 @@ begin for k := 0 to NRndVecIndep[index]-1 do begin ColSelected[NEntered] := RndIndepPos[index] + k; - Labels[NEntered] := Format('%s_%d',[RndIndepCode.Items[index], k+1]); + Labels[NEntered] := Format('%s_%d', [RndIndepCode.Items[index], k+1]); NEntered := NEntered + 1; end; end; @@ -1890,7 +1891,7 @@ begin StdErrEst := sqrt(VarEst) else begin - MessageDlg('Error in computing variance estimate.', mtError, [mbOk], 0); + ErrorMsg('Error in computing variance estimate.'); StdErrEst := 0.0; end; if (R2 < 1.0) and (df2 > 0.0) then F := (R2 / df1) / ((1.0-R2)/ df2) @@ -1945,7 +1946,7 @@ begin AReport.Add(' and Prob > F %10.3f', [FProbF]); AReport.Add(''); - AReport.Add('======================================================================================='); + AReport.Add(DIVIDER); AReport.Add(''); // setup for next block analysis @@ -1987,7 +1988,7 @@ begin end; AReport.Add(''); - AReport.Add('======================================================================================='); + AReport.Add(DIVIDER); AReport.Add(''); // Show Anova Results for fixed and/or covariates @@ -2016,7 +2017,7 @@ begin AReport.Add('%20s %4.0f %10.3f %10.3f', ['Residual', df2, SSres, VarEst]); AReport.Add('%20s %4d %10.3f', ['Total', totalobs-1, SSt]); AReport.Add(''); - AReport.Add('======================================================================================='); + AReport.Add(DIVIDER); AReport.Add(''); end; end; @@ -2046,7 +2047,7 @@ begin AReport.Add('%20s %4.0f %10.3f %10.3f', ['Residual', df2, SSres, VarEst]); AReport.Add('%20s %4d %10.3f', ['Total', totalobs-1, SSt]); AReport.Add(''); - AReport.Add('======================================================================================='); + AReport.Add(DIVIDER); AReport.Add(''); end; end; @@ -2074,7 +2075,7 @@ begin AReport.Add('%20s %4.0f %10.3f %10.3f', ['Residual', df2, SSres, VarEst]); AReport.Add('%20s %4d %10.3f', ['Total', totalobs-1, SSt]); AReport.Add(''); - AReport.Add('======================================================================================='); + AReport.Add(DIVIDER); AReport.Add(''); end; @@ -2093,13 +2094,12 @@ begin TypeISS := nil; end; -procedure TGLMFrm.ModelIIAnalysis; +procedure TGLMFrm.ModelIIAnalysis(AReport: TStrings); var block, i, j, NEntered, index, noblocks : integer; NLeft, NRight : integer; cellstring : string; labelstr : string; - begin NEntered := 0; OldR2 := 0; @@ -2252,7 +2252,7 @@ begin NRight := NEntered - NLeft; // call cancor routine for this block - cancor(NLeft,NRight,ColSelected); + CanCor(NLeft, NRight, ColSelected, AReport); end; // next block TypeIIProb := nil; @@ -2348,7 +2348,7 @@ begin for j := 0 to NFixVecIndep[index]-1 do begin ColSelected[NEntered] := FixedIndepPos[index] + j; - labelstr := format('%s_%d',[FixedIndepCode.Items.Strings[index],j+1]); + labelstr := Format('%s_%d', [FixedIndepCode.Items[index], j+1]); Labels[NEntered] := labelstr; NEntered := NEntered + 1; end; @@ -2368,7 +2368,7 @@ begin for j := 0 to NRndVecIndep[index]-1 do begin ColSelected[NEntered] := RndIndepPos[index] + j; - labelstr := format('%s_%d',[RndIndepCode.Items.Strings[index],j+1]); + labelstr := Format('%s_%d', [RndIndepCode.Items[index], j+1]); Labels[NEntered] := labelstr; NEntered := NEntered + 1; end; @@ -2390,7 +2390,7 @@ begin for j := 0 to NInteractVecs[i]-1 do begin ColSelected[NEntered] := InteractPos[i] + j; - labelstr := format('%s%d_%d',['IA',i+1,j+1]); + labelstr := Format('%s%d_%d', ['IA',i+1,j+1]); Labels[NEntered] := labelstr; NEntered := NEntered + 1; end; @@ -2408,7 +2408,7 @@ begin begin index := i; // index of covariate code ColSelected[NEntered] := CovIndepPos[index]; - labelstr := format('%s',[CovariateCode.Items.Strings[index]]); + labelstr := Format('%s', [CovariateCode.Items[index]]); Labels[NEntered] := labelstr; NEntered := NEntered + 1; break; @@ -2430,7 +2430,7 @@ begin StdErrEst := sqrt(VarEst) else begin - ShowMessage('ERROR! Error in computing variance estimate.'); + ErrorMsg('Error in computing variance estimate.'); StdErrEst := 0.0; end; @@ -2479,7 +2479,7 @@ begin AReport.Add('SS for %-10s: %10.3f',[effstr,TypeISS[block]]); AReport.Add('SS TOTAL: %10.3f',[SST]); AReport.Add(''); - AReport.Add('======================================================================================='); + AReport.Add(DIVIDER); AReport.Add(''); end; @@ -2522,7 +2522,7 @@ begin end; AReport.Add('%20s %4.0f %10.3f %10.3f', ['Error Between', dferrbetween, sserrbetween, mserrbetween]); AReport.Add(''); - AReport.Add('======================================================================================='); + AReport.Add(DIVIDER); AReport.Add(''); // Now, get within subject effects @@ -2635,7 +2635,7 @@ begin AReport.Add('SS for %-10s: %10.3f',[effstr, TypeIISS[block]]); AReport.Add('SS TOTAL: %10.3f',[SST]); AReport.Add(''); - AReport.Add('======================================================================================='); + AReport.Add(DIVIDER); AReport.Add(''); end; @@ -2670,7 +2670,7 @@ begin AReport.Add('%20s %4d %10.3f', ['TOTAL', totalobs-1, SST]); AReport.Add(''); - AReport.Add('======================================================================================='); + AReport.Add(DIVIDER); AReport.Add(''); // clean up the heap @@ -2954,7 +2954,7 @@ begin datagrid[m,col] := datagrid[m,pos1] * datagrid[m,pos2] * datagrid[m,pos3] * datagrid[m,pos4] * datagrid[m,pos5]; - cellstring := format('%s*%s*%s*%s*%s',[GenLabels[pos1], + cellstring := Format('%s*%s*%s*%s*%s',[GenLabels[pos1], GenLabels[pos2],GenLabels[pos3],GenLabels[pos4], GenLabels[pos5]]); GenLabels[col] := cellstring; @@ -2967,11 +2967,10 @@ begin end; // if listcnt = 3 end; -procedure TGLMFrm.CanCor(NLeft: integer; NRight: integer; GridPlace: IntDyneVec); -label cleanup; +procedure TGLMFrm.CanCor(NLeft: integer; NRight: integer; GridPlace: IntDyneVec; + AReport: TStrings); var i, j, k, count, a_size, b_size, no_factors, IER: integer; - outline: string; s, m, n, df1, df2, q, w, pcnt_extracted, trace : double; minroot, critical_prob, Lambda, Pillia : double; chisqr, HLTrace, chiprob, ftestprob, Roys, f, Hroot : double; @@ -3067,16 +3066,16 @@ begin selected[NLeft+i] := GridPlace[NLeft+i]; end; - OutputFrm.RichEdit.Clear; - OutputFrm.RichEdit.Lines.Add('CANONICAL CORRELATION ANALYSIS'); - OutputFrm.RichEdit.Lines.Add(''); + AReport.Add('CANONICAL CORRELATION ANALYSIS'); + AReport.Add(''); + count := NoCases; // Get means, standard deviations, etc. for total matrix - IER := Dyncorrelations(novars,selected,datagrid,bigmat,mean,variance,stddev,totalobs,3); - if (IER = 1)then + IER := DynCorrelations(novars,selected,datagrid,bigmat,mean,variance,stddev,totalobs,3); + if (IER = 1) then begin - ShowMessage('ERROR! Zero variance found for a variable-terminating'); - goto cleanup; + ErrorMsg('Zero variance found for a variable-terminating'); + exit; end; //partition matrix into quadrants @@ -3098,13 +3097,15 @@ begin if CorsChk.Checked then begin title := 'Left Correlation Matrix'; - MAT_PRINT(raa,NLeft,NLeft,title,a_vars,a_vars,totalobs); + MatPrint(raa, NLeft, NLeft, title, a_vars, a_vars, totalobs, AReport); title := 'Right Correlation Matrix'; - MAT_PRINT(rbb,NRight,NRight,title,b_vars,b_vars,totalobs); + MatPrint(rbb, NRight, NRight, title, b_vars, b_vars, totalobs, AReport); title := 'Left-Right Correlation Matrix'; - MAT_PRINT(rab,NLeft,NRight,title,a_vars,b_vars,totalobs); - OutputFrm.ShowModal; - OutputFrm.RichEdit.Clear; + MatPrint(rab, NLeft, NRight, title, a_vars, b_vars, totalobs, AReport); + + AReport.Add(''); + AReport.Add(DIVIDER); + AReport.Add(''); end; // get inverses of left and right hand matrices raa and rbb @@ -3117,7 +3118,7 @@ begin if CorsChk.Checked then begin title := 'Inverse of Left Matrix'; - MAT_PRINT(raainv,a_size,a_size,title,a_vars,a_vars,totalobs); + MatPrint(raainv, a_size, a_size, title, a_vars, a_vars, totalobs, AReport); end; for i := 0 to b_size-1 do @@ -3129,7 +3130,7 @@ begin if CorsChk.Checked then begin title := 'Inverse of Right Matrix'; - MAT_PRINT(rbbinv,b_size,b_size,title,b_vars,b_vars,totalobs); + MatPrint(rbbinv, b_size, b_size, title, b_vars, b_vars, totalobs, AReport); end; // get products of raainv x rab and the rbbinv x rba matrix @@ -3140,9 +3141,9 @@ begin for j := 0 to b_size-1 do second_prod[i,j] := 0.0; MatAxB(second_prod,raainv,rab,a_size,a_size,a_size,b_size,errorcode); title := 'Right Inverse x Right-Left Matrix'; - MAT_PRINT(first_prod,b_size,a_size,title,b_vars,a_vars,totalobs); + MatPrint(first_prod, b_size, a_size, title, b_vars, a_vars, totalobs, AReport); title := 'Left Inverse x Left-Right Matrix'; - MAT_PRINT(second_prod,a_size,b_size,title,a_vars,b_vars,totalobs); + MatPrint(second_prod, a_size, b_size, title, a_vars, b_vars, totalobs, AReport); //get characteristic equations matrix (product of last two product matrices //The product should yeild rows and cols representing the smaller of the two sets @@ -3150,9 +3151,11 @@ begin for j := 0 to b_size - 1 do char_equation[i,j] := 0.0; MatAxB(char_equation,first_prod,second_prod,b_size,a_size,a_size,b_size,errorcode); title := 'Canonical Function'; - MAT_PRINT(char_equation,b_size,b_size,title,CanLabels,CanLabels,totalobs); - OutputFrm.ShowModal; - OutputFrm.RichEdit.Clear; + MatPrint(char_equation, b_size, b_size, title, CanLabels, CanLabels, totalobs, AReport); + + AReport.Add(''); + AReport.Add(DIVIDER); + AReport.Add(''); // now get roots and vectors of the characteristic equation using // NonSymRoots routine @@ -3169,10 +3172,8 @@ begin pcnt_trace, trace, pcnt_extracted); - outline := format('Trace of the matrix:=%10.4f',[trace]); - OutputFrm.RichEdit.Lines.Add(outline); - outline := format('Percent of trace extracted: %10.4f',[pcnt_extracted]); - OutputFrm.RichEdit.Lines.Add(outline); + AReport.Add('Trace of the matrix: %10.4f', [trace]); + AReport.Add('Percent of trace extracted: %10.4f', [pcnt_extracted]); // Normalize smaller set weights and coumpute larger set weights for i := 0 to b_size - 1 do // transpose eigenvectors @@ -3266,24 +3267,20 @@ begin end; // Print remaining results - OutputFrm.RichEdit.Lines.Add(''); - OutputFrm.RichEdit.Lines.Add(''); - outline := ' Canonical R Root % Trace Chi-Sqr D.F. Prob.'; - OutputFrm.RichEdit.Lines.Add(outline); + AReport.Add(''); + AReport.Add(''); + AReport.Add(' Canonical R Root % Trace Chi-Sqr D.F. Prob.'); for i := 0 to b_size-1 do - begin - outline := format('%2d %10.6f %8.3f %7.3f %8.3f %2d %8.3f', - [i+1, sqrt(roots[i]), roots[i], pcnt_trace[i], root_chi[i], root_df[i], chi_prob[i]]); - OutputFrm.RichEdit.Lines.Add(outline); - end; + AReport.Add('%2d %10.6f %8.3f %7.3f %8.3f %2d %8.3f', + [i+1, sqrt(roots[i]), roots[i], pcnt_trace[i], root_chi[i], root_df[i], chi_prob[i]]); + chisqr := -ln(Lambda) * (count - 1.0 - 0.5 * (a_size + b_size - 1.0)); chiprob := 1.0 - chisquaredprob(chisqr,a_size * b_size); - OutputFrm.RichEdit.Lines.Add(''); - OutputFrm.RichEdit.Lines.Add('Overall Tests of Significance:'); - OutputFrm.RichEdit.Lines.Add(' Statistic Approx. Stat. Value D.F. Prob.>Value'); - outline := format('Wilk''s Lambda Chi-Squared %10.4f %3d %6.4f', - [chisqr,a_size * b_size,chiprob]); - OutputFrm.RichEdit.Lines.Add(outline); + AReport.Add(''); + AReport.Add('Overall Tests of Significance:'); + AReport.Add(' Statistic Approx. Stat. Value D.F. Prob.>Value'); + AReport.Add('Wilk''s Lambda Chi-Squared %10.4f %3d %6.4f', [chisqr,a_size * b_size,chiprob]); + s := b_size; m := 0.5 * (a_size - b_size - 1); n := 0.5 * (count - b_size - a_size - 2); @@ -3291,78 +3288,80 @@ begin df1 := s * (2.0 * m + s + 1.0); df2 := 2.0 * ( s * n + 1.0); ftestprob := probf(f,df1,df2); - outline := format('Hotelling-Lawley Trace F-Test %10.4f %2.0f %2.0f %6.4f', - [f, df1,df2, ftestprob]); - OutputFrm.RichEdit.Lines.Add(outline); + AReport.Add('Hotelling-Lawley Trace F-Test %10.4f %2.0f %2.0f %6.4f', [f, df1, df2, ftestprob]); + df2 := s * (2.0 * n + s + 1.0); f := (Pillia / (s - Pillia)) * ( (2.0 * n + s +1.0) / (2.0 * m + s + 1.0) ); ftestprob := probf(f,df1,df2); - outline := format('Pillai Trace F-Test %10.4f %2.0f %2.0f %6.4f', - [f, df1,df2, ftestprob]); - OutputFrm.RichEdit.Lines.Add(outline); + AReport.Add('Pillai Trace F-Test %10.4f %2.0f %2.0f %6.4f', [f, df1, df2, ftestprob]); + Roys := Roys * (count - 1 - a_size + b_size)/ a_size ; df1 := a_size; df2 := count - 1 - a_size + b_size; ftestprob := probf(Roys,df1,df2); - outline := format('Roys Largest Root F-Test %10.4f %2.0f %2.0f %6.4f', - [Roys, df1, df2, ftestprob]); - OutputFrm.RichEdit.Lines.Add(outline); - OutputFrm.ShowModal; - OutputFrm.RichEdit.Clear; + AReport.Add('Roys Largest Root F-Test %10.4f %2.0f %2.0f %6.4f', [Roys, df1, df2, ftestprob]); + + AReport.Add(''); + AReport.Add(DIVIDER); + AReport.Add(''); if CorsChk.Checked then begin title := 'Eigenvectors'; - MAT_PRINT(eigenvectors,b_size,b_size,title,CanLabels,CanLabels,totalobs); - OutputFrm.ShowModal(); - OutputFrm.RichEdit.Clear; + MatPrint(eigenvectors, b_size, b_size, title, CanLabels, CanLabels, totalobs, AReport); + AReport.Add(''); + AReport.Add(DIVIDER); + AReport.Add(''); end; title := 'Standardized Right Side Weights'; - MAT_PRINT(norm_a,a_size,b_size,title,RowLabels,CanLabels,totalobs); + MatPrint(norm_a, a_size, b_size, title, RowLabels, CanLabels, totalobs, AReport); + title := 'Standardized Left Side Weights'; - MAT_PRINT(norm_b,b_size,b_size,title,ColLabels,CanLabels,totalobs); - OutputFrm.ShowModal; + MatPrint(norm_b, b_size, b_size, title, ColLabels, CanLabels, totalobs, AReport); + + AReport.Add(''); + AReport.Add(DIVIDER); + AReport.Add(''); + title := 'Raw Right Side Weights'; - MAT_PRINT(raw_a,a_size,b_size,title,RowLabels,CanLabels,totalobs); + MatPrint(raw_a, a_size, b_size, title, RowLabels, CanLabels, totalobs, AReport); + title := 'Raw Left Side Weights'; - MAT_PRINT(raw_b,b_size,b_size,title,ColLabels,CanLabels,totalobs); - OutputFrm.ShowModal; + MatPrint(raw_b, b_size, b_size, title, ColLabels, CanLabels, totalobs, AReport); + + AReport.Add(''); + AReport.Add(DIVIDER); + AReport.Add(''); + title := 'Right Side Correlations with Function'; - MAT_PRINT(a_cors,a_size,b_size,title,RowLabels,CanLabels,totalobs); + MatPrint(a_cors, a_size, b_size, title, RowLabels, CanLabels, totalobs, AReport); title := 'Left Side Correlations with Function'; - MAT_PRINT(b_cors,b_size,b_size,title,ColLabels,CanLabels,totalobs); - OutputFrm.ShowModal; - OutputFrm.RichEdit.Clear; + MatPrint(b_cors, b_size, b_size, title, ColLabels, CanLabels, totalobs, AReport); + + AReport.Add(''); + AReport.Add(DIVIDER); + AReport.Add(''); if CorsChk.Checked then begin - outline := 'Redundancy Analysis for Right Side Variables'; - OutputFrm.RichEdit.Lines.Add(outline); - OutputFrm.RichEdit.Lines.Add(''); - outline := ' Variance Prop. Redundancy'; - OutputFrm.RichEdit.Lines.Add(outline); + AReport.Add('Redundancy Analysis for Right Side Variables'); + AReport.Add(''); + AReport.Add(' Variance Prop. Redundancy'); for i := 0 to b_size-1 do - begin - outline := format('%10d %10.5f %10.5f',[i,pv_a[i],rd_a[i]]); - OutputFrm.RichEdit.Lines.Add(outline); - end; - OutputFrm.RichEdit.Lines.Add(''); - outline := 'Redundancy Analysis for Left Side Variables'; - OutputFrm.RichEdit.Lines.Add(outline); - outline := ' Variance Prop. Redundancy'; - OutputFrm.RichEdit.Lines.Add(outline); + AReport.Add('%10d %10.5f %10.5f', [i, pv_a[i], rd_a[i]]); + AReport.Add(''); + AReport.Add('Redundancy Analysis for Left Side Variables'); + AReport.Add(' Variance Prop. Redundancy'); for i := 0 to b_size-1 do - begin - outline := format('%10d %10.5f %10.5f',[i,pv_b[i],rd_b[i]]); - OutputFrm.RichEdit.Lines.Add(outline); - end; - OutputFrm.ShowModal; - OutputFrm.RichEdit.Clear; + AReport.Add('%10d %10.5f %10.5f', [i, pv_b[i], rd_b[i]]); + + AReport.Add(''); + AReport.Add(DIVIDER); + AReport.Add(''); end; //------------- Now, clean up memory mess ---------------------------- -cleanup: selected := nil; ColLabels := nil; RowLabels := nil;