Das Problem ist, dass die Regierung das elektronische Roulette schließen will und behauptet, dass das Roulette beim statistischen Test fehlgeschlagen ist.
Entschuldigung für meine Sprache, aber diese ist so gut wie möglich aus dem slowenischen Recht übersetzt. Offizielle (gesetzlich) Anforderungen sind:
- Die Häufigkeit jedes Ereignisses sollte nicht um mehr als 3 Sigma von der erwarteten Häufigkeit abweichen
- Der Chi-Quadrat-Test der Normalverteilung muss innerhalb des Risikograds von 0,025 liegen
- Der Test der aufeinanderfolgenden Korrelation muss den 3-Sigma-Test und den Chi-Quadrat-Test bestehen
Ich habe die ersten beiden Anforderungen getestet und sie bestehen die Tests, aber ich habe Probleme mit dem Verständnis der dritten Anforderung. (Denken Sie daran, dass dies übersetzt wird und "aufeinanderfolgende Korrelation" etwas anderes sein kann)
Wie soll ich die 3. Anforderung testen?
Daten, wenn jemand interessiert ist:
http://pastebin.com/ffbSKpr1
BEARBEITEN: Chi-Quadrat schlägt 2% der Zeit fehl (was ich erwarte, wird erwartet, weil Alpha 0,025 ist) und Sigma3-Test schlägt 5% fehl, wenn ich 9% Fehler für 3sigma erwarte (es sieht so aus, als ob die Frequenzen nicht entsprechend verteilt sind Normalverteilung auch für Zufallszahlen)
Ich verstehe dieses Gesetz möglicherweise nicht richtig, aber es besteht eine Wahrscheinlichkeit von fast 0%, dass der 3-Sigma-Test für alle Autokorrelationsvektoren bestanden wird, da die Wahrscheinlichkeit, dass er in einem Durchgang fehlschlägt, bei 9% und im Chi-Quadrat-Test bei 2,5% liegt.
Python-Code:
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 )