4. 批次效应的定义及其在变异解读中的表现

说起批次效应,我脑子里蹦出来的第一个词就是“坑”。一个容易踩,而且踩了还特难发现的坑。我自己刚入行那会儿,就被它狠狠地教训过一次。

什么是批次效应? 说白了,就是实验室外部因素引入的系统误差。你想想看,同一个病人样本,今天测和下周测,试剂盒换了个批号,操作员换了一个,甚至PCR仪不同孔的位置——这些都会给数据带上“烙印”。这烙印就是批次效应。

在变异解读里,批次效应的表现特别隐蔽。它不直接报错,而是让同一个变异的频率、质量值或者检出率在不同批次间出现差异。你明明用了同样的流程,却拿到了不一致的结果。

核心观点: 批次效应是变异解读批次一致性的头号隐形杀手。它不来自生物学差异,而是来自实验处理过程。

4.1 批次效应的来源

老实说,批次效应几乎无处不在。我在项目实践中总结过,最常见的有这么几个源头:

  1. 测序批次差异:不同flow cell、不同试剂盒、不同定序仪型号。
  2. 文库构建批次差异:捕获试剂盒批号变化、PCR循环数不一致、酶效率差异。
  3. 操作人员差异:不同人做样,移液精度、涡旋时间都有细微差别。
  4. 时间跨度差异:样本采集时间、保存时长、冻融次数不同。
  5. 数据分析批次差异:这个容易忽略——不同时间跑的比对、质控、VQSR,参数环境也会有变化。

我曾经碰到过一个案例,同一个家系样本分成两批送去不同中心测序。结果回来一看,某个致病位点在第一批是0/1(杂合),在第二批直接是0/0(野生)。排除污染和样本搞混后,发现原因是第二批次捕获探针对该区域的覆盖度差了将近三倍。这就是批次效应在变异解读里典型的危害。

4.2 变异解读中批次效应的具体表现

做变异解读时,批次效应会从好几个维度渗透进来。我一般按下面这张表格的思路来分析:

表现维度 具体现象 对ACMG标准的影响
覆盖深度(DP)波动 同一区域不同批次DP中位数差异超过30% 影响BS1、PVS1证据强弱判定(低频区域难以验证)
等位基因频率(AF)偏差 同一变异在批次内AF与合并后人群AF不一致 直接干扰PM2(人群频率稀有性)和BA1/BS1判定
SNP/Indel检出率差异 低复杂度区域在某个批次中反复缺失 导致假阴性,漏掉致病性Indel
GQ/SQ评分偏移 同一平台不同批次GQ分布整体漂移 影响PVS1的剪接预测强度分层
VQSR分类不一致 相同变异在批次A通过VQSR,批次B被过滤 直接改变变异进入解读的资格

你看看,几乎每一条都直接戳中ACMG标准的敏感点。我见过最严重的例子,一个常见的致病位点在某个批次里因为VQSR被全线过滤,直接导致该批次所有样本的该位点都报告为“未检出”。

我的个人习惯:在承接多批次项目时,一定先让批次间的QC指标(特别是DP中位数、Titv、杂合/纯合SNP比)画成一个箱线图排在一起看。如果有任何异常偏,我建议先做批次校准再合并。

4.3 批次效应的检测方法

怎么发现批次效应?光靠肉眼对比报告是不够的。我在实际流程中常用这几招:

  • PCA聚类分析:拿到所有样本的基因型矩阵后,跑一个PCA。如果样本按测序批次而非家系/表型聚成团,说明批次效应很严重。
plink --vcf combined.vcf --pca 5 --out pca_check
# 查看前两个主成分,用R或python画散点图
# 样本点应当按生物学分组(如家系)而不是批次ID
  • SNP一致性检查:选50~100个高检出率的常染色体低频SNP,统计不同批次间的检出率一致性。
bcftools query -f '%CHROM\t%POS\t%REF\t%ALT\t[%GT\t]\n' combined.vcf | awk '...'
# 计算每个位点在每个批次中的缺失率
  • 覆盖深度剖面比较:计算每个bam文件在全基因组上的平均DP,按批次绘制箱线图。如果批次间中位数差异超过20%,我基本就会亮黄牌。
注意:上面这些方法要结合你实际的数据规模来调整。不是所有批次效应都能在PCA上明显看到,比如亚批次效应(同一批次内不同加样孔)就经常被PCA掩盖。我建议逐层排查:先宏观看全基因组DP分布,再微观看目标区域覆盖度。

4.4 批次效应的校验策略

我个人的流程里,做变异解读前会固定跑一个“批次一致性校验”脚本。它的逻辑很简单:

  1. 提取关键QC指标:每个样本的DP中位数、Q30比例、GC偏差系数。
  2. 按批次分组统计:计算每组的均值和标准差。
  3. 执行ANOVA或Kruskal-Wallis检验:看组间是否存在显著差异(p < 0.05为预警)。
  4. 若发现显著差异:对差异大的维度进行ComBat校正或重新处理数据。
  5. 重跑变异检出后再比对:确保批次间的变异集重叠率 > 95%。
# 一段简单的python伪代码示意流程
import pandas as pd
from scipy import stats

qc_df = pd.read_csv('batch_qc_metrics.csv')
batches = qc_df['batch_id'].unique()
for metric in ['median_depth', 'q30_rate', 'gc_bias']:
    groups = [qc_df[qc_df['batch_id'] == b][metric] for b in batches]
    if len(groups) > 2:
        f, p = stats.f_oneway(*groups)
        if p < 0.05:
            print(f'警告:批次效应显著 - {metric} (p={p:.4e})')
避坑指南:别等跑完变异解读再回头查批次效应。我习惯在拿到bam文件的当天就先做QC对比,如果发现批次间差异明显,优先重新校正和合并,再去跑GATK的HaplotypeCaller。这一步能省掉后面大量的返工时间。

4.5 批次效应的核心影响路径

下面这张SVG图,我用来向团队解释批次效应是如何一步步渗透到变异解读结论里的。你可以看到,它从实验端出发,经过多个中间环节,最终直接改变ACMG标准里的人群频率证据、功能数据证据和多种特征证据。

批次效应在变异解读中的传播路径 批次效应源头 覆盖深度偏差 VQSR阈值偏移 AF/人群频率失真 PVS1(功能证据) PM2/BS1(人群证据) BA1(良性证据) 变异解读结论偏差 / 误判

你从这张图可以看得很清楚:批次效应不是直接改结论,而是通过影响中间证据链——覆盖率、VQSR、人群频率——来间接扰乱最终的ACMG分类。我见过最惨的一个例子,就是某个批次因为覆盖率偏低,把低频致病位点误判成“未检出”,结果全家系遗传分析全乱套了。

总结一句话: 做变异解读,批次校验不是可选步骤,它和质控一样,是保证结果可信的基础门槛。