Le problème est que le gouvernement veut fermer la roulette électronique et ils prétendent que la roulette a échoué au test statistique.
Désolé pour ma langue, mais ceci est traduit de la loi slovène aussi bien que possible. Les exigences officielles (selon la loi) sont:
- la fréquence de chaque événement ne doit pas différer de la fréquence attendue de plus de 3 sigma
- le test du chi carré de la distribution normale doit être dans le niveau de risque de 0,025
- test de corrélation consécutive doit passer le test 3 sigma et le test chi carré
J'ai testé les 2 premières exigences et ils réussissent les tests, mais j'ai des problèmes pour comprendre la 3e exigence. (gardez à l'esprit que cela se traduit et que la "corrélation consécutive" peut être autre chose)
Comment dois-je tester la 3e exigence?
Données si quelqu'un est intéressé:
http://pastebin.com/ffbSKpr1
EDIT: le chi carré échoue 2% du temps (ce que j'attends qui est attendu en raison du fait que alpha est 0,025) et le test sigma3 échoue 5% où j'attends 9% d'échec pour 3sigma (il semble que les fréquences ne soient pas distribuées selon distribution normale même pour des nombres aléatoires)
Je ne comprends peut-être pas correctement cette loi, mais il y a près de 0% de probabilité de réussir le test 3sigma pour tous les vecteurs d'autocorrélation, car il y a 9% de probabilité d'échouer en un seul passage et 2,5 pour le test chi carré.
Code 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 )
Réponses:
Pour un jeu équitable, les jeux successifs doivent être indépendants. On dirait qu'ils vous demandent d'effectuer un test que les résultats consécutifs ne sont pas corrélés. Vous pouvez le faire en jumelant les données laissent être les premiers résultats. Ensuite, vous pouvez former paires distnct , . Calculer le coefficient de corrélation de Pearson est différent de zéro (si les données sont continues ou même un ensemble d'entiers). Si les données sont pour perdre / gagner, vous pouvez tester l'indépendance dans le tableau obtenu en utilisant les nombres pour et . Dans ce cas deR1,R2, . . . ,R2 n 2 n n (R1,R2) ( R 3 , R 4 ) , . . . , (R2 n - 1,R2 n) 0 / 1 2 × 2 ( 0 , 0 ) , ( 0 , 1 ) , ( 1 , 0 ) ( 1 , 1 ) 0 / 1 le test de course de Wald et Wofowitz suggéré ci-dessus pourrait également être utilisé. De la façon dont il est décrit dans la règle, il semble qu'ils souhaitent que vous construisiez un intervalle de confiance pour la corrélation avec une demi-largeur égale à . Vous passeriez si est contenu dans l'intervalle. Ces tests semblent cependant un peu trop faciles à réussir.3 σ 0
la source