问题是政府想要关闭电子轮盘赌,他们声称轮盘赌在统计测试中失败。
对不起我的语言,但这是从斯洛文尼亚法律尽可能好的翻译官方(法律)要求是:
- 每个事件的频率不应与预期频率相差超过 3 sigma
- 正态分布的卡方检验必须在 0.025 的风险水平内
- 连续相关检验必须通过 3 sigma 检验和卡方检验
我已经测试了前 2 个要求并且它们通过了测试,但是我在理解第 3 个要求时遇到了问题。(请记住,这是翻译的,“连续相关”可以是别的东西)
我应该如何测试第三个要求?
如果有人感兴趣,数据:http:
//pastebin.com/ffbSKpr1
编辑:卡方在 2% 的时间里失败(我期望这是由于 alpha 为 0.025 的事实而预期的结果)并且 sigma3 测试失败了 5%,而我预计 3sigma 的失败率为 9%(看起来频率不是根据即使对于随机数也是正态分布)
我可能无法正确理解这条定律,但所有自相关向量通过 3sigma 检验的概率几乎为 0%,因为单次运行失败的概率为 9%,卡方检验失败的概率为 2.5。
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 )