Masalahnya adalah pemerintah ingin menutup roulette elektronik dan mereka mengklaim bahwa roulette gagal dalam uji statistik.
Maaf untuk bahasa saya tapi ini diterjemahkan dari hukum Slovenia sebaik mungkin. Persyaratan resmi (menurut hukum) adalah:
- frekuensi setiap peristiwa tidak boleh berbeda dari frekuensi yang diharapkan lebih dari 3 sigma
- uji chi square distribusi normal harus berada dalam tingkat risiko 0,025
- uji korelasi berturut-turut harus lulus uji 3 sigma dan uji chi kuadrat
Saya telah menguji 2 persyaratan pertama dan mereka lulus tes, tetapi saya memiliki masalah dalam memahami persyaratan ke-3. (perlu diingat bahwa ini diterjemahkan dan "korelasi berurutan" dapat menjadi sesuatu yang lain)
Bagaimana saya harus menguji persyaratan ke-3?
Data jika seseorang tertarik:
http://pastebin.com/ffbSKpr1
EDIT: chi kuadrat gagal 2% dari waktu (apa yang saya harapkan yang diharapkan karena fakta bahwa alpha adalah 0,025) dan tes sigma3 gagal 5% di mana saya mengharapkan kegagalan 9% untuk 3sigma (sepertinya frekuensi tidak didistribusikan sesuai dengan distribusi normal bahkan untuk nomor acak)
Saya mungkin tidak memahami undang-undang ini dengan benar, tetapi hampir 0% kemungkinan lulus uji 3sigma untuk semua vektor autokorelasi, karena 9% kemungkinan gagal dalam sekali jalan dan 2,5 untuk uji chi kuadrat.
Kode python:
from math import sqrt
from itertools import *
import random
#uncoment for python 2.x
#zip = izip
#range = xrange
#with open("rng.txt","r") as wr:
# n = [int(i) for i in wr]
n = [random.randint(0,36) for i in range(44000)]
def get_freq(n):
r=[0 for i in range(37)]
for i in n:
r[i] += 1
return r
def trisigmatest(freq):
Ef = 1.0*sum(freq)/37
sigma = sqrt(sum(i**2 for i in freq)/37-Ef**2)
return all((abs(i - Ef )< sigma*3) for i in freq)
def chiquaretest(freq):
Ef = 1.0*sum(freq)/37
chi2 = sum((i-Ef)**2 / Ef for i in freq)
# values are from http://itl.nist.gov/div898/handbook/eda/section3/eda3674.htm
# (EDIT) I recaluclated these valuse from inverse cdf chi2
# distribution for interval (0.025/2,1-0.025/2) (alpha = 0.025)
return 20.4441 < chi2 < 58.8954
#whitout autocorelation
gf = get_freq(n)
if not trisigmatest(gf):
print("failed")
raise
if not chiquaretest(gf):
print("failed")
raise
actests = 1000
trifailed = 0;
chifailed = 0;
for i in range(1,actests + 1):
f=((b-a+37) % 37 for (a,b) in zip(n,n[i:]))
gf = get_freq(f)
if not trisigmatest(gf):
trifailed += 1;
if not chiquaretest(gf):
chifailed += 1;
print("trisigmatest failed ", 1.0 * trifailed / actests )
print("chiquaretest failed ", 1.0 * chifailed / actests )