使用卡方检验检查随机性

时间:2015-02-28 03:58:42

标签: python random statistics scipy

我正在为一个严重依赖随机数生成器的类项目运行模拟,因此我们要求测试随机数生成器以查看使用卡方静态的“随机”方式。在查看了这里的一些帖子后,我使用了以下代码来找到答案:

from random import randint
import numpy as np
from scipy.stats import chisquare
numIterations = 1000  #I've run it with other numbers as well

observed = []
for i in range(0, numIterations):
    observed.append(randint(0, 100))
data = np.array(observed)
print "(chi squared statistic, p-value) with", numOfIter, "samples generated: ", chisquare(data)

然而,当numIterations大于10时,我得到的p值为零,考虑到零假设是数据是统一的,这并没有真正意义。我误解了结果吗?或者我的代码完全错了?

2 个答案:

答案 0 :(得分:1)

卡方检验检查您在垃圾箱中观察的项目数与您期望在垃圾箱中的数量。它通过对所有箱中观察到的和预期的平方偏差求和来实现。您不能只提供原始数据,您需要先使用scipy.stats.histogram之类的方法对其进行加料。

答案 1 :(得分:0)

根据您可以测试的分布情况,请记住,拥有更多样本将更好地近似分布(如果您可以采用无限数量的样本,那么您将获得实际分布)。因为在现实生活中我们无法运行我们的数字生成器无数次我们只处理近似情况,所以我们对分布进行分类(查看有多少数字落入bin http://en.wikipedia.org/wiki/Bean_machine)。现在,如果你运行你的bean机器,你发现其中一个箱子明显高于预期的分布(在这种情况下是高斯),那么你会说这个过程不是高斯分布。除了你的形状与高斯不同之外,因为你的采样多个正态(特殊情况下的高斯)分布,所以与卡平方相同。既然你想知道你的数据是正常的还是高斯的(想想形状,形状是由分布参数决定的,即平均std kurtosis),这里有一个例子:http://www.real-statistics.com/tests-normality-and-symmetry/statistical-tests-normality-symmetry/chi-square-test-for-normality/

我不知道你的数据是什么,所以我无法告诉你要找什么。总而言之,您需要知道您的给定的统计数据是什么,然后尝试将其与模型相匹配(在本例中为卡方)然后问问自己它是否与模型匹配(曲线,您可能尝试找到它的高斯/正常与否,你可以用卡方检验做。你应该谷歌卡方,高斯正常等。