秩检验符号检验与非参数方法 - SpiralKernel/bioinfo-wiki-migrated GitHub Wiki
秩检验符号检验与非参数方法
更新:2026-10-26;状态:可用;验证范围:2026-10-26核对原始与官方资料;本页Python微型计算已执行;人工数据不代表专业软件或真实研究性能。
“非参数”通常表示不采用某种完整的参数分布假设,不表示没有假设。符号检验、Mann–Whitney和Wilcoxon符号秩各自保留不同信息,回答的问题也不同。读完应能按独立/配对和目标效应选择,并理解秩方法并非普遍的“中位数检验”。
前置为假设检验与双侧单侧选择、t检验配对设计与Welch检验与中位数。先确定独立单位,不能靠对数变换或排秩修复伪重复。
三种方法分别利用什么
符号检验只看配对差d是否为正,不利用差值大小;排除零差或按预设规则处理后,H0下正差数常与Binomial(n,0.5)比较。对独立连续配对差,检验中位差是否0可据此解释;离散零值多时必须说明规则。
Wilcoxon符号秩对非零差的绝对值排名,再看带符号的秩和。其常见位置解释要求差分布关于共同中心对称,不只是任意分布的中位数为0。并列绝对差和零值会影响精确分布与软件选项。
Mann–Whitney U用于独立两组,统计成对比较胜出次数。一般涉及分布关系;在额外位置平移且形状相同等条件下可解释为位置差。它对尺度/形状差也可能敏感,不能普遍称为中位数检验。官方Mann–Whitney文档明确其假设与精确/渐近选择。
手算U与概率优势
A=[1,2,3],B=[4,5,6]。A中每点对B三点都较小,所以A胜出U_A=0,U_B=9;没有并列时U_A+U_B=nA nB=9。概率优势可写$\hat\theta=#(A>B)/(n_An_B)+0.5#(A=B)/(n_An_B)$,本例0;方向改变会得1。
本页例子在项目根目录的Python中运行;标准库例子无需安装包,含NumPy/SciPy的例子先按R包Python包与可复现环境建立项目环境。Windows命令使用
python,macOS/Linux可使用python3;代码块可复制进该环境的Python交互会话,或保存为项目根目录下的临时脚本再用该环境解释器运行;不要保存到examples目录或任意外部目录后假定项目导入路径仍相同。除特别说明外,只向屏幕输出,不写文件。
from scipy.stats import mannwhitneyu, binomtest, wilcoxon
A, B = [1,2,3], [4,5,6]
UA = sum(a>b for a in A for b in B)+.5*sum(a==b for a in A for b in B)
r = mannwhitneyu(A,B,alternative='two-sided',method='exact')
print('U_A_exact_p', UA, r.pvalue)
d = [1,2,-1,3,4]
sign = binomtest(sum(v>0 for v in d),len(d),.5,alternative='two-sided')
print('sign_test', sign.pvalue)
w = wilcoxon([1,2,3,4],alternative='two-sided',method='exact')
print('signed_rank', w.statistic, w.pvalue)
assert UA == r.statistic == 0
assert abs(r.pvalue-.1)<1e-12
输出独立组U=0、双侧P=0.1;符号检验4正1负,P=0.375;最后全正且绝对值无并列,符号秩双侧P=0.125。这也说明样本很少时P值离散,完全分离的样本仍未必达到0.05。
并列、零差和样本量
真实组学数据常有重复数值、检测下限和大量零值。无并列条件下的精确U分布不能不加修正地套到所有数据;选择渐近带并列校正或合适置换,并记录版本/参数。Wilcoxon的零差处理策略也会改变有效n与统计量,参见官方符号秩文档。
排序丢弃原始单位,检验P不直接给“表达差多少”。报告中可另给原尺度描述、与问题匹配的效应或位置差区间,明确其估计目标。不要把两组中位数差和U检验P拼成仿佛精确检验该差的结果。
何时不宜把秩检验当默认替代
如目标明确是均值差而关心实际总量,秩检验可能改变目标;如需协变量、配对层级和复杂设计,需要相应模型。极端偏态下可考虑稳健估计或重采样,但重采样也需要交换性,见置换检验与Bootstrap实践。独立两组与配对方法不可互换。
| 症状 | 检查 | 解释 |
|---|---|---|
| 换方法P差很多 | 目标、零差、并列、独立性 | 不是简单谁更保守 |
| 精确计算发警告 | 是否有并列或零差 | 核对版本与方法选项 |
| 中位数相同却U显著 | 形状/尺度可能不同 | 不应硬称中位数差异 |
| 原值差很小但秩清晰 | 测量精度与样本量 | 同时报告原尺度效应 |
自测:给所有值加同一常数,U变吗? 答:顺序不变,U不变。自测:先逐样本做不同变换,秩结果还必定相同吗? 答:不一定;只有对所有观测使用同一严格单调递增变换才保留顺序。自测:n越小越应该无条件选非参数吗? 答:不是,要考虑研究目标、分布知识和精确检验的分辨率。
接着读什么
假设检验与双侧单侧选择 → t检验配对设计与Welch检验 → 置换检验与Bootstrap实践 → R包Python包与可复现环境 → P值效应量与多重检验 → 方法与算法系统学习指南。学习顺序与练习入口见方法与算法系统学习指南。
运行本页的完整小例
先下载项目并进入含README与examples的根目录,环境准备见方法与算法系统学习指南。用项目环境的Python运行以下命令(macOS/Linux路径示例;Windows用.venv\Scripts\python.exe):
.venv/bin/python examples/methods_foundations_demo.py --case rank-tests --output examples/output/methods-rank-tests
输出summary.json保存本页计算与检查结果。目录非空时拒绝覆盖,再练习请更换--output目录;页面内短代码只打印结果。标准库case也可用系统Python直接运行。
公式里的矩阵、下标或对数不熟时,可回查读懂方法公式的最小数学基础。