阈值设定的统计基础:均值、标准差、分位数与假设检验

说到阈值设定,很多人上来就拍脑袋给个数。比如“我觉得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,我一般会标记为可疑,建议重新处理或剔除。

核心观点:分位数法不需要正态假设,适合大多数组学数据。但缺点是它对样本量有一定要求——样本太少时,分位数估计不稳定,IQR 可能失真。

下面这个对比表,可以帮助你理解什么时候用分位数,什么时候用均值±标准差:

指标适用场景局限性
均值 ± 标准差数据近似正态分布,技术重复性好受异常值影响大
中位数 ± MAD数据有异常值,分布不对称计算稍复杂,解释性不如均值和标准差直观
分位数(IQR)任意分布,鲁棒性强样本量太小时不可靠

假设检验:你的阈值有没有统计依据?

设定阈值不是一拍脑袋的事。你得能回答:凭什么这个值就是边界?

假设检验可以帮你给出一个量化的答案。在质控中,最常用的是这两种:

  • t 检验:比较两组均值是否有显著差异。比如,对比“通过质控”和“未通过质控”的样本,看看某个指标是否有区分度
  • 卡方检验:检验分类变量(比如“通过/未通过”)与某个因素是否独立

我自己的做法是:先用假设检验验证“这个阈值真的有区分能力”,然后再把它固化到流程里。

举个例子。有一次,我想用“总离子强度”作为质控指标。我随手设了一个阈值——总离子强度小于 1e7 的标记为不合格。但后来我用 t 检验对比了“标记为合格”和“标记为不合格”两组样本的后续分析效果,发现 p = 0.34,表明这个阈值并没产生实质性的区分效果。

这就是问题所在:阈值设定之后,必须验证它是否真的有用。否则就是自欺欺人。

一个小技巧:在设定质控阈值时,可以采用“两步验证法”。第一步,用描述性统计(均值/分位数)定一个初步边界。第二步,用假设检验验证这个边界两侧的样本在关键指标上是否有显著差异。如果 p > 0.05,说明这个边界可能设错了,需要调整。

四种方法的逻辑关系图

把上面这四个概念串起来,就构成了阈值设定的完整思路。我画了一张逻辑图,你可以直观地看到它们是怎么配合的:

阈值设定的统计基础框架 样本数据 描述性统计 推断性统计 均值 ± 标准差 分位数(IQR) t 检验 卡方检验 生成初步阈值 验证并调整

从图中可以看到:描述性统计和推断性统计不是互斥的,而是前后衔接的。先用均值和分位数摸清数据的“脾气”,然后用假设检验验证你的判断是否站得住脚。

一句话总结

阈值设定不是选择题——你不需要在“均值±标准差”和“分位数”之间二选一。真正的好做法是:先用分位数法圈定大致范围,再用假设检验验证这个范围是否真的有区分度。如果验证通不过,就回去调参数,直到找到那个既有统计意义又有生物学意义的边界。

我以前踩过不少坑。最惨的一次是设了一个看起来“严格科学”的阈值,花了两周做完所有样品的质控标记,结果发现标记为“不合格”的那些样品在后续分析中表现一点都不差。从那以后,我就把“假设检验验证”固化为流程中的固定步骤了。