阈值设定的统计基础:均值、标准差、分位数与假设检验
说到阈值设定,很多人上来就拍脑袋给个数。比如“我觉得p-value小于0.05就行”,或者“fold change大于2就留下”。这种做法,说白了就是碰运气。我见过太多项目,就因为阈值设得不合理,后期验证死活重复不出来。
这一节,咱们把统计基础打牢。均值、标准差、分位数、假设检验——这四个东西,是阈值设定的四根柱子。你不用成为统计学家,但得知道它们各自能解决什么问题,又有什么坑。
均值与标准差:描述你的数据长什么样
均值就是平均值,这个大家都懂。但我想强调一点:均值只有在数据分布对称时才靠谱。
记得我之前处理一个代谢组学的项目,原始数据里有个物质的浓度分布严重右偏——绝大多数样本在0.1附近,少数几个样品飙到100以上。这时候算均值,直接被那几个高值拉到了15。这数字能代表什么?什么都代表不了。
标准差,衡量的是数据的离散程度。我个人的习惯是:在探索阶段,先用“均值 ± k × 标准差”作为初步筛选范围。k 取多少?看数据质量。
- 数据质量高、技术误差小:k 可以取 2 或 3,对应 95% 或 99.7% 的数据点
- 数据波动大、存在批次效应:k 取 4 甚至 5,避免把真实信号误杀
- 单组学差异大(比如蛋白组 vs 基因组):标准差的使用方式完全不同,要分开看
这里给个Python示例,演示怎么用均值和标准差快速定一个“初筛边界”:
import numpy as np
def mad_based_outlier(data, k=3.5):
# 先用中位数和MAD,更稳健
median = np.median(data)
mad = np.median(np.abs(data - median))
lower = median - k * mad
upper = median + k * mad
return data[(data >= lower) & (data <= upper)]
# 模拟一组质控数据
qc_peptide_intensity = np.random.normal(1e6, 2e5, 1000)
filtered = mad_based_outlier(qc_peptide_intensity)
print(f"原始数据点: {len(qc_peptide_intensity)}")
print(f"过滤后数据点: {len(filtered)}")
看到没?这里我没直接用标准差,而是用了MAD(中位数绝对偏差)。为什么?MAD对异常值的抵抗力更强,在质控场景里更实用。这算是一个小技巧吧。
分位数:不看形状,只看顺序
分位数的好处是:不需要假设数据符合任何分布。你只管把数据从小到大排好,第 p 百分位就是那个位置上的值。
我在多个项目里最喜欢用的是这个方法:
- 下界:Q1 - 1.5 × IQR
- 上界:Q3 + 1.5 × IQR
这里的 IQR = Q3 - Q1。超出这个范围的点,通常被视为“温和异常值”。如果你想更严格,可以用 3 × IQR 作为“极端异常值”的门槛。
举个例子,在蛋白质组学的质控中,我经常用分位数来定义“肽段鉴定数量”的阈值。如果一个样品的鉴定数低于 Q1 - 1.5 × IQR,我一般会标记为可疑,建议重新处理或剔除。
下面这个对比表,可以帮助你理解什么时候用分位数,什么时候用均值±标准差:
| 指标 | 适用场景 | 局限性 |
|---|---|---|
| 均值 ± 标准差 | 数据近似正态分布,技术重复性好 | 受异常值影响大 |
| 中位数 ± MAD | 数据有异常值,分布不对称 | 计算稍复杂,解释性不如均值和标准差直观 |
| 分位数(IQR) | 任意分布,鲁棒性强 | 样本量太小时不可靠 |
假设检验:你的阈值有没有统计依据?
设定阈值不是一拍脑袋的事。你得能回答:凭什么这个值就是边界?
假设检验可以帮你给出一个量化的答案。在质控中,最常用的是这两种:
- t 检验:比较两组均值是否有显著差异。比如,对比“通过质控”和“未通过质控”的样本,看看某个指标是否有区分度
- 卡方检验:检验分类变量(比如“通过/未通过”)与某个因素是否独立
我自己的做法是:先用假设检验验证“这个阈值真的有区分能力”,然后再把它固化到流程里。
举个例子。有一次,我想用“总离子强度”作为质控指标。我随手设了一个阈值——总离子强度小于 1e7 的标记为不合格。但后来我用 t 检验对比了“标记为合格”和“标记为不合格”两组样本的后续分析效果,发现 p = 0.34,表明这个阈值并没产生实质性的区分效果。
这就是问题所在:阈值设定之后,必须验证它是否真的有用。否则就是自欺欺人。
四种方法的逻辑关系图
把上面这四个概念串起来,就构成了阈值设定的完整思路。我画了一张逻辑图,你可以直观地看到它们是怎么配合的:
从图中可以看到:描述性统计和推断性统计不是互斥的,而是前后衔接的。先用均值和分位数摸清数据的“脾气”,然后用假设检验验证你的判断是否站得住脚。
一句话总结
阈值设定不是选择题——你不需要在“均值±标准差”和“分位数”之间二选一。真正的好做法是:先用分位数法圈定大致范围,再用假设检验验证这个范围是否真的有区分度。如果验证通不过,就回去调参数,直到找到那个既有统计意义又有生物学意义的边界。
我以前踩过不少坑。最惨的一次是设了一个看起来“严格科学”的阈值,花了两周做完所有样品的质控标记,结果发现标记为“不合格”的那些样品在后续分析中表现一点都不差。从那以后,我就把“假设检验验证”固化为流程中的固定步骤了。