Критерій відношення правдоподібності для великих вибірок

Курсовой проект - Математика и статистика

Другие курсовые по предмету Математика и статистика

dBtn_FileReadClick(Sender: TObject);

procedure RdB_CompGenerateClick(Sender: TObject);

procedure Edt_AverageChange(Sender: TObject);

procedure Edt_DispersionChange(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Frm: TFrm;

List:TStringList;

implementation

{$R *.dfm}

Function Factorial(N:Integer):Integer;

var s:Integer;

begin

s:=1;

if(N>0) then

while (N>0) do

begin

s:=N*s;

N:=N-1;

end;

Result:=s;

end;

function FactorialHalf(N:Integer):Double;

var s:Double;

begin

s:=1;

if(N>=0) then

begin

while (N>=0) do

begin

s:=(1./2+N)*s;

N:=N-1;

end;

end;

Result:=s;

end;

Function Abs(s:Double):Double;

begin

if(s>0) then

Abs:=s

else

Abs:=-s;

end;

function FindCriticalPoint(N: Integer): Double;

var Gamma,Integral,c, h,level_mean: Double;

i: Integer; NumPointsIntegrate:LongInt;

begin

c:=0.1; i:=0; Integral:=0;h:=c/2;

level_mean:= StrToFloat(Frm.Cmb_LevelMean.Text);

NumPointsIntegrate:=1000;

if(((N-1) mod 2)=1) then

Gamma:=Power(ArcCos(-1),1./2)*FactorialHalf(((N-1)div 2)-1)

else

Gamma:=Factorial(((N-1) div 2)-1);

while(Abs(((1-level_mean) -Integral/(Gamma*Power(2,0.5*(N-1)))))>0.00001) do

begin

Integral:=0;

for i:=1 to NumPointsIntegrate do

Integral:=Integral+ (c/(NumPointsIntegrate))*Power(i*c/(NumPointsIntegrate),(0.5*N-1.5))*exp(-i*c/(2*NumPointsIntegrate));

if ((((1-level_mean) )-Integral/(Gamma*Power(2,0.5*(N-1)))))>0 then

begin

c:=c+h ;

NumPointsIntegrate:=NumPointsIntegrate+100;

end

else

begin

c:=c-h;

h:=h/10;

c:=c+h;

end;

end;

FindCriticalPoint:=c;

end;

function EvaluteStatistic(aOfValues:Array of Double; aOfProbabil:Array of Double; CountVal:Integer; f:Boolean):Double;

var i,n:Integer;

s,sum,s_2,disp,aver:Double;

begin

s:=0; n:=0;

sum:=0;

if(not f) then

begin

for i:=0 to CountVal-1 do

sum:=sum+aOfValues[i];

for i:=0 to CountVal-1 do

s:=s+2*aOfValues[i]*LnXP1(aOfValues[i]/(sum*aOfProbabil[i])-1);

Result:=s;

end

else

begin

for i:=1 to Frm.StrGrd.ColCount-1 do

)then">if(Frm.StrGrd.Cells[i,2]<>) then

begin

s:=s+Power(StrToFloat(Frm.StrGrd.Cells[i,1]),2);

sum:=sum+StrToFloat(Frm.StrGrd.Cells[i,1]);

n:=n+StrToInt(Frm.StrGrd.Cells[i,2]);

end;

s_2:=(s/n)-Power(sum/n,2);

disp:= StrToFloat(Frm.Edt_Dispersion.Text);

aver:= StrToFloat(Frm.Edt_Average.Text);

Result:=n*LnXP1((disp/s_2)-1)-n+s/disp-2*sum*aver/disp+n*Power(aver,2)/disp;//n*LnXP1((disp/s_2)-1);

end;

end;

procedure TFrm.Button1Click(Sender: TObject);

var ValArr:array of Double; ProbArray:array of Double;

i:Integer; s:TStringList; st,critical_point:Double;

begin

if(RdBtn_HandEnter.Checked ) then

begin

SetLength(ValArr,StrGrd.ColCount-1);

SetLength(ProbArray,StrGrd.ColCount-1);

For i:=0 to StrGrd.ColCount-2 do

begin

try

ValArr[i]:=StrToFloat(StrGrd.Cells[i+1,1]);

ProbArray[i]:= StrToFloat(StrGrd.Cells[i+1,2]);

finally end;

end;

end

else

if (RdBtn_FileRead.Checked ) then

begin

s:= TStringList.Create;

s.Text:=StringReplace(List[0], ,#13#10,[rfReplaceAll]);

SetLength(ValArr,s.Count);

Cmb_CountValue.Text := IntToStr(s.Count );

RdBtn_HandEnter.Checked :=false;

for i:=0 to s.Count-1 do

ValArr[i]:=StrToFloat(s[i]);

s.Text:=StringReplace(List[1], ,#13#10,[rfReplaceAll]);

SetLength(ProbArray,s.Count);

for i:=0 to s.Count -1 do

ProbArray[i]:=StrToFloat(s[i]);

end;

Memo_WriteResult.Lines.Clear();

Memo_WriteResult.Lines.Add(Значення статистики критерію:);

if(RdBtn_HandEnter.Checked ) then

begin

st:=EvaluteStatistic(ValArr, ProbArray, StrGrd.ColCount-1,false);

Memo_WriteResult.Lines.Add(FloatToStr(st));

end

else

if (RdBtn_FileRead.Checked ) then

begin

st:=EvaluteStatistic(ValArr, ProbArray,s.Count,false );

Memo_WriteResult.Lines.Add(FloatToStr(st));

end

else

begin

st:=EvaluteStatistic(ValArr, ProbArray,0,true);

Memo_WriteResult.Lines.Add(FloatToStr(st));

end;

Memo_WriteResult.Lines.Add(Значення критичної точки:);

if(RdB_CompGenerate.Checked )then

critical_point:=FindCriticalPoint(3)

else

critical_point:=FindCriticalPoint(StrToInt(Frm.Cmb_CountValue.Text));

Memo_WriteResult.Lines.Add(FloatToStr(critical_point));

if(st<critical_point) then

Memo_WriteResult.Lines.Add(Висновок: гіпотеза не суперечить реалізації вибірки.)

else

Memo_WriteResult.Lines.Add(Висновок: гіпотеза суперечить реалізації вибірки.);

end;

procedure TFrm.RdBtn_HandEnterClick(Sender: TObject);

var i:Integer;

begin

Memo_WriteResult.Lines.Clear();

Edt_Average.Visible:=false; Lbl_Average.Visible:=false;Cmb_CountValue.Visible:=true;

Edt_Dispersion.Visible: = false; Lbl_Dispersion. Visible: = false;Lbl_CountValue.Visible :=true;

StrGrd.ColCount:=StrToInt(Cmb_CountValue.Text )+1;

for i:=1 to StrGrd.ColCount do

StrGrd.Cols[i].Text:=x+IntToStr(i);

StrGrd.RowCount:=3;

StrGrd.Rows[1].Text:=Частоти;

StrGrd.Rows[2].Text:=Ймовірності;

end;

procedure TFrm.Cmb_CountValueChange(Sender: TObject);

begin

RdBtn_HandEnterClick( Sender);

RdBtn_HandEnter.Checked:=true;

end;

procedure TFrm.RdBtn_FileReadClick(Sender: TObject);

begin

Memo_WriteResult.Lines.Clear();

Edt_Average.Visible:=false; Lbl_Average.Visible:=false;Cmb_CountValue.Visible:=false;

Edt_Dispersion.Visible:= false; Lbl_Dispersion.Visible:=false;Lbl_CountValue.Visible :=false;

List:= TStringList.Create;

if OpnDg.Execute then

List.LoadFromFile(OpnDg.FileName );

end;

function SetGaussNumber(a:String):Boolean;

var i:Integer;

begin

SetGaussNumber:=false;

for i:=1 to Frm.StrGrd.ColCount-1 do

begin

)then">if( Frm.StrGrd.Cells[i,0]<>) then

begin

if(Frm.StrGrd.Cells[i,2]=) then

Frm.StrGrd.cells[i,2]:=1;

if(Frm.StrGrd.Cells[i,1]=a) then

begin

Frm.StrGrd.cells[i,2]:=IntToStr(StrToInt(Frm.StrGrd.cells[i,2])+1);

SetGaussNumber:=true;

end

end;

end;

end;

procedure TFrm.RdB_CompGenerateClick(Sender: TObject);

var i:Integer;

begin

Memo_WriteResult.Lines.Clear();

Randomize;

StrGrd.Rows[1].Text:=Значення;

StrGrd.Rows[2].Text:=Частоти;

Edt_Average.Visible:=true; Lbl_Average.Visible:=true;Cmb_CountValue.Visible:=false;

Edt_Dispersion.Visible:= true; Lbl_Dispersion.Visible:=true;Lbl_CountValue.Visible :=false;

for i:=0 to 50 do

begin

if StrGrd.Col <i+1 then

StrGrd.ColCount:=StrGrd.ColCount+1;

if(not(SetGaussNumber(FloatToStr(StrToFloat(Frm.Edt_Average.Text)+RandG(0 ,1)*Power(StrToFloat(Frm.Edt_Dispersion.Text),1./2))))) then //StrToFloat(Frm.Edt_Average.Text) ,StrToFloat(Frm.Edt_Dispersion.Text )

begin

StrGrd.Cells[i+1,0]:=x+IntToStr(i+1);

StrGrd.Cells[i+1,1]:=FloatToStr(StrToFloat(Frm.Edt_Average.Text)+RandG(0 ,1)*Power(StrToFloat(Frm.Edt_Dispersion.Text),1./2));

StrGrd.Cells[i+1,2]:=1;

end;

end;

end;

procedure TFrm.Edt_AverageChange(Sender: TObject);

begin

RdB_CompGenerate.Checked:=false;

RdB_CompGenerate.Checked:=true;

end;

procedure TFrm.Edt_DispersionChange(Sender: TObject);

begin

RdB_CompGenerate.Checked:=false;

RdB_CompGenerate.Checked:=true;

end;

end.

 

 

Додаток C. Результати виконання програми

 

Результати одержані при ручному вводі:

 

Результати отримані при зчитуванні з файлу:

 

Дані згенеровані компютером: