4. 拟合优度检验概述
拟合优度检验要回答的问题很直接:我们手上这组样本数据,是否“足够像”某个理论分布?它的基本思想是构造一个能度量“样本与理论分布之间偏离程度”的统计量,再依据该统计量在“数据确实来自该分布”这一原假设下的抽样分布,判断当前偏离是否属于随机波动可以解释的范围。偏离小,没有理由拒绝原假设;偏离大到超过临界值,就认为样本与理论分布不相容。
需要强调的是,拟合优度检验的原假设通常是复合假设,例如“数据来自正态分布”,但均值与方差未知,需要先用样本估计。这带来一个关键后果:参数估计会消耗数据的自由度,检验统计量的分布随之改变。忽略这一点是实际应用中最常见的错误之一。
三类常用方法及其差异
卡方拟合优度检验先把数据分组,比较各组的实际频数 Oi 与理论频数 Ei,统计量为 χ² = Σ(Oi − Ei)² / Ei,自由度约为“组数 − 1 − 估计参数个数”。它适用于离散分布,也可用于连续分布的分组化处理。优点是直观、通用、对任何分布都能算;缺点是结果依赖分组方式,分组不同结论可能不同,且要求每组理论频数不宜过小(经验上不少于 5),对尾部差异不敏感。
K-S 检验(Kolmogorov-Smirnov)比较经验分布函数 Fn(x) 与理论分布函数 F(x) 的最大纵向距离 D = sup|Fn(x) − F(x)|。它不分组,保留了数据的完整信息,对分布的整体位置和形状差异较敏感。但标准 K-S 检验要求理论分布的参数完全已知;若参数由样本估计,必须使用修正的临界值(如 Lilliefors 检验),否则会严重偏保守、p 值偏大。此外 K-S 对尾部差异不够敏感,对离散分布也不适用。
A-D 检验(Anderson-Darling)是经验分布类检验的加权改进,统计量 A² 在两端赋予更大权重,因而对尾部偏离特别敏感,这恰好弥补了 K-S 的短板。它同样支持参数估计后的修正临界值,在正态性、Weibull、Logistic 等分布的检验中被广泛使用。代价是计算稍复杂,且不同分布、不同估计方式对应不同的临界值表,实现时必须选对版本。
如何对同一组数据同时做多种检验
实际工作中,单看一种检验容易得出片面结论。合理做法是:先明确原假设与参数估计方式,再并行运行多种检验,最后综合判断。下面以一组“某零件直径测量值”为例演示流程。示例数据为教学假设:共 50 个观测,样本均值 10.02 mm,样本标准差 0.15 mm,我们想检验其是否服从正态分布。
第一步,统一参数估计口径。三种检验都应使用同一组估计值(均值 10.02、标准差 0.15),避免因参数不同导致结论不可比。第二步,分别计算统计量与 p 值。卡方检验需先分组:按正态分布的分位数把数据切成 6 组,使每组理论频数约为 8.3,满足 Ei ≥ 5;自由度 = 6 − 1 − 2 = 3。K-S 与 A-D 则直接使用原始观测值排序后的经验分布。
# 教学示例(伪代码,参数为假设值)
x = 50 个直径观测值
mu, sigma = 10.02, 0.15 # 样本估计
# 卡方:6 组,自由度 3
chi2_stat, p_chi2 = chi2_gof(x, dist="norm", params=(mu, sigma), bins=6)
# K-S:参数由样本估计,使用 Lilliefors 修正
D_stat, p_ks = ks_test(x, dist="norm", estimated_params=True)
# A-D:正态分布专用临界值
A2_stat, p_ad = ad_test(x, dist="norm", estimated_params=True)
print(chi2_stat, p_chi2, D_stat, p_ks, A2_stat, p_ad)
假设运行后得到这样一组结果(示例数值,非实测):χ² = 4.1,p = 0.25;D = 0.09,p = 0.42;A² = 0.48,p = 0.23。三个 p 值都明显大于 0.05,结论一致:没有足够证据拒绝正态性假设。若出现分歧,例如卡方 p = 0.30 而 A-D p = 0.03,则提示尾部存在偏离——这正是 A-D 的敏感点,应回到数据检查极端值、测量误差或混合分布的可能,而不是简单取“多数票”。
最后给出方法选择的实用口径:数据为离散或已分组,优先卡方;关注整体形状且参数已知,用 K-S;关注尾部、做正态性或可靠性分布检验,用 A-D;条件允许时三者并跑,以结论一致增强可信度,以分歧定位问题区域。