diff --git a/applications/lazstats/source_orig/CORSIMUNIT.lfm b/applications/lazstats/source_orig/CORSIMUNIT.lfm new file mode 100644 index 000000000..d35b18544 --- /dev/null +++ b/applications/lazstats/source_orig/CORSIMUNIT.lfm @@ -0,0 +1,148 @@ +object CorSimFrm: TCorSimFrm + Left = 154 + Height = 437 + Top = 108 + Width = 764 + Caption = 'Correlation Simulation' + ClientHeight = 437 + ClientWidth = 764 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Image1: TImage + Left = 0 + Height = 388 + Top = 0 + Width = 764 + Align = alClient + end + object Panel1: TPanel + Left = 0 + Height = 49 + Top = 388 + Width = 764 + Align = alBottom + ClientHeight = 49 + ClientWidth = 764 + TabOrder = 0 + object Label1: TLabel + Left = 7 + Height = 14 + Top = 18 + Width = 40 + Caption = 'Mean X:' + ParentColor = False + end + object Label2: TLabel + Left = 104 + Height = 14 + Top = 18 + Width = 40 + Caption = 'Mean Y:' + ParentColor = False + end + object Label3: TLabel + Left = 208 + Height = 14 + Top = 18 + Width = 50 + Caption = 'Std.Dev.X' + ParentColor = False + end + object Label4: TLabel + Left = 320 + Height = 14 + Top = 18 + Width = 50 + Caption = 'Std.Dev.Y' + ParentColor = False + end + object Label5: TLabel + Left = 425 + Height = 14 + Top = 18 + Width = 34 + Caption = 'Cor.XY' + ParentColor = False + end + object Label6: TLabel + Left = 520 + Height = 14 + Top = 20 + Width = 34 + Caption = 'N Size:' + ParentColor = False + end + object MeanX: TEdit + Left = 50 + Height = 21 + Top = 13 + Width = 43 + OnKeyPress = MeanXKeyPress + TabOrder = 0 + Text = 'MeanX' + end + object MeanY: TEdit + Left = 152 + Height = 21 + Top = 13 + Width = 46 + OnKeyPress = MeanYKeyPress + TabOrder = 1 + Text = 'MeanY' + end + object SDX: TEdit + Left = 262 + Height = 21 + Top = 13 + Width = 50 + OnKeyPress = SDXKeyPress + TabOrder = 2 + Text = 'SDX' + end + object SDY: TEdit + Left = 376 + Height = 21 + Top = 13 + Width = 39 + OnKeyPress = SDYKeyPress + TabOrder = 3 + Text = 'SDY' + end + object Corr: TEdit + Left = 464 + Height = 21 + Top = 12 + Width = 44 + OnKeyPress = CorrKeyPress + TabOrder = 4 + Text = 'Corr' + end + object ComputeBtn: TButton + Left = 616 + Height = 26 + Top = 13 + Width = 65 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 5 + end + object ReturnBtn: TButton + Left = 688 + Height = 26 + Top = 12 + Width = 66 + Caption = 'Return' + ModalResult = 1 + TabOrder = 6 + end + object Nobs: TEdit + Left = 560 + Height = 21 + Top = 13 + Width = 40 + OnKeyPress = NobsKeyPress + TabOrder = 7 + Text = 'Nobs' + end + end +end diff --git a/applications/lazstats/source_orig/CORSIMUNIT.lrs b/applications/lazstats/source_orig/CORSIMUNIT.lrs new file mode 100644 index 000000000..329075d8c --- /dev/null +++ b/applications/lazstats/source_orig/CORSIMUNIT.lrs @@ -0,0 +1,34 @@ +LazarusResources.Add('TCorSimFrm','FORMDATA',[ + 'TPF0'#10'TCorSimFrm'#9'CorSimFrm'#4'Left'#3#154#0#6'Height'#3#181#1#3'Top'#2 + +'l'#5'Width'#3#252#2#7'Caption'#6#22'Correlation Simulation'#12'ClientHeight' + +#3#181#1#11'ClientWidth'#3#252#2#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#8 + +'0.9.28.2'#0#6'TImage'#6'Image1'#4'Left'#2#0#6'Height'#3#132#1#3'Top'#2#0#5 + +'Width'#3#252#2#5'Align'#7#8'alClient'#0#0#6'TPanel'#6'Panel1'#4'Left'#2#0#6 + +'Height'#2'1'#3'Top'#3#132#1#5'Width'#3#252#2#5'Align'#7#8'alBottom'#12'Clie' + +'ntHeight'#2'1'#11'ClientWidth'#3#252#2#8'TabOrder'#2#0#0#6'TLabel'#6'Label1' + +#4'Left'#2#7#6'Height'#2#14#3'Top'#2#18#5'Width'#2'('#7'Caption'#6#7'Mean X:' + +#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2'h'#6'Height'#2#14#3'Top' + +#2#18#5'Width'#2'('#7'Caption'#6#7'Mean Y:'#11'ParentColor'#8#0#0#6'TLabel'#6 + +'Label3'#4'Left'#3#208#0#6'Height'#2#14#3'Top'#2#18#5'Width'#2'2'#7'Caption' + +#6#9'Std.Dev.X'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#3'@'#1#6'H' + +'eight'#2#14#3'Top'#2#18#5'Width'#2'2'#7'Caption'#6#9'Std.Dev.Y'#11'ParentCo' + +'lor'#8#0#0#6'TLabel'#6'Label5'#4'Left'#3#169#1#6'Height'#2#14#3'Top'#2#18#5 + +'Width'#2'"'#7'Caption'#6#6'Cor.XY'#11'ParentColor'#8#0#0#6'TLabel'#6'Label6' + +#4'Left'#3#8#2#6'Height'#2#14#3'Top'#2#20#5'Width'#2'"'#7'Caption'#6#7'N Siz' + +'e:'#11'ParentColor'#8#0#0#5'TEdit'#5'MeanX'#4'Left'#2'2'#6'Height'#2#21#3'T' + +'op'#2#13#5'Width'#2'+'#10'OnKeyPress'#7#13'MeanXKeyPress'#8'TabOrder'#2#0#4 + +'Text'#6#5'MeanX'#0#0#5'TEdit'#5'MeanY'#4'Left'#3#152#0#6'Height'#2#21#3'Top' + +#2#13#5'Width'#2'.'#10'OnKeyPress'#7#13'MeanYKeyPress'#8'TabOrder'#2#1#4'Tex' + +'t'#6#5'MeanY'#0#0#5'TEdit'#3'SDX'#4'Left'#3#6#1#6'Height'#2#21#3'Top'#2#13#5 + +'Width'#2'2'#10'OnKeyPress'#7#11'SDXKeyPress'#8'TabOrder'#2#2#4'Text'#6#3'SD' + +'X'#0#0#5'TEdit'#3'SDY'#4'Left'#3'x'#1#6'Height'#2#21#3'Top'#2#13#5'Width'#2 + +''''#10'OnKeyPress'#7#11'SDYKeyPress'#8'TabOrder'#2#3#4'Text'#6#3'SDY'#0#0#5 + +'TEdit'#4'Corr'#4'Left'#3#208#1#6'Height'#2#21#3'Top'#2#12#5'Width'#2','#10 + +'OnKeyPress'#7#12'CorrKeyPress'#8'TabOrder'#2#4#4'Text'#6#4'Corr'#0#0#7'TBut' + +'ton'#10'ComputeBtn'#4'Left'#3'h'#2#6'Height'#2#26#3'Top'#2#13#5'Width'#2'A' + +#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#5#0#0 + +#7'TButton'#9'ReturnBtn'#4'Left'#3#176#2#6'Height'#2#26#3'Top'#2#12#5'Width' + +#2'B'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#6#0#0#5'TEdit' + +#4'Nobs'#4'Left'#3'0'#2#6'Height'#2#21#3'Top'#2#13#5'Width'#2'('#10'OnKeyPre' + +'ss'#7#12'NobsKeyPress'#8'TabOrder'#2#7#4'Text'#6#4'Nobs'#0#0#0#0 +]); diff --git a/applications/lazstats/source_orig/COXREGUNIT.PAS b/applications/lazstats/source_orig/COXREGUNIT.PAS new file mode 100644 index 000000000..fde8127b0 --- /dev/null +++ b/applications/lazstats/source_orig/COXREGUNIT.PAS @@ -0,0 +1,571 @@ +unit CoxRegUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, Globals, MainUnit, MatrixLib, OutPutUnit, + FunctionsLib, Math; + + +type + + { TCoxRegFrm } + + TCoxRegFrm = class(TForm) + InBtn: TBitBtn; + OutBtn: TBitBtn; + DepInBtn: TBitBtn; + DepOutBtn: TBitBtn; + StatusInBtn: TBitBtn; + StatusOutBtn: TBitBtn; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + DescChk: TCheckBox; + MaxItsEdit: TEdit; + Label5: TLabel; + ProbsChk: TCheckBox; + ItersChk: TCheckBox; + DepVar: TEdit; + GroupBox1: TGroupBox; + StatusEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + BlockList: TListBox; + Label3: TLabel; + Label4: TLabel; + VarList: TListBox; + 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 StatusInBtnClick(Sender: TObject); + procedure StatusOutBtnClick(Sender: TObject); + function ChiSq(x : double; n : integer) : double; + function Norm(z : double): double; + function ix(j, k, nCols : integer): integer; + + private + { private declarations } + public + { public declarations } + end; + +var + CoxRegFrm: TCoxRegFrm; + +implementation + +{ TCoxRegFrm } + +procedure TCoxRegFrm.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; + ProbsChk.Checked := true; + DescChk.Checked := true; + DepVar.Text := ''; + StatusEdit.Text := ''; + StatusInBtn.Enabled := true; + StatusOutBtn.Enabled := false; + MaxItsEdit.Text := '20'; +end; + +procedure TCoxRegFrm.StatusInBtnClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + StatusEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + StatusOutBtn.Enabled := true; + StatusInBtn.Enabled := false; +end; + +procedure TCoxRegFrm.StatusOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(StatusEdit.Text); + StatusEdit.Text := ''; + StatusInBtn.Enabled := true; +end; + +procedure TCoxRegFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(Self); +end; + +procedure TCoxRegFrm.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 TCoxRegFrm.ComputeBtnClick(Sender: TObject); +Label CleanUp; +var + i, j, k, l : integer; + indx : integer; + title : string; + cellstring : string; + outline : string; + nR : integer; // no. independent variables + ColNoSelected : IntDyneVec; + nC : integer; // no. cases + nP : integer; // survival time variable + nS : integer; // survival status variable + zX : double; + v : double; + Eps : double; + iBig : integer; + LLp, LL : double; + LLn : double; + s0 : double; + StatI : double; + Sf : double; + RowLabels, ColLabels : StrDyneVec; + CSq : double; // chi square statistic + prob : double; // probability of chi square + SurvT : DblDyneVec; + Stat : DblDyneVec; + Dupl : DblDyneVec; + Alpha : DblDyneVec; + a : DblDyneVec; + b : DblDyneVec; + s1 : DblDyneVec; + s2 : DblDyneVec; + s : DblDyneVec; + Av : DblDyneVec; + SD : DblDyneVec; + SE : DblDyneVec; + x : DblDyneVec; // data matrix for independent variables + Lo95 : double; + Hi95 : double; + d : double; + iters : integer; + +begin + OutPutFrm.RichEdit.Clear; +// OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify; + OutPutFrm.RichEdit.Lines.Add('Cox Proportional Hazards Survival Regression Adapted from John C. Pezzullo'); + OutPutFrm.RichEdit.Lines.Add('Java program at http://members.aol.com/johnp71/prophaz.html'); + + { get independent item columns } + nR := BlockList.Items.Count; + nC := NoCases; + SetLength(ColNoSelected,nR + 2); + SetLength(RowLabels,nR + 2); + SetLength(ColLabels,nR + 2); + if nR < 1 then + begin + ShowMessage('ERROR! No independent variables selected.'); + goto CleanUp; + end; + + for i := 1 to nR 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 survival time variable column and survival status var. column } + if DepVar.Text = '' then + begin + ShowMessage('Error! No Survival time variable selected.'); + goto CleanUp; + end; + if StatusEdit.Text = '' then + begin + ShowMessage('Error! No Survival Status variable selected.'); + goto Cleanup; + end; + nP := nR + 1; + nS := nP + 1; + for j := 1 to NoVariables do + begin + if DepVar.Text = OS3MainFrm.DataGrid.Cells[j,0] then + begin + ColNoSelected[nP-1] := j; + RowLabels[nP-1] := OS3MainFrm.DataGrid.Cells[j,0]; + ColLabels[nP-1] := RowLabels[nP-1]; + end; + if StatusEdit.Text = OS3MainFrm.DataGrid.Cells[j,0] then + begin + ColNoSelected[nS-1] := j; + RowLabels[nS-1] := OS3MainFrm.DataGrid.Cells[j,0]; + ColLabels[nS-1] := RowLabels[nS-1]; + end; + end; + + SetLength(SurvT,nC + 1); + SetLength(Stat,nC + 1); + SetLength(Dupl,nC + 1); + SetLength(Alpha,nC + 1); + SetLength(x,(nC + 1) * (nR + 1)); + SetLength(b,nC + 1); + SetLength(a,(nR + 1) * (nR + 1)); + SetLength(s1,nR + 1); + SetLength(s2,(nR + 1) * (nR + 1)); + SetLength(s,nR + 1); + SetLength(Av,nR + 1); + SetLength(SD,nR + 1); + SetLength(SE,nR + 1); + + // get data + for i := 0 to nC - 1 do + begin + indx := ix(i,0,nR+1); + X[indx] := 1; + for j := 0 to nR-1 do + begin + indx := ColNoSelected[j]; + zX := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[indx,i+1])); + indx := ix(i,j,nR); + x[indx] := zX; + Av[j] := Av[j] + zX; + SD[j] := SD[j] + (zX * zX); + end; + // get survival time + indx := ColNoSelected[nP-1]; + zX := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[indx,i+1])); + SurvT[i] := zX; + // get survival status + indx := ColNoSelected[nS-1]; + zX := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[indx,i+1])); + Stat[i] := zX; + end; // next case i + + // print descriptive statistics + OutPutFrm.RichEdit.Lines.Add(''); + if DescChk.Checked then + begin + OutPutFrm.RichEdit.Lines.Add('Descriptive Statistics'); + OutPutFrm.RichEdit.Lines.Add('Variable Label Average Std.Dev.'); + end; + for j := 0 to nR-1 do + begin + Av[j] := Av[j] / nC; + SD[j] := SD[j] / nC; + SD[j] := sqrt( abs(SD[j] - Av[j] * Av[j])); + if DescChk.Checked then + begin + outline := format(' %3d %15s %10.4f %10.4f',[j+1,RowLabels[j],Av[j],SD[j]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + OutPutFrm.RichEdit.Lines.Add(''); + + d := 0.0; + Eps := 1.0 / 1024.0; + for i := 0 to nC-2 do + begin + iBig := i; + for j := i+1 to nC-1 do + begin + if (SurvT[j] - Eps * Stat[j]) > (SurvT[iBig]-Eps * Stat[iBig]) then + iBig := j; + end; + if iBig <> i then + begin + v := SurvT[i]; + SurvT[i] := SurvT[iBig]; + SurvT[iBig] := v; + v := Stat[i]; + Stat[i] := Stat[iBig]; + Stat[iBig] := v; + for j := 0 to nR-1 do + begin + v := x[ix(i,j,nR)]; + x[ix(i,j,nR)] := x[ix(iBig,j,nR)]; + x[ix(iBig,j,nR)] := v; + end; + end; + end; + + if Stat[0] > 0 then Stat[0] := Stat[0] + 2; + for i := 1 to nC-1 do + begin + if (Stat[i] > 0) and ((Stat[i-1] = 0) or (SurvT[i-1] <> SurvT[i])) then + Stat[i] := Stat[i] + 2; + end; + if Stat[nC-1] > 0 then Stat[nC-1] := Stat[nC-1] + 4; + for i := nC-2 downto 0 do + begin + if (Stat[i] > 0) and ((Stat[i+1] = 0) or (SurvT[i+1] <> Survt[i])) then + Stat[i] := Stat[i] + 4; + end; + for i := 0 to nC-1 do + begin + for j := 0 to nR-1 do + begin + x[ix(i,j,nR)] := (x[ix(i,j,nR)] - Av[j]) / SD[j]; + end; + end; + if ItersChk.Checked then OutPutFrm.RichEdit.Lines.Add('Iteration History...'); + for j := 0 to nR-1 do b[j] := 0; + LLp := 2.0e30; + LL := 1.0e30; + + // start iterations + iters := 0; + while (Abs(LLp-LL) > 0.0001) do + begin + iters := iters + 1; + if iters > StrToInt(MaxItsEdit.Text) then break; + LLp := LL; + LL := 0.0; + s0 := 0.0; + for j := 0 to nR-1 do + begin + s1[j] := 0.0; + a[ix(j,nR,nR+1)] := 0.0; + for k := 0 to nR-1 do + begin + s2[ix(j,k,nR)] := 0.0; + a[ix(j,k,nR+1)] := 0.0; + end; + end; + for i := 0 to nC-1 do + begin + Alpha[i] := 1.0; + v := 0.0; + for j := 0 to nR-1 do v := v + b[j] * x[ix(i,j,nR)]; + v := exp(v); + s0 := s0 + v; + for j := 0 to nR-1 do + begin + s1[j] := s1[j] + x[ix(i,j,nR)] * v; + for k := 0 to nR-1 do + s2[ix(j,k,nR)] := s2[ix(j,k,nR)] + x[ix(i,j,nR)] * x[ix(i,k,nR)] * v; + end; + StatI := Stat[i]; + if (StatI = 2) or (StatI = 3) or (StatI = 6) or (StatI = 7) then + begin + d := 0.0; + for j := 0 to nR-1 do s[j] := 0.0; + end; + if (StatI = 1) or (StatI = 3) or (StatI = 5) or (StatI = 7) then + begin + d := d + 1; + for j := 0 to nR-1 do s[j] := s[j] + x[ix(i,j,nR)]; + end; + if (StatI = 4) or (StatI = 5) or (StatI = 6) or (StatI = 7) then + begin + for j := 0 to nR-1 do + begin + LL := LL + s[j] * b[j]; + a[ix(j,nR,nR+1)] := a[ix(j,nR,nR+1)] + s[j] - d * s1[j] / s0; + for k := 0 to nR-1 do + begin + a[ix(j,k,nR+1)] := a[ix(j,k,nR+1)] + d * (s2[ix(j,k,nR)] / s0 - + s1[j] * s1[k] / (s0 * s0)); + end; + end; + LL := LL - d * Ln(s0); + if d = 1 then Alpha[i] := Power((1.0 - v / s0),(1.0 / v)) + else Alpha[i] := exp(-d / s0); + end; + end; + LL := -2.0 * LL; + outline := format('-2 Log Likelihood = %10.4f',[LL]); + if iters = 1 then + begin + LLn := LL; + if ItersChk.Checked then + outline := outline + ' (Null Model)'; + end; + if ItersChk.Checked then + OutPutFrm.RichEdit.Lines.Add(outline); + for i := 0 to nR-1 do + begin + v := a[ix(i,i,nR+1)]; + a[ix(i,i,nR+1)] := 1.0; + for k := 0 to nR do + a[ix(i,k,nR+1)] := a[ix(i,k,nR+1)] / v; + for j := 0 to nR-1 do + begin + if i <> j then + begin + v := a[ix(j,i,nR+1)]; + a[ix(j,i,nR+1)] := 0.0; + for k := 0 to nR do + a[ix(j,k,nR+1)] := a[ix(j,k,nR+1)] - v * a[ix(i,k,nR+1)]; + end; + end; + end; + for j := 0 to nR-1 do b[j] := b[j] + a[ix(j,nR,nR+1)]; + end; + + OutPutFrm.RichEdit.Lines.Add('Converged'); + Csq := LLn - LL; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Overall Model Fit...'); + if Csq > 0.0 then prob := ChiSq(Csq,nR) else prob := 1.0; + outline := format('Chi Square = %8.4f with d.f. %d and probability = %8.4f',[Csq,nR,prob]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Coefficients, Std Errs, Signif, and Confidence Intervals'); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Var Coeff. StdErr p Lo95% Hi95%'); + for j := 0 to nR-1 do + begin + b[j] := b[j] / SD[j]; + SE[j] := sqrt(a[ix(j,j,nR+1)]) / SD[j]; + prob := Norm(Abs(b[j] / SE[j])); + Lo95 := b[j] - 1.96 * SE[j]; + Hi95 := b[j] + 1.96 * SE[j]; + outline := format('%10s %10.4f %10.4f %8.4f %8.4f %8.4f', + [RowLabels[j],b[j],SE[j],prob,Lo95,Hi95]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Risk Ratios and Confidence Intervals'); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Variable Risk Ratio Lo95% Hi95%'); + for j := 0 to nR-1 do + begin + outline := format('%10s %10.4f %10.4f %10.4f', + [RowLabels[j],exp(b[j]),exp(b[j]-1.96*SE[j]),exp(b[j]+1.96*SE[j])]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + if ProbsChk.Checked then + OutPutFrm.RichEdit.Lines.Add('Baseline Survivor Function (at predictor means)...'); + SF := 1.0; + for i := nC-1 downto 0 do + begin + Sf := Sf * Alpha[i]; + if Alpha[i] < 1.0 then + begin + if ProbsChk.Checked then + begin + outline := format('%10.4f %10.4f',[SurvT[i],Sf]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + end; + OutPutFrm.ShowModal; + +cleanup: + SurvT := nil; + Stat := nil; + Dupl := nil; + Alpha := nil; + x := nil; + b := nil; + a := nil; + s1 := nil; + s2 := nil; + s := nil; + Av := nil; + SD := nil; + SE := nil; + RowLabels := nil; + ColLabels := nil; + ColNoSelected := nil; +end; + +procedure TCoxRegFrm.DepOutBtnClick(Sender: TObject); +begin + VarList.Items.Add(DepVar.Text); + DepVar.Text := ''; + DepInBtn.Enabled := true; +end; + +procedure TCoxRegFrm.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 TCoxRegFrm.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; + +function TCoxRegFrm.ChiSq(x : double; n : integer) : double; +var + p, t, a : double; + k : integer; + +begin + p := exp(-0.5 * x); + if n mod 2 = 1 then p := p * sqrt(2 * x / Pi); + k := n; + while K >= 2 do + begin + p := p * x / k; + k := k - 2; + end; + t := p; + a := n; + while t > 0.000001 * p do + begin + a := a + 2; + t := t * x / a; + p := p + t; + end; + ChiSq := (1 - p); +end; +//------------------------------------------------------------------- + +function TCoxRegFrm.Norm(z : double): double; +begin + Norm := ChiSq(z * z, 1); +end; +//------------------------------------------------------------------- + +function TCoxRegFrm.ix(j, k, nCols : integer): integer; +begin + ix := j * nCols + k; +end; + +initialization + {$I coxregunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/COXREGUNIT.lfm b/applications/lazstats/source_orig/COXREGUNIT.lfm new file mode 100644 index 000000000..e739969b4 --- /dev/null +++ b/applications/lazstats/source_orig/COXREGUNIT.lfm @@ -0,0 +1,430 @@ +object CoxRegFrm: TCoxRegFrm + Left = 134 + Height = 349 + Top = 98 + Width = 607 + Caption = 'Cox Proportional Hazards Survival Regression' + ClientHeight = 349 + ClientWidth = 607 + OnShow = FormShow + LCLVersion = '0.9.26.2' + object Label1: TLabel + Left = 7 + Height = 14 + Top = 2 + Width = 83 + Caption = 'Avaialbe Variable' + ParentColor = False + end + object Label2: TLabel + Left = 233 + Height = 14 + Top = 5 + Width = 109 + Caption = 'Independent Variables' + ParentColor = False + end + object Label3: TLabel + Left = 232 + Height = 14 + Top = 168 + Width = 105 + Caption = 'Survival Time Variable' + ParentColor = False + end + object Label4: TLabel + Left = 230 + Height = 14 + Top = 270 + Width = 114 + Caption = 'Survival Status Variable' + ParentColor = False + end + object Label5: TLabel + Left = 408 + Height = 14 + Top = 113 + Width = 105 + Caption = 'Maximum Interations:' + ParentColor = False + end + object VarList: TListBox + Left = 5 + Height = 319 + Top = 17 + Width = 180 + MultiSelect = True + TabOrder = 0 + end + object InBtn: TBitBtn + Left = 193 + Height = 29 + Top = 16 + 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 = 1 + end + object OutBtn: TBitBtn + Left = 193 + Height = 29 + Top = 48 + 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 = 2 + end + object DepInBtn: TBitBtn + Left = 193 + Height = 29 + Top = 168 + 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 = 3 + end + object DepOutBtn: TBitBtn + Left = 193 + Height = 29 + Top = 200 + 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 = 4 + end + object StatusInBtn: TBitBtn + Left = 193 + Height = 29 + Top = 272 + 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 = StatusInBtnClick + TabOrder = 5 + end + object StatusOutBtn: TBitBtn + Left = 193 + Height = 29 + Top = 304 + 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 = StatusOutBtnClick + TabOrder = 6 + end + object BlockList: TListBox + Left = 231 + Height = 129 + Top = 21 + Width = 168 + TabOrder = 7 + end + object DepVar: TEdit + Left = 232 + Height = 23 + Top = 183 + Width = 167 + TabOrder = 8 + Text = 'DepVar' + end + object StatusEdit: TEdit + Left = 230 + Height = 22 + Top = 287 + Width = 168 + TabOrder = 9 + Text = 'StatusEdit' + end + object GroupBox1: TGroupBox + Left = 410 + Height = 95 + Top = 6 + Width = 186 + Caption = 'Options' + ClientHeight = 77 + ClientWidth = 182 + TabOrder = 10 + object DescChk: TCheckBox + Left = 7 + Height = 17 + Top = 1 + Width = 118 + Caption = 'Descriptive Statistics' + TabOrder = 0 + end + object ProbsChk: TCheckBox + Left = 7 + Height = 17 + Top = 24 + Width = 134 + Caption = 'Base Survival Functions' + TabOrder = 1 + end + object ItersChk: TCheckBox + Left = 7 + Height = 17 + Top = 47 + Width = 93 + Caption = 'Show Iterations' + TabOrder = 2 + end + end + object MaxItsEdit: TEdit + Left = 552 + Height = 19 + Top = 105 + Width = 42 + TabOrder = 11 + Text = 'MaxItsEdit' + end + object ResetBtn: TButton + Left = 464 + Height = 29 + Top = 143 + Width = 76 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 12 + end + object CancelBtn: TButton + Left = 464 + Height = 29 + Top = 192 + Width = 76 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 13 + end + object ComputeBtn: TButton + Left = 464 + Height = 29 + Top = 256 + Width = 76 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 14 + end + object ReturnBtn: TButton + Left = 464 + Height = 29 + Top = 304 + Width = 76 + Caption = 'Return' + ModalResult = 1 + TabOrder = 15 + end +end diff --git a/applications/lazstats/source_orig/COXREGUNIT.lrs b/applications/lazstats/source_orig/COXREGUNIT.lrs new file mode 100644 index 000000000..971f6eadc --- /dev/null +++ b/applications/lazstats/source_orig/COXREGUNIT.lrs @@ -0,0 +1,350 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TCoxRegFrm','FORMDATA',[ + 'TPF0'#10'TCoxRegFrm'#9'CoxRegFrm'#4'Left'#3#134#0#6'Height'#3']'#1#3'Top'#2 + +'b'#5'Width'#3'_'#2#7'Caption'#6',Cox Proportional Hazards Survival Regressi' + +'on'#12'ClientHeight'#3']'#1#11'ClientWidth'#3'_'#2#6'OnShow'#7#8'FormShow' + +#10'LCLVersion'#6#8'0.9.26.2'#0#6'TLabel'#6'Label1'#4'Left'#2#7#6'Height'#2 + +#14#3'Top'#2#2#5'Width'#2'S'#7'Caption'#6#17'Avaialbe Variable'#11'ParentCol' + +'or'#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#233#0#6'Height'#2#14#3'Top'#2#5#5'W' + +'idth'#2'm'#7'Caption'#6#21'Independent Variables'#11'ParentColor'#8#0#0#6'T' + +'Label'#6'Label3'#4'Left'#3#232#0#6'Height'#2#14#3'Top'#3#168#0#5'Width'#2'i' + +#7'Caption'#6#22'Survival Time Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'L' + +'abel4'#4'Left'#3#230#0#6'Height'#2#14#3'Top'#3#14#1#5'Width'#2'r'#7'Caption' + +#6#24'Survival Status Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4 + +'Left'#3#152#1#6'Height'#2#14#3'Top'#2'q'#5'Width'#2'i'#7'Caption'#6#20'Maxi' + +'mum Interations:'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#5#6 + +'Height'#3'?'#1#3'Top'#2#17#5'Width'#3#180#0#11'MultiSelect'#9#8'TabOrder'#2 + +#0#0#0#7'TBitBtn'#5'InBtn'#4'Left'#3#193#0#6'Height'#2#29#3'Top'#2#16#5'Widt' + +'h'#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#1#0#0#7'TBitBtn'#6'OutBtn'#4'Left'#3#193#0#6'Heig' + +'ht'#2#29#3'Top'#2'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''#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'#8'DepInBtn'#4'Left'#3#193#0#6'Height'#2#29#3'Top'#3#168#0#5'Widt' + +'h'#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#3#0#0#7'TBitBtn'#9'DepOutBtn'#4'Left'#3#193#0#6 + +'Height'#2#29#3'Top'#3#200#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''#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#4#0 + +#0#7'TBitBtn'#11'StatusInBtn'#4'Left'#3#193#0#6'Height'#2#29#3'Top'#3#16#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#255#255#255#0#255#255 + +#255#0#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#16'StatusInBtnClick'#8'TabOrder'#2#5#0#0#7'TBitBtn'#12'StatusOutBtn' + +#4'Left'#3#193#0#6'Height'#2#29#3'Top'#3'0'#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''#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'StatusOutBtnClick' + +#8'TabOrder'#2#6#0#0#8'TListBox'#9'BlockList'#4'Left'#3#231#0#6'Height'#3#129 + +#0#3'Top'#2#21#5'Width'#3#168#0#8'TabOrder'#2#7#0#0#5'TEdit'#6'DepVar'#4'Lef' + +'t'#3#232#0#6'Height'#2#23#3'Top'#3#183#0#5'Width'#3#167#0#8'TabOrder'#2#8#4 + +'Text'#6#6'DepVar'#0#0#5'TEdit'#10'StatusEdit'#4'Left'#3#230#0#6'Height'#2#22 + +#3'Top'#3#31#1#5'Width'#3#168#0#8'TabOrder'#2#9#4'Text'#6#10'StatusEdit'#0#0 + +#9'TGroupBox'#9'GroupBox1'#4'Left'#3#154#1#6'Height'#2'_'#3'Top'#2#6#5'Width' + +#3#186#0#7'Caption'#6#7'Options'#12'ClientHeight'#2'M'#11'ClientWidth'#3#182 + +#0#8'TabOrder'#2#10#0#9'TCheckBox'#7'DescChk'#4'Left'#2#7#6'Height'#2#17#3'T' + +'op'#2#1#5'Width'#2'v'#7'Caption'#6#22'Descriptive Statistics'#8'TabOrder'#2 + +#0#0#0#9'TCheckBox'#8'ProbsChk'#4'Left'#2#7#6'Height'#2#17#3'Top'#2#24#5'Wid' + +'th'#3#134#0#7'Caption'#6#23'Base Survival Functions'#8'TabOrder'#2#1#0#0#9 + +'TCheckBox'#8'ItersChk'#4'Left'#2#7#6'Height'#2#17#3'Top'#2'/'#5'Width'#2']' + +#7'Caption'#6#15'Show Iterations'#8'TabOrder'#2#2#0#0#0#5'TEdit'#10'MaxItsEd' + +'it'#4'Left'#3'('#2#6'Height'#2#19#3'Top'#2'i'#5'Width'#2'*'#8'TabOrder'#2#11 + +#4'Text'#6#10'MaxItsEdit'#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#208#1#6'Heigh' + +'t'#2#29#3'Top'#3#143#0#5'Width'#2'L'#7'Caption'#6#5'Reset'#7'OnClick'#7#13 + +'ResetBtnClick'#8'TabOrder'#2#12#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#208#1 + +#6'Height'#2#29#3'Top'#3#192#0#5'Width'#2'L'#7'Caption'#6#6'Cancel'#11'Modal' + +'Result'#2#2#8'TabOrder'#2#13#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3#208#1#6 + +'Height'#2#29#3'Top'#3#0#1#5'Width'#2'L'#7'Caption'#6#7'Compute'#7'OnClick'#7 + +#15'ComputeBtnClick'#8'TabOrder'#2#14#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3 + +#208#1#6'Height'#2#29#3'Top'#3'0'#1#5'Width'#2'L'#7'Caption'#6#6'Return'#11 + +'ModalResult'#2#1#8'TabOrder'#2#15#0#0#0 +]); diff --git a/applications/lazstats/source_orig/CROSSTAB.PAS b/applications/lazstats/source_orig/CROSSTAB.PAS new file mode 100644 index 000000000..973310519 --- /dev/null +++ b/applications/lazstats/source_orig/CROSSTAB.PAS @@ -0,0 +1,378 @@ +unit CrossTab; + +{$MODE Delphi} + +interface + +uses + LCLIntf, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, Buttons, GLOBALS, OUTPUTUNIT, OS3MainUnit, DATAPROCS, FUNCTIONSLIB, + MATRIXLIB, LResources; + +type + TCrossTabFrm = class(TForm) + Label1: TLabel; + VarList: TListBox; + InBtn: TBitBtn; + OutBtn: TBitBtn; + Label2: TLabel; + ListBox1: TListBox; + ResetBtn: TButton; + CancelBtn: TButton; + OKBtn: TButton; + Memo1: TMemo; + procedure ResetBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure CancelBtnClick(Sender: TObject); + procedure OKBtnClick(Sender: TObject); + procedure InBtnClick(Sender: TObject); + procedure OutBtnClick(Sender: TObject); + private + { Private declarations } + grandsum, sum, index : integer; + no_in_list, length_array, ptr1, ptr2 : integer ; + var_list, min_value, max_value, levels, displace, subscript : IntDyneVec; + freq : IntDyneVec; + outgrid : DblDyneMat; + rowlabels : StrDyneVec; + colLabels : StrDyneVec; + ColNoSelected : IntDyneVec; + NoSelected : integer; + NV, NC : integer; + + procedure INITIALIZE(Sender: TObject); + procedure GET_Levels(Sender: TObject); + function INDEX_POSITION( x : IntDyneVec; Sender: TObject ) : integer; + Procedure TABULATE(Sender : TObject); + procedure BREAKDOWN(Sender : TObject); + + public + { Public declarations } + end; + +var + CrossTabFrm: TCrossTabFrm; + +implementation + + +procedure TCrossTabFrm.ResetBtnClick(Sender: TObject); +var + i : integer; + +begin + VarList.Clear; + ListBox1.Clear; + OutBtn.Enabled := false; + InBtn.Enabled := true; + NV := NoVariables; + NC := NoCases; + for i := 1 to NV do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; +//---------------------------------------------------------------------- + +procedure TCrossTabFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; +//---------------------------------------------------------------------- + +procedure TCrossTabFrm.CancelBtnClick(Sender: TObject); +begin + CrossTabFrm.Hide; +end; +//---------------------------------------------------------------------- + +procedure TCrossTabFrm.OKBtnClick(Sender: TObject); +label CleanUp; +var + cellvalue : string; + i, j : integer; + outline : string; +begin + SetLength(var_list,NV); + SetLength(min_value,NV); + SetLength(max_value,NV); + SetLength(levels,NC); + SetLength(displace,NC); + SetLength(subscript,NC); + SetLength(ColNoSelected,NV); + + OutPutFrm.RichEdit.Clear; +// OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify; + OutPutFrm.RichEdit.Lines.Add('CROSSTAB RESULTS'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := ' Analyzed data is from file : '; + outline := outline + OS3MainFrm.FileNameEdit.Text; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + INITIALIZE(self); + if ListBox1.Items.Count = 0 then + begin + ShowMessage('ERROR! No variables selected for analysis.'); + goto CleanUp; + end; + + NoSelected := 0; + for i := 0 to ListBox1.Items.Count-1 do + begin + for j := 1 to NV do + begin + cellvalue := OS3MainFrm.DataGrid.Cells[j,0]; + if cellvalue = ListBox1.Items.Strings[i] then + begin + var_list[i] := j; + ColNoSelected[i] := j; + NoSelected := NoSelected + 1; + break; + end; + end; + end; + no_in_list := ListBox1.Items.Count; + GET_LEVELS(self); + TABULATE(self); + BREAKDOWN(self); + OutPutFrm.RichEdit.Lines.Add(''); + cellvalue := format('Grand sum accross all categories = %3d',[grandsum]); + OutPutFrm.RichEdit.Lines.Add(cellvalue); + OutPutFrm.ShowModal; + +CleanUp: + ColNoSelected := nil; + freq := nil; + collabels := nil; + rowlabels := nil; + outgrid := nil; + subscript := nil; + displace := nil; + levels := nil; + max_value := nil; + min_value := nil; + var_list := nil; + CrossTabFrm.Hide; +end; +//--------------------------------------------------------------------- + +procedure TCrossTabFrm.InBtnClick(Sender: TObject); +var + index, i : 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 TCrossTabFrm.OutBtnClick(Sender: TObject); +var + index: integer; +begin + index := ListBox1.ItemIndex; + VarList.Items.Add(ListBox1.Items.Strings[index]); + ListBox1.Items.Delete(index); + InBtn.Enabled := true; + if ListBox1.Items.Count = 0 then OutBtn.Enabled := false; +end; +//----------------------------------------------------------------------- + +procedure TCrossTabFrm.INITIALIZE(Sender: TObject); +var + i : integer; + +begin + no_in_list := 0; + for i := 1 to NV do + begin + var_list[i-1] := 0; + min_value[i-1] := 0; + max_value[i-1] := 0; + levels[i-1] := 0; + displace[i-1] := 0; + subscript[i-1] := 0; + end; + index := 0; + length_array := 0; + grandsum := 0; +end; { initialize procedure } +//----------------------------------------------------------------------- + +procedure TCrossTabFrm.GET_Levels(Sender: TObject); +var + i, j, k : integer; + value : double; + outline : string; + +begin + for i := 1 to no_in_list do + begin + j := var_list[i-1]; + if Not GoodRecord(1,NoSelected,ColNoSelected) then continue; + value := StrToFloat(OS3MainFrm.DataGrid.Cells[j,1]); + min_value[i-1] := round(value); + max_value[i-1] := round(value); + for k := 2 to NC do + begin + if Not GoodRecord(k,NoSelected,ColNoSelected) then continue; + value := StrToFloat(OS3MainFrm.DataGrid.Cells[j,k]); + if value < min_value[i-1] then min_value[i-1] := + round(value); + if value > max_value[i-1] then max_value[i-1] := + round(value); + end; + end; + for i := 1 to no_in_list do + begin + j := var_list[i-1]; + levels[i-1] := max_value[i-1] - min_value[i-1] + 1; + outline := format('%s min.=%3d, max.=%3d, no. levels = %3d', + [OS3MainFrm.DataGrid.Cells[j,0],min_value[i-1],max_value[i-1],levels[i-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + displace[no_in_list-1] := 1; + if no_in_list > 1 then + begin + for i := (no_in_list - 1) downto 1 do + displace[i-1] := levels[i] * displace[i]; + end; +end; +//----------------------------------------------------------------------- +function TCrossTabFrm.INDEX_POSITION( x : IntDyneVec; Sender: TObject ) : integer; + +var index : integer; + i : integer; + +begin + index := x[no_in_list-1]; + if no_in_list > 1 then + begin + for i := 1 to no_in_list - 1 do + index := index + (x[i-1] -1) * displace[i-1]; + end; + index_position := index; +end; { function INDEX_POSITION } +//------------------------------------------------------------------------ +Procedure TCrossTabFrm.TABULATE(Sender : TObject); +var + i, j, k : integer; + value : double; + x : integer; +begin + length_array := 1; + for i := 1 to no_in_list do length_array := length_array * levels[i-1]; + SetLength(freq,length_array+1); + for i := 0 to length_array do freq[i] := 0; + for i := 1 to NC do + begin + if IsFiltered(i) then continue; + for j := 1 to no_in_list do + begin + if Not GoodRecord(i,NoSelected,ColNoSelected) then continue; + k := var_list[j-1]; + value := StrToFloat(OS3MainFrm.DataGrid.Cells[k,i]); + x := round(value); + x := x - min_value[j-1] + 1; + subscript[j-1] := x; + end; + j := index_position(subscript,self); + + if (j < 1) or (j > length_array) then + begin + ShowMessage('ERROR! subscript out of range.'); + continue; + end + else freq[j] := freq[j] + 1; + end; +end; { procedure TABULATE } +//--------------------------------------------------------------------- +procedure TCrossTabFrm.BREAKDOWN(Sender : TObject); + +label 1,2,3,4, printgrid; +var + i, j, row, col, bigmax : integer; + outline : string; + value : string; + title : String; +begin + bigmax := -1; + for i := 0 to no_in_list-1 do + if Levels[i] > bigmax then bigmax := Levels[i]; + SetLength(colLabels,bigmax); + SetLength(outgrid,length_array,bigmax); + SetLength(rowlabels,length_array); + outline := OS3MainFrm.DataGrid.Cells[var_list[no_in_list-1],0]; + for col := 1 to Levels[no_in_list-1] do + collabels[col-1] := outline + format(':%3d',[min_value[no_in_list-1] + col - 1]); + for row := 1 to length_array do rowlabels[row-1] := ''; + ptr1 := no_in_list - 1; + ptr2 := no_in_list; + for i := 1 to no_in_list do subscript[i-1] := 1; + OutPutFrm.RichEdit.Lines.Add('FREQUENCIES BY LEVEL:'); + sum := 0; + col := 1; + row := 1; + 1: index := index_position(subscript,self); + outline := 'For cell levels: '; + for i := 1 to no_in_list do + begin + j := var_list[i-1]; + value := format('%s:%3d ',[OS3MainFrm.DataGrid.Cells[j,0], + min_value[i-1] + subscript[i-1] - 1]); + outline := outline + value; + end; + sum := sum + freq[index]; + outgrid[row-1,col-1] := freq[index]; + outline := outline + format(' Frequency = %3d',[freq[index]]); + OutPutFrm.RichEdit.Lines.Add(outline); + subscript[ptr2-1] := subscript[ptr2-1] + 1; + col := col + 1; + IF subscript[ptr2-1] <= levels[ptr2-1] then goto 1; + outline := format('Sum accross levels = %3d',[sum]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); + grandsum := grandsum + sum; + sum := 0; + row := row + 1; + 2: if ptr1 < 1 then goto printgrid; + subscript[ptr1-1] := subscript[ptr1-1] + 1; + if subscript[ptr1-1] <= levels[ptr1-1] then goto 4; + 3: ptr1 := ptr1 - 1; + if ptr1 < 1 then goto printgrid; + if subscript[ptr1-1] >= levels[ptr1-1] then goto 3; + subscript[ptr1-1] := subscript[ptr1-1] + 1; + 4: for i := ptr1 + 1 to no_in_list do subscript[i-1] := 1; + ptr1 := no_in_list - 1; + col := 1; + goto 1; + +printgrid: + title := 'Cell Frequencies by Levels'; + for i := 1 to row - 1 do + begin + value := format('Block %d',[i]); + rowlabels[i-1] := value; + end; + MAT_PRINT(outgrid,row-1,Levels[no_in_list-1],title,rowlabels,collabels,NC); + +end; { Procedure BREAKDOWN } +//--------------------------------------------------------------------- + + +initialization + {$i CROSSTAB.lrs} + {$i CROSSTAB.lrs} + +end. diff --git a/applications/lazstats/source_orig/CROSSTAB.lfm b/applications/lazstats/source_orig/CROSSTAB.lfm new file mode 100644 index 000000000..f4f3996f9 --- /dev/null +++ b/applications/lazstats/source_orig/CROSSTAB.lfm @@ -0,0 +1,145 @@ +object CrossTabFrm: TCrossTabFrm + Left = 320 + Height = 214 + Top = 689 + Width = 521 + HelpContext = 603 + HorzScrollBar.Page = 520 + VertScrollBar.Page = 213 + ActiveControl = VarList + BorderStyle = bsDialog + Caption = 'Cross Tabulation Procedure' + Font.Height = -11 + Font.Name = 'MS Sans Serif' + HelpFile = 'OS2Help.hlp' + OnShow = FormShow + object Label1: TLabel + Left = 16 + Height = 14 + Top = 8 + Width = 94 + Caption = 'Available Variables:' + Color = clNone + ParentColor = False + end + object Label2: TLabel + Left = 184 + Height = 14 + Top = 8 + Width = 102 + Caption = 'Variables to Analyze:' + Color = clNone + ParentColor = False + end + object VarList: TListBox + Left = 8 + Height = 177 + Top = 24 + Width = 129 + ItemHeight = 13 + MultiSelect = True + TabOrder = 0 + end + object InBtn: TBitBtn + Left = 144 + Height = 33 + Top = 32 + Width = 33 + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000120B0000120B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 3333333333333333333333333333333333333333333333333333333333333333 + 3333333333333333333333333333333333333333333FF3333333333333003333 + 3333333333773FF3333333333309003333333333337F773FF333333333099900 + 33333FFFFF7F33773FF30000000999990033777777733333773F099999999999 + 99007FFFFFFF33333F7700000009999900337777777F333F7733333333099900 + 33333333337F3F77333333333309003333333333337F77333333333333003333 + 3333333333773333333333333333333333333333333333333333333333333333 + 3333333333333333333333333333333333333333333333333333 + } + NumGlyphs = 2 + OnClick = InBtnClick + TabOrder = 1 + end + object OutBtn: TBitBtn + Left = 144 + Height = 33 + Top = 72 + Width = 33 + Enabled = False + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000120B0000120B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 3333333333333333333333333333333333333333333333333333333333333333 + 3333333333333FF3333333333333003333333333333F77F33333333333009033 + 333333333F7737F333333333009990333333333F773337FFFFFF330099999000 + 00003F773333377777770099999999999990773FF33333FFFFF7330099999000 + 000033773FF33777777733330099903333333333773FF7F33333333333009033 + 33333333337737F3333333333333003333333333333377333333333333333333 + 3333333333333333333333333333333333333333333333333333333333333333 + 3333333333333333333333333333333333333333333333333333 + } + NumGlyphs = 2 + OnClick = OutBtnClick + TabOrder = 2 + end + object ListBox1: TListBox + Left = 184 + Height = 177 + Top = 24 + Width = 137 + ItemHeight = 13 + TabOrder = 3 + end + object ResetBtn: TButton + Left = 448 + Height = 25 + Top = 104 + Width = 65 + BorderSpacing.InnerBorder = 4 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 4 + end + object CancelBtn: TButton + Left = 448 + Height = 25 + Top = 144 + Width = 65 + BorderSpacing.InnerBorder = 4 + Caption = 'Cancel' + ModalResult = 2 + OnClick = CancelBtnClick + TabOrder = 5 + end + object OKBtn: TButton + Left = 447 + Height = 25 + Top = 184 + Width = 65 + BorderSpacing.InnerBorder = 4 + Caption = 'OK' + ModalResult = 1 + OnClick = OKBtnClick + TabOrder = 6 + end + object Memo1: TMemo + Left = 336 + Height = 89 + Top = 8 + Width = 177 + Lines.Strings = ( + 'Directions: Select each categorical' + 'variable from the variables available ' + 'in the leftmost box in the order that ' + 'you wish to have the breakdown' + 'proceed. Click the OK button to ' + 'start the analysis.' + ) + TabOrder = 7 + end +end diff --git a/applications/lazstats/source_orig/CROSSTAB.lrs b/applications/lazstats/source_orig/CROSSTAB.lrs new file mode 100644 index 000000000..9f7ff947d --- /dev/null +++ b/applications/lazstats/source_orig/CROSSTAB.lrs @@ -0,0 +1,53 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TCrossTabFrm','FORMDATA',[ + 'TPF0'#12'TCrossTabFrm'#11'CrossTabFrm'#4'Left'#3'@'#1#6'Height'#3#214#0#3'To' + +'p'#3#177#2#5'Width'#3#9#2#11'HelpContext'#3'['#2#18'HorzScrollBar.Page'#3#8 + +#2#18'VertScrollBar.Page'#3#213#0#13'ActiveControl'#7#7'VarList'#11'BorderSt' + +'yle'#7#8'bsDialog'#7'Caption'#6#26'Cross Tabulation Procedure'#11'Font.Heig' + +'ht'#2#245#9'Font.Name'#6#13'MS Sans Serif'#8'HelpFile'#6#11'OS2Help.hlp'#6 + +'OnShow'#7#8'FormShow'#0#6'TLabel'#6'Label1'#4'Left'#2#16#6'Height'#2#14#3'T' + +'op'#2#8#5'Width'#2'^'#7'Caption'#6#20'Available Variables:'#5'Color'#7#6'cl' + +'None'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#184#0#6'Height'#2 + +#14#3'Top'#2#8#5'Width'#2'f'#7'Caption'#6#21'Variables to Analyze:'#5'Color' + +#7#6'clNone'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#8#6'Heig' + +'ht'#3#177#0#3'Top'#2#24#5'Width'#3#129#0#10'ItemHeight'#2#13#11'MultiSelect' + +#9#8'TabOrder'#2#0#0#0#7'TBitBtn'#5'InBtn'#4'Left'#3#144#0#6'Height'#2'!'#3 + +'Top'#2' '#5'Width'#2'!'#10'Glyph.Data'#10'z'#1#0#0'v'#1#0#0'BMv'#1#0#0#0#0#0 + +#0'v'#0#0#0'('#0#0#0' '#0#0#0#16#0#0#0#1#0#4#0#0#0#0#0#0#1#0#0#18#11#0#0#18 + +#11#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0#128#0#0#0 + +#128#0#128#0#128#128#0#0''#0#191#191#191#0#0#0#255#0#0#255#0#0#0#255#255#0 + +#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0'333333333333333333333333333' + +'33333333333333333333333333333333?'#243'333333'#0'3333333w?'#243'33333'#9#0 + +'333333w?'#243'3333'#9#153#0'33?'#255#255'3w?'#243#0#0#0#9#153#153#0'3wwws' + +'33w?'#9#153#153#153#153#153#153#0''#255#255#255'33?w'#0#0#0#9#153#153#0'3w' + +'ww3?w3333'#9#153#0'33333?w33333'#9#0'333333w333333'#0'3333333w3333333333' + +'333333333333333333333333333333333333333333'#9'NumGlyphs'#2#2#7'OnClick'#7#10 + +'InBtnClick'#8'TabOrder'#2#1#0#0#7'TBitBtn'#6'OutBtn'#4'Left'#3#144#0#6'Heig' + +'ht'#2'!'#3'Top'#2'H'#5'Width'#2'!'#7'Enabled'#8#10'Glyph.Data'#10'z'#1#0#0 + +'v'#1#0#0'BMv'#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0' '#0#0#0#16#0#0#0#1#0#4#0#0#0 + +#0#0#0#1#0#0#18#11#0#0#18#11#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0 + +#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0''#0#191#191#191#0#0#0#255#0 + +#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0'33333' + +'333333333333333333333333333333333333333?'#243'333333'#0'333333?w'#243'33333' + +#0#144'33333?w7'#243'3333'#0#153#144'3333?w37'#255#255#255'3'#0#153#153#144#0 + +#0#0'?w337www'#0#153#153#153#153#153#153#144'w?'#243'33'#255#255#247'3'#0#153 + +#153#144#0#0#0'3w?'#243'7www33'#0#153#144'33333w?'#247#243'33333'#0#144'3333' + +'33w7'#243'333333'#0'3333333w33333333333333333333333333333333333333333333333' + +'33333333333333333333'#9'NumGlyphs'#2#2#7'OnClick'#7#11'OutBtnClick'#8'TabOr' + +'der'#2#2#0#0#8'TListBox'#8'ListBox1'#4'Left'#3#184#0#6'Height'#3#177#0#3'To' + +'p'#2#24#5'Width'#3#137#0#10'ItemHeight'#2#13#8'TabOrder'#2#3#0#0#7'TButton' + +#8'ResetBtn'#4'Left'#3#192#1#6'Height'#2#25#3'Top'#2'h'#5'Width'#2'A'#25'Bor' + +'derSpacing.InnerBorder'#2#4#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnC' + +'lick'#8'TabOrder'#2#4#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#192#1#6'Height' + +#2#25#3'Top'#3#144#0#5'Width'#2'A'#25'BorderSpacing.InnerBorder'#2#4#7'Capti' + +'on'#6#6'Cancel'#11'ModalResult'#2#2#7'OnClick'#7#14'CancelBtnClick'#8'TabOr' + +'der'#2#5#0#0#7'TButton'#5'OKBtn'#4'Left'#3#191#1#6'Height'#2#25#3'Top'#3#184 + +#0#5'Width'#2'A'#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#2'OK'#11'Mod' + +'alResult'#2#1#7'OnClick'#7#10'OKBtnClick'#8'TabOrder'#2#6#0#0#5'TMemo'#5'Me' + +'mo1'#4'Left'#3'P'#1#6'Height'#2'Y'#3'Top'#2#8#5'Width'#3#177#0#13'Lines.Str' + +'ings'#1#6'$Directions: Select each categorical'#6'&variable from the varia' + +'bles available '#6'&in the leftmost box in the order that '#6#30'you wish t' + +'o have the breakdown'#6'!proceed. Click the OK button to '#6#19'start the ' + +'analysis.'#0#8'TabOrder'#2#7#0#0#0 +]); diff --git a/applications/lazstats/source_orig/CUMSUMUNIT.lfm b/applications/lazstats/source_orig/CUMSUMUNIT.lfm new file mode 100644 index 000000000..543a1ecb8 --- /dev/null +++ b/applications/lazstats/source_orig/CUMSUMUNIT.lfm @@ -0,0 +1,191 @@ +object CUMSUMFrm: TCUMSUMFrm + Left = 160 + Height = 336 + Top = 121 + Width = 440 + ActiveControl = HelpBtn + Caption = 'CUMSUM Chart' + ClientHeight = 336 + ClientWidth = 440 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 8 + Height = 14 + Top = 8 + Width = 90 + Caption = 'Selection Variables' + ParentColor = False + end + object Label2: TLabel + Left = 168 + Height = 14 + Top = 32 + Width = 71 + Caption = 'Group Variable' + ParentColor = False + end + object Label3: TLabel + Left = 173 + Height = 14 + Top = 88 + Width = 107 + Caption = 'Measurement Variable' + ParentColor = False + end + object VarList: TListBox + Left = 8 + Height = 179 + Top = 24 + Width = 152 + ItemHeight = 0 + OnClick = VarListClick + TabOrder = 0 + end + object GroupEdit: TEdit + Left = 168 + Height = 21 + Top = 48 + Width = 129 + TabOrder = 1 + Text = 'GroupEdit' + end + object MeasEdit: TEdit + Left = 168 + Height = 21 + Top = 104 + Width = 127 + TabOrder = 2 + Text = 'MeasEdit' + end + object ResetBtn: TButton + Left = 320 + Height = 30 + Top = 48 + Width = 80 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 3 + end + object CancelBtn: TButton + Left = 321 + Height = 30 + Top = 88 + Width = 79 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 4 + end + object ComputeBtn: TButton + Left = 321 + Height = 30 + Top = 128 + Width = 79 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 5 + end + object ReturnBtn: TButton + Left = 321 + Height = 30 + Top = 168 + Width = 79 + Caption = 'Return' + ModalResult = 1 + TabOrder = 6 + end + object GroupBox1: TGroupBox + Left = 8 + Height = 104 + Top = 216 + Width = 200 + Caption = 'CUMSUM V-Mask Specifications' + ClientHeight = 86 + ClientWidth = 196 + TabOrder = 7 + object Label4: TLabel + Left = 8 + Height = 14 + Top = 10 + Width = 92 + Caption = 'Delta (Effect Size):' + ParentColor = False + end + object Label5: TLabel + Left = 7 + Height = 14 + Top = 33 + Width = 85 + Caption = 'Alpha Probability:' + ParentColor = False + end + object Label6: TLabel + Left = 8 + Height = 14 + Top = 57 + Width = 80 + Caption = 'Beta Probability:' + ParentColor = False + end + object DeltaEdit: TEdit + Left = 110 + Height = 21 + Top = 3 + Width = 56 + TabOrder = 0 + Text = 'DeltaEdit' + end + object AlphaEdit: TEdit + Left = 112 + Height = 21 + Top = 29 + Width = 56 + TabOrder = 1 + Text = 'AlphaEdit' + end + object BetaEdit: TEdit + Left = 110 + Height = 21 + Top = 55 + Width = 56 + TabOrder = 2 + Text = 'BetaEdit' + end + end + object GroupBox2: TGroupBox + Left = 216 + Height = 104 + Top = 216 + Width = 212 + Caption = 'Option:' + ClientHeight = 86 + ClientWidth = 208 + TabOrder = 8 + object TargetChk: TCheckBox + Left = 8 + Height = 17 + Top = 15 + Width = 140 + Caption = 'Use Target Specification:' + TabOrder = 0 + end + object TargetEdit: TEdit + Left = 154 + Height = 21 + Top = 6 + Width = 43 + TabOrder = 1 + Text = 'TargetEdit' + end + end + object HelpBtn: TButton + Tag = 117 + Left = 321 + Height = 32 + Top = 8 + Width = 82 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 9 + end +end diff --git a/applications/lazstats/source_orig/CUMSUMUNIT.lrs b/applications/lazstats/source_orig/CUMSUMUNIT.lrs new file mode 100644 index 000000000..10c6bde0e --- /dev/null +++ b/applications/lazstats/source_orig/CUMSUMUNIT.lrs @@ -0,0 +1,47 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TCUMSUMFrm','FORMDATA',[ + 'TPF0'#10'TCUMSUMFrm'#9'CUMSUMFrm'#4'Left'#3#160#0#6'Height'#3'P'#1#3'Top'#2 + +'y'#5'Width'#3#184#1#13'ActiveControl'#7#7'HelpBtn'#7'Caption'#6#12'CUMSUM C' + +'hart'#12'ClientHeight'#3'P'#1#11'ClientWidth'#3#184#1#6'OnShow'#7#8'FormSho' + +'w'#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'Caption'#6#19'Selection Variables'#11'Paren' + +'tColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#168#0#6'Height'#2#14#3'Top'#2' ' + +#5'Width'#2'G'#7'Caption'#6#14'Group Variable'#11'ParentColor'#8#0#0#6'TLabe' + +'l'#6'Label3'#4'Left'#3#173#0#6'Height'#2#14#3'Top'#2'X'#5'Width'#2'k'#7'Cap' + +'tion'#6#20'Measurement Variable'#11'ParentColor'#8#0#0#8'TListBox'#7'VarLis' + +'t'#4'Left'#2#8#6'Height'#3#179#0#3'Top'#2#24#5'Width'#3#152#0#10'ItemHeight' + +#2#0#7'OnClick'#7#12'VarListClick'#8'TabOrder'#2#0#0#0#5'TEdit'#9'GroupEdit' + +#4'Left'#3#168#0#6'Height'#2#21#3'Top'#2'0'#5'Width'#3#129#0#8'TabOrder'#2#1 + +#4'Text'#6#9'GroupEdit'#0#0#5'TEdit'#8'MeasEdit'#4'Left'#3#168#0#6'Height'#2 + +#21#3'Top'#2'h'#5'Width'#2#127#8'TabOrder'#2#2#4'Text'#6#8'MeasEdit'#0#0#7'T' + +'Button'#8'ResetBtn'#4'Left'#3'@'#1#6'Height'#2#30#3'Top'#2'0'#5'Width'#2'P' + +#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#3#0#0#7 + +'TButton'#9'CancelBtn'#4'Left'#3'A'#1#6'Height'#2#30#3'Top'#2'X'#5'Width'#2 + +'O'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#4#0#0#7'TButton' + +#10'ComputeBtn'#4'Left'#3'A'#1#6'Height'#2#30#3'Top'#3#128#0#5'Width'#2'O'#7 + +'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#5#0#0#7 + +'TButton'#9'ReturnBtn'#4'Left'#3'A'#1#6'Height'#2#30#3'Top'#3#168#0#5'Width' + +#2'O'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#6#0#0#9'TGrou' + +'pBox'#9'GroupBox1'#4'Left'#2#8#6'Height'#2'h'#3'Top'#3#216#0#5'Width'#3#200 + +#0#7'Caption'#6#28'CUMSUM V-Mask Specifications'#12'ClientHeight'#2'V'#11'Cl' + +'ientWidth'#3#196#0#8'TabOrder'#2#7#0#6'TLabel'#6'Label4'#4'Left'#2#8#6'Heig' + +'ht'#2#14#3'Top'#2#10#5'Width'#2'\'#7'Caption'#6#20'Delta (Effect Size):'#11 + +'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'Left'#2#7#6'Height'#2#14#3'Top'#2 + +'!'#5'Width'#2'U'#7'Caption'#6#18'Alpha Probability:'#11'ParentColor'#8#0#0#6 + +'TLabel'#6'Label6'#4'Left'#2#8#6'Height'#2#14#3'Top'#2'9'#5'Width'#2'P'#7'Ca' + +'ption'#6#17'Beta Probability:'#11'ParentColor'#8#0#0#5'TEdit'#9'DeltaEdit'#4 + +'Left'#2'n'#6'Height'#2#21#3'Top'#2#3#5'Width'#2'8'#8'TabOrder'#2#0#4'Text'#6 + +#9'DeltaEdit'#0#0#5'TEdit'#9'AlphaEdit'#4'Left'#2'p'#6'Height'#2#21#3'Top'#2 + +#29#5'Width'#2'8'#8'TabOrder'#2#1#4'Text'#6#9'AlphaEdit'#0#0#5'TEdit'#8'Beta' + +'Edit'#4'Left'#2'n'#6'Height'#2#21#3'Top'#2'7'#5'Width'#2'8'#8'TabOrder'#2#2 + +#4'Text'#6#8'BetaEdit'#0#0#0#9'TGroupBox'#9'GroupBox2'#4'Left'#3#216#0#6'Hei' + +'ght'#2'h'#3'Top'#3#216#0#5'Width'#3#212#0#7'Caption'#6#7'Option:'#12'Client' + +'Height'#2'V'#11'ClientWidth'#3#208#0#8'TabOrder'#2#8#0#9'TCheckBox'#9'Targe' + +'tChk'#4'Left'#2#8#6'Height'#2#17#3'Top'#2#15#5'Width'#3#140#0#7'Caption'#6 + +#25'Use Target Specification:'#8'TabOrder'#2#0#0#0#5'TEdit'#10'TargetEdit'#4 + +'Left'#3#154#0#6'Height'#2#21#3'Top'#2#6#5'Width'#2'+'#8'TabOrder'#2#1#4'Tex' + +'t'#6#10'TargetEdit'#0#0#0#7'TButton'#7'HelpBtn'#3'Tag'#2'u'#4'Left'#3'A'#1#6 + +'Height'#2' '#3'Top'#2#8#5'Width'#2'R'#7'Caption'#6#4'Help'#7'OnClick'#7#12 + +'HelpBtnClick'#8'TabOrder'#2#9#0#0#0 +]); diff --git a/applications/lazstats/source_orig/contexthelpunit.pas b/applications/lazstats/source_orig/contexthelpunit.pas new file mode 100644 index 000000000..d44eebdc3 --- /dev/null +++ b/applications/lazstats/source_orig/contexthelpunit.pas @@ -0,0 +1,65 @@ +unit contexthelpunit; +{$mode objfpc} +{$H+} + +interface + +uses + IniFiles, Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, + Dialogs, ExtCtrls, StdCtrls; + +type + + { TContextHelpForm } + + TContextHelpForm = class(TForm) + Button1: TButton; + Memo1: TMemo; + Panel1: TPanel; + procedure Button1Click(Sender: TObject); + private + { private declarations } + public + { public declarations } + procedure HelpMessage(lTag: integer); + end; + +var + ContextHelpForm: TContextHelpForm; + +implementation + +function ReadIniFileTag(var lTag: Integer): string; +//Read string with index lTag +var + lIniFile: TIniFile; + lFilename,lLang: string; +begin + lFilename := changefileext(paramstr(0),'.ini'); + if (not Fileexists(lFilename)) then begin + result := 'No contextual help: unable to find '+lFilename; + exit; + end; + result := 'No contextual help found for '+inttostr(lTag); + lIniFile := TIniFile.Create(lFilename); + lLang := lIniFile.ReadString('LANGUAGE', 'DEFAULT', ''); + result := lIniFile.ReadString(lLang, inttostr(lTag), result); +end; + +procedure TContextHelpForm.Button1Click(Sender: TObject); +begin + Close; +end; + +procedure TContextHelpForm.HelpMessage(lTag: integer); +begin + Memo1.Lines.Clear; + Memo1.lines.add(ReadIniFileTag(lTag)); + ContextHelpForm.show; +end; + +initialization + {$I contexthelpunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/correspondenceunit.lfm b/applications/lazstats/source_orig/correspondenceunit.lfm new file mode 100644 index 000000000..b4a0ba807 --- /dev/null +++ b/applications/lazstats/source_orig/correspondenceunit.lfm @@ -0,0 +1,429 @@ +object CorrespondenceForm: TCorrespondenceForm + Left = 234 + Height = 519 + Top = 133 + Width = 629 + Caption = 'Correspondence Analysis' + ClientHeight = 519 + ClientWidth = 629 + OnShow = ResetBtnClick + LCLVersion = '0.9.30' + object Memo1: TMemo + Left = 7 + Height = 114 + Top = 6 + Width = 609 + Lines.Strings = ( + 'Directions: Your data grid should consist of a table of N rows and M+1 variables with N >= to M. Each row ' + 'should have a label variable and M columns of data (integer frequencies. An example is in a file labeled ' + '"Smokers.LAZ".' + '1. Enter the variable for the row labels defined as a string-type of variable.' + '2. Enter the variables representing the M columns of data as integer-type of variables.' + '3. Click on the options desired.' + '4. Click the Compute button.' + ) + TabOrder = 0 + end + object Label1: TLabel + Left = 8 + Height = 16 + Top = 129 + Width = 51 + Caption = 'Variables:' + ParentColor = False + end + object VarList: TListBox + Left = 9 + Height = 294 + Top = 152 + Width = 168 + ItemHeight = 0 + MultiSelect = True + TabOrder = 1 + end + object RowIn: TBitBtn + Left = 192 + Height = 39 + Top = 152 + 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 = RowInClick + TabOrder = 2 + end + object RowOut: TBitBtn + Left = 192 + Height = 39 + Top = 200 + 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 = RowOutClick + TabOrder = 3 + end + object ColIn: TBitBtn + Left = 192 + Height = 39 + Top = 256 + 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 = ColInClick + TabOrder = 4 + end + object ColOut: TBitBtn + Left = 192 + Height = 39 + Top = 304 + 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 = ColOutClick + TabOrder = 5 + end + object Label2: TLabel + Left = 241 + Height = 16 + Top = 152 + Width = 100 + Caption = 'Row Label Variable' + ParentColor = False + end + object Label3: TLabel + Left = 244 + Height = 16 + Top = 256 + Width = 97 + Caption = 'Column Variables:' + ParentColor = False + end + object RowEdit: TEdit + Left = 241 + Height = 23 + Top = 173 + Width = 138 + TabOrder = 6 + Text = 'RowEdit' + end + object ColList: TListBox + Left = 241 + Height = 173 + Top = 272 + Width = 145 + ItemHeight = 0 + TabOrder = 7 + end + object GroupBox1: TGroupBox + Left = 401 + Height = 364 + Top = 140 + Width = 215 + Caption = 'Options' + ClientHeight = 346 + ClientWidth = 211 + TabOrder = 8 + object ObsChk: TCheckBox + Left = 5 + Height = 19 + Top = 4 + Width = 168 + Caption = 'Show Observed Frequencies' + TabOrder = 0 + end + end + object PropsChk: TCheckBox + Left = 408 + Height = 19 + Top = 184 + Width = 187 + Caption = 'Show Row and Col. Proportions' + TabOrder = 9 + end + object ExpChk: TCheckBox + Left = 408 + Height = 19 + Top = 208 + Width = 165 + Caption = 'Show Expected Frequencies' + TabOrder = 10 + end + object ChiChk: TCheckBox + Left = 408 + Height = 19 + Top = 232 + Width = 169 + Caption = 'Show Cell Chi-square values' + TabOrder = 11 + end + object YatesChk: TCheckBox + Left = 408 + Height = 19 + Top = 256 + Width = 199 + Caption = 'Use Yate''s Correction for 2x2 table' + TabOrder = 12 + end + object ShowQChk: TCheckBox + Left = 408 + Height = 19 + Top = 280 + Width = 97 + Caption = 'Show Q Matrix' + TabOrder = 13 + end + object QCheckChk: TCheckBox + Left = 408 + Height = 19 + Top = 304 + Width = 126 + Caption = 'Check that Q = UDV' + TabOrder = 14 + end + object EigenChk: TCheckBox + Left = 408 + Height = 19 + Top = 328 + Width = 162 + Caption = 'Values and Vectors of UDV''' + TabOrder = 15 + end + object ShowABChk: TCheckBox + Left = 408 + Height = 19 + Top = 352 + Width = 143 + Caption = 'A, B of Generalized SVD' + TabOrder = 16 + end + object CheckPChk: TCheckBox + Left = 408 + Height = 19 + Top = 376 + Width = 183 + Caption = 'Check P is reproduced by ADB''' + TabOrder = 17 + end + object RowCorres: TCheckBox + Left = 408 + Height = 19 + Top = 400 + Width = 133 + Caption = 'Row Correspondence' + TabOrder = 18 + end + object ColCorrChk: TCheckBox + Left = 408 + Height = 19 + Top = 424 + Width = 153 + Caption = 'Column Correspondence' + TabOrder = 19 + end + object BothCorrChk: TCheckBox + Left = 408 + Height = 19 + Top = 448 + Width = 202 + Caption = 'Row and Column Correspondence' + Checked = True + State = cbChecked + TabOrder = 20 + end + object PlotChk: TCheckBox + Left = 408 + Height = 19 + Top = 472 + Width = 87 + Caption = 'Plot Weights' + Checked = True + State = cbChecked + TabOrder = 21 + end + object ResetBtn: TButton + Left = 80 + Height = 27 + Top = 459 + Width = 69 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 22 + end + object CancelBtn: TButton + Left = 160 + Height = 27 + Top = 459 + Width = 69 + Cancel = True + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 23 + end + object ComputeBtn: TButton + Left = 240 + Height = 27 + Top = 459 + Width = 69 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 24 + end + object ReturnBtn: TButton + Left = 317 + Height = 27 + Top = 459 + Width = 69 + Caption = 'Return' + ModalResult = 1 + TabOrder = 25 + end + object HelpBtn: TButton + Tag = 160 + Left = 9 + Height = 28 + Top = 459 + Width = 64 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 26 + end +end diff --git a/applications/lazstats/source_orig/correspondenceunit.lrs b/applications/lazstats/source_orig/correspondenceunit.lrs new file mode 100644 index 000000000..83be19433 --- /dev/null +++ b/applications/lazstats/source_orig/correspondenceunit.lrs @@ -0,0 +1,274 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TCorrespondenceForm','FORMDATA',[ + 'TPF0'#19'TCorrespondenceForm'#18'CorrespondenceForm'#4'Left'#3#234#0#6'Heigh' + +'t'#3#7#2#3'Top'#3#133#0#5'Width'#3'u'#2#7'Caption'#6#23'Correspondence Anal' + +'ysis'#12'ClientHeight'#3#7#2#11'ClientWidth'#3'u'#2#6'OnShow'#7#13'ResetBtn' + +'Click'#10'LCLVersion'#6#6'0.9.30'#0#5'TMemo'#5'Memo1'#4'Left'#2#7#6'Height' + +#2'r'#3'Top'#2#6#5'Width'#3'a'#2#13'Lines.Strings'#1#6'lDirections: Your da' + +'ta grid should consist of a table of N rows and M+1 variables with N >= to ' + +'M. Each row '#6'jshould have a label variable and M columns of data (integ' + +'er frequencies. An example is in a file labeled '#6#14'"Smokers.LAZ".'#6'P' + +'1. Enter the variable for the row labels defined as a string-type of vari' + +'able.'#6'Y2. Enter the variables representing the M columns of data as in' + +'teger-type of variables.'#6'"3. Click on the options desired.'#6#30'4. ' + +'Click the Compute button.'#0#8'TabOrder'#2#0#0#0#6'TLabel'#6'Label1'#4'Left' + +#2#8#6'Height'#2#16#3'Top'#3#129#0#5'Width'#2'3'#7'Caption'#6#10'Variables:' + +#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#9#6'Height'#3'&'#1#3 + +'Top'#3#152#0#5'Width'#3#168#0#10'ItemHeight'#2#0#11'MultiSelect'#9#8'TabOrd' + +'er'#2#1#0#0#7'TBitBtn'#5'RowIn'#4'Left'#3#192#0#6'Height'#2''''#3'Top'#3#152 + +#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#10'RowInClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#6'RowOut'#4'Left'#3 + +#192#0#6'Height'#2''''#3'Top'#3#200#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'RowOutClick'#8'TabOrde' + +'r'#2#3#0#0#7'TBitBtn'#5'ColIn'#4'Left'#3#192#0#6'Height'#2''''#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#255#255#255#0#255#255 + +#255#0#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'ColInClick'#8'TabOrder'#2#4#0#0#7'TBitBtn'#6'ColOut'#4'Left'#3#192 + +#0#6'Height'#2''''#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#11'ColOutClick'#8'TabOrde' + +'r'#2#5#0#0#6'TLabel'#6'Label2'#4'Left'#3#241#0#6'Height'#2#16#3'Top'#3#152#0 + +#5'Width'#2'd'#7'Caption'#6#18'Row Label Variable'#11'ParentColor'#8#0#0#6'T' + +'Label'#6'Label3'#4'Left'#3#244#0#6'Height'#2#16#3'Top'#3#0#1#5'Width'#2'a'#7 + +'Caption'#6#17'Column Variables:'#11'ParentColor'#8#0#0#5'TEdit'#7'RowEdit'#4 + +'Left'#3#241#0#6'Height'#2#23#3'Top'#3#173#0#5'Width'#3#138#0#8'TabOrder'#2#6 + +#4'Text'#6#7'RowEdit'#0#0#8'TListBox'#7'ColList'#4'Left'#3#241#0#6'Height'#3 + +#173#0#3'Top'#3#16#1#5'Width'#3#145#0#10'ItemHeight'#2#0#8'TabOrder'#2#7#0#0 + +#9'TGroupBox'#9'GroupBox1'#4'Left'#3#145#1#6'Height'#3'l'#1#3'Top'#3#140#0#5 + +'Width'#3#215#0#7'Caption'#6#7'Options'#12'ClientHeight'#3'Z'#1#11'ClientWid' + +'th'#3#211#0#8'TabOrder'#2#8#0#9'TCheckBox'#6'ObsChk'#4'Left'#2#5#6'Height'#2 + +#19#3'Top'#2#4#5'Width'#3#168#0#7'Caption'#6#25'Show Observed Frequencies'#8 + +'TabOrder'#2#0#0#0#0#9'TCheckBox'#8'PropsChk'#4'Left'#3#152#1#6'Height'#2#19 + +#3'Top'#3#184#0#5'Width'#3#187#0#7'Caption'#6#29'Show Row and Col. Proportio' + +'ns'#8'TabOrder'#2#9#0#0#9'TCheckBox'#6'ExpChk'#4'Left'#3#152#1#6'Height'#2 + +#19#3'Top'#3#208#0#5'Width'#3#165#0#7'Caption'#6#25'Show Expected Frequencie' + +'s'#8'TabOrder'#2#10#0#0#9'TCheckBox'#6'ChiChk'#4'Left'#3#152#1#6'Height'#2 + +#19#3'Top'#3#232#0#5'Width'#3#169#0#7'Caption'#6#27'Show Cell Chi-square val' + +'ues'#8'TabOrder'#2#11#0#0#9'TCheckBox'#8'YatesChk'#4'Left'#3#152#1#6'Height' + +#2#19#3'Top'#3#0#1#5'Width'#3#199#0#7'Caption'#6'#Use Yate''s Correction for' + +' 2x2 table'#8'TabOrder'#2#12#0#0#9'TCheckBox'#8'ShowQChk'#4'Left'#3#152#1#6 + +'Height'#2#19#3'Top'#3#24#1#5'Width'#2'a'#7'Caption'#6#13'Show Q Matrix'#8'T' + +'abOrder'#2#13#0#0#9'TCheckBox'#9'QCheckChk'#4'Left'#3#152#1#6'Height'#2#19#3 + +'Top'#3'0'#1#5'Width'#2'~'#7'Caption'#6#18'Check that Q = UDV'#8'TabOrder'#2 + +#14#0#0#9'TCheckBox'#8'EigenChk'#4'Left'#3#152#1#6'Height'#2#19#3'Top'#3'H'#1 + +#5'Width'#3#162#0#7'Caption'#6#26'Values and Vectors of UDV'''#8'TabOrder'#2 + +#15#0#0#9'TCheckBox'#9'ShowABChk'#4'Left'#3#152#1#6'Height'#2#19#3'Top'#3'`' + +#1#5'Width'#3#143#0#7'Caption'#6#23'A, B of Generalized SVD'#8'TabOrder'#2#16 + +#0#0#9'TCheckBox'#9'CheckPChk'#4'Left'#3#152#1#6'Height'#2#19#3'Top'#3'x'#1#5 + +'Width'#3#183#0#7'Caption'#6#29'Check P is reproduced by ADB'''#8'TabOrder'#2 + +#17#0#0#9'TCheckBox'#9'RowCorres'#4'Left'#3#152#1#6'Height'#2#19#3'Top'#3#144 + +#1#5'Width'#3#133#0#7'Caption'#6#18'Row Correspondence'#8'TabOrder'#2#18#0#0 + +#9'TCheckBox'#10'ColCorrChk'#4'Left'#3#152#1#6'Height'#2#19#3'Top'#3#168#1#5 + +'Width'#3#153#0#7'Caption'#6#21'Column Correspondence'#8'TabOrder'#2#19#0#0#9 + +'TCheckBox'#11'BothCorrChk'#4'Left'#3#152#1#6'Height'#2#19#3'Top'#3#192#1#5 + +'Width'#3#202#0#7'Caption'#6#29'Row and Column Correspondence'#7'Checked'#9#5 + ,'State'#7#9'cbChecked'#8'TabOrder'#2#20#0#0#9'TCheckBox'#7'PlotChk'#4'Left'#3 + +#152#1#6'Height'#2#19#3'Top'#3#216#1#5'Width'#2'W'#7'Caption'#6#12'Plot Weig' + +'hts'#7'Checked'#9#5'State'#7#9'cbChecked'#8'TabOrder'#2#21#0#0#7'TButton'#8 + +'ResetBtn'#4'Left'#2'P'#6'Height'#2#27#3'Top'#3#203#1#5'Width'#2'E'#7'Captio' + +'n'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#22#0#0#7'TButton' + +#9'CancelBtn'#4'Left'#3#160#0#6'Height'#2#27#3'Top'#3#203#1#5'Width'#2'E'#6 + +'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#23#0#0#7 + +'TButton'#10'ComputeBtn'#4'Left'#3#240#0#6'Height'#2#27#3'Top'#3#203#1#5'Wid' + +'th'#2'E'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrde' + +'r'#2#24#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3'='#1#6'Height'#2#27#3'Top'#3 + +#203#1#5'Width'#2'E'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2 + +#25#0#0#7'TButton'#7'HelpBtn'#3'Tag'#3#160#0#4'Left'#2#9#6'Height'#2#28#3'To' + +'p'#3#203#1#5'Width'#2'@'#7'Caption'#6#4'Help'#7'OnClick'#7#12'HelpBtnClick' + +#8'TabOrder'#2#26#0#0#0 +]); diff --git a/applications/lazstats/source_orig/correspondenceunit.pas b/applications/lazstats/source_orig/correspondenceunit.pas new file mode 100644 index 000000000..4a9e5d6ff --- /dev/null +++ b/applications/lazstats/source_orig/correspondenceunit.pas @@ -0,0 +1,1027 @@ +unit CorrespondenceUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, MainUnit, Globals, functionsLib, OutPutUnit, DataProcs, + DictionaryUnit, contexthelpunit, MatrixLib, Math, BlankFrmUnit; + +type + + { TCorrespondenceForm } + + TCorrespondenceForm = class(TForm) + HelpBtn: TButton; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + ObsChk: TCheckBox; + CheckPChk: TCheckBox; + RowCorres: TCheckBox; + ColCorrChk: TCheckBox; + BothCorrChk: TCheckBox; + PlotChk: TCheckBox; + PropsChk: TCheckBox; + ExpChk: TCheckBox; + ChiChk: TCheckBox; + YatesChk: TCheckBox; + ShowQChk: TCheckBox; + QCheckChk: TCheckBox; + EigenChk: TCheckBox; + ShowABChk: TCheckBox; + ColList: TListBox; + GroupBox1: TGroupBox; + RowEdit: TEdit; + RowIn: TBitBtn; + ColIn: TBitBtn; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + RowOut: TBitBtn; + ColOut: TBitBtn; + VarList: TListBox; + Memo1: TMemo; + procedure ColInClick(Sender: TObject); + procedure ColOutClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure plotxy(Xpoints, Ypoints : DblDyneVec; Xmax, Xmin, Ymax, + Ymin : double; N : integer; + PtLabels : StrDyneVec; titlestr, + Xlabel, Ylabel : string); + procedure RowInClick(Sender: TObject); + procedure RowOutClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + CorrespondenceForm: TCorrespondenceForm; + +implementation + +{ TCorrespondenceForm } + +procedure TCorrespondenceForm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + VarList.Clear; + ColList.Clear; + RowEdit.Text := ''; + RowIn.Visible := true; + RowOut.Visible := false; + ColIn.Visible := true; + ColOut.Visible := false; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; + +procedure TCorrespondenceForm.ColInClick(Sender: TObject); +VAR i, index : integer; +begin + index := VarList.Items.Count; + i := 0; + while (i < index) do + begin + if (VarList.Selected[i]) then + begin + ColList.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + ColOut.Visible := true; +end; + +procedure TCorrespondenceForm.ColOutClick(Sender: TObject); +VAR index : integer; +begin + index := ColList.ItemIndex; + if (index < 0) then + begin + ColOut.Visible := false; + exit; + end; + VarList.Items.Add(ColList.Items.Strings[index]); + ColList.Items.Delete(index); +end; + +procedure TCorrespondenceForm.ComputeBtnClick(Sender: TObject); +VAR + i, j, RowNo, ColNo, DepNo : integer; + Row, Col, NoSelected, Ncases, Nrows, Ncols, FObs, df : integer; + RowLabels, ColLabels : StrDyneVec; + ColNoSelected : IntDyneVec; + cellstring, outline, title, filename, strvalue, Instr : string; + prompt, xtitle, ytitle : string; + Freq : IntDyneMat; + Prop, Expected, CellChi : DblDyneMat; + PObs, ChiSquare, ProbChi, liklihood, probliklihood : double; + SumX, SumY, VarX, VarY, MantelHaenszel, MHprob : double; + yates : boolean; + Adjchisqr, Adjprobchi, G, dblvalue, phi, pearsonr : double; + result, intvalue, IX, IY : integer; + CoefCont, CramerV : double; + + Trans : DblDyneMat; // transpose work matrix + P : DblDyneMat; // relative frequencies (n by q correspondence matrix) + r : DblDyneVec; // row vector of proportions + c : DblDyneVec; // column vector of proportions + Dr : DblDyneMat; // Diagonal matrix of row proportions + Dc : DblDyneMat; // Diagonal matric of column proportions + A : DblDyneMat; // n by q matrix whose columns are theleft generalized SVD vectors + Du : DblDyneMat; // q by q diagonal matrix of singular values + B : DblDyneMat; // m by q matrix whose columns are the right generalized SVD vectors + Q : DblDyneMat; // matrix to be decomposed by SVD into U x Da x V' + U : DblDyneMat; // left column vectors of SVD of Q + V : DblDyneMat; // right vectors of SVD of Q + W : DblDyneMat; // work matrix for transposing a matrix + F : DblDyneMat; // Row Coordinates + Gc : DblDyneMat; // Column Coordinates + n, q1, m : integer; // number of rows and columns of the P matrix + largest :integer; + errorcode : boolean; + X, Y : DblDyneVec; + Xmax, Xmin, Ymax, Ymin, Inertia : double; + labels : StrDyneVec; + +begin + SetLength(ColNoSelected,NoVariables+1); + yates := false; + RowNo := 0; + for i := 1 to NoVariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[i,0]; + if (cellstring = RowEdit.Text) then RowNo := i; + end; + Nrows := NoCases; + Ncols := ColList.Items.Count; + SetLength(RowLabels,Nrows+1); + SetLength(ColLabels,Ncols+1); + + if (RowNo = 0) then + begin + ShowMessage('ERROR! A variable for the row labels was not entered.'); + ColNoSelected := nil; + RowLabels := nil; + ColLabels := nil; + exit; + end; + ColNoSelected[0] := RowNo; + + // Get Column labels + for i := 0 to Ncols-1 do + begin + ColLabels[i] := ColList.Items.Strings[i]; + for j := 1 to NoVariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[j,0]; + if (cellstring = ColLabels[i])then ColNoSelected[i+1] := j; + end; + end; + + // Get row labels + for i := 1 to NoCases do + begin + RowLabels[i-1] := OS3MainFrm.DataGrid.Cells[RowNo,i]; + end; + + // allocate and initialize + SetLength(Freq,Nrows+1,Ncols+1); + SetLength(Prop,Nrows+1,Ncols+1); + SetLength(Expected,Nrows,Ncols); + SetLength(CellChi,Nrows,Ncols); + for i := 1 to Nrows + 1 do + for j := 1 to Ncols + 1 do Freq[i-1,j-1] := 0; + RowLabels[Nrows] := 'Total'; + ColLabels[Ncols] := 'Total'; + + // get cell data + Ncases := 0; + for i := 1 to NoCases do + begin + Row := i; + for j := 1 to Ncols do + begin + Col := ColNoSelected[j]; + Freq[i-1,j-1] := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[Col,Row]))); + Ncases := Ncases + Freq[i-1,j-1]; + end; + end; + Freq[Nrows,Ncols] := Ncases; + + // Now, calculate expected values + // Get row totals first + for i := 1 to Nrows do + begin + for j := 1 to Ncols do + begin + Freq[i-1,Ncols] := Freq[i-1,Ncols] + Freq[i-1,j-1]; + end; + end; + // Get col totals next + for j := 1 to Ncols do + begin + for i := 1 to Nrows do + begin + Freq[Nrows,j-1] := Freq[Nrows,j-1] + Freq[i-1,j-1]; + end; + end; + + // Then get expected values and cell chi-squares + ChiSquare := 0.0; + Adjchisqr := 0.0; + if ((YatesChk.Checked) and (Nrows = 2) and (Ncols = 2)) then yates := true; + if ((Nrows > 1) and (Ncols > 1)) then + begin + for i := 1 to Nrows do + begin + for j := 1 to Ncols do + begin + Expected[i-1,j-1] := Freq[Nrows,j-1] * Freq[i-1,Ncols] / Ncases; + if (Expected[i-1,j-1] > 0.0) then + CellChi[i-1,j-1] := sqr(Freq[i-1,j-1] - Expected[i-1,j-1]) / Expected[i-1,j-1] + else + begin + ShowMessage('ERROR! Zero expected value found.'); + CellChi[i-1,j-1] := 0.0; + end; + ChiSquare := ChiSquare + CellChi[i-1,j-1]; + end; + end; + df := (Nrows - 1) * (Ncols - 1); + if (yates = true) then // 2 x 2 corrected chi-square + begin + Adjchisqr := abs((Freq[0,0] * Freq[1,1]) - (Freq[0,1] * Freq[1,0])); + Adjchisqr := sqr(Adjchisqr - Ncases / 2.0) * Ncases; // numerator + Adjchisqr := Adjchisqr / (Freq[0,2] * Freq[1,2] * Freq[2,0] * Freq[2,1]); + Adjprobchi := 1.0 - chisquaredprob(Adjchisqr,df); + end; + end; + if (Nrows = 1) then // equal probability + begin + for j := 0 to Ncols - 1 do + begin + Expected[0,j] := Ncases / Ncols; + if (Expected[0,j] > 0) then + CellChi[0,j] := sqr(Freq[0,j] - Expected[0,j]) / Expected[0,j]; + ChiSquare := ChiSquare + CellChi[0,j]; + end; + df := Ncols - 1; + end; + + if (Ncols = 1) then // equal probability + begin + for i := 0 to Nrows - 1 do + begin + Expected[i,0] := Ncases / Nrows; + if (Expected[i,0] > 0) then + CellChi[i,0] := sqr(Freq[i,0] - Expected[i,0]) / Expected[i,0]; + ChiSquare := ChiSquare + CellChi[i,0]; + end; + df := Nrows - 1; + end; + + ProbChi := 1.0 - chisquaredprob(ChiSquare,df); // prob. larger chi + + // Print acknowledgements + OutPutFrm.RichEdit.Lines.Add('CORRESPONDENCE ANALYSIS'); + OutPutFrm.RichEdit.Lines.Add('Based on formulations of Bee-Leng Lee'); + OutPutFrm.RichEdit.Lines.Add('Chapter 11 Correspondence Analysis for ViSta'); + OutPutFrm.RichEdit.Lines.Add('Results are based on the Generalized Singular Value Decomposition'); + OutPutFrm.RichEdit.Lines.Add('of P := A x D x B where P is the relative frequencies observed,'); + OutPutFrm.RichEdit.Lines.Add('A are the left generalized singular vectors,'); + OutPutFrm.RichEdit.Lines.Add('D is a diagonal matrix of generalized singular values, and'); + OutPutFrm.RichEdit.Lines.Add('B is the transpose of the right generalized singular vectors.'); + OutPutFrm.RichEdit.Lines.Add('NOTE: The first value and corresponding vectors are 1 and are'); + OutPutFrm.RichEdit.Lines.Add('to be ignored.'); + OutPutFrm.RichEdit.Lines.Add('An intermediate step is the regular SVD of the matrix Q := UDV'); + OutPutFrm.RichEdit.Lines.Add('where Q := Dr^-1/2 x P x Dc^-1/2 where Dr is a diagonal matrix'); + OutPutFrm.RichEdit.Lines.Add('of total row relative frequencies and Dc is a diagonal matrix'); + OutPutFrm.RichEdit.Lines.Add('of total column relative frequencies.'); + OutPutFrm.ShowModal; + + //Print results to output form + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Chi-square Analysis Results'); + outline := format('No. of Cases := %d',[Ncases]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + + // print tables requested by use + if (ObsChk.Checked) then + begin + IntArrayPrint(Freq, Nrows+1, Ncols+1,'Frequencies', + RowLabels, ColLabels,'OBSERVED FREQUENCIES'); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + end; + + if (ExpChk.Checked)then + begin + outline := 'EXPECTED FREQUENCIES'; + MAT_PRINT(Expected, Nrows, Ncols, outline, RowLabels, ColLabels, NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + outline := 'ROW PROPORTIONS'; + for i := 1 to Nrows + 1 do + begin + for j := 1 to Ncols do + begin + if (Freq[i-1,Ncols] > 0.0) then + Prop[i-1,j-1] := Freq[i-1,j-1] / Freq[i-1,Ncols] + else Prop[i-1,j-1] := 0.0; + end; + if (Freq[i-1,Ncols] > 0.0) then Prop[i-1,Ncols] := 1.0 + else Prop[i-1,Ncols] := 0.0; + end; + if (PropsChk.Checked) then + begin + MAT_PRINT(Prop, Nrows+1, Ncols+1, outline, RowLabels, ColLabels, NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + outline := 'COLUMN PROPORTIONS'; + for j := 1 to Ncols + 1 do + begin + for i := 1 to Nrows do + begin + if (Freq[Nrows,j-1] > 0.0) then + Prop[i-1,j-1] := Freq[i-1,j-1] / Freq[Nrows,j-1] + else Prop[i-1,j-1] := 0.0; + end; + if (Freq[Nrows,j-1] > 0.0) then Prop[Nrows,j-1] := 1.0 + else Prop[Nrows,j-1] := 0.0; + end; + if (PropsChk.Checked) then + begin + MAT_PRINT(Prop, Nrows+1, Ncols+1, outline, RowLabels, ColLabels, NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + outline := 'PROPORTIONS OF TOTAL N'; + for i := 1 to Nrows + 1 do + for j := 1 to Ncols + 1 do Prop[i-1,j-1] := Freq[i-1,j-1] / Ncases; + Prop[Nrows,Ncols] := 1.0; + MAT_PRINT(Prop, Nrows+1, Ncols+1, outline, RowLabels, ColLabels,NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + if (ChiChk.Checked) then + begin + outline := 'CHI-SQUARED VALUE FOR CELLS'; + MAT_PRINT(CellChi, Nrows, Ncols, outline, RowLabels, ColLabels, NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Chi-square := %8.3f with D.F. := %d. Prob. > value := %8.3f',[ChiSquare,df,ProbChi]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + + if (yates = true) then + begin + outline := format('Chi-square using Yates correction = %8.3f and Prob > value := %8.3f', + [Adjchisqr,Adjprobchi]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + + liklihood := 0.0; + for i := 0 to Nrows - 1 do + for j := 0 to Ncols - 1 do + if (Freq[i,j] > 0.0) then liklihood := liklihood + Freq[i,j] * (ln(Expected[i,j] / Freq[i,j])); + liklihood := -2.0 * liklihood; + probliklihood := 1.0 - chisquaredprob(liklihood,df); + outline := format('Liklihood Ratio := %8.3f with prob. > value := %6.4f',[liklihood,probliklihood]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + + if ((Nrows > 1) and (Ncols > 1)) then + begin + phi := sqrt(ChiSquare / Ncases); + outline := format('phi correlation := %6.4f',[phi]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + + pearsonr := 0.0; + SumX := 0.0; + SumY := 0.0; + VarX := 0.0; + VarY := 0.0; + for i := 0 to Nrows - 1 do SumX := SumX + ( (i+1) * Freq[i,Ncols] ); + for j := 0 to Ncols - 1 do SumY := SumY +( (j+1) * Freq[Nrows,j] ); + for i := 0 to Nrows - 1 do VarX := VarX + ( ((i+1)*(i+1)) * Freq[i,Ncols] ); + for j := 0 to Ncols - 1 do VarY := VarY +( ((j+1)*(j+1)) * Freq[Nrows,j] ); + VarX := VarX - ((SumX * SumX) / Ncases); + VarY := VarY - ((SumY * SumY) / Ncases); + for i := 0 to Nrows - 1 do + for j := 0 to Ncols - 1 do + pearsonr := pearsonr + ((i+1)*(j+1) * Freq[i,j]); + pearsonr := pearsonr - (SumX * SumY / Ncases); + pearsonr := pearsonr / sqrt(VarX * VarY); + outline := format('Pearson Correlation r := %6.4f',[pearsonr]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + + MantelHaenszel := (Ncases-1) * (pearsonr * pearsonr); + MHprob := 1.0 - chisquaredprob(MantelHaenszel,1); + outline := format('Mantel-Haenszel Test of Linear Association := %8.3f with probability > value := %6.4f', + [MantelHaenszel, MHprob]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + + CoefCont := sqrt(ChiSquare / (ChiSquare + Ncases)); + outline := format('The coefficient of contingency := %8.3f',[CoefCont]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + + if (Nrows < Ncols) then CramerV := sqrt(ChiSquare / (Ncases * (Nrows-1))) + else CramerV := sqrt(ChiSquare / (Ncases * ((Ncols-1)))); + outline := format('Cramers V := %8.3f',[CramerV]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + n := Nrows; + q1 := Ncols; + if (n > q1) then largest := n + else largest := q1; + SetLength(P,n,q1); + SetLength(r,largest+1); + SetLength(c,q1); + SetLength(Dr,n,n); + SetLength(Dc,q1,q1); + SetLength(A,n,q1); + SetLength(Du,largest,largest); + SetLength(B,n,q1); + SetLength(Q,n,q1); + SetLength(U,n,n); + SetLength(V,q1,q1); + SetLength(W,largest+1,largest+1); + SetLength(Trans,q1,q1); + SetLength(F,n,q1); + SetLength(Gc,q1,q1); + + // get proportion matices and vectors + for i := 0 to n - 1 do + for j := 0 to q1 - 1do P[i,j] := Prop[i,j]; + for i := 0 to n - 1 do r[i] := Prop[i,q1]; + for j := 0 to q1 - 1 do c[j] := Prop[n,j]; + + // get Dr^-1/2 and Dc^-1/2 + for i := 0 to n - 1 do + begin + for j := 0 to n - 1 do + begin + if (i <> j) then Dr[i,j] := 0.0 + else Dr[i,j] := 1.0 / sqrt(r[i]); + end; + end; + for i := 0 to q1 - 1 do + begin + for j := 0 to q1 -1 do + begin + if (i <> j) then Dc[i,j] := 0.0 + else Dc[i,j] := 1.0 / sqrt(c[j]); + end; + end; + + // get q1 := Dr^-1/2 times P times Dc^-1/2 + MATAxB(W,Dr,P,n,n,n,q1,errorcode); + MATAxB(q,W,Dc,n,q1,q1,q1,errorcode); + if (ShowqChk.Checked) then + begin + outline := 'Q Matrix'; + MAT_PRINT(q,n,q1,outline,RowLabels,ColLabels,NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; +(* + Instr := InputBox('Save q1 to Main Grid?','Y','N'); + if (Instr = 'Y') then + begin + OS3MainFrm.CloseFileBtnClick(self); + OS3MainFrm.DataGrid.RowCount := n + 1; + OS3MainFrm.DataGrid.ColCount := q1 + 1; + for i := 0 to n - 1 do + for j := 0 to q1 - 1 do + OS3MainFrm.DataGrid.Cells[j+1,i+1] := q1[i,j]; + for i := 1 to n do + OS3MainFrm.DataGrid.Cells[0,i] := 'CASE ' + IntToStr(i); + for j := 1 to q1 do + OS3MainFrm.DataGrid.Cells[j,0] := 'VAR' + IntToStr(j); + end; + end; +*) + //Obtain ordinary SVD analysis of q1 + matinv(q,U,Du,V,q1); + + if (EigenChk.Checked) then + begin + outline := 'U Matrix'; + MAT_PRINT(U,n,q1,outline,RowLabels,ColLabels,NoCases); +// FrmOutPut.ShowModal; + outline := 'Singular Values'; + MAT_PRINT(Du,q1,q1,outline,ColLabels,ColLabels,NoCases); +// FrmOutPut.ShowModal; + outline := 'V Matrix'; + MAT_PRINT(V,q1,q1,outline,ColLabels,ColLabels,NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + if (qCheckChk.Checked) then + begin + // Check to see if q1 is reproduced by U x D x V' + MATAxB(W,U,Du,n,q1,q1,q1,errorcode); + for i := 0 to q1 - 1 do + for j := 0 to q1 - 1 do Trans[i,j] := V[j,i]; + MATAxB(q,W,Trans,n,q1,q1,q1,errorcode); + outline := 'Reproduced Q = UDV'; + MAT_PRINT(q,n,q1,outline,RowLabels,ColLabels,NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + // Get A := Dr^1/2 times U + for i := 0 to n - 1 do + begin + for j := 0 to n - 1 do + begin + if (i <> j) then Dr[i,j] := 0.0 + else Dr[i,j] := sqrt(r[i]); + end; + end; + MATAxB(A,Dr,U,n,n,n,q1,errorcode); + if (ShowABChk.Checked) then + begin + outline := 'A Matrix'; + MAT_PRINT(A,n,q1,outline,RowLabels,ColLabels,NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + // Get B := Dc^1/2 times V + for i := 0 to q1 - 1 do + begin + for j := 0 to q1-1 do + begin + if (i <> j) then Dc[i,j] := 0.0 + else Dc[i,j] := sqrt(c[j]); + end; + end; + MATAxB(B,Dc,V,q1,q1,q1,q1,errorcode); + if (ShowABChk.Checked) then + begin + outline := 'B Matrix'; + MAT_PRINT(B,q1,q1,outline,ColLabels,ColLabels,NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + if (CheckPChk.Checked) then + begin // see if P := A x Du x B' + for i := 0 to q1 - 1 do + for j := 0 to q1 - 1 do Trans[j,i] := B[i,j]; + MATAxB(W,A,Du,n,q1,q1,q1,errorcode); + MATAxB(P,W,Trans,n,q1,q1,q1,errorcode); + outline := 'P = '; + MAT_PRINT(P,n,q1,outline,RowLabels,ColLabels,NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + // show intertia and scree plot + Inertia := ChiSquare / Freq[Nrows,Ncols]; + outline := format('Inertia := %8.4f',[Inertia]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + if (PlotChk.Checked) then + begin + SetLength(X,n); + SetLength(Y,n); + SetLength(labels,q1); + Xmax := -10000.0; + Ymax := Xmax; + Xmin := 10000.0; + Ymin := Xmin; + X[0] := 1; + Y[0] := sqr(Du[1,1]); + for i := 1 to q1 - 1 do + begin + X[i] := i; + Y[i] := sqr(Du[i,i]); + outline := format('%4.3f%',[(Y[i] / Inertia)*100.0]); + labels[i] := outline; // 'Dim.' + IntToStr(i); + if (X[i] > Xmax) then Xmax := X[i]; + if (X[i] < Xmin) then Xmin := X[i]; + if (Y[i] > Ymax) then Ymax := Y[i]; + if (Y[i] < Ymin) then Ymin := Y[i]; + end; + title := 'Goodness of Fit Plot'; + plotxy(X,Y,Xmax,Xmin,Ymax,Ymin,q1,labels, title,'Dimension',' '); + BlankFrm.ShowModal; + labels := nil; + Y := nil; + X := nil; + end; + +// if (RowCorres.Checked)then +// begin + // Get Row coordinates F (for row profile analysis) + for i := 0 to n - 1 do + begin + for j := 0 to n - 1 do + begin + if (i <> j) then Dr[i,j] := 0.0 + else Dr[i,j] := 1.0 / r[i]; + end; + end; + MATAxB(W,Dr,A,n,n,n,q1,errorcode); +// ArrayPrint(W,n,q1,'Dr x A matrix',RowLabels,ColLabels,'Dr x A Matrix'); +// FrmOutPut.ShowModal; + MATAxB(F,W,Du,n,q1,q1,q1,errorcode); + if (RowCorres.Checked) then + begin + outline := 'Row Dimensions (Ignore Col. 1'; + MAT_PRINT(F,n,q1,outline,RowLabels,ColLabels,NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + // Get Column coordinates G (row profile analysis) + for i := 0 to q1 - 1 do + begin + for j := 0 to q1 - 1 do + begin + if (i <> j) then Dc[i,j] := 0.0 + else Dc[i,j] := 1.0 / c[j]; + end; + end; + MATAxB(Gc,Dc,B,q1,q1,q1,q1,errorcode); + if (RowCorres.Checked) then + begin + outline := 'Col. Dimensions (Ignore Col. 1'; + MAT_PRINT(Gc,q1,q1,outline,ColLabels,ColLabels,NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + if ((PlotChk.Checked) and (RowCorres.Checked))then + begin + prompt := InputBox('X Axis Dimension','1','1'); + IX := StrToInt(prompt); + prompt := InputBox('Y Axis Dimension','2','2'); + IY := StrToInt(prompt); + xtitle := 'Dimension ' + IntToStr(IX); + ytitle := 'Dimension ' + IntToStr(IY); + SetLength(X,n); + SetLength(Y,n); + Xmax := -10000.0; + Ymax := Xmax; + Xmin := 10000.0; + Ymin := Xmin; + for i := 0 to n - 1 do + begin + X[i] := F[i,IX]; + if (X[i] > Xmax) then Xmax := X[i]; + if (X[i] < Xmin) then Xmin := X[i]; + Y[i] := F[i,IY]; + if (Y[i] > Ymax) then Ymax := Y[i]; + if (Y[i] < Ymin) then Ymin := Y[i]; + end; + title := 'Row Dimensions'; + plotxy(X,Y,Xmax,Xmin,Ymax,Ymin,n,RowLabels, title,xtitle,ytitle); + BlankFrm.ShowModal; + Y := nil; + X := nil; + SetLength(X,q1); + SetLength(Y,q1); + Xmax := -10000.0; + Ymax := Xmax; + Xmin := 10000.0; + Ymin := Xmin; + for i := 0 to q1 - 1 do + begin + X[i] := Gc[i,IX]; + if (X[i] > Xmax) then Xmax := X[i]; + if (X[i] < Xmin) then Xmin := X[i]; + Y[i] := Gc[i,IY]; + if (Y[i] > Ymax) then Ymax := Y[i]; + if (Y[i] < Ymin) then Ymin := Y[i]; + end; + title := 'Column Dimensions'; + plotxy(X,Y,Xmax,Xmin,Ymax,Ymin,q1,ColLabels, title,xtitle,ytitle); + BlankFrm.ShowModal; + Y := nil; + X := nil; + end; +// end; + + // do column correspondence analysis if checked +// if (ColCorrChk.Checked) then +// begin + for i := 0 to q1 - 1 do + for j := 0 to q1 - 1 do W[i,j] := Gc[i,j]; // use last Gc + MATAxB(Gc,W,Du,q1,q1,q1,q1,errorcode); // multiply times Du + if (ColCorrChk.Checked) then + begin + outline := 'Column Dimensions (Ignore Col. 1'; + MAT_PRINT(Gc,q1,q1,outline,ColLabels,ColLabels,NoCases); + OutPutFrm.ShowModal; + end; + MATAxB(F,Dr,A,n,n,n,q1,errorcode); // Get new F + if (ColCorrChk.Checked) then + begin + outline := 'Row Dimensions (Ignore Col. 1)'; + MAT_PRINT(F,n,q1,outline,RowLabels,ColLabels,NoCases); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + if ((PlotChk.Checked) and (ColCorrChk.Checked)) then + begin + prompt := InputBox('X Axis Dimension','1','1'); + IX := StrToInt(prompt); + prompt := InputBox('Y Axis Dimension','2','2'); + IY := StrToInt(prompt); + SetLength(X,q1); + SetLength(Y,q1); + xtitle := 'Dimension ' + IntToStr(IX); + ytitle := 'Dimension ' + IntToStr(IY); + Xmax := -10000.0; + Ymax := Xmax; + Xmin := 10000.0; + Ymin := Xmin; + for i := 0 to q1 - 1 do + begin + X[i] := Gc[i,IX]; + if (X[i] > Xmax) then Xmax := X[i]; + if (X[i] < Xmin) then Xmin := X[i]; + Y[i] := Gc[i,IY]; + if (Y[i] > Ymax) then Ymax := Y[i]; + if (Y[i] < Ymin) then Ymin := Y[i]; + end; + title := 'Column Dimensions'; + plotxy(X,Y,Xmax,Xmin,Ymax,Ymin,q1,ColLabels, title,xtitle,ytitle); + BlankFrm.ShowModal; + Y := nil; + X := nil; + SetLength(X,n); + SetLength(Y,n); + Xmax := -10000.0; + Ymax := Xmax; + Xmin := 10000.0; + Ymin := Xmin; + for i := 0 to n - 1 do + begin + X[i] := F[i,IX]; + if (X[i] > Xmax) then Xmax := X[i]; + if (X[i] < Xmin) then Xmin := X[i]; + Y[i] := F[i,IY]; + if (Y[i] > Ymax) then Ymax := Y[i]; + if (Y[i] < Ymin) then Ymin := Y[i]; + end; + title := 'Row Dimensions'; + plotxy(X,Y,Xmax,Xmin,Ymax,Ymin,n,RowLabels, title,xtitle,ytitle); + BlankFrm.ShowModal; + Y := nil; + X := nil; + end; +// end; + + // do both if checked + if (BothCorrChk.Checked) then + begin + // F is same as for Row correspondence and Gc is same as for columns + for i := 0 to n - 1 do + for j := 0 to q1 - 1 do W[i,j] := F[i,j]; + MATAxB(F,W,Du,n,q1,q1,q1,errorcode); + outline := 'Row Dimensions (Ignore Col. 1'; + MAT_PRINT(F,n,q1,outline,RowLabels,ColLabels,NoCases); + OutPutFrm.ShowModal; + outline := 'Column Dimensions (Ignore Col. 1)'; + MAT_PRINT(Gc,q1,q1,outline,ColLabels,ColLabels,NoCases); + OutPutFrm.ShowModal; + if (PlotChk.Checked)then + begin + prompt := InputBox('X Axis Dimension','1','1'); + IX := StrToInt(prompt); + prompt := InputBox('Y Axis Dimension','2','2'); + IY := StrToInt(prompt); + xtitle := 'Dimension ' + IntToStr(IX); + ytitle := 'Dimension ' + IntToStr(IY); + SetLength(X,n); + SetLength(Y,n); + Xmax := -10000.0; + Ymax := Xmax; + Xmin := 10000.0; + Ymin := Xmin; + for i := 0 to n - 1 do + begin + X[i] := F[i,IX]; + if (X[i] > Xmax) then Xmax := X[i]; + if (X[i] < Xmin) then Xmin := X[i]; + Y[i] := F[i,IY]; + if (Y[i] > Ymax) then Ymax := Y[i]; + if (Y[i] < Ymin) then Ymin := Y[i]; + end; + title := 'Row Dimensions'; + plotxy(X,Y,Xmax,Xmin,Ymax,Ymin,n,RowLabels, title,xtitle,ytitle); + BlankFrm.ShowModal; + Y := nil; + X := nil; + SetLength(X,q1); + SetLength(Y,q1); + Xmax := -10000.0; + Ymax := Xmax; + Xmin := 10000.0; + Ymin := Xmin; + for i := 0 to q1 - 1 do + begin + X[i] := Gc[i,IX]; + if (X[i] > Xmax) then Xmax := X[i]; + if (X[i] < Xmin) then Xmin := X[i]; + Y[i] := Gc[i,IY]; + if (Y[i] > Ymax) then Ymax := Y[i]; + if (Y[i] < Ymin) then Ymin := Y[i]; + end; + title := 'Column Dimensions'; + plotxy(X,Y,Xmax,Xmin,Ymax,Ymin,q1,ColLabels, title,xtitle,ytitle); + BlankFrm.ShowModal; + Y := nil; + X := nil; + end; + end; +// FrmOutPut.ShowModal; + +// clean up memory + Gc := nil; + F := nil; + Trans := nil; + W := nil; + V := nil; + q := nil; + B := nil; + Du := nil; + A := nil; + Dc := nil; + Dr := nil; + c := nil; + r := nil; + P := nil; + ColLabels := nil; + RowLabels := nil; + CellChi := nil; + Expected := nil; + Prop := nil; + Freq := nil; + ColNoSelected := nil; +end; +end; + +procedure TCorrespondenceForm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TCorrespondenceForm.plotxy(Xpoints, Ypoints : DblDyneVec; Xmax, Xmin, Ymax, + Ymin : double; N : integer; + PtLabels : StrDyneVec; titlestr, + Xlabel, Ylabel : string); +VAR + i, xpos, ypos, hleft, hright, vtop, vbottom, imagewide :integer; + vhi, hwide, offset, strhi, imagehi : integer; + maxval, minval, valincr, Yvalue, Xvalue, value : double; + Title, astring, outline : string; + +begin + Title := 'X versus Y PLOT'; + BlankFrm.Caption := Title; + imagewide := BlankFrm.Image1.Width; + imagehi := BlankFrm.Image1.Height; + BlankFrm.Image1.Canvas.FloodFill(0,0,clYellow,fsBorder); + vtop := 20; + vbottom := round(imagehi) - 80; + vhi := vbottom - vtop; + hleft := 100; + hright := imagewide - 80; + hwide := hright - hleft; + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.Brush.Color := clWhite; + + // Draw chart border + BlankFrm.Image1.Canvas.Rectangle(0,0,imagewide,imagehi); + + // draw horizontal axis + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.MoveTo(hleft,vbottom); + BlankFrm.Image1.Canvas.LineTo(hright,vbottom); + valincr := (Xmax - Xmin) / 10.0; + for i := 1 to 11 do + begin + ypos := vbottom; + Xvalue := Xmin + valincr * (i - 1); + xpos := round(hwide * ((Xvalue - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + ypos := ypos + 10; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + outline := format('%6.2f',[Xvalue]); + Title := outline; + offset := BlankFrm.Image1.Canvas.TextWidth(Title) div 2; + xpos := xpos - offset; + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + end; + astring := Xlabel; // 'Dimension 1'; + xpos := hleft + (hwide div 2) - (BlankFrm.Image1.Canvas.TextWidth(astring) div 2); + ypos := vbottom + 20; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,astring); + + // Draw vertical axis + Title := Ylabel; // 'Dimension 2'; + xpos := hleft - BlankFrm.Image1.Canvas.TextWidth(Title) div 2; + ypos := vtop - BlankFrm.Image1.Canvas.TextHeight(Title); + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + xpos := hleft; + ypos := vtop; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + ypos := vbottom; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + valincr := (Ymax - Ymin) / 10.0; + for i := 1 to 11 do + begin + value := Ymax - ((i-1) * valincr); + outline := format('%8.3f',[value]); + Title := outline; + strhi := BlankFrm.Image1.Canvas.TextHeight(Title); + xpos := 10; + Yvalue := Ymax - (valincr * (i-1)); + ypos := round(vhi * ( (Ymax - Yvalue) / (Ymax - Ymin))); + ypos := ypos + vtop - strhi div 2; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + xpos := hleft; + ypos := ypos + strhi div 2; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + xpos := hleft - 10; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + end; + + // draw points for x and y pairs + BlankFrm.Image1.Canvas.Font.Size := 8; + for i := 0 to N - 1 do + begin + ypos := round(vhi * ( (Ymax - Ypoints[i]) / (Ymax - Ymin))); + ypos := ypos + vtop; + xpos := round(hwide * ( (Xpoints[i] - Xmin) / (Xmax - Xmin))); + xpos := xpos + hleft; + BlankFrm.Image1.Canvas.Brush.Color := clNavy; + BlankFrm.Image1.Canvas.Brush.Style := bsSolid; + BlankFrm.Image1.Canvas.Pen.Color := clNavy; + BlankFrm.Image1.Canvas.Ellipse(xpos,ypos,xpos+5,ypos+5); + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.Brush.Color := clWhite; + BlankFrm.Image1.Canvas.TextOut(xpos+3,ypos-5,PtLabels[i]); + end; + xpos := hleft + (hwide div 2) - (BlankFrm.Image1.Canvas.TextWidth(titlestr) div 2); + ypos := vbottom + 40; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,titlestr); +end; + +procedure TCorrespondenceForm.RowInClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + RowEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + RowIn.Visible := false; + RowOut.Visible := true; +end; + +procedure TCorrespondenceForm.RowOutClick(Sender: TObject); +begin + VarList.Items.Add(RowEdit.Text); + RowEdit.Text := ''; + RowIn.Visible := true; + RowOut.Visible := false; +end; + +initialization + {$I correspondenceunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/corsimunit.pas b/applications/lazstats/source_orig/corsimunit.pas new file mode 100644 index 000000000..6e6b9cc48 --- /dev/null +++ b/applications/lazstats/source_orig/corsimunit.pas @@ -0,0 +1,370 @@ +unit CorSimUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + ExtCtrls, StdCtrls, Globals, OutPutUnit, Math; + +type + + { TCorSimFrm } + + TCorSimFrm = class(TForm) + Nobs: TEdit; + Image1: TImage; + Label6: TLabel; + ReturnBtn: TButton; + ComputeBtn: TButton; + Corr: TEdit; + Label5: TLabel; + SDY: TEdit; + Label4: TLabel; + SDX: TEdit; + Label3: TLabel; + MeanY: TEdit; + Label2: TLabel; + MeanX: TEdit; + Label1: TLabel; + Panel1: TPanel; + procedure ComputeBtnClick(Sender: TObject); + procedure CorrKeyPress(Sender: TObject; var Key: char); + procedure FormShow(Sender: TObject); + procedure MeanXKeyPress(Sender: TObject; var Key: char); + procedure MeanYKeyPress(Sender: TObject; var Key: char); + procedure NobsKeyPress(Sender: TObject; var Key: char); + procedure SDXKeyPress(Sender: TObject; var Key: char); + procedure SDYKeyPress(Sender: TObject; var Key: char); + private + { private declarations } + xmean, ymean, xsd, ysd, corxy, corsqr, yvariance, predvar : double; + errvariance, stderror, b, constant, newxmean, newymean : double; + newxsd, newysd, newcorr, randomerror, newb, newconstant : double; + x, y : DblDyneVec; + freqx, freqy : IntDyneVec; + N : integer; + procedure plot(Sender: TObject); + public + { public declarations } + end; + +var + CorSimFrm: TCorSimFrm; + +implementation + +{ TCorSimFrm } + +procedure TCorSimFrm.MeanXKeyPress(Sender: TObject; var Key: char); +begin + if Ord(Key) = 13 then MeanY.SetFocus; +end; + +procedure TCorSimFrm.CorrKeyPress(Sender: TObject; var Key: char); +begin + if Ord(Key) = 13 then Nobs.SetFocus; +end; + +procedure TCorSimFrm.ComputeBtnClick(Sender: TObject); +var + outline : string; + i : integer; +begin + N := StrToInt(NObs.Text); + xmean := StrToFloat(MeanX.Text); + ymean := StrToFloat(MeanY.Text); + xsd := StrToFloat(SDX.Text); + ysd := StrToFloat(SDY.Text); + corxy := StrToFloat(Corr.Text); + Randomize; + + SetLength(freqx,N + 1); + SetLength(freqy,N + 1); + SetLength(x,N + 1); + SetLength(y,N + 1); + + // generate x and y data observations + corsqr := corxy * corxy; + yvariance := ysd * ysd; + predvar := corsqr * yvariance; + errvariance := yvariance - predvar; + stderror := sqrt(errvariance); + b := corxy * (ysd / xsd); + constant := ymean - (b * xmean); + + newxmean := 0.0; + newymean := 0.0; + newxsd := 0.0; + newysd := 0.0; + newcorr := 0.0; + for i := 1 to N do + begin + x[i] := RandG(xmean,xsd); + randomerror := RandG(0.0,stderror); + y[i] := (b * x[i]) + constant + randomerror; + newxmean := newxmean + x[i]; + newymean := newymean + y[i]; + newxsd := newxsd + (x[i] * x[i]); + newysd := newysd + (y[i] * y[i]); + newcorr := newcorr + (x[i] * y[i]); + end; + newxsd := newxsd - ((newxmean * newxmean) / N); + newxsd := newxsd / (N - 1.0); + newxsd := sqrt(newxsd); + newysd := newysd - ((newymean * newymean) / N); + newysd := newysd / (N - 1.0); + newysd := sqrt(newysd); + newcorr := newcorr - ((newxmean * newymean) / N); + newcorr := newcorr / (N - 1.0); + newcorr := newcorr / (newxsd * newysd); + newxmean := newxmean / N; + newymean := newymean / N; + newb := newcorr * (newysd / newxsd); + newconstant := newymean - (newb * newxmean); + OutPutFrm.RichEdit.Lines.Clear; + outline := 'POPULATION PARAMETERS FOR THE SIMULATION'; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Mean X := %8.3f, Std. Dev. X := %8.3f',[xmean, xsd]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Mean Y := %8.3f, Std. Dev. Y := %8.3f',[ymean, ysd]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Product-Moment Correlation := %8.3f',[corxy]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Regression line slope := %8.3f, constant := %8.3f', + [b, constant]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('SAMPLE STATISTICS FOR %d OBSERVATIONS FROM THE POPULATION',[N]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Mean X := %8.3f, Std. Dev. X := %8.3f',[newxmean, newxsd]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Mean Y := %8.3f, Std. Dev. Y := %8.3f',[newymean, newysd]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Product-Moment Correlation := %8.3f',[newcorr]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Regression line slope := %8.3f, constant := %8.3f', + [newb, newconstant]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Pair No. X Y'); + for i := 1 to N do + begin + outline := format(' %3d %9.3f %9.3f',[i,x[i],y[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.ShowModal; + plot(self); + freqx := nil; + freqy := nil; + x := nil; + y := nil; + ReturnBtn.SetFocus; +end; + +procedure TCorSimFrm.FormShow(Sender: TObject); +begin + CorSimFrm.Image1.Canvas.Pen.Color := clBlack; + CorSimFrm.Image1.Canvas.Brush.Color := clWhite; + CorSimFrm.Image1.Canvas.Clear; + CorSimFrm.Image1.Canvas.FloodFill(1,1,clWhite,fsborder); + MeanX.Text := '100'; + MeanY.Text := '100'; + SDX.Text := '15'; + SDY.Text := '15'; + Corr.Text := '.8'; + Nobs.Text := '100'; +end; + +procedure TCorSimFrm.MeanYKeyPress(Sender: TObject; var Key: char); +begin + if Ord(Key) = 13 then SDX.SetFocus; +end; + +procedure TCorSimFrm.NobsKeyPress(Sender: TObject; var Key: char); +begin + if Ord(Key) = 13 then ComputeBtn.SetFocus; +end; + +procedure TCorSimFrm.SDXKeyPress(Sender: TObject; var Key: char); +begin + if Ord(Key) = 13 then SDY.SetFocus; +end; + +procedure TCorSimFrm.SDYKeyPress(Sender: TObject; var Key: char); +begin + if Ord(Key) = 13 then Corr.SetFocus; +end; + +procedure TCorSimFrm.plot(Sender: TObject); +var + minx, maxx, miny, maxy, xincrement, yincrement : double; + predy1, predy2, lowerx, upperx, frange, prop : double; + charlabel : string; + xpos, ypos, xpos1, ypos1, xpos2, ypos2 : integer; + i, winwidth, winheight, xoffset, yoffset, xaxislong, yaxislong : integer; + j, xspacing, yspacing, labelwidth, minfreq, maxfreq : integer; + flength, theight, lowery, uppery : integer; +begin + // get min and max of x and y points + minx := x[1]; + maxx := minx; + miny := y[1]; + maxy := miny; + for i := 1 to N do + begin + if (minx > x[i]) then minx := x[i]; + if (maxx < x[i]) then maxx := x[i]; + if (miny > y[i]) then miny := y[i]; + if (maxy < y[i]) then maxy := y[i]; + end; + xincrement := (maxx - minx) / 10; + yincrement := (maxy - miny) / 10; + + winwidth := CorSimFrm.Image1.Width; + winheight := CorSimFrm.Image1.Height; + xoffset := winwidth div 5; + yoffset := winheight div 5; + xaxislong := winwidth - xoffset- winwidth div 10; + yaxislong := winheight - yoffset - winheight div 10; + Image1.Canvas.Pen.Color := clBlack; + Image1.Canvas.MoveTo(xoffset,yaxislong); + Image1.Canvas.LineTo(winwidth,yaxislong); + Image1.Canvas.MoveTo(xoffset,yaxislong); + Image1.Canvas.LineTo(xoffset,0); + xspacing := xaxislong div 10; + yspacing := yaxislong div 10; + // do xaxis + for i := 0 to 11 do + begin + Image1.Canvas.MoveTo(xoffset + (i * xspacing),yaxislong); + Image1.Canvas.LineTo(xoffset + (i * xspacing),yaxislong + 10); + charlabel := format('%8.3f',[minx + (i * xincrement)]); + labelwidth := Image1.Canvas.TextWidth(charlabel); + xpos := xoffset + (i * xspacing)-labelwidth div 2; + ypos := yaxislong + 12; + Image1.Canvas.TextOut(xpos,ypos,charlabel); + end; + // do yaxis + for i := 0 to 11 do + begin + Image1.Canvas.MoveTo(xoffset, yaxislong - (i * yspacing)); + Image1.Canvas.LineTo(xoffset-10,yaxislong - (i * yspacing)); + charlabel := format('%8.3f',[miny + (i * yincrement)]); + labelwidth := Image1.Canvas.TextWidth(charlabel); + xpos := xoffset-10-labelwidth; + ypos := yaxislong - (i * yspacing); + Image1.Canvas.TextOut(xpos,ypos,charlabel); + end; + // plot points + Image1.Canvas.Pen.Color := clRed; + for i := 1 to N do + begin + xpos := round(xoffset + ((x[i] - minx) / (maxx - minx) * xaxislong)); + ypos := round(yaxislong - ((y[i] - miny) / (maxy - miny) * yaxislong)); + Image1.Canvas.Ellipse(xpos,ypos,xpos+5,ypos+5); + end; + // draw regression line + Image1.Canvas.Pen.Color := clBlack; + predy1 := newb * minx + newconstant; + predy2 := newb * maxx + newconstant; + xpos1 := xoffset; + xpos2 := xoffset + xaxislong; + ypos1 := round(yaxislong - ((predy1 - miny) / (maxy - miny) * yaxislong)); + ypos2 := round(yaxislong - ((predy2 - miny) / (maxy - miny) * yaxislong)); + Image1.Canvas.MoveTo(xpos1,ypos1); + Image1.Canvas.LineTo(xpos2,ypos2); + + // do x frequency distribution + xincrement := (maxx-minx) / 50.0; + xspacing := xaxislong div 50; + for j := 1 to 51 do freqx[j] := 0; + for i := 1 to N do + begin + for j := 1 to 51 do + begin + lowerx := minx + (j * xincrement); + upperx := minx + ((j+1) * xincrement); + if ((x[i] >= lowerx) and (x[i] < upperx)) then freqx[j] := freqx[j] + 1; + end; + end; + // plot the x frequencies + minfreq := N; + maxfreq := 0; + for j := 1 to 51 do + begin + if (freqx[j] > maxfreq) then maxfreq := freqx[j]; + if (freqx[j] < minfreq) then minfreq := freqx[j]; + end; + flength := winheight - (yaxislong + 25) - Panel1.Height; + for j := 1 to 51 do + begin + xpos := xoffset + (j * xspacing); + ypos1 := round(yaxislong + 25 + + ((freqx[j] - minfreq)/ (maxfreq-minfreq) * (flength))); + ypos2 := yaxislong + 25; + Image1.Canvas.MoveTo(xpos,ypos1); + Image1.Canvas.LineTo(xpos,ypos2); + end; + Image1.Canvas.MoveTo(xoffset,yaxislong+25); + Image1.Canvas.LineTo(winwidth,yaxislong+25); + xpos := 20; + ypos := yaxislong+30; + Image1.Canvas.TextOut(xpos,ypos,'X DISTRIBUTION'); + theight := Image1.Canvas.TextHeight('X'); + ypos := ypos + theight; + charlabel := format('correlation := %6.3f',[newcorr]); + Image1.Canvas.TextOut(xpos,ypos,charlabel); + ypos := ypos + theight; + charlabel := format('Mean X := %8.3f, Mean Y := %8.3f',[newxmean, newymean]); + Image1.Canvas.TextOut(xpos,ypos,charlabel); + charlabel := format('SD X := %8.3f, SD Y := %8.3f',[newxsd, newysd]); + ypos := ypos + theight; + Image1.Canvas.TextOut(xpos,ypos,charlabel); + + // do y frequency distribution + yincrement := (maxy-miny) / 50.0; + yspacing := yaxislong div 50; + for j := 1 to 51 do freqy[j] := 0; + for i := 1 to N do + begin + for j := 1 to 51 do + begin + lowery := round(miny + (j * yincrement)); + uppery := round(miny + ((j+1) * yincrement)); + if ((y[i] >= lowery) and (y[i] < uppery)) then freqy[j] := freqy[j] + 1; + end; + end; + // plot the y frequencies + minfreq := N; + maxfreq := 0; + for j := 1 to 51 do + begin + if (freqy[j] > maxfreq) then maxfreq := freqy[j]; + if (freqy[j] < minfreq) then minfreq := freqy[j]; + end; + flength := winwidth - (xaxislong + 150); + for j := 1 to 51 do + begin + ypos := yaxislong - (j * yspacing); + frange := maxfreq - minfreq; + prop := (freqy[j] - minfreq) / frange; + xpos1 := round(xoffset - 50 - (prop * flength)); + xpos2 := xoffset - 50; + Image1.Canvas.MoveTo(xpos1,ypos); + Image1.Canvas.LineTo(xpos2,ypos); + end; + Image1.Canvas.MoveTo(xoffset - 50,yaxislong); + Image1.Canvas.LineTo(xoffset - 50,0); + Image1.Canvas.TextOut(0,0,'Y DISTRIBUTION'); +end; + +initialization + {$I corsimunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/crosstabunit.lfm b/applications/lazstats/source_orig/crosstabunit.lfm new file mode 100644 index 000000000..4b0244c29 --- /dev/null +++ b/applications/lazstats/source_orig/crosstabunit.lfm @@ -0,0 +1,173 @@ +object CrossTabFrm: TCrossTabFrm + Left = 134 + Height = 300 + Top = 106 + Width = 473 + Caption = 'Cross Tabulation' + ClientHeight = 300 + ClientWidth = 473 + 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 = 200 + Height = 14 + Top = 8 + Width = 98 + Caption = 'Variables to Analyze' + ParentColor = False + end + object VarList: TListBox + Left = 7 + Height = 264 + Top = 23 + Width = 132 + ItemHeight = 0 + MultiSelect = True + TabOrder = 0 + end + object ListBox1: TListBox + Left = 200 + Height = 255 + Top = 32 + Width = 141 + ItemHeight = 0 + TabOrder = 1 + end + object InBtn: TBitBtn + Left = 152 + Height = 33 + Top = 33 + Width = 37 + 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 = 2 + end + object OutBtn: TBitBtn + Left = 152 + Height = 33 + Top = 80 + Width = 37 + 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 = 3 + end + object ResetBtn: TButton + Left = 368 + Height = 33 + Top = 64 + Width = 82 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 4 + end + object CancelBtn: TButton + Left = 368 + Height = 33 + Top = 120 + Width = 82 + Caption = 'Cancel' + ModalResult = 2 + OnClick = CancelBtnClick + TabOrder = 5 + end + object OKBtn: TButton + Left = 368 + Height = 33 + Top = 176 + Width = 82 + Caption = 'OK' + ModalResult = 1 + OnClick = OKBtnClick + TabOrder = 6 + end + object HelpBtn: TButton + Tag = 116 + Left = 368 + Height = 32 + Top = 16 + Width = 82 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 7 + end +end diff --git a/applications/lazstats/source_orig/crosstabunit.lrs b/applications/lazstats/source_orig/crosstabunit.lrs new file mode 100644 index 000000000..677a6dfd2 --- /dev/null +++ b/applications/lazstats/source_orig/crosstabunit.lrs @@ -0,0 +1,126 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TCrossTabFrm','FORMDATA',[ + 'TPF0'#12'TCrossTabFrm'#11'CrossTabFrm'#4'Left'#3#134#0#6'Height'#3','#1#3'To' + +'p'#2'j'#5'Width'#3#217#1#7'Caption'#6#16'Cross Tabulation'#12'ClientHeight' + +#3','#1#11'ClientWidth'#3#217#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'Widt' + +'h'#2'Z'#7'Caption'#6#19'Available Variables'#11'ParentColor'#8#0#0#6'TLabel' + +#6'Label2'#4'Left'#3#200#0#6'Height'#2#14#3'Top'#2#8#5'Width'#2'b'#7'Caption' + +#6#20'Variables to Analyze'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'L' + +'eft'#2#7#6'Height'#3#8#1#3'Top'#2#23#5'Width'#3#132#0#10'ItemHeight'#2#0#11 + +'MultiSelect'#9#8'TabOrder'#2#0#0#0#8'TListBox'#8'ListBox1'#4'Left'#3#200#0#6 + +'Height'#3#255#0#3'Top'#2' '#5'Width'#3#141#0#10'ItemHeight'#2#0#8'TabOrder' + +#2#1#0#0#7'TBitBtn'#5'InBtn'#4'Left'#3#152#0#6'Height'#2'!'#3'Top'#2'!'#5'Wi' + +'dth'#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#2#0#0#7'TBitBtn'#6'OutBtn'#4'Left'#3#152#0#6'Heig' + +'ht'#2'!'#3'Top'#2'P'#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#3#0#0 + +#7'TButton'#8'ResetBtn'#4'Left'#3'p'#1#6'Height'#2'!'#3'Top'#2'@'#5'Width'#2 + +'R'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#4#0#0 + +#7'TButton'#9'CancelBtn'#4'Left'#3'p'#1#6'Height'#2'!'#3'Top'#2'x'#5'Width'#2 + +'R'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#7'OnClick'#7#14'CancelBtnClic' + +'k'#8'TabOrder'#2#5#0#0#7'TButton'#5'OKBtn'#4'Left'#3'p'#1#6'Height'#2'!'#3 + +'Top'#3#176#0#5'Width'#2'R'#7'Caption'#6#2'OK'#11'ModalResult'#2#1#7'OnClick' + +#7#10'OKBtnClick'#8'TabOrder'#2#6#0#0#7'TButton'#7'HelpBtn'#3'Tag'#2't'#4'Le' + +'ft'#3'p'#1#6'Height'#2' '#3'Top'#2#16#5'Width'#2'R'#7'Caption'#6#4'Help'#7 + +'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2#7#0#0#0 +]); diff --git a/applications/lazstats/source_orig/crosstabunit.pas b/applications/lazstats/source_orig/crosstabunit.pas new file mode 100644 index 000000000..8c19c014d --- /dev/null +++ b/applications/lazstats/source_orig/crosstabunit.pas @@ -0,0 +1,385 @@ +unit CrossTabUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, Globals, OutPutUnit, MainUnit, DataProcs, FunctionsLib, + MatrixLib, contexthelpunit; + +type + + { TCrossTabFrm } + + TCrossTabFrm = class(TForm) + HelpBtn: TButton; + InBtn: TBitBtn; + OutBtn: TBitBtn; + ResetBtn: TButton; + CancelBtn: TButton; + OKBtn: TButton; + Label1: TLabel; + Label2: TLabel; + VarList: TListBox; + ListBox1: 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); + private + { private declarations } + grandsum, sum, index : integer; + no_in_list, length_array, ptr1, ptr2 : integer ; + var_list, min_value, max_value, levels, displace, subscript : IntDyneVec; + freq : IntDyneVec; + outgrid : DblDyneMat; + rowlabels : StrDyneVec; + colLabels : StrDyneVec; + ColNoSelected : IntDyneVec; + NoSelected : integer; + NV, NC : integer; + + procedure INITIALIZEIT(Sender: TObject); + procedure GET_Levels(Sender: TObject); + function INDEX_POSITION( x : IntDyneVec; Sender: TObject ) : integer; + Procedure TABULATE(Sender : TObject); + procedure BREAKDOWN(Sender : TObject); + + public + { public declarations } + end; + +var + CrossTabFrm: TCrossTabFrm; + +implementation + +{ TCrossTabFrm } + +procedure TCrossTabFrm.ResetBtnClick(Sender: TObject); +var + i : integer; + +begin + VarList.Clear; + ListBox1.Clear; + OutBtn.Enabled := false; + InBtn.Enabled := true; + NV := NoVariables; + NC := NoCases; + for i := 1 to NV do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; + + + +procedure TCrossTabFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TCrossTabFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TCrossTabFrm.InBtnClick(Sender: TObject); +var + index2, i : integer; + +begin + index2 := VarList.Items.Count; + i := 0; + while i < index2 do + begin + if (VarList.Selected[i]) then + begin + ListBox1.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index2 := index2 - 1; + i := 0; + end + else i := i + 1; + end; + OutBtn.Enabled := true; +end; + +procedure TCrossTabFrm.OKBtnClick(Sender: TObject); +label CleanUp; +var + cellvalue : string; + i, j : integer; + outline : string; + +begin + SetLength(var_list,NV); + SetLength(min_value,NV); + SetLength(max_value,NV); + SetLength(levels,NC); + SetLength(displace,NC); + SetLength(subscript,NC); + SetLength(ColNoSelected,NV); + + OutPutFrm.RichEdit.Clear; +// OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify; + OutPutFrm.RichEdit.Lines.Add('CROSSTAB RESULTS'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := ' Analyzed data is from file : '; + outline := outline + OS3MainFrm.FileNameEdit.Text; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + INITIALIZE(self); + if ListBox1.Items.Count = 0 then + begin + // Application.MessageBox('No variables selected for analysis.','ERROR!',MB_OK); + goto CleanUp; + end; + + NoSelected := 0; + for i := 0 to ListBox1.Items.Count-1 do + begin + for j := 1 to NV do + begin + cellvalue := OS3MainFrm.DataGrid.Cells[j,0]; + if cellvalue = ListBox1.Items.Strings[i] then + begin + var_list[i] := j; + ColNoSelected[i] := j; + NoSelected := NoSelected + 1; + break; + end; + end; + end; + no_in_list := ListBox1.Items.Count; + GET_LEVELS(self); + TABULATE(self); + BREAKDOWN(self); + OutPutFrm.RichEdit.Lines.Add(''); + cellvalue := format('Grand sum accross all categories = %3d',[grandsum]); + OutPutFrm.RichEdit.Lines.Add(cellvalue); + OutPutFrm.ShowModal; + +CleanUp: + ColNoSelected := nil; + freq := nil; + collabels := nil; + rowlabels := nil; + outgrid := nil; + subscript := nil; + displace := nil; + levels := nil; + max_value := nil; + min_value := nil; + var_list := nil; + CrossTabFrm.Hide; +end; + +procedure TCrossTabFrm.OutBtnClick(Sender: TObject); +var + index2: integer; + +begin + index2 := ListBox1.ItemIndex; + VarList.Items.Add(ListBox1.Items.Strings[index2]); + ListBox1.Items.Delete(index2); + InBtn.Enabled := true; + if ListBox1.Items.Count = 0 then OutBtn.Enabled := false; +end; + +procedure TCrossTabFrm.CancelBtnClick(Sender: TObject); +begin + CrossTabFrm.Hide; +end; + +procedure TCrossTabFrm.INITIALIZEIT(Sender: TObject); +var + i : integer; + +begin + no_in_list := 0; + for i := 1 to NV do + begin + var_list[i-1] := 0; + min_value[i-1] := 0; + max_value[i-1] := 0; + levels[i-1] := 0; + displace[i-1] := 0; + subscript[i-1] := 0; + end; + index := 0; + length_array := 0; + grandsum := 0; +end; { initialize procedure } +//----------------------------------------------------------------------- + +procedure TCrossTabFrm.GET_Levels(Sender: TObject); +var + i, j, k : integer; + value : double; + outline : string; + +begin + for i := 1 to no_in_list do + begin + j := var_list[i-1]; + if Not GoodRecord(1,NoSelected,ColNoSelected) then continue; + value := StrToFloat(OS3MainFrm.DataGrid.Cells[j,1]); + min_value[i-1] := round(value); + max_value[i-1] := round(value); + for k := 2 to NC do + begin + if Not GoodRecord(k,NoSelected,ColNoSelected) then continue; + value := StrToFloat(OS3MainFrm.DataGrid.Cells[j,k]); + if value < min_value[i-1] then min_value[i-1] := + round(value); + if value > max_value[i-1] then max_value[i-1] := + round(value); + end; + end; + for i := 1 to no_in_list do + begin + j := var_list[i-1]; + levels[i-1] := max_value[i-1] - min_value[i-1] + 1; + outline := format('%s min.=%3d, max.=%3d, no. levels = %3d', + [OS3MainFrm.DataGrid.Cells[j,0],min_value[i-1],max_value[i-1],levels[i-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + displace[no_in_list-1] := 1; + if no_in_list > 1 then + begin + for i := (no_in_list - 1) downto 1 do + displace[i-1] := levels[i] * displace[i]; + end; +end; +//----------------------------------------------------------------------- +function TCrossTabFrm.INDEX_POSITION( x : IntDyneVec; Sender: TObject ) : integer; + +var index2 : integer; + i : integer; + +begin + index2 := x[no_in_list-1]; + if no_in_list > 1 then + begin + for i := 1 to no_in_list - 1 do + index2 := index2 + (x[i-1] -1) * displace[i-1]; + end; + index_position := index2; +end; { function INDEX_POSITION } +//------------------------------------------------------------------------ +Procedure TCrossTabFrm.TABULATE(Sender : TObject); +var + i, j, k : integer; + value : double; + x : integer; +begin + length_array := 1; + for i := 1 to no_in_list do length_array := length_array * levels[i-1]; + SetLength(freq,length_array+1); + for i := 0 to length_array do freq[i] := 0; + for i := 1 to NC do + begin + if IsFiltered(i) then continue; + for j := 1 to no_in_list do + begin + if Not GoodRecord(i,NoSelected,ColNoSelected) then continue; + k := var_list[j-1]; + value := StrToFloat(OS3MainFrm.DataGrid.Cells[k,i]); + x := round(value); + x := x - min_value[j-1] + 1; + subscript[j-1] := x; + end; + j := index_position(subscript,self); + + if (j < 1) or (j > length_array) then + begin +// Application.MessageBox('subscript out of range.','ERROR!',MB_OK); + continue; + end + else freq[j] := freq[j] + 1; + end; +end; { procedure TABULATE } +//--------------------------------------------------------------------- +procedure TCrossTabFrm.BREAKDOWN(Sender : TObject); + +label 1,2,3,4, printgrid; +var + i, j, row, col, bigmax : integer; + outline : string; + value : string; + title : String; +begin + bigmax := -1; + for i := 0 to no_in_list-1 do + if Levels[i] > bigmax then bigmax := Levels[i]; + SetLength(colLabels,bigmax); + SetLength(outgrid,length_array,bigmax); + SetLength(rowlabels,length_array); + outline := OS3MainFrm.DataGrid.Cells[var_list[no_in_list-1],0]; + for col := 1 to Levels[no_in_list-1] do + collabels[col-1] := outline + format(':%3d',[min_value[no_in_list-1] + col - 1]); + for row := 1 to length_array do rowlabels[row-1] := ''; + ptr1 := no_in_list - 1; + ptr2 := no_in_list; + for i := 1 to no_in_list do subscript[i-1] := 1; + OutPutFrm.RichEdit.Lines.Add('FREQUENCIES BY LEVEL:'); + sum := 0; + col := 1; + row := 1; + 1: index := index_position(subscript,self); + outline := 'For cell levels: '; + for i := 1 to no_in_list do + begin + j := var_list[i-1]; + value := format('%s:%3d ',[OS3MainFrm.DataGrid.Cells[j,0], + min_value[i-1] + subscript[i-1] - 1]); + outline := outline + value; + end; + sum := sum + freq[index]; + outgrid[row-1,col-1] := freq[index]; + outline := outline + format(' Frequency = %3d',[freq[index]]); + OutPutFrm.RichEdit.Lines.Add(outline); + subscript[ptr2-1] := subscript[ptr2-1] + 1; + col := col + 1; + IF subscript[ptr2-1] <= levels[ptr2-1] then goto 1; + outline := format('Sum accross levels = %3d',[sum]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); + grandsum := grandsum + sum; + sum := 0; + row := row + 1; + 2: if ptr1 < 1 then goto printgrid; + subscript[ptr1-1] := subscript[ptr1-1] + 1; + if subscript[ptr1-1] <= levels[ptr1-1] then goto 4; + 3: ptr1 := ptr1 - 1; + if ptr1 < 1 then goto printgrid; + if subscript[ptr1-1] >= levels[ptr1-1] then goto 3; + subscript[ptr1-1] := subscript[ptr1-1] + 1; + 4: for i := ptr1 + 1 to no_in_list do subscript[i-1] := 1; + ptr1 := no_in_list - 1; + col := 1; + goto 1; + +printgrid: + title := 'Cell Frequencies by Levels'; + for i := 1 to row - 1 do + begin + value := format('Block %d',[i]); + rowlabels[i-1] := value; + end; + MAT_PRINT(outgrid,row-1,Levels[no_in_list-1],title,rowlabels,collabels,NC); + +end; { Procedure BREAKDOWN } + +initialization + {$I crosstabunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/cumsumunit.pas b/applications/lazstats/source_orig/cumsumunit.pas new file mode 100644 index 000000000..df25e0988 --- /dev/null +++ b/applications/lazstats/source_orig/cumsumunit.pas @@ -0,0 +1,393 @@ +unit CUMSUMUNIT; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, MainUnit, Globals, DataProcs, OutPutUnit, Buttons, math, + FunctionsLib, BlankFrmUnit, contexthelpunit; + +type + + { TCUMSUMFrm } + + TCUMSUMFrm = class(TForm) + HelpBtn: TButton; + TargetEdit: TEdit; + TargetChk: TCheckBox; + DeltaEdit: TEdit; + AlphaEdit: TEdit; + BetaEdit: TEdit; + GroupBox1: TGroupBox; + GroupBox2: TGroupBox; + Label4: TLabel; + Label5: TLabel; + Label6: TLabel; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + MeasEdit: TEdit; + GroupEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + VarList: TListBox; + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure VarListClick(Sender: TObject); + private + { private declarations } + semean : double; + procedure PlotMeans(VAR means : DblDyneVec; + NoGrps : integer; + GrandMean : double; + Sender: TObject); + public + { public declarations } + end; + +var + CUMSUMFrm: TCUMSUMFrm; + +implementation + +{ TCUMSUMFrm } + +procedure TCUMSUMFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + VarList.Clear; + GroupEdit.Text := ''; + MeasEdit.Text := ''; + DeltaEdit.Text := ''; + AlphaEdit.Text := '0.05'; + BetaEdit.Text := '0.20'; + TargetEdit.Text := ''; + TargetChk.Checked := false; + for i := 1 to NoVariables do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; + +procedure TCUMSUMFrm.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 TCUMSUMFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TCUMSUMFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TCUMSUMFrm.ComputeBtnClick(Sender: TObject); +label cleanup; +var + i, j, GrpVar, MeasVar, mingrp, maxgrp, G, range, grpsize : integer; + oldgrpsize : integer; + X, UCL, LCL : double; + xmin, xmax, GrandMean, GrandSD : double; + Target, GrandSum : double; + means, stddev, cumsums : DblDyneVec; + count : IntDyneVec; + cellstring, outline : string; + sizeerror : boolean; + ColNoSelected : IntDyneVec; + NoSelected : integer; +begin + SetLength(ColNoSelected,NoVariables); + GrpVar := 1; + MeasVar := 2; + grpsize := 0; + oldgrpsize := 0; + + 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; + + mingrp := 10000; + maxgrp := -10000; + for i := 1 to NoCases do + begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + G := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[GrpVar,i]))); + if G < mingrp then mingrp := G; + if G > maxgrp then maxgrp := G; + end; + range := maxgrp - mingrp + 1; + + SetLength(means,range); + SetLength(count,range); + SetLength(stddev,range); + SetLength(cumsums,range); + + for i := 0 to range-1 do + begin + count[i] := 0; + means[i] := 0.0; + stddev[i] := 0.0; + cumsums[i] := 0.0; + end; + semean := 0.0; + GrandMean := 0.0; + sizeerror := false; + GrandSum := 0.0; + if TargetChk.Checked then Target := StrToFloat(TargetEdit.Text) + else Target := 0.0; + + // calculate group ranges, grand mean, group sd's, semeans + for j := 1 to range do // groups + begin + xmin := 10000.0; + xmax := -10000.0; + for i := 1 to NoCases do + begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + G := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[GrpVar,i]))); + G := G - mingrp + 1; + if G = j then + begin + X := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[MeasVar,i])); + if X > xmax then xmax := X; + if X < xmin then xmin := X; + count[G-1] := count[G-1] + 1; + stddev[G-1] := stddev[G-1] + (X * X); + semean := semean + (X * X); + means[G-1] := means[G-1] + X; + GrandMean := GrandMean + X; + end; + end; // next case + stddev[j-1] := stddev[j-1] - (means[j-1] * means[j-1] / count[j-1]); + stddev[j-1] := stddev[j-1] / (count[j-1] - 1); + stddev[j-1] := sqrt(stddev[j-1]); + grpsize := count[j-1]; + means[j-1] := means[j-1] / count[j-1]; + if j = 1 then oldgrpsize := grpsize; + if oldgrpsize <> grpsize then sizeerror := true; + end; // next group + + // now get cumulative deviations of means from target + if Target = 0.0 then Target := means[range-1]; + cumsums[0] := means[0] - Target; + GrandSum := GrandSum + (means[0] - Target); + for j := 2 to range do + begin + cumsums[j-1] := cumsums[j-2] + (means[j-1] - Target); + GrandSum := GrandSum + (means[j-1] - Target); + end; + + if (grpsize < 2) or (grpsize > 25) or (sizeerror) then + begin + ShowMessage('ERROR! Group sizes error.'); + goto cleanup; + end; + + semean := semean - ((GrandMean * GrandMean) / NoCases); + semean := semean / (NoCases - 1); + semean := sqrt(semean); + GrandSD := semean; + semean := semean / sqrt(NoCases); + GrandMean := GrandMean / NoCases; // mean of all observations + GrandSum := GrandSum / range; // mean of the group means + UCL := GrandMean + (3.0 * semean); + LCL := GrandMean - (3.0 * semean); + if (LCL < 0.0) then LCL := 0.0; + + // printed results + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('CUMSUM Chart Results'); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Group Size Mean Std.Dev. Cum.Dev. of'); + OutPutFrm.RichEdit.Lines.Add(' mean from Target'); + OutPutFrm.RichEdit.Lines.Add('_____ ____ ________ ________ ___________'); + for i := 0 to range-1 do + begin + outline := format(' %3d %3d %8.2f %8.2f %8.2f', + [i+1,count[i], means[i], stddev[i], cumsums[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := format('Mean of group deviations = %6.3f',[GrandSum]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Mean of all observations = %6.3f',[GrandMean]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Std. Dev. of Observations = %8.3f',[GrandSD]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Standard Error of Mean = %8.3f',[semean]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Target Specification = %6.3f',[Target]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Lower Control Limit = %8.3f, Upper Control Limit = %8.3f', + [LCL, UCL]); + OutPutfrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + + // show graph + PlotMeans(cumsums,range,GrandSum,self); + + cleanup: + cumsums := nil; + stddev := nil; + count := nil; + means := nil; + ColNoSelected := nil; +end; + +procedure TCUMSUMFrm.PlotMeans(var means: DblDyneVec; NoGrps: integer; + GrandMean: double; Sender: TObject); +var + i, xpos, ypos, hleft, hright, vtop, vbottom, imagewide : integer; + vhi, hwide, offset, strhi, grpnospc, distx : integer; + imagehi, maxval, minval, valincr, Yvalue : double; + alpha, beta, delta, gamma, theta, kfactor, d : double; + Title : string; +begin + maxval := -10000.0; + minval := 10000.0; + for i := 0 to NoGrps-1 do + begin + if means[i] > maxval then maxval := means[i]; + if means[i] < minval then minval := means[i]; + end; + BlankFrm.Image1.Canvas.Clear; + BlankFrm.Show; + Title := 'CUMSUM CHART FOR : ' + OS3MainFrm.FileNameEdit.Text; + BlankFrm.Caption := Title; + imagewide := BlankFrm.Image1.Width; + imagehi := BlankFrm.Image1.Height; + vtop := 20; + vbottom := round(imagehi) - 80; + vhi := vbottom - vtop; + hleft := 100; + hright := imagewide - 80; + hwide := hright - hleft; + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + BlankFrm.Image1.Canvas.Brush.Color := clWhite; + + // Draw chart border + BlankFrm.Image1.Canvas.Rectangle(hleft,vtop-10,hleft+hwide,vtop+vhi+10); + + // draw Grand Mean + ypos := round(vhi * ( (maxval - GrandMean) / (maxval - minval))); + ypos := ypos + vtop; + xpos := hleft; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + xpos := hright; + BlankFrm.Image1.Canvas.Pen.Color := clRed; + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + Title := 'AVG.DEV.'; + strhi := BlankFrm.Image1.Canvas.TextHeight(Title); + ypos := ypos - strhi div 2; + BlankFrm.Image1.Canvas.Brush.Color := clLtGray; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + + // draw horizontal axis + BlankFrm.Image1.Canvas.MoveTo(hleft,vbottom + 20); + BlankFrm.Image1.Canvas.LineTo(hright,vbottom + 20); + for i := 1 to NoGrps do + begin + ypos := vbottom + 10; + xpos := round((hwide / NoGrps)* 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 := 10; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,'GROUPS:'); + end; + + // Draw vertical axis + valincr := (maxval - minval) / 10.0; + for i := 1 to 11 do + begin + Title := format('%8.2f',[maxval - ((i-1)*valincr)]); + strhi := BlankFrm.Image1.Canvas.TextHeight(Title); + xpos := 10; + Yvalue := maxval - (valincr * (i-1)); + ypos := round(vhi * ( (maxval - Yvalue) / (maxval - minval))); + ypos := ypos + vtop - strhi div 2; + BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title); + end; + + // draw lines for means of the groups + ypos := round(vhi * ( (maxval - means[0]) / (maxval - minval))); + ypos := ypos + vtop; + xpos := round((hwide / NoGrps) + hleft); + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + BlankFrm.Image1.Canvas.Pen.Color := clBlack; + for i := 2 to NoGrps do + begin + ypos := round(vhi * ( (maxval - means[i-1]) / (maxval - minval))); + ypos := ypos + vtop; + xpos := round((hwide / NoGrps)* i + hleft); + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + end; + + // Draw V Mask + if CumsumFrm.DeltaEdit.Text = '' then exit; // not elected + BlankFrm.Image1.Canvas.Pen.Color := clBlue; + delta := StrToFloat(CumsumFrm.DeltaEdit.Text); + gamma := delta / semean; + alpha := StrToFloat(CumSumFrm.AlphaEdit.Text); + beta := StrToFloat(CumSumFrm.BetaEdit.Text); + kfactor := 2.0 * semean; + d := (2.0 / (gamma * gamma)) * ln((1.0 - beta)/alpha); + theta := arctan(delta / (2.0 * kfactor)); + grpnospc := round(hwide / NoGrps); + xpos := hleft + (grpnospc * (NoGrps)); // last group + ypos := round(vhi * ( (maxval - means[NoGrps-1]) / (maxval - minval))); + ypos := ypos + vtop; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + xpos := round(xpos + (d * grpnospc / hwide)); // scaled d + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); // line 0 to A + + // draw upper angle line + xpos := hleft + (grpnospc * NoGrps); // last group + xpos := round(xpos + (d * grpnospc / hwide)); // plus scaled d + ypos := round(vhi * ( (maxval - means[NoGrps-1]) / (maxval - minval))); + ypos := ypos + vtop; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + ypos := vtop; // draw angle up to top of graph + distx := round(vhi / tan(theta)); // x unscaled distance + xpos := round(xpos - (distx * grpnospc / hwide)); + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + + // draw lower angle line + xpos := hleft + (grpnospc * NoGrps); // last group + xpos := round(xpos + (d * grpnospc / hwide)); // plus scaled d + ypos := round(vhi * ( (maxval - means[NoGrps-1]) / (maxval - minval))); + ypos := ypos + vtop; + BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); + ypos := vbottom; + xpos := round(xpos - (distx * grpnospc / hwide)); + BlankFrm.Image1.Canvas.LineTo(xpos,ypos); + BlankFrm.Image1.Canvas.Pen.Color := clBlack; +end; + +initialization + {$I cumsumunit.lrs} + +end. +