Menjawab hanya pertanyaan pertama Anda: "Tes apa yang akan Anda terapkan untuk menentukan apakah [urutan] ini benar-benar acak?"
Bagaimana memperlakukannya sebagai rangkaian waktu, dan memeriksa korelasi-otomatis? Berikut adalah beberapa kode R. Pertama beberapa data uji (1000 digit pertama):
digits_string="1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989"
digits=as.numeric(unlist(strsplit(digits_string,"")))
Periksa jumlah setiap digit:
> table(digits)
digits
0 1 2 3 4 5 6 7 8 9
93 116 103 102 93 97 94 95 101 106
Kemudian ubah menjadi seri waktu, dan jalankan uji Box-Pierce:
d=as.ts( digits )
Box.test(d)
yang memberitahu saya:
X-squared = 1.2449, df = 1, p-value = 0.2645
Biasanya Anda ingin nilai p di bawah 0,05 untuk mengatakan ada korelasi otomatis.
Jalankan acf(d)
untuk melihat korelasi otomatis. Saya belum memasukkan gambar di sini karena ini adalah grafik yang membosankan, meskipun anehnya kelambatan terbesar ada di 11 dan 22. Jalankan acf(d,lag.max=40)
untuk menunjukkan bahwa tidak ada puncak di lag = 33, dan itu hanya kebetulan!
PS Kita bisa membandingkan seberapa baik 1000 digit pi itu, dengan melakukan tes yang sama pada bilangan acak nyata.
probs=sapply(1:100,function(n){
digits=floor(runif(1000)*10)
bt=Box.test(ts(digits))
bt$p.value
})
Ini menghasilkan 1000 digit acak, melakukan tes, dan mengulangi ini 100 kali.
> summary(probs)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.006725 0.226800 0.469300 0.467100 0.709900 0.969900
> sd(probs)
[1] 0.2904346
Jadi hasil kami nyaman dalam standar deviasi pertama, dan pi dukun seperti bebek acak. (Saya menggunakan set.seed(1)
jika Anda ingin mereproduksi angka-angka yang tepat.)