unit OneSampUnit; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls; type { TOneSampFrm } TOneSampFrm = class(TForm) ComputeBtn: TButton; ResetBtn: TButton; CancelBtn: TButton; OKBtn: TButton; Statistic: TEdit; Parameter: TEdit; Size: TEdit; CInterval: TEdit; StdDev: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Panel1: TPanel; RadioGroup1: TRadioGroup; procedure ComputeBtnClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure RadioGroup1Click(Sender: TObject); procedure ResetBtnClick(Sender: TObject); private { private declarations } public { public declarations } end; var OneSampFrm: TOneSampFrm; implementation uses OutPutUnit, FunctionsLib; { TOneSampFrm } procedure TOneSampFrm.ResetBtnClick(Sender: TObject); begin Statistic.Text := ''; Parameter.Text := ''; Size.Text := ''; CInterval.Text := '95.0'; StdDev.Text := ''; RadioGroup1.ItemIndex := 0; end; procedure TOneSampFrm.FormShow(Sender: TObject); begin ResetBtnClick(self); end; procedure TOneSampFrm.RadioGroup1Click(Sender: TObject); begin if RadioGroup1.ItemIndex <> 0 then begin Label5.Visible := false; StdDev.Visible := false; end else begin Label5.Visible := true; StdDev.Visible := true; end; end; procedure TOneSampFrm.ComputeBtnClick(Sender: TObject); var i, N : integer; sampmean, sampprop, sampcor, sampvar, Confidence, alpha, df : double; sampsize, popmean, popprop, popcor, popvar, stderr : double; z, zprobability, zreject, zconf, UCL, LCL, sampsd : double; t, tprobability, testt : double; poptrans, samptrans, chisqrval, chiprob, lowchi, hichi, testchi : double; outline : string; begin // Initialize output form OutPutFrm.RichEdit.Clear; // OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify; N := round(StrToFloat(Size.Text)); Confidence := StrToFloat(CInterval.Text) / 100.0; Case RadioGroup1.ItemIndex of 0 : begin sampmean := StrToFloat(Statistic.Text); popmean := StrToFloat(Parameter.Text); sampsd := StrToFloat(StdDev.Text); df := N; stderr := sampsd / sqrt(df); df := N-1; t := (sampmean - popmean) / stderr; tprobability := probt(t,df); alpha := (1.0 - confidence) / 2.0; testt := inverset((1.0 - alpha),df); UCL := sampmean + testt * stderr; LCL := sampmean - testt * stderr; OutPutFrm.RichEdit.Lines.Add('ANALYSIS OF A SAMPLE MEAN'); OutPutFrm.RichEdit.Lines.Add(''); outline := format('Sample Mean = %6.3f',[sampmean]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Population Mean = %6.3f',[popmean]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Sample Size = %d',[N]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Standard error of Mean = %6.3f',[stderr]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('t test statistic = %6.3f with probability %6.3f',[t,tprobability]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('t value required for rejection = %6.3f',[testt]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Confidence Interval = (%6.3f,%6.3f)',[LCL,UCL]); OutPutFrm.RichEdit.Lines.Add(outline); end; 1 : begin sampprop := StrToFloat(Statistic.Text); popprop := StrToFloat(Parameter.Text); stderr := sqrt((sampprop * (1.0 - sampprop)) / N); z := (sampprop - popprop) / StdErr; zprobability := 1.0 - probz(z); zreject := inversez(confidence); zconf := abs(inversez((1.0 - confidence) / 2.0)); UCL := sampprop + (zconf * stderr); LCL := sampprop - (zconf * stderr); OutPutFrm.RichEdit.Lines.Add('ANALYSIS OF A SAMPLE PROPORTION'); OutPutFrm.RichEdit.Lines.Add(''); outline := format('Sample Proportion = %6.3f',[sampprop]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Population Proportion = %6.3f',[popprop]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Sample Size = %d',[N]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Standard error of proportion = %6.3f',[stderr]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('z test statistic = %6.3f with probability > P = %6.3f',[z,zprobability]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('z value required for rejection = %6.3f',[zreject]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Confidence Interval = (%6.3f,%6.3f)',[LCL,UCL]); OutPutFrm.RichEdit.Lines.Add(outline); end; 2 : begin sampcor := StrToFloat(Statistic.Text); popcor := StrToFloat(Parameter.Text); zconf := abs(inversez((1.0 - confidence) / 2.0)); samptrans := ln((1.0 + sampcor) / (1.0 - sampcor)) / 2.0; poptrans := ln((1.0 + popcor) / (1.0 - popcor)) / 2.0; stderr := sqrt(1.0 / (N - 3.0)); z := (samptrans - poptrans) / stderr; zprobability := probz(z); alpha := (1.0 - confidence) / 2.0; zreject := inversez(1.0 - alpha); UCL := samptrans + (zconf * stderr); LCL := samptrans - (zconf * stderr); UCL := (exp(2.0 * UCL) - 1.0) / (exp(2.0 * UCL) + 1.0); LCL := (exp(2.0 * LCL) - 1.0) / (exp(2.0 * LCL) + 1.0); OutPutFrm.RichEdit.Lines.Add('ANALYSIS OF A SAMPLE CORRELATION'); OutPutFrm.RichEdit.Lines.Add(''); outline := format('Sample Correlation = %6.3f',[sampcor]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Population Correlation = %6.3f',[popcor]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Sample Size = %d',[N]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('z Transform of sample correlation = %6.3f',[samptrans]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('z Transform of population correlation = %6.3f',[poptrans]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Standard error of transform = %6.3f',[stderr]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('z test statistic = %6.3f with probability %6.3f',[z,zprobability]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('z value required for rejection = %6.3f',[zreject]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Confidence Interval for sample correlation = (%6.3f,%6.3f)',[LCL,UCL]); OutPutFrm.RichEdit.Lines.Add(outline); end; 3 : begin sampvar := StrToFloat(Statistic.Text); popvar := StrToFloat(Parameter.Text); alpha := 1.0 - confidence; chisqrval := ((N - 1.0) * sampvar) / Popvar; chiprob := 1.0 - chisquaredprob(chisqrval,N-1); lowchi := inversechi((1.0 - alpha / 2.0),N-1); hichi := inversechi((alpha / 2.0),N-1); LCL := ((N - 1.0) * sampvar) / lowchi; UCL := ((N - 1.0) * sampvar) / hichi; if sampvar > popvar then testchi := lowchi else testchi := hichi; OutPutFrm.RichEdit.Lines.Add('ANALYSIS OF A SAMPLE VARIANCE'); OutPutFrm.RichEdit.Lines.Add(''); outline := format('Sample Variance = %6.3f',[sampvar]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Population Variance = %6.3f',[popvar]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Sample Size = %d',[N]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Chi-square statistic = %6.3f with probability > chisquare = %6.3f and D.F. = %d',[chisqrval,chiprob, N-1]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Chi-square value required for rejection = %6.3f',[testchi]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Chi-square Confidence Interval = (%6.3f,%6.3f)',[lowchi,hichi]); OutPutFrm.RichEdit.Lines.Add(outline); outline := format('Variance Confidence Interval = (%6.3f,%6.3f)',[LCL,UCL]); OutPutFrm.RichEdit.Lines.Add(outline); end; end; OutPutFrm.ShowModal; end; initialization {$I onesampunit.lrs} end.