4. 批次效应的定义及其在变异解读中的表现
说起批次效应,我脑子里蹦出来的第一个词就是“坑”。一个容易踩,而且踩了还特难发现的坑。我自己刚入行那会儿,就被它狠狠地教训过一次。
什么是批次效应? 说白了,就是实验室外部因素引入的系统误差。你想想看,同一个病人样本,今天测和下周测,试剂盒换了个批号,操作员换了一个,甚至PCR仪不同孔的位置——这些都会给数据带上“烙印”。这烙印就是批次效应。
在变异解读里,批次效应的表现特别隐蔽。它不直接报错,而是让同一个变异的频率、质量值或者检出率在不同批次间出现差异。你明明用了同样的流程,却拿到了不一致的结果。
4.1 批次效应的来源
老实说,批次效应几乎无处不在。我在项目实践中总结过,最常见的有这么几个源头:
- 测序批次差异:不同flow cell、不同试剂盒、不同定序仪型号。
- 文库构建批次差异:捕获试剂盒批号变化、PCR循环数不一致、酶效率差异。
- 操作人员差异:不同人做样,移液精度、涡旋时间都有细微差别。
- 时间跨度差异:样本采集时间、保存时长、冻融次数不同。
- 数据分析批次差异:这个容易忽略——不同时间跑的比对、质控、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被全线过滤,直接导致该批次所有样本的该位点都报告为“未检出”。
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%,我基本就会亮黄牌。
4.4 批次效应的校验策略
我个人的流程里,做变异解读前会固定跑一个“批次一致性校验”脚本。它的逻辑很简单:
- 提取关键QC指标:每个样本的DP中位数、Q30比例、GC偏差系数。
- 按批次分组统计:计算每组的均值和标准差。
- 执行ANOVA或Kruskal-Wallis检验:看组间是否存在显著差异(p < 0.05为预警)。
- 若发现显著差异:对差异大的维度进行ComBat校正或重新处理数据。
- 重跑变异检出后再比对:确保批次间的变异集重叠率 > 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})')
4.5 批次效应的核心影响路径
下面这张SVG图,我用来向团队解释批次效应是如何一步步渗透到变异解读结论里的。你可以看到,它从实验端出发,经过多个中间环节,最终直接改变ACMG标准里的人群频率证据、功能数据证据和多种特征证据。
你从这张图可以看得很清楚:批次效应不是直接改结论,而是通过影响中间证据链——覆盖率、VQSR、人群频率——来间接扰乱最终的ACMG分类。我见过最惨的一个例子,就是某个批次因为覆盖率偏低,把低频致病位点误判成“未检出”,结果全家系遗传分析全乱套了。