测序数据类型与质量评估:FASTQ、BAM、CRAM格式与质量指标
做变异检测这么多年,我接手过不少“垃圾进垃圾出”的项目。说白了,数据格式都看不懂,质量指标也没概念,后面跑GATK出的结果根本没法信。这一章咱们就老老实实把三种最常用的测序数据格式——FASTQ、BAM、CRAM——还有它们背后那些质量指标聊透。
你想想看,原始下机数据长什么样?比对后的文件怎么存才不占地方?质量分数到底怎么看?嗯,这些问题搞不清楚,后面参数调得再花哨也是白搭。
FASTQ格式 —— 原始序列的第一印象
测序仪吐出来的原始数据就是FASTQ文件。每四条记录代表一条read:第一行以 '@' 开头是序列标识;第二行是碱基序列;第三行以 '+' 开头(通常只有标识);第四行是质量分数,字符数必须与序列长度一致。
我见过最坑的事:有一次合作方给的FASTQ文件质量分数是Phred+33编码,但他们的文档写的是Phred+64。我用FastQC一跑全是红色警告,折腾了大半天才找到原因。所以拿到数据第一步,别急着往下走,先看看质量编码方式。
质量分数用ASCII字符表示,原理很简单:
Q = -10 × log₁₀(P)
其中P是碱基测错的概率。Q30意味着错误率千分之一,Q20就是百分之一。
看一个实际FASTQ记录的示例:
@EAS139:136:FC706VJ:2:2104:15343:197393 1:Y:18:ATCACG
GTGCTTTCCTCGCTTCTCCTTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCC
+
HHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
质量分数那一行,'I' 的ASCII码是73,减去33得40,对应Q40,错误率万分之一,说明这碱基很可靠。
BAM/CRAM —— 比对后的压缩格式
比对完的SAM文件太占地方,一条read的行就能写几百个字符。所以实际项目中没人用纯SAM存数据,都转成BAM或CRAM。
BAM 是SAM的二进制压缩版,用 samtools view -bS 转换。它支持索引,可以快速按区域提取reads,几乎所有下游工具都认它。缺点是文件还是比较大,一个30×人全基因组BAM大概40GB。
CRAM 是后来设计的更高效格式,压缩率比BAM高30%~50%。但它有个前提:必须依赖参考基因组序列文件。没有参考基因组,CRAM里的数据解不出来。
| 特性 | BAM | CRAM |
|---|---|---|
| 压缩方式 | gzip / BGZF | 参考基因组辅助压缩 |
| 文件大小(30× WGS) | ~40 GB | ~20-25 GB |
| 是否需要参考基因组 | 否 | 是 |
| 兼容性 | 几乎所有工具 | 需较新samtools/工具 |
| 随机访问速度 | 快(依赖.bai索引) | 快(依赖.crai索引) |
实际工作经验: 我以前在一个超算集群上跑变异检测,磁盘配额吃紧。我把所有BAM转成了CRAM,省了将近一半存储。但要注意,如果你的下游分析工具版本太老(比如samtools 1.2以前的版本),可能读不了CRAM。我建议先确保samtools版本≥1.9再全面转CRAM。
查看BAM/CRAM的基本信息,我常用这几个命令:
# 检查BAM头部(包括参考基因组、样本名)
samtools view -H sample.bam
# 统计比对情况(总的reads数、比对上的、未比对上的等)
samtools flagstat sample.bam
# 按区域提取reads(需要索引)
samtools view sample.bam chr1:100000-200000
# CRAM文件查看(一样命令,文件后缀改成.cram)
samtools view -H sample.cram
flagstat的输出长这样:
1000000 + 0 in total (QC-passed reads + QC-failed reads)
950000 + 0 primary
50000 + 0 secondary
0 + 0 supplementary
980000 + 0 mapped (98.00% : N/A)
...(省略后面)
98%的比对率,对于人类基因组来说算正常。如果低于90%,建议检查一下参考基因组版本是否匹配,或者测序数据有污染。
质量评估核心指标
很多新手只盯着一个指标看,比如Q30。但做变异检测,这几个缺一不可:
- 碱基质量Q30占比 —— 一般要求≥85%,肿瘤样本可以放宽到80%。
- 比对率 —— 人类基因组正常样本应 ≥ 95%。
- 平均覆盖深度 —— 全基因组测序建议15×以上; 全外显子组推荐100×。
- 覆盖均匀性 —— 用GATK的CollectWgsMetrics看,'Fold 80 base penalty' 越接近1.0越好。
- 插入片段长度分布 —— 双端测序文库的插入片段应在预期范围内,太长或太短可能提示文库构建有问题。
再重复一次,查看这些指标的常用命令:
# 去重后的BAM计算覆盖度
samtools depth -a sample_dedup.bam | awk '{sum+=$3} END {print "Average depth:", sum/NR}'
# GATK的CollectWgsMetrics(需要参考基因组)
gatk CollectWgsMetrics -I sample_dedup.bam -O sample_wgs_metrics.txt -R reference.fa
# 用Picard查看插入片段分布(双端数据)
picard CollectInsertSizeMetrics I=sample_dedup.bam O=insert_size.txt H=insert_size.pdf
记住,质量评估不是一次性任务,而是贯穿整个变异检测流程的前置检查。数据不符合要求就硬着头皮往下做,结果只能是浪费时间。