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 )
Antworten:
Für ein faires Spiel sollten aufeinanderfolgende Spiele unabhängig sein. Es hört sich so an, als würden Sie aufgefordert, einen Test durchzuführen, bei dem aufeinanderfolgende Ergebnisse nicht korreliert sind. Sie können dies tun, indem Sie die Daten Lassen Sie die ersten Ergebnisse sein. Dann können Sie verschiedene Paare , . Die Berechnung des Pearson-Korrelationskoeffizienten unterscheidet sich von Null (wenn die Daten stetig sind oder sogar eine Menge von ganzen Zahlen). Wenn die Daten für Verlieren / Gewinnen sind , können Sie die Unabhängigkeit in der Tabelle , indem Sie die Zählungen für und . In diesem Fall vonR.1, R.2, . . . , R.2 n 2 n n ( R.1, R.2) ( R 3 , R 4 ) , . . . , ( R.2 n - 1, R.2 n) 0 / 1 2 × 2 ( 0 , 0 ) , ( 0 , 1 ) , ( 1 , 0 ) ( 1 , 1 ) 0 / 1 der oben vorgeschlagene Lauftest von Wald und Wofowitz ebenfalls verwendet werden. So wie es in der Regel beschrieben wird, klingt es so, als ob Sie ein Konfidenzintervall für die Korrelation mit der halben Breite von . Sie würden übergeben, wenn im Intervall enthalten ist. Diese Tests scheinen jedoch etwas zu einfach zu bestehen.3 σ 0
quelle