统计方法 · 方法论

随机性检验:卡方统计量与 p 值

前面几篇都在说「不能这样看数据」。这一篇说的是该怎样看—— 如何用严谨的统计方法回答「这个装置均匀吗」。 文中第五节给出一个可以自己动手验证的结论:常规做法在这类数据上会系统性地算错零分布。

发布 2026-07-09 更新 2026-08-28 约 4200 字 · 阅读约 17 分钟 难度:中等偏上

一、检验的逻辑:概率化的反证法

假设检验借用了反证法的结构,但把「矛盾」换成了「小概率」。

  1. 先假设待质疑的命题成立,称为零假设 H₀。这里 H₀ 是「装置完全均匀,各结果等概率」。
  2. H₀ 成立的前提下,推导某个统计量应有的分布,称为零分布
  3. 计算实际数据的统计量,看它在零分布中处于什么位置。
  4. 若观测值落在零分布的极端尾部(这种数据在 H₀ 下罕见),就拒绝 H₀;否则不拒绝

「不拒绝」不等于「接受」

这套逻辑天然是不对称的。拒绝 H₀ 是一个强结论;不拒绝只是「没找到足够反对它的证据」,它可能是因为 H₀ 为真,也可能仅仅是因为数据太少

把「p = 0.4」说成「证明了装置是公平的」,是最常见的统计误用之一。要排除「数据太少」这种可能,必须做功效分析——见第六节。

二、卡方统计量的构造

把结果分成 M 个互斥类别。设第 i 类的观测频数为 Oᵢ,在 H₀ 下的期望频数为 Eᵢ。皮尔逊卡方统计量定义为:

χ² = Σi=1M (Oᵢ − Eᵢ)² / Eᵢ Karl Pearson, 1900。

三个设计要点:

  • 平方:让正负偏差都贡献正值,不会互相抵消。
  • 除以 Eᵢ:这是关键的归一化。在期望值为 1000 的类别里偏差 10 微不足道,在期望值为 10 的类别里偏差 10 则是巨大的。除以 Eᵢ 恰好把每项调整成方差量级为 1 的标准化残差平方。
  • 求和:把所有类别的偏差汇总成一个数,做一次整体检验——从而避开《冷热号的统计学真相》里的多重比较问题。

2.1 自由度

在标准情形(每次观测独立地落入恰好一个类别)下,χ² 近似服从自由度为 M − 1 的卡方分布。

减 1 的原因是约束M 个观测频数必须满足 ΣOᵢ = n,所以只有 M−1 个可以自由变动。一般规则是:每施加一个由数据估计出的约束,自由度就减 1。若还要从数据中估计 r 个参数,自由度是 M − 1 − r

请记住这个「每加一个约束减一」的原则。第五节要说明的正是:本站关心的这类数据额外带有约束,而常规公式没有把它算进去。

2.2 适用条件

卡方拟合优度检验的适用条件
条件要求违反时怎么办
期望频数所有 Eᵢ ≥ 5(宽松些:≥80% 的类别 ≥5,且无一 <1)合并类别,或改用精确检验 / 蒙特卡洛
观测独立各次观测相互独立改用能处理相关性的方法,或模拟零分布
类别互斥完备每次观测恰好落入一个类别重新定义类别
使用频数必须用计数,不能用百分比换算回原始计数

最后一条值得强调:把百分比代进公式会得出完全错误的结果,因为统计量的大小本来就应该随样本量增长。用百分比等于抹掉了样本量信息。

三、一个完整的手算例子

一枚骰子掷 600 次,各点数出现次数如下。问:这枚骰子均匀吗?

骰子 600 次投掷的卡方计算(E = 600/6 = 100)
点数 观测 O 期望 E O − E (O−E)² (O−E)²/E
192100−8640.64
2118100+183243.24
3106100+6360.36
489100−111211.21
5102100+240.04
693100−7490.49
合计60060005985.98

自由度 df = 6 − 1 = 5。α = 0.05 的临界值是 11.07

χ² = 5.98 < 11.07  →  不拒绝 H₀,p ≈ 0.31

注意「O − E」那一列的合计恰好是 0——这就是那条约束的直观体现,也是自由度要减 1 的原因:知道了前 5 个偏差,第 6 个就被完全确定了。

另一个方向的异常

卡方检验通常只看右尾。但左尾同样值得注意:如果 χ² 小得离谱(比如 df=5 时 χ² = 0.3,p < 0.01),意味着数据「过于完美地均匀」——这在真随机中同样罕见。

历史上最著名的例子是费希尔对孟德尔豌豆数据的分析(Fisher, 1936):他发现那些数据与理论比例吻合得超出了随机所能解释的程度。这类「太好了」的数据,往往指向人为整理或选择性记录。

四、p 值是什么,不是什么

p 值的定义:在零假设成立的前提下,观察到当前统计量或比它更极端的结果的概率。

p = P( χ² ≥ χ²观测 | H₀ 为真 ) 注意条件在 H₀ 上。p 值是「给定 H₀ 时数据的概率」,不是「给定数据时 H₀ 的概率」。
p 值的三种常见误读
错误说法为什么错正确表述
「p = 0.03,所以 H₀ 为真的概率只有 3%」 P(数据|H₀) 当成了 P(H₀|数据)。两者由贝叶斯定理相联,还需要先验概率。见基础率谬误 「若 H₀ 为真,出现这么极端的数据的概率是 3%」
「p = 0.40,所以装置是公平的」 不拒绝 ≠ 接受。可能只是样本量不够。 「现有数据不足以拒绝均匀假设」(并应附上功效分析)
「p = 0.001,所以偏差很大」 p 值同时受效应量样本量影响。样本足够大时,微不足道的偏差也会给出极小的 p 值。 「偏差存在的证据很强」——大小另须用效应量(如 Cramér's V)度量

2016 年美国统计协会(ASA)就 p 值发布过正式声明,其中第五条正是:「p 值不度量效应量,也不度量结果的重要性。」第六条:「p 值本身不提供关于模型或假设的证据的良好度量。」

五、一个真实的陷阱:零分布错了

现在进入本文最实质的部分。

假设我们统计 n 期数据中,49 个号码各自出现了多少次,然后套用卡方检验,自由度取 M − 1 = 48

这是错的。因为每期抽取的是 k = 6不重复的号码——这引入了常规公式没有考虑的额外约束。

5.1 推导

Oᵢ 为号码 in 期中出现的次数,p = k/M = 6/49

关键观察:每一期,号码 i 要么出现要么不出现(不可能出现两次,因为期内不放回)。所以「号码 i 在某期出现」是一个 Bernoulli(p) 事件,而 n 期之间相互独立,因此

Oᵢ ~ B(n, p),  E[Oᵢ] = np,  Var(Oᵢ) = np(1 − p) 这一步是精确的,不是近似。

现在直接计算卡方统计量的期望。注意 Eᵢ = np 是常数,且 E[(Oᵢ − Eᵢ)²] = Var(Oᵢ)

E[χ²] = Σi=1M Var(Oᵢ) / Eᵢ = Σi=1M np(1−p) / (np) = M · (1 − p)

代入 p = k/M

E[χ²] = M(1 − k/M) = M − k 对 49 选 6:E[χ²] = 49 − 6 = 43,而不是自由度公式给出的 48。

M − k,不是 M − 1

这个结果非常干净:每期抽 k 个号码,就相当于施加了 k 个约束,而不是 1 个。常规公式里的「减 1」,正是 k = 1 的特例。

后果是:如果照搬 df = 48,你会拿一个中心在 43 的统计量去比对一个中心在 48 的参考分布。这会让 p 值系统性偏大,检验变得过于保守——真有偏差时更难检出。

5.2 模拟验证

光有推导不够。下图用 4000 次独立模拟直接画出零分布:每次模拟 300 期均匀抽取(每期 6 个),算出 χ²,然后统计其分布,并与理论的 χ²₄₈χ²₄₃ 密度叠在一起。

卡方统计量的真实零分布 vs 两个理论参考

4000 次独立模拟,每次 300 期 × 每期 6 个号码,完全均匀。随机种子 20260709(固定,可复现)。纵轴为落入各区间的概率。

模拟均值

理论预言 M − k = 43

模拟方差

比 χ²₄₃ 的方差 2×43 = 86 约低一成

用 df = 48 的拒绝率

名义应为 5%,实测远低于此 → 严重保守

用 df = 43 的拒绝率

名义应为 5%,接近但仍略偏保守

模拟均值 43.14,与推导值 43 吻合到小数点后一位;而常规的 χ²₄₈ 曲线明显偏右。后果可以量化:用 df = 48 的临界值 65.171 做检验,实际的第一类错误率只有 1.23%,而不是名义上的 5%——检验损失了大约四分之三的名义显著性水平,真有偏差时自然更难检出。改用 df = 43(临界值 59.304)后,实际拒绝率回到 4.45%

但 χ²₄₃ 也只是近似:最稳妥的做法是直接模拟零分布

M − k 精确地给出了均值,但真实零分布与 χ²₄₃ 并不相同。模拟测得的方差约为 78,比 χ²₄₃2 × 43 = 86 低约 9%——中心对上了,但离散程度被高估。三个 95% 分位点排下来是:

蒙特卡洛 58.68 < χ²₄₃ 的 59.30 ≪ χ²₄₈ 的 65.17

所以在需要严格推断的场合,正确做法是参数自助法 / 蒙特卡洛检验

  1. 按照与真实装置完全相同的抽取规则(M 选 k、期数 n),模拟 B 次均匀数据(B ≥ 10000)。
  2. 对每次模拟算出 χ²*,得到 B 个值构成的经验零分布。
  3. p 值 = (#{χ²* ≥ χ²观测} + 1) / (B + 1)。

这个方法不依赖任何渐近近似,也不需要猜自由度——抽取规则本身就是零分布的定义。分子分母各加 1 是标准做法(Davison & Hinkley),避免报告出 p = 0。

本站首页与《冷热号》一文中的 χ² 数字仍按常规 M−1 自由度计算,因此是偏保守的一侧——它们的结论「与均匀分布相容」不会因为这个偏差而失效(保守只会让人更难拒绝均匀假设)。这里把差异写清楚,而不是留一个未标注的近似。

六、检出力:需要多少期数据

回到第一节留下的问题:p 值大,究竟是因为装置均匀,还是因为数据不够?回答这个问题的工具是功效(power):当装置真有某个大小的偏差时,检验能把它检出来的概率。

对单个号码的比例检验,达到功效 1 − β 所需的期数为:

n ≈ [ zα/2√(p₀(1−p₀)) + zβ√(p₁(1−p₁)) ]² / (p₁ − p₀)² 其中 p₀ = 6/49p₁ = p₀(1+δ)δ 为相对偏差幅度。取 α = 0.05(z = 1.96)、功效 80%(zβ = 0.8416)。
以 80% 功效、α = 0.05 检出给定相对偏差所需的期数
相对偏差 δ 真实概率 p₁ 所需期数 n 按每年 300 期折算
2%0.1249≈ 141,000约 470 年
5%0.1286≈ 22,800约 76 年
10%0.1347≈ 5,770约 19 年
20%0.1469≈ 1,470约 5 年
30%0.1592≈ 670约 2.2 年
50%0.1837≈ 250约 10 个月

下图把这张表反过来读:给定手上有多少期数据,最小能可靠检出多大的偏差。

给定期数下可检出的最小相对偏差

单号码比例检验,α = 0.05(双侧),功效 80%,p₀ = 6/49。横轴对数刻度。曲线由上方公式数值求解得到。

这张图解释了一切「历史数据分析」的处境

常见的「近 100 期」「近 500 期」样本量,只够检出 50% 以上的巨大偏差——那种程度的机械故障肉眼就能看出来。

而真正有可能存在的细微偏差(几个百分点),需要数万期数据才能可靠检出,远超任何装置的实际服役期。也就是说:在现实可得的数据量下,几乎不可能既检出偏差、又在装置报废前用上它。

再叠加《期望值与返奖率》的结论——即便检出 5% 的偏差,也远补不上 20%–50% 的返奖率缺口——这条路在数学上是封死的。

七、其他维度的检验

频次均匀只是随机性的一阶性质。《伯恩斯坦反例》已经说明:低阶性质全部正常,不足以保证整体随机。序列 1,2,3,…,49,1,2,3,… 的频次完全均匀,却毫无随机性可言。

常用的随机性检验及其针对的结构
检验检测什么统计量 / 零分布
频次检验(卡方)一阶:各结果出现频率是否均匀Σ(O−E)²/E,χ² 分布
游程检验连续同类结果的段落长度是否正常游程总数 R,近似正态(Wald–Wolfowitz)
序列相关相邻结果之间是否有线性关联自相关系数 r_kH₀ 下近似 N(0, 1/n)
序偶 / 扑克检验二阶及以上:相邻对、五元组的模式分布对模式类别做卡方
间隔检验同一结果两次出现的间隔是否服从几何分布对间隔分箱做卡方;参见无记忆性
生日间距检验高维均匀性(对线性同余生成器极敏感)间距重复数近似泊松(Marsaglia)
谱检验生成的点在高维空间中是否落在少数超平面上格结构分析(Knuth)

本站所有模拟使用的 mulberry32 能通过常规的频次与低阶序列检验,但它是一个 32 位状态的简单生成器,绝不适用于密码学用途——对科普演示而言,它的可复现性才是被看重的性质。

八、标准测试套件

实践中不会手工拼凑检验,而是使用成熟的套件:

  • NIST SP 800-22 Rev.1a(2010)——美国国家标准与技术研究院发布,含 15 项检验(频次、块内频次、游程、最长游程、二元矩阵秩、离散傅里叶变换、非重叠模板匹配、Maurer 通用统计、线性复杂度、序列、近似熵、累加和、随机游动等)。密码学随机数生成器的事实标准。
  • TestU01(L'Ecuyer & Simard, 2007)——目前最严格的套件,含 SmallCrush、Crush、BigCrush 三个强度级别。BigCrush 包含 106 项检验,能淘汰绝大多数常见生成器。
  • Diehard / Dieharder——Marsaglia 1995 年的经典套件及其现代扩展版。
  • PractRand——支持流式无限长度测试,对状态空间不足的生成器尤其敏感。

套件本身也逃不掉多重比较

BigCrush 跑 106 项检验,若各自用 α = 0.01,则即使被测生成器完美无缺,出现至少一项「失败」的概率约为 1 − 0.99¹⁰⁶ ≈ 66%

所以这类套件的报告规范是区分「suspect」(可疑)与「clear failure」(明确失败,如 p < 10⁻¹⁰),并对可疑项换种子重跑。这与《冷热号》里讲的是同一件事——只是在这里,专业领域已经把应对方式制度化了。

九、检验能回答与不能回答的

最后必须把边界划清楚,否则很容易把「检验」误解成「预测」。

随机性检验的能力边界
问题能否回答说明
这个装置的输出与均匀假设相容吗?卡方检验的标准用途
某号码的真实概率大约是多少?点估计加置信区间
需要多少数据才能检出 5% 的偏差?功效分析,见第六节
这台装置绝对公平吗?不能「不拒绝」永远不等于「证明为真」
下一期会开什么?不能见《预测的不可能性
哪个号码「该出了」?不能(问题本身有误)见《赌徒谬误

最后一行需要特别澄清

假设检验确实能发现装置有偏。但这个发现的方向,与「冷号该出了」正好相反

若检验显示号码 i 系统性偏多,唯一合理的推断是这台装置倾向于 i,所以它未来仍会偏多——这是「有偏但独立」,不是「会自我纠偏」。

换句话说,统计检验能给出的最强结论也只是「修正了各结果的概率估计」,从来不是「知道了下一个结果」。而修正后的概率,仍然要和 R − 1 这个固定的负项相加。


延伸阅读与参考

  • Pearson, K. (1900). On the criterion that a given system of deviations… Philosophical Magazine, 50(302), 157–175. 卡方检验的原始论文。
  • Fisher, R. A. (1936). Has Mendel's work been rediscovered? Annals of Science, 1(2), 115–137. 卡方左尾异常的经典案例。
  • Rukhin, A. et al. (2010). NIST SP 800-22 Rev.1a: A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications. NIST.
  • L'Ecuyer, P. & Simard, R. (2007). TestU01: A C library for empirical testing of random number generators. ACM TOMS, 33(4), Article 22.
  • Knuth, D. E. The Art of Computer Programming, Vol. 2: Seminumerical Algorithms (3rd ed.). 第 3.3 节「统计检验的种类」,含谱检验。
  • Davison, A. C. & Hinkley, D. V. Bootstrap Methods and Their Application (Cambridge, 1997). 蒙特卡洛检验与 p 值的 (b+1)/(B+1) 形式。
  • Wasserstein, R. L. & Lazar, N. A. (2016). The ASA Statement on p-Values: Context, Process, and Purpose. The American Statistician, 70(2), 129–133.
  • Cohen, J. Statistical Power Analysis for the Behavioral Sciences (2nd ed., 1988). 功效分析的标准参考。
  • Marsaglia, G. & Tsang, W. W. (2002). Some difficult-to-pass tests of randomness. Journal of Statistical Software, 7(3).