赌博机验证统计

机器算法验证 相关性 统计学意义 卡方检验
2022-03-28 15:00:42

问题是政府想要关闭电子轮盘赌,他们声称轮盘赌在统计测试中失败。

对不起我的语言,但这是从斯洛文尼亚法律尽可能好的翻译官方(法律)要求是:

  • 每个事件的频率不应与预期频率相差超过 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 )
1个回答

对于公平的游戏,连续的游戏应该是独立的。听起来他们在要求您执行一个连续结果不相关的测试。您可以通过配对数据来做到这一点R1,R2,...,R2n成为第一个2n结果。然后你可以形成n不同对 (R1,R2),(R3,R4),...,(R2n1,R2n). 计算皮尔逊相关系数不为零(如果数据是连续的甚至是一组整数)。如果数据是0/1对于输/赢,您可以在2×2通过使用计数获得的表(0,0),(0,1),(1,0)(1,1). 在这种情况下0/1也可以使用上面建议的 Wald 和 Wofowitz 的运行测试。规则中描述的方式听起来像是他们希望您为半宽等于的相关性构建置信区间3σ. 如果你会通过0包含在区间内。不过,这些测试似乎有点太容易通过了。