批次质控:从概念到核心指标
做生物信息分析这么多年,我有个很深的体会:数据质量决定了分析的天花板。任你算法再牛、模型再花哨,数据本身是脏的、乱的、假的,结果就是浪费时间。嗯,今天咱们就来聊聊批次质控这个事。
什么是批次质控?
说白了,批次质控就是对同一批次产出的所有样本,批量检查它们的数据质量。我习惯叫它「批控」,跟单个样本的质控区分开。
单个样本的质控,比如看一个 FASTQ 文件有没有接头残留、GC 含量对不对。这事每个做生信的新手都会。但批次质控不一样。
它关心的是:这批样本整体靠谱吗?有没有某个参数突然崩了?是不是有一半的样本数据量不够?
举个例子。我曾经在一个大型项目里,收到了同一个批次 96 个 WGS 样本的下机数据。单看每个样本的 Q30,都在 85% 以上,看起来没什么问题。但我把全批次的测序深度拉出来画了张密度图,发现有几个样本的深度只有其他样本的十分之一。要不是做了批控,这几个「混子」样本就混进后续分析了,浪费几周时间不说,结论还可能是错的。
为什么我们需要批次质控?
原因不难理解。你想想看,一个批次的样本通常是在同一台机器、同一个 run、用同一批试剂下机的。按道理,它们的质量特征应该高度一致。如果不一致,说明出问题了——不管是不明原因的飘移,还是操作失误,批控都要能在早期把它揪出来。
我把它归结为三个核心目的:
- 发现系统性异常:一台设备出现漂移,会影响这个批次所有样本。
- 识别离群样本:某个样本的建库出了问题,数值明显偏离整体。
- 决定批次是否可用:如果超过一定比例的样本不合格,这个批次可能需要重新测序。
核心指标概览
批控指标不是凭空捏的,它来自测序平台和建库过程。我列了一份我常用的核心指标清单,你可以当个速查表用:
| 指标名称 | 定义 | 我的一点经验 |
|---|---|---|
| Read 总数 | 每个样本的原始 reads 数 | 注意看批次内波动,CV 超过 30% 就要警觉 |
| Q30 / Q20 | 质量值≥30/20 的碱基占比 | 不要只看均值,看分布形状 |
| GC 含量 | 碱基 G+C 占比 | 物种特异性强,但批次内差异不能太大 |
| 比对率 | reads 比对到参考基因组的比例 | 低于 90% 基本是污染或建库问题 |
| 重复率 | PCR 重复或光学重复的比例 | 文库复杂度低的样本,后面很多事做不了 |
| 平均插入片段长度 | 双端 reads 在基因组上覆盖的片段长度 | 建库破碎不理想时这个值会偏 |
| 比对覆盖均一性 | 用 fold-80 或 mean_coverage 等评估 | 对 CNV 分析影响极大 |
一句话记住:单样本质控看「好不好」,批次质控看「齐不齐」。
一个完整的批控流程长什么样?
我习惯用一张图来概括批控的主干。下面这个流程图就是我脑子里跑批控时的思维路径:
这图看着不复杂吧?从样本下机开始,到批量抽取 QC 指标,再到可视化和离群样本检测,最后做决策标记。注意右上角那条虚线——不合格的批次,可以反馈到实验端,要求重新下机或者补测。
批控里头还有一些常用「武器」
我一般用下面这些工具和思路来做批控:
- MultiQC:它可以聚合 FastQC 等工具的结果,一键生成一个批次的 HTML 报告。我每次拿到新数据,第一件事就是跑 MultiQC。
- Z-score 法:每个样本的某个指标减去批次均值,除以批次标准差。我习惯把 |Z|>3 的样本标出来仔细观察。
- 主成分分析 (PCA):如果批次内存在隐性的分组效应(比如某几台机器做的样本聚在一起),PCA 第一眼就能看出来。
- 热力图 + 聚类:把所有样本的 QC 指标画成热力图,可以直观看到哪些样本抱团、哪些落单。
一个小技巧:我习惯在批控阶段跑一个简单的 Python 脚本,把每个指标算一遍均值和标准差,然后直接把 |Z|>3 的样本打印出来。这个脚本几分钟就能跑完,比人工一个个翻 FastQC 快得多。
批控报告里,判断标准得提前定好。比如我做过一个项目,标准是这么写的:
# 一个简单的批控判断规则示例
# 如果批次内超过 5% 的样本 Q30 < 80%,该批次整体不合格
# 如果单个样本的比对率 < 85%,标记为 FAIL
# 如果某个样本的所有指标均正常但数据量不足目标 1/10,标记为 WARN
你别觉得死板。在实际项目中,这些规则往代码里一写,批控就能全自动进行,省大力气。