一、检验的逻辑:概率化的反证法
假设检验借用了反证法的结构,但把「矛盾」换成了「小概率」。
- 先假设待质疑的命题成立,称为零假设
H₀。这里H₀是「装置完全均匀,各结果等概率」。 - 在
H₀成立的前提下,推导某个统计量应有的分布,称为零分布。 - 计算实际数据的统计量,看它在零分布中处于什么位置。
- 若观测值落在零分布的极端尾部(这种数据在
H₀下罕见),就拒绝H₀;否则不拒绝。
「不拒绝」不等于「接受」
这套逻辑天然是不对称的。拒绝 H₀ 是一个强结论;不拒绝只是「没找到足够反对它的证据」,它可能是因为 H₀ 为真,也可能仅仅是因为数据太少。
把「p = 0.4」说成「证明了装置是公平的」,是最常见的统计误用之一。要排除「数据太少」这种可能,必须做功效分析——见第六节。
二、卡方统计量的构造
把结果分成 M 个互斥类别。设第 i 类的观测频数为 Oᵢ,在 H₀ 下的期望频数为 Eᵢ。皮尔逊卡方统计量定义为:
三个设计要点:
- 平方:让正负偏差都贡献正值,不会互相抵消。
- 除以 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 次,各点数出现次数如下。问:这枚骰子均匀吗?
| 点数 | 观测 O | 期望 E | O − E | (O−E)² | (O−E)²/E |
|---|---|---|---|---|---|
| 1 | 92 | 100 | −8 | 64 | 0.64 |
| 2 | 118 | 100 | +18 | 324 | 3.24 |
| 3 | 106 | 100 | +6 | 36 | 0.36 |
| 4 | 89 | 100 | −11 | 121 | 1.21 |
| 5 | 102 | 100 | +2 | 4 | 0.04 |
| 6 | 93 | 100 | −7 | 49 | 0.49 |
| 合计 | 600 | 600 | 0 | 598 | 5.98 |
自由度 df = 6 − 1 = 5。α = 0.05 的临界值是 11.07。
注意「O − E」那一列的合计恰好是 0——这就是那条约束的直观体现,也是自由度要减 1 的原因:知道了前 5 个偏差,第 6 个就被完全确定了。
另一个方向的异常
卡方检验通常只看右尾。但左尾同样值得注意:如果 χ² 小得离谱(比如 df=5 时 χ² = 0.3,p左 < 0.01),意味着数据「过于完美地均匀」——这在真随机中同样罕见。
历史上最著名的例子是费希尔对孟德尔豌豆数据的分析(Fisher, 1936):他发现那些数据与理论比例吻合得超出了随机所能解释的程度。这类「太好了」的数据,往往指向人为整理或选择性记录。
四、p 值是什么,不是什么
p 值的定义:在零假设成立的前提下,观察到当前统计量或比它更极端的结果的概率。
H₀ 上。p 值是「给定 H₀ 时数据的概率」,不是「给定数据时 H₀ 的概率」。
| 错误说法 | 为什么错 | 正确表述 |
|---|---|---|
| 「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ᵢ 为号码 i 在 n 期中出现的次数,p = k/M = 6/49。
关键观察:每一期,号码 i 要么出现要么不出现(不可能出现两次,因为期内不放回)。所以「号码 i 在某期出现」是一个 Bernoulli(p) 事件,而 n 期之间相互独立,因此
现在直接计算卡方统计量的期望。注意 Eᵢ = np 是常数,且 E[(Oᵢ − Eᵢ)²] = Var(Oᵢ):
代入 p = k/M:
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
所以在需要严格推断的场合,正确做法是参数自助法 / 蒙特卡洛检验:
- 按照与真实装置完全相同的抽取规则(M 选 k、期数 n),模拟
B次均匀数据(B ≥ 10000)。 - 对每次模拟算出
χ²*,得到 B 个值构成的经验零分布。 - p 值 = (#{χ²* ≥ χ²观测} + 1) / (B + 1)。
这个方法不依赖任何渐近近似,也不需要猜自由度——抽取规则本身就是零分布的定义。分子分母各加 1 是标准做法(Davison & Hinkley),避免报告出 p = 0。
本站首页与《冷热号》一文中的 χ² 数字仍按常规 M−1 自由度计算,因此是偏保守的一侧——它们的结论「与均匀分布相容」不会因为这个偏差而失效(保守只会让人更难拒绝均匀假设)。这里把差异写清楚,而不是留一个未标注的近似。
六、检出力:需要多少期数据
回到第一节留下的问题:p 值大,究竟是因为装置均匀,还是因为数据不够?回答这个问题的工具是功效(power):当装置真有某个大小的偏差时,检验能把它检出来的概率。
对单个号码的比例检验,达到功效 1 − β 所需的期数为:
p₀ = 6/49,p₁ = p₀(1+δ),δ 为相对偏差幅度。取 α = 0.05(z = 1.96)、功效 80%(zβ = 0.8416)。
| 相对偏差 δ | 真实概率 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_k,H₀ 下近似 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).