4. 残差正态性检验
在化工过程建模与试验数据分析中,残差正态性检验是模型诊断链条上的关键一环。前面几节我们已经讨论了残差的独立性、等方差性以及异常点识别,而正态性检验回答的是一个更基础的问题:残差的分布形态是否与“零均值、同方差正态分布”这一经典假设相容。如果残差显著偏离正态,那么基于最小二乘的参数置信区间、F检验、t检验以及预测区间都会失去理论依据,模型的外推能力和不确定性量化也会变得不可靠。
需要先明确一个认识:残差正态性检验不是“证明残差服从正态分布”,而是在给定样本量和显著性水平下,判断是否有足够证据拒绝正态性假设。样本量较小时,检验功效不足,容易出现“不拒绝但也不代表成立”的情况;样本量很大时,轻微偏离也可能被判定为显著。因此,检验结果必须结合残差图、样本量、数据来源和工程容差综合判断,而不能只看一个p值。
Shapiro-Wilk检验:小样本下的首选
Shapiro-Wilk检验(简称S-W检验)基于排序后的残差与正态分布期望次序统计量之间的线性相关程度构造统计量W,W越接近1说明残差越接近正态。它在中样本(约3~50)下功效较高,是化工试验中常见的首选方法,例如正交试验、单因素多水平试验、小批量配方筛选等场景,残差样本往往只有十几到几十个。
以某催化剂配方试验为例,假设采用三因素三水平正交表安排9次试验,以收率作为响应,拟合线性模型后得到9个残差(单位:%):
残差 e = [0.42, -0.31, 0.18, -0.55, 0.27, 0.09, -0.12, 0.36, -0.34]
在Python中可直接调用SciPy完成检验:
from scipy import stats
e = [0.42, -0.31, 0.18, -0.55, 0.27, 0.09, -0.12, 0.36, -0.34]
W, p = stats.shapiro(e)
print(f"W={W:.4f}, p={p:.4f}")
若示例计算得到W≈0.972、p≈0.91(此处为教学示例数值,非实测结果),则在α=0.05下不拒绝正态性假设,可认为残差与正态分布相容。反之,若p<0.05,则应进一步查看残差图,判断偏离是来自个别异常点、方差不齐还是分布本身的偏斜。
Anderson-Darling检验:对尾部更敏感
Anderson-Darling检验(A-D检验)基于经验分布函数与理论正态分布函数之间的加权平方差,权重在分布尾部更大,因此对尾部偏离特别敏感。化工数据中经常出现“主体近似正态、但尾部有拖尾”的情况,例如痕量杂质含量、设备故障间隔、极端工况下的转化率波动,这时A-D检验往往比S-W检验更容易发现问题。
A-D检验的统计量A²需要与临界值比较,SciPy返回的是修正后的统计量和p值:
A2, crit, sig = stats.anderson(e, dist='norm')
print(f"A2={A2:.4f}")
print("临界值:", crit)
print("显著性水平:", sig)
判断规则是:若A²超过某一显著性水平对应的临界值,则在该水平下拒绝正态性。A-D检验适用于样本量稍大的场合(一般n≥8),在化工过程历史数据、在线分析仪残差序列的诊断中使用较多。需要注意的是,A-D检验对参数估计后的复合假设(均值和方差由样本估计)需要采用修正临界值,直接套用标准正态临界值会偏于保守。
偏度与峰度:分布形态的定量刻画
偏度(Skewness)衡量分布的不对称方向与程度,峰度(Kurtosis)衡量尾部的厚重程度。对残差而言,理想正态情形下偏度接近0、超额峰度接近0。偏度为正表示右尾较长,常见于浓度、收率等存在上限约束的指标;偏度为负表示左尾较长。超额峰度大于0表示尖峰厚尾,说明极端残差出现频率高于正态预期,这在化工过程中往往对应间歇操作、切换工况或仪表饱和等非平稳因素。
样本偏度和峰度可按下式估计,并可用其标准误构造近似检验:
import numpy as np
from scipy import stats
n = len(e)
g1 = stats.skew(e, bias=False)
g2 = stats.kurtosis(e, fisher=True, bias=False)
se_g1 = np.sqrt(6*n*(n-1)/((n-2)*(n+1)*(n+3)))
se_g2 = np.sqrt(24*n*(n-1)**2/((n-3)*(n-2)*(n+3)*(n+5)))
print(f"偏度={g1:.3f}, 标准误={se_g1:.3f}")
print(f"超额峰度={g2:.3f}, 标准误={se_g2:.3f}")
当|g1/se_g1|或|g2/se_g2|大于约2时,可认为偏度或峰度显著偏离0。偏度和峰度的优势在于给出偏离的方向和形态信息,便于追溯原因:右偏残差常提示响应存在上界或模型对高值区拟合不足;厚尾则提示存在未被模型解释的极端工况或异常点。
在化工数据中的适用性要点
化工数据有其特殊性,直接套用统计教科书结论容易误判。第一,样本量普遍偏小。中试、正交试验、配方筛选往往只有8~20个残差,此时S-W检验比A-D检验更稳妥,且应把p值看作参考而非判决。第二,残差常受工况分段影响。连续过程历史数据中,开停车、负荷调整、原料切换会造成残差分布混合,整体看似厚尾,实际是多个近似正态子总体叠加,此时应按工况分层检验。第三,响应变量存在物理约束。收率、纯度、转化率有上下界,接近边界时残差自然偏斜,可考虑对响应做logit或Box-Cox变换后再检验。第四,异常点会同时抬高峰度和A-D统计量,应先按前面章节的方法识别并说明异常点,再判断剩余残差的正态性。
实操中建议形成固定流程:先画正态Q-Q图和残差直方图做直观判断,再用S-W或A-D给出定量结论,最后用偏度、峰度说明偏离形态。三项结果一致时结论较可靠;若不一致,以图形和工程背景为主,并记录样本量、显著性水平和处理方式。对于需要交付的模型报告,应同时给出检验方法、统计量、p值或临界值、样本量以及是否采取变换或剔除的处理说明,使正态性诊断可追溯、可复核。