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;