【问题标题】:Checking for randomness using the Chi-Square Test使用卡方检验检查随机性
【发布时间】:2015-04-30 22:11:47
【问题描述】:

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

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 值为零,考虑到零假设是数据是统一的,这实际上没有意义。我误解了结果吗?还是我的代码完全错误?

【问题讨论】:

  • 这就是全部代码吗?我觉得我们错过了一些东西。
  • 我只是省略了样板导入语句。让我把它们加进去。
  • 但是关键的chisquare函数在哪里...?
  • 抱歉,我的 IDE 将其隐藏在 import 语句下。这应该就是一切。
  • 您知道chisquare 测试实际上是在测试什么吗?我真的不明白你希望从chisquare(data) 得到什么。在我看来这毫无意义。

标签: python random statistics scipy


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    卡方检验检查您在一个箱中观察的项目数量与您在该箱中预期有多少项目。它是通过对所有 bin 中观察到的和预期的偏差的平方进行求和来实现的。你不能只给它原始数据,你需要先用scipy.stats.histogram之类的东西来装箱。

    【讨论】:

      猜你喜欢
      • 2021-12-29
      • 2014-01-19
      • 1970-01-01
      • 2023-02-01
      • 2021-06-16
      • 1970-01-01
      • 2023-02-17
      • 2019-10-04
      • 2017-01-27
      相关资源
      最近更新 更多