VCF 与 BAM 格式概述
多组学数据处理,说白了就是跟各种文件格式打交道。你手上可能有几十个G的测序数据,也可能有来自不同平台的突变列表。怎么把它们串起来?我的习惯是,先搞清楚两种最核心的格式——VCF 和 BAM(SAM)。这俩就像多组学世界的“普通话”,不懂它们,后面寸步难行。
核心观点:VCF 描述“哪里变了”,BAM 描述“测序到底读了什么”。两者相辅相成,缺一不可。
VCF 是什么?
VCF 全称 Variant Call Format,是变异检测的结果文件。简单说,它就是一张表格,记录每个样本在每个位点上的基因型、质量、深度等统计量。为什么选 VCF?因为紧凑,一个变异位点一行数据,压缩后非常小,适合做大规模人群分析。
举个实际例子:我刚入行时接手一个肿瘤项目,需要对比 100 个样本的体细胞突变。原始 BAM 文件堆了 2TB,根本没法直接比较。用 GATK 转成 VCF 后,整个变异列表只有几百 MB,这才是能分析的样子。
一个标准的 VCF 文件长这样:
##fileformat=VCFv4.2
##INFO=
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE1
chr1 100 . A G 200.0 PASS AF=0.5 GT:AD 0/1:30,25
chr1 200 . C T 150.0 PASS AF=0.3 GT:AD 1/1:10,15
头部的“##”是元信息,告诉你怎么解析后面的数据。主体部分每行都是一个变异位点。嗯,这里要注意:VCF 是分样本的,同一个位点每个样本的基因型(GT)都可能不同。
避坑指南:我见过不少人把 VCF 当纯文本去解析,写死行数去取信息。结果换了一个 VCF 版本就全崩了。建议用 htslib 或者 PyVCF 这类库去解析,别手撕格式。我曾经因为这个原因debug到凌晨三点,再也不这么干了。
BAM / SAM 是什么?
BAM 是 Binary Alignment/Map 格式的压缩版本。它存的不是汇总后的变异,而是每一条测序 reads 比对到参考基因组上的详细信息。有多大?一个 30X 外显子组的 BAM 约 5-10GB,全基因组可以到 100GB 以上。说实话,刚接触时我都不敢随便 open 它。
SAM 是文本版,可读性好但占空间;BAM 是二进制版,压缩后空间少、读写快;CRAM 是进一步压缩版,主要靠参考序列做差分压缩。日常工作中,存数据用 BAM,快速轻量处理可以用 SAMtools view。我个人习惯是这样:原始数据用 CRAM 归档,分析中保留 BAM。
SAM 格式的每一行都代表着一条 reads 的完整比对信息。看一个例子:
SRR1177523 163 chr1 100 60 150M = 200 250 ATGC...GTCA * NM:i:0
SRR1177523 83 chr1 200 60 150M = 100 -250 ATCA...TGAG * NM:i:1
列位依次是:reads 名称、flag、染色体、比对起点、比对质量、CIGAR 操作、mate 染色体、mate 起点、模板长度、序列、质量值、可选标签。
重要:CIGAR 操作(例如 150M 表示完美比对的 150bp)是判断插入缺失和剪切位点的关键。如果比对质量低(如 MAPQ < 20),这行数据最好过滤掉再往下分析。切记,不验 CIGAR 和 MAPQ 直接做变异检测,出来的假阳性会非常多。
两者在多组学中的作用
不管你做基因组、转录组、甲基化还是 ChIP-seq,最终都会回归到这两种格式上。为什么?因为它们承载了从原始数据到高级分析之间的“桥梁层”。
下表对比了它们在不同组学中的典型用途:
| 组学类型 | BAM 作用 | VCF 作用 | 常见下游分析 |
|---|---|---|---|
| 全基因组/全外显子组 | 保留原始比对,用于深度评估和拷贝数分析 | 存储 SNP / INDEL / SV 的基因型 | GWAS、罕见变异关联、家族遗传分析 |
| 转录组(RNA-seq) | 保留跨内含子的 junction 比对 | 存储可变剪切事件和 RNA 编辑位点 | 表达定量、差异剪接、融合基因检测 |
| 单细胞测序 | 保留每个细胞的 UMI 和 barcode 标签 | 存储每个细胞的突变信息 | 克隆进化树构建、细胞分型 |
| 甲基化测序 | 保留 reads 的碱基替换(C→T)信息 | 存储每个位点的甲基化率 | 差异甲基化区域鉴定、表观时钟构建 |
| ChIP-seq | 保留 peak 区域的 reads 覆盖堆叠 | 存储峰值区域的边界和峰高 | 转录因子结合位点预测、组蛋白修饰图谱 |
你想想看,如果没有 VCF,你拿 BAM 去做 100 个人的等位基因频率比较,那磁盘和 IO 得炸。反过来,没有 BAM 拿 VCF 去验证一个结构变异的真实断点,你永远不知道这个变异是真是假。所以,多组学的核心能力里,格式转换和标准化是最基本也是最长尾的活。
实用技巧:做多组学整合时,我通常先把所有样本的 VCF 合并成一个大矩阵(比如用 bcftools merge),然后从每个样本的 BAM 中提取覆盖度和质量值映射到变异上。这样既保留了变异特征,又保留了 reads 级别的质控信息。怎么做?后续章节会细讲。
为了帮你建立直观的认知,我画了一张图:从测序仪到最终结论的整个数据流里,BAM 和 VCF 占什么位置。
图里你看到了吧?BAM 可以流向变异检测得到 VCF,也可以独立做深度和覆盖分析。你在做多组学时,经常需要从 BAM 信息来回看某个 VCF 中的位点 reads 质量好坏。说白了,BAM 是数据海洋,VCF 是航海图。
经验分享:我的工作流里,BAM 一旦比对完成就不再轻易修改;VCF 则会持续迭代——随着新样本加入或者质控标准提高,不断 merge 和过滤。记住一句话:BAM 是你的原始资产,丢失或损坏就没办法了;VCF 是加工品,可以重做。
今天讲的是概念和位置,后面我们会一步一步深入到怎么用工具转换,怎么标准化列名和染色体符号,以及一条完整的数据流转脚本怎么写。先打好这个基础。