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 个阶段:质控、比对、排序去重、变异检测。

FASTQ → BAM → VCF 标准分析流程 FASTQ 原始数据 质控 + 过滤 比对(BWA / Minimap2) 排序 + 去重 + 索引 变异检测 GATK / FreeBayes 说明 3. 每个阶段都有对应的 QC 指标:碱基质量分布、比对率、重复率、变异 Ti/Tv 比率 4. 推荐用 Snakemake / Nextflow 串联阶段,保证中间产物可重复

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 设到大盘路径。

嗯,这些东西都不难,但踩过一次坑就会发现,提前把基础搞明白,比什么都值钱。