Files
lazarus-ccr/applications/lazstats/source_orig/onesampunit.pas
wp_xxyyzz e1c5977e0d LazStats: Adding original source, part 6.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7885 8e941d3f-bd1b-0410-a28a-d453659cc2b4
2020-11-16 11:16:49 +00:00

227 lines
9.7 KiB
ObjectPascal

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.