正态性方差齐性与模型诊断 - SpiralKernel/bioinfo-wiki-migrated GitHub Wiki

正态性方差齐性与模型诊断

更新:2026-10-26;状态:可用;验证范围:2026-10-26核对原始与官方资料;本页Python微型计算已执行;人工数据不代表专业软件或真实研究性能。

诊断检查模型假设是否足以支持当前解释,不是用一串前置P值给方法“发通行证”。正态、等方差和独立性分别约束不同方面。读完应能从残差中区分偏态、异方差、非线性和相关结构,并知道每种问题该查什么。

前置为相关回归与混杂与t检验配对设计与Welch检验。诊断对象应是相应模型的误差/残差,或配对差值,不是把所有组混在一起看是否正态。

三类条件不要混成一个检验

正态性涉及误差分布形状,影响经典小样本t/F推断;方差齐性指不同条件下误差方差相同;独立性取决于采样和层级结构。残差看似正态不能证明独立,同一供体千个细胞依旧相关。原始响应不是正态也不必否定所有模型,例如计数GLM本就不是正态响应。

残差$e_i=y_i-\hat y_i$是观测与模型拟合之差,受到参数估计约束,不等于直接观测真实误差。残差-拟合值图查结构,Q-Q图查尾部/偏态,按批次或个体着色查分层;结合设计才能解释。

一个肉眼容易忽略的异方差

六个拟合均值都是10。低变异组三个观测9、10、11,残差−1、0、1;高变异组为6、10、14,残差−4、0、4。两组均值和总体残差均值相同,但误差尺度差4倍。若把所有残差汇总成一个均值0,就看不出差异。

本页例子在项目根目录的Python中运行;标准库例子无需安装包,含NumPy/SciPy的例子先按R包Python包与可复现环境建立项目环境。Windows命令使用python,macOS/Linux可使用python3;代码块可复制进该环境的Python交互会话,或保存为项目根目录下的临时脚本再用该环境解释器运行;不要保存到examples目录或任意外部目录后假定项目导入路径仍相同。除特别说明外,只向屏幕输出,不写文件。

from statistics import mean, variance
low, high = [-1.,0.,1.], [-4.,0.,4.]
print('residual_means',mean(low),mean(high))
print('sample_variances',variance(low),variance(high))
print('variance_ratio',variance(high)/variance(low))
from scipy.stats import shapiro, levene
s = shapiro(low+high)
l = levene(low,high,center='median')
print('Shapiro_P_small_n',round(float(s.pvalue),6))
print('Levene_P_small_n',round(float(l.pvalue),6))
assert variance(low)==1 and variance(high)==16

方差比为16;小样本检验P可能并不显著,这不证明等方差。这里6个观测只为教学,不能拿某次P结果作为普适诊断标准。Levene把每组观测到组中心的绝对偏离作比较,使用中位数的版本常更稳健,见NIST Levene说明。

为什么“先检验再决定方法”容易误导

小样本正态检验功效低,P大可能只是看不出来;很大样本下微小、无实际影响的偏离也可能显著。先用一次正态检验P选择t或秩检验,并不自动保持整个选择流程的标称错误率。应预先按目标、设计和分布知识选主方法,再报告稳健性分析。

Shapiro等实现有样本量范围、缺失和近似精度条件;应读官方说明。Q-Q图是辅助,不应凭“一条直线看着不错”忽视离群、设计混杂和高杠杆点。

诊断异常后怎样处理

模式 可能含义 下一步
残差随拟合值呈弯曲 线性均值形式不够 预设变换/非线性项并验证
扇形残差 异方差或计数均值-方差关系 Welch、稳健SE、GLM或适当变换
按批次分两条带 漏掉系统因素或完全混杂 查设计矩阵和采样平衡
同一对象残差相关 重复测量/家系/时间依赖 混合模型或相关结构
极少数点支配结果 错误、稀有真实值或高杠杆 回查原始记录,做影响分析

稳健SE调整特定条件下的标准误,不会修正错误的条件均值或未观测混杂。对数变换会改变效应尺度,不能变换后仍把系数当原尺度均值差。离群剔除需预设或清楚说明数据质量原因,不能为了显著性不断删除。

输入与报告清单

保留样本ID、拟合值、残差、主要协变量及分组层级;比较诊断时标出有效n和缺失处理。报告主模型假设、看到的偏离、采用的替代与敏感性结果,勿只写“正态性P>0.05,故满足条件”。对复杂RNA计数或混合模型使用其专门诊断,而非机械套普通OLS残差图。

自测:残差均值0能证明模型正确吗? 答:不能,含截距OLS通常因数学约束就有该性质。自测:稳健SE能修复把技术重复当独立吗? 答:普通异方差稳健SE不能自动处理层级相关,应使用合适聚类/模型并确认独立簇数。自测:正态检验显著就必须放弃均值分析吗? 答:不一定,要看目标、样本量、偏离程度与相应稳健方案。

接着读什么

统计方法选择与分析计划。学习顺序与练习入口见方法与算法系统学习指南。

运行本页的完整小例

先下载项目并进入含README与examples的根目录,环境准备见方法与算法系统学习指南。用项目环境的Python运行以下命令(macOS/Linux路径示例;Windows用.venv\Scripts\python.exe):

.venv/bin/python examples/methods_foundations_demo.py --case diagnostics --output examples/output/methods-diagnostics

输出summary.json保存本页计算与检查结果。目录非空时拒绝覆盖,再练习请更换--output目录;页面内短代码只打印结果。标准库case也可用系统Python直接运行。

公式里的矩阵、下标或对数不熟时,可回查读懂方法公式的最小数学基础。