测序数据类型与质量评估:FASTQ、BAM、CRAM格式与质量指标

做变异检测这么多年,我接手过不少“垃圾进垃圾出”的项目。说白了,数据格式都看不懂,质量指标也没概念,后面跑GATK出的结果根本没法信。这一章咱们就老老实实把三种最常用的测序数据格式——FASTQ、BAM、CRAM——还有它们背后那些质量指标聊透。

你想想看,原始下机数据长什么样?比对后的文件怎么存才不占地方?质量分数到底怎么看?嗯,这些问题搞不清楚,后面参数调得再花哨也是白搭。

测序数据格式与质量评估流程 FASTQ 原始序列 序列 + 质量分数 质量评估 Q30 / 碱基质量分布 FastQC 评估 通过 比对/排序 BWA / Bowtie2 → SAM/BAM/CRAM BAM 压缩格式 有损/无损?无损 CRAM 极致压缩 需参考基因组 质量评估报告 比对率 / 覆盖度

FASTQ格式 —— 原始序列的第一印象

测序仪吐出来的原始数据就是FASTQ文件。每四条记录代表一条read:第一行以 '@' 开头是序列标识;第二行是碱基序列;第三行以 '+' 开头(通常只有标识);第四行是质量分数,字符数必须与序列长度一致。

我见过最坑的事:有一次合作方给的FASTQ文件质量分数是Phred+33编码,但他们的文档写的是Phred+64。我用FastQC一跑全是红色警告,折腾了大半天才找到原因。所以拿到数据第一步,别急着往下走,先看看质量编码方式。

质量分数用ASCII字符表示,原理很简单:
Q = -10 × log₁₀(P)
其中P是碱基测错的概率。Q30意味着错误率千分之一,Q20就是百分之一。

我的小习惯: 拿到FASTQ后第一件事跑FastQC,重点关注"Per base sequence quality"和"Per sequence quality scores"两个图。如果大部分碱基Q值低于20,这数据基本废了,重测序吧。

看一个实际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。但做变异检测,这几个缺一不可:

  1. 碱基质量Q30占比 —— 一般要求≥85%,肿瘤样本可以放宽到80%。
  2. 比对率 —— 人类基因组正常样本应 ≥ 95%。
  3. 平均覆盖深度 —— 全基因组测序建议15×以上; 全外显子组推荐100×。
  4. 覆盖均匀性 —— 用GATK的CollectWgsMetrics看,'Fold 80 base penalty' 越接近1.0越好。
  5. 插入片段长度分布 —— 双端测序文库的插入片段应在预期范围内,太长或太短可能提示文库构建有问题。
避坑指南: 我曾经接过一个外显子组项目,平均深度150×,Q30也很高,但变异检出的假阳性率特别高。后来一查,是因为PCR重复率高达40%,很多深度是重复read堆出来的,根本不是真正的覆盖度。所以跑变异检测前,一定要先做标记重复(MarkDuplicates),再用去重后的BAM计算深度。

再重复一次,查看这些指标的常用命令:

# 去重后的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

记住,质量评估不是一次性任务,而是贯穿整个变异检测流程的前置检查。数据不符合要求就硬着头皮往下做,结果只能是浪费时间。