4. 统计检验方法一

前几节我们讨论了随机数的均匀性、独立性和周期等直观特征,但“看起来随机”并不等于“统计上合格”。本节引入两类最基础、也最常用的统计检验:卡方拟合优度检验用于判断序列的取值分布是否与目标分布一致,游程检验用于判断序列中相邻元素之间是否存在非随机的聚集或交替模式。二者一横一纵,分别从“分布形状”和“排列顺序”两个维度对随机数质量进行把关。

一、卡方拟合优度检验:分布是否“长得对”

卡方拟合优度检验的核心思想是:把样本空间划分为 k 个互斥区间,统计每个区间的实际观测频数 Oi,再与理论期望频数 Ei 比较。若随机数确实服从目标分布,则各区间观测频数应围绕期望频数小幅波动;偏差过大就说明分布不合格。检验统计量为:

χ² = Σ (O_i − E_i)² / E_i ,  i = 1, 2, …, k
自由度 df = k − 1 − m   (m 为用样本估计的参数个数)

对于 [0,1) 上的均匀分布,若把区间等分为 k 段,则每段期望频数 Ei = n/k,无需估计参数,m = 0。在显著性水平 α 下,查卡方分布临界值 χ²1−α(df):若计算值大于临界值,则拒绝“服从均匀分布”的原假设。

下面用一段教学示例序列(非实测数据,仅用于演示计算流程)进行演练。取 n = 100 个两位小数的伪随机数,按 0.2 宽度分为 5 个区间,统计结果如下:

区间观测频数 Oi期望频数 Ei(Oi−Ei)²/Ei
[0.0, 0.2)18200.20
[0.2, 0.4)22200.20
[0.4, 0.6)19200.05
[0.6, 0.8)23200.45
[0.8, 1.0)18200.20
合计100100χ² = 1.10

自由度 df = 5 − 1 = 4。取 α = 0.05,查表得临界值 χ²0.95(4) ≈ 9.488。由于 1.10 < 9.488,不能拒绝原假设,认为该序列在分布形状上与均匀分布无显著差异。需要强调:不拒绝只是“没有发现足够证据”,并不等于“证明均匀”。

实操要点:每个区间的期望频数 Ei 建议不小于 5,否则应合并相邻区间;区间划分方式应在检验前固定,不能根据数据“挑一个好看的划分”。

二、游程检验:顺序是否“排得对”

分布合格不代表顺序合格。例如序列 0.1, 0.2, 0.3, …, 1.0 的取值分布很均匀,但明显是递增排列,绝不随机。游程检验正是用来捕捉这类顺序异常。

所谓游程,是指序列中连续出现的同类元素构成的一段。最常用的做法是:以中位数(或均值)为界,把序列二值化为“高于中位数(记 +)”和“低于中位数(记 −)”,然后统计符号交替形成的游程个数 R。若序列独立随机,R 应接近 2n₁n₂/(n₁+n₂) + 1,其中 n₁、n₂ 分别为 + 和 − 的个数。当 n₁、n₂ 均较大(一般 ≥ 10)时,R 近似服从正态分布:

μ_R = 2n₁n₂/(n₁+n₂) + 1
σ_R = sqrt[ 2n₁n₂(2n₁n₂ − n₁ − n₂) / ((n₁+n₂)²(n₁+n₂−1)) ]
Z = (R − μ_R) / σ_R

仍用上面的示例序列,取中位数 0.50 二值化后,假设得到 n₁ = 50、n₂ = 50,实际游程数 R = 46。计算得 μR = 51,σR ≈ 4.97,则 Z = (46 − 51)/4.97 ≈ −1.01。取 α = 0.05,双侧临界值 ±1.96,|Z| < 1.96,不能拒绝独立性假设。

游程数显著偏少(Z 为较大负值)说明序列存在聚集或趋势,如连续多个高值后连续多个低值;显著偏多(Z 为较大正值)说明序列过度交替,如高低高低反复出现,常见于某些劣质线性同余发生器的低位输出。

频率检验与游程检验:两条互补的检验路径 卡方拟合优度检验(看分布) 输入:n 个随机数 + 目标分布 ① 划分 k 个互斥区间 ② 统计观测频数 Oᵢ,算期望 Eᵢ ③ χ² = Σ(Oᵢ−Eᵢ)²/Eᵢ,df = k−1 ④ 比较临界值 χ²₁₋α(df) χ² ≤ 临界值 不拒绝,分布合格 χ² > 临界值 拒绝,分布异常 游程检验(看顺序) 输入:n 个随机数 + 中位数 ① 以中位数二值化为 + / − ② 统计游程数 R、n₁、n₂ ③ 算 μ_R、σ_R,求 Z 值 ④ 比较双侧临界值 ±1.96 |Z| ≤ 1.96 不拒绝,顺序独立 |Z| > 1.96 拒绝,存在聚集/交替

三、结果解读与常见误区

两类检验的结论应联合解读:卡方通过而游程不通过,说明取值分布没问题但排列有规律,问题往往出在发生器的递推结构或低位截断;卡方不通过而游程通过,说明分布整体偏移,可能是参数设置或映射变换有误。只有两者都通过,才能说该序列在“分布 + 顺序”两个基本维度上未发现显著缺陷。

实践中还需注意三点。第一,样本量要足够:卡方检验在 n 太小时功效不足,容易“误放行”;n 过大时又会把微小偏差放大为显著,应结合效应量而非只看 p 值。第二,多重检验问题:对同一序列做多次检验时,假阳性会累积,可对显著性水平做 Bonferroni 修正。第三,检验通过不等于高质量:这两类检验只覆盖一阶分布和简单顺序依赖,无法发现长周期相关、高维均匀性等问题,后续还需引入自相关检验、扑克检验、谱检验等更专门的方法。

常见错误:把“不拒绝原假设”写成“证明序列是随机的”。统计检验只能提供反证,不能提供正面证明;报告结论时应写明检验方法、样本量、显著性水平和统计量取值,便于他人复核。

最后给出一个可复用的判断口径:对均匀性要求较高的仿真场景,建议至少同时执行卡方拟合优度检验(k 取 10~20,Ei ≥ 5)与基于中位数的游程检验(n ≥ 40),两者均在 α = 0.05 下不拒绝,才进入下一轮更严格的检验;任一拒绝,则应先排查发生器参数、种子设置与映射变换,再决定是否更换随机数源。