2、高通量测序数据基础:FASTQ、BAM/VCF 产生流程、比对与变异检测
说到高通量测序数据,我手里最常摸到的就是三种文件格式:FASTQ、BAM 和 VCF。这三兄弟各有各的脾气,理解透了,后面的格式转换才不至于抓瞎。说白了,整个流程就是从机器吐出来的原始信号,一步步加工成我们能解读的变异清单。
2.1 FASTQ:测序仪的第一手产出
测序仪拍完照,碱基识别软件会输出 FASTQ。每条序列占 4 行,结构很固定。
FASTQ 的四行结构
| 行号 | 内容 | 例子 |
|---|---|---|
| 第 1 行 | 序列标识符(以 @ 开头) | @EAS139:136:FC706VJ:2:2104:15343:197393 |
| 第 2 行 | 碱基序列 | ATGTACGTCGATCGTAGC... |
| 第 3 行 | 分隔符(以 + 开头,可空) | + |
| 第 4 行 | 质量值编码(Phred+33 或 +64) | IIIIIIIHHHHKKKK... |
质量值很重要。每个字符对应一个 ASCII 码,减去 33(或 64)得到 Phred 分数。分数越高,碱基判定的置信度越高。
说到这个质量值编码,我当年处理一个 SRA 数据集翻车了。默认是 Phred+33,但有个老数据集用的是 +64,肉眼看不出来,结果比对率掉到 60%。后来用 fqtools qualitystats 扫了一眼才救回来。嗯,这里要注意。
2.2 BAM/SAM:比对结果的标准格式
FASTQ 读长跟参考基因组对上号,就变成了 SAM。文本版,方便看;BAM 是它的二进制压缩版,读写快,占用小。
一句话记住区别: SAM 是人眼看的,BAM 是给电脑用的。我建议所有上游分析都用 BAM,只在调试局部区域时临时转 SAM。
转换命令很简单。
# SAM 转 BAM
samtools view -bS input.sam > output.bam
# BAM 转 SAM
samtools view -h output.bam > input.sam
# 排序、索引(必须做)
samtools sort output.bam -o sorted.bam
samtools index sorted.bam
排序和索引不能省。我的经验是,至少一半的报错都来自没建索引就往下跑。
2.3 VCF:变异检测的结果清单
VCF 是变异调用阶段的产出。它用一张表把每个位点的变异类型、基因型、质量值串起来。核心是 8 列固定字段 + 1 列样本格式。
| 列号 | 字段 | 说明 |
|---|---|---|
| 1 | CHROM | 染色体 |
| 2 | POS | 位置(1-based) |
| 3 | ID | dbSNP 标识符 |
| 4 | REF | 参考等位碱基 |
| 5 | ALT | 替代碱基 |
| 6 | QUAL | 质量值 |
| 7 | FILTER | 过滤标记 |
| 8 | INFO | 额外信息 |
| 9 | FORMAT | 格式字段头 |
| 10+ | 样本列 | 各样本的 GT/AD/DP 等 |
你想想看,一份 VCF 常见几百万行,手动翻是不现实的。我最常用的是 bcftools query 精准提取某几个字段。碰到过有人拿 Excel 打开 VCF——千万忍住,文件一打开就直接崩了。
2.4 标准分析流水线
从 FASTQ 到 VCF 的流程,大体就三步。但我个人的习惯是把它拆成 4 个阶段:质控、比对、排序去重、变异检测。
2.5 比对引擎的差异
比对工具怎么选?说白了就是看读长和物种。
| 工具 | 适用场景 | 我碰到过的坑 |
|---|---|---|
| BWA-MEM | 人类 WGS / WES,< 150bp | 不建索引直接跑,报错说找不到参考 |
| BWA-MEM2 | BWA 加速版,大项目首选 | AVX2 指令集兼容性问题,老机器跑不了 |
| Minimap2 | 长读长 >500bp / 跨物种 | 参数 -x 没设对,比出来的记录全是次优比对 |
| STAR | RNA-seq 剪接比对 | 共享内存模式在多节点上踩过坑 |
一个标准的 BWA-MEM2 命令是这样组织的。
bwa-mem2 mem -t 16 -R '@RG\tID:sample1\tSM:sample1\tLB:lib1\tPL:ILLUMINA' \
ref.fa sample1_R1.fastq.gz sample1_R2.fastq.gz > sample1.sam
那个 -R 指定 Read Group,很多新手会漏掉。没有 RG 信息,后面 GATK 做变异检测直接报错。我看过好几份 QA 报告,一半的问题都是这里埋下的。
2.6 变异检测的要点
拿到排好序的去重 BAM 后,接下来就是调用变异。单样本用小样本量的 FreeBayes 速度快,队列项目则建议 GATK 的 HaplotypeCaller。
- GATK 4 的 GVCF 模式:每个样本各自产 gVCF,再合并联合基因分型。适合多人种队列。
- FreeBayes 的多等位位点检测:比 GATK 更敏感,但假阳性也偏高。
- 深度过滤:
QUAL < 30或者DP < 10的变异,我一般直接标记为过滤。
我记得有一次跑一个肿瘤样本,VCF 出来 50 万个变异。我第一件事不是研究结果,而是检查 Ti/Tv 比值。正常 WGS 大概 2.0–2.1,如果低于 1.5 或者超过 2.3,一定是哪里出了问题。那次我查出来比对索引混了 GRCh37 和 GRCh38,整整半天的计算全废了。
2.7 避坑指南
1. 压缩格式要注意:BAM 要排序,VCF 要 bgzip 压缩并用 tabix 索引。我曾经直接用 gzip 压缩 VCF,下游 bcftools 死活读不了,查了一小时才发现这个低级错误。
2. Chr 名称的一致性:BAM 的参考序列名必须跟 VCF 的完全一致。chr1 和 1 在程序眼里是两个东西。
3. 多线程不能乱开:BWA-MEM 的 -t 参数跟 samtools sort 的线程数不要超过物理核心数,否则 I/O 成为瓶颈,反而变慢。
4. 临时目录要充足:比对和排序阶段生成的临时文件很大。/tmp 空间写满是常见事故。建议用环境变量 TMPDIR 设到大盘路径。
嗯,这些东西都不难,但踩过一次坑就会发现,提前把基础搞明白,比什么都值钱。