Pemeriksaan keacakan bilangan acak

advertisement
Pemeriksaan keacakan bilangan
acak
𝜏𝜌
Metode pengujian keacakan
•
•
•
•
Hubungan Un dengan Un-j ; j = 1,2,…
Serial test
Gap test
Runs test
Hubungan antara Un vs Un-j, j = 1, 2, …
Un bilangan acak yang dibangkitkan pada periode
ke-n
ide
Un vs Un-j
Dilihat hubungannya  Scatter plot dan koefisien korelasi
Simulasi ??
Simulasi
data data1;
do i = 1 to 1000;
x = ranuni(1);
output;
end;
data data11;
set data1;
x1= lag(x);
x2= lag(x1);
x3= lag(x2);
x4= lag(x3);
run;
proc gplot data=data11;
plot x1*x;
run;
proc corr data=data11;
var x x1 x2 x3 x4;
run;
Serial test
• Apabila bilangan yang dibangkitkan acak, maka tidak
ada kecenderungan suatu bilangan diikuti oleh
bilangan tertentu setelahnya
H0 = rangkaian bilangan yang diuji acak
H1 = rangkaian bilangan yang diuji tidak acak
Simulasi
data data4;
do i = 1 to 50000;
x = floor(ranuni(1)*10);
output;
end;
run;
data data4a;
set data4;
lagx= lag(x);
data data4hasil;
set data4hasil;
exp = 499.99;
chisq = (n - exp)**2 / exp;
proc means data=data4hasil sum;
var chisq;
run;
proc tabulate data=data4a out=data4hasil;
class x lagx;
tables x*lagx, n;
run;
Gap test
• Berfokus pada banyaknya angka yang memisahkan
bilangan yang sama pada suatu rangkaian bilangan
yang dievaluasi
Misal : fokus pada bilangan 7
Apabila angka muncul secara acak, maka tiap bilangan 0 hingga 9
memiliki peluang sebesar 0.1 untuk muncul
 Chi-square Test
Y = Banyaknya angka yang muncul hingga angka 7 muncul
 Y ~ Geometrik(0.1)
Simulasi
data data3;
do i = 1 to 500;
x = round(ranuni(1)*10);
output;
end;
run;
data data3b;
data data3a;
set data3a;
set data3;
if y = 1;
if x = 7 then y = 1;
run;
else y = 0;
data data3c;
run;
set data3b;
xl = lag(i);
gg = i - xl;
run;
proc tabulate data=data3c out=data3hasil;
class gg;
tables gg, n;
run;
Run test
• Pengujian keacakan bilangan dengan memperhatikan
banyaknya angka lebih besar dan lebih kecil dari
suatu nilai tertentu sebagai suatu runs
• Runs  serangkaian bilangan berurutan yang
memiliki pola perilaku yang sama
Pola naik, pola turun, pola tergantung bilangan tertentu
data one;
drop i;
do i=1 to 75;
d=rannor(123);
output;
end;
run;
proc standard data=one out=two mean=0;
var d;
run;
data runcount;
set two nobs=nobs;
if d=0 then delete;
if d>0 then n+1;
if d<0 then m+1;
retain runs 0 numpos 0 numneg 0;
previous=lag(d);
if _n_=1 then do;
runs=1;
prevpos=.;
currpos=.;
prevneg=.;
currneg=.;
end;
else do;
prevpos=( previous > 0 );
currpos=( d > 0 );
prevneg=( previous < 0 );
currneg=( d < 0 );
if _n_=2 and (currpos and prevpos) then numpos+1;
else if _n_=2 and (currpos and prevneg) then
numneg+1;
else if _n_=2 and (currneg and prevpos) then
numpos+1;
else if _n_=2 and (currneg and prevneg) then
numneg+1;
if currpos and prevneg then do;
runs+1;
numpos+1;
end;
if currneg and prevpos then do;
runs+1;
numneg+1;
end;
end;
run;
data runcount;
set runcount end=last;
if last;
run;
data waldwolf;
label z='Wald-Wolfowitz Z'
pvalue='Pr > |Z|';
set runcount;
mu = ( (2*n*m) / (n + m) ) + 1;
sigmasq = ( (2*n*m) * (2*n*m-(n+m)) ) / ( ((n+m)**2) * (n+m-1) );
sigma=sqrt(sigmasq);
drop sigmasq;
if N GE 50 then Z = (Runs - mu) / sigma;
else if Runs-mu LT 0 then Z = (Runs-mu+0.5)/sigma;
else Z = (Runs-mu-0.5)/sigma;
pvalue=2*(1-probnorm(abs(Z)));
run;
title 'Wald-Wolfowitz Test for Randomness';
title2 'H0: The data are random';
proc print data=waldwolf label noobs;
var z pvalue;
format pvalue pvalue.;
run;
Download