3. 质控失败的定义:阈值设定、统计异常检测、可视化初筛

大家好,我是老张。这节咱们聊聊一个挺基础、但实际上特别容易打架的问题——到底什么样的数据算质控失败?

我在刚带项目那几年,经常遇到一个场景:生信的同学拿着报告说“这批数据不行,QC没通过”,但实验的同学一看,“我觉得挺好的啊,就两个离群点丢了可惜”。你想想看,这其实不是数据的问题,是判定的标准没对齐。

所以这一章,我们把质控失败的定义拆开揉碎,分成三块来讲:阈值设定、统计异常检测、可视化初筛。

核心观点:质控失败不是一个二值问题,而是一个多维度决策过程。好的定义,能让你在数据质量和样本保留率之间找到平衡。

质控失败判定流程 原始数据输入 阈值设定 统计异常检测 可视化初筛 数据维度阈值 技术重复阈值 生物学意义阈值 Z-score / IQR MAD 离群检测 聚类 / PCA 投影 热图 / 箱线图 PCA Score 图 相关性热图 综合决策:判定质控失败 任一维度超出阈值 / 统计异常 / 可视化离群 提示:三个维度交叉验证,比单一指标更可靠

3.1 阈值设定:别拍脑袋,要拍数据

阈值设定是最直接、也最容易被人抬杠的做法。我见过不少项目,阈值就是「我觉得3倍标准差就差不多了」。嗯,说实话,很多时候这样也行,但不够严谨。

我个人习惯把阈值分成三层来思考:

  1. 数据维度阈值:比如测序深度、检测到的基因数、比对率、多肽数量。
  2. 技术重复阈值:重复样本之间的相关系数、CV值。
  3. 生物学意义阈值:内参基因的稳定度、spike-in回收率。

举个例子,我在一个蛋白质组学项目里遇到的情况:

# 一个简单的阈值设定逻辑(伪代码)
min_detected_proteins = 3000     # 低于这个数,样本不合格
min_correlation_replicates = 0.85 # 技术重复低于0.85,标记为异常
max_spikein_cv = 0.20            # spike-in CV 超过20%,重做

但你有没有想过,3000 这个数字是怎么来的?不是拍脑袋,是看历史数据的分布。我建议你用

历史项目的5%分位数
来做初始阈值,然后结合实际情况微调。

阈值类型 常用指标 我的经验值
数据维度 基因/蛋白检出数 全平台中位数的70%
技术重复 Pearson / Spearman >0.8(转录组)>0.9(蛋白组)
内参/Spike-in CV 或 回收率偏差 CV < 0.25,回收率 0.5~1.5

注意:阈值不要设得太死。样本量少的时候,5%分位数可能就只有一两个样本。我建议你至少要有 20-30 个历史样本才能设一个靠谱的阈值。

3.2 统计异常检测:让数据自己说话

阈值设定有一个明显的问题:它假设所有样本都是从同一个分布里来的。但实际项目里,样本间差异可能很大——不同批次、不同处理、不同组织类型。

这时候,统计异常检测就派上用场了。说白了,就是在同一批数据内部,找出那些「和大多数样本不一样」的样本。

常用的方法:

  • Z-score / IQR 法:最简单粗暴。Z-score 绝对值大于 3 的基本可以怀疑。
  • MAD(Median Absolute Deviation)法:比 Z-score 更稳健,不依赖均值和标准差。我比较推荐这个。
  • 聚类 + PCA 投影:这一点我们在可视化初筛里会细讲。

举个例子,我之前处理过一个甲基化芯片的数据,样本 QC 用的是控制探针的信号值。正常样本的 median signal 大概在 1000-2000 之间,但有个样本跑到了 3500。Z-score 算出来是 4.2——明显异常。后来查实验记录,发现是杂交温箱温度出了问题。

# MAD 异常检测示例
# 假设 control_probe_signal 是样本的控制探针中位数
signal = [1250, 1340, 1180, 1420, 3500, 1290, 1100]
median_signal = median(signal)  # 1290
mad_signal = mad(signal)        # 大约 110

# modified Z-score
modified_z = 0.6745 * (signal - median_signal) / mad_signal
# 结果:除了 3500 那个样本得分为 13.5,其他都在 1 以内

嗯,这里要注意:MAD 对数据量的要求其实不高,但样本太少(比如 n < 6)的时候,离群检测的灵敏度会下降。我的经验是至少 8 个样本才用统计方法,少于 8 个,我宁愿多看几张图。

3.3 可视化初筛:肉眼是最好的 QC 工具

做多组学这么多年,我最大的体会是:别只看一个数字,画图看看。统计指标和阈值都好量化,但有些问题只有图能告诉你。

我个人觉得,以下三种图是初筛必备:

  1. 总表达量箱线图:快速发现某几个样本整体偏低的极端值。
  2. PCA Score 图:看看样本是否聚成预期的组;注意,如果质控样本(如 pooled sample)都在图外,那基本可以判定失败了。
  3. 样本间相关性热图:如果有一个样本和其他所有样本的相关系数都低于 0.7,它大概率是有问题的。

一个经典案例:我经手的一个代谢组学项目,统计指标全都 OK(阈值不过、Z-score 不过),但画出来的 PCA 图里,对照组和处理组之间有一条「对角线」——后来发现是采集时间不同导致的批次效应。这种情况,统计检测根本抓不住,但一眼就能在图上看到。

为什么可视化这么重要?我举几个例子你就明白了:

检查内容 统计检材 可视化检材
整体表达量漂移 均值、中位数 箱线图 / 密度图
离群样本 Z-score, IQR PCA Score 图
批次效应 ANOVA, 方差分解 PCA 或 t-SNE 按批次着色
技术重复一致性 相关系数 散点图 / 相关性热图

避坑指南:我曾经在可视化时踩过一个坑——PCA 图里有两个离群样本,我直接判定它们不合格。后来发现,那两个样本其实是同一个生物学变异很大的个体做的双重复。所以,我的建议是:可视化初筛负责发现问题,但最终判定要结合实验记录和生物学背景。

3.4 综合判断:三条腿走路

阈值、统计、可视化,这三者我觉得是三条腿的关系——只有互相验证,才能走得稳。

我的工作流通常是:

  1. 先跑一个硬阈值,把明显不合格的样本直接标记为「不合格」。
  2. 然后跑统计异常检测,把数值上偏离的点找出来,标记为「疑似」。
  3. 最后画几张可视化图,把「不合格」和「疑似」的样本点在图上看一下——如果它们在 PCA 图里已经和好样本混在一起,我会酌情放宽;如果它们孤立在一边,那基本可以确认了。

最终判定原则:

  • 同时满足「超出阈值」+「统计异常」+「可视化离群」 → 直接标记失败
  • 满足其中两项 → 标记疑似,手动检查
  • 只满足一项 → 保留样本,但要加入上下文注释

你想想看,用这个流程去跑你的数据,是不是比拍脑袋设一个阈值要放心得多?我自己实践下来,误判率至少降低了一半。

好了,这一章的内容就是这些。阈值、统计、可视化,三条腿一起走,才算把「质控失败」这四个字真正定义清楚。记住,做多组学质控最怕的不是数据不好,而是标准没对齐、流程不规范。把定义先定死了,后面的根因分析才能有的放矢。