bam文件的理解
做生信分析的小伙伴们,相信大家对bam文件都不陌生,但具体到如何get到bam文件提供给我们的信息,却少有人真正的理解,最近我做了相关的学习,和大家分享以下我的理解,具体的可参考黄树嘉的知乎分享https://zhuanlan.zhihu.com/p/31405418?from_voters_page=true
bam的来源
二代测序获得的是bcl格式的原始下机数据,通过bcl2fastq软件https://support.illumina.com/sequencing/sequencing_software/bcl2fastq-conversion-software.html可将bcl文件转换成每个样本的fq格式文件,也就是我们常理解的数据拆分。bam文件是由比对软件将质控后的fq格式文件与参考基因组进行比对后的比对信息存储文件。
bam的内容
接下来我们理解下bam文件的内容。参考原文提出的一张经典图片:
header
上图格式的查看方法为:
samtools view -h *.bam|le
samtools的header信息每一行都用‘@’ 符号开头,一般大家不会太关注,但其中的信息对于我们有些生信分析还是很重要的。这里需要重点提一下的是header中的@RG也就是Read group信息,这是在做后续数据分析时专门用于区分不同样本的重要信息。比如测序多条lane获得的bam的合并:如果原来样本的测序深度比较深,一般会按照不同的lane分开比对,最后再合并在一起,那么这个时候你会在这个BAM文件中看到有多个RG,里面记录了不同的lane,甚至测序文库的信息,唯一不变的一定是SM的sample信息,这样合并后才能正确处理。这个合并当然也可以在数据拆分后对rawdata进行cat合并,然后再生成bam文件。
接下来是bam的主体内容record(有时候也叫alignment section,即,比对信息),每 一行代表一条reads,每条reads的信息用tab键进行分隔:
bam的record介绍
对于每列的解释如下表所示:
每列的解释
接下来我们重点看看每一列在我们的分析中起到的作用。
- reads name: 每一条reads的查询名称,来源于fastq文件;
- flag:flag是比对质量的重要信息,不同的值代表比对结果的类型。Flag是比对结果质量的一个直观表述。该值是一个10进制的结果,根据表格可转换成二进制对应的质量描述,用来对数据进行过滤。比如说过滤掉未比对到参考基因组的reads(Flag=4),过滤掉二次比对的reads(Flag=256),过滤掉嵌合reads(Flag=2048),使用samtools过滤的方法为:
samtools view -h -q 20 -F 4 -F 256 -F 2048 -Sb sample.bam > sample.filter.bam
比如十进制数据77 = 000001001101 = 1 + 4 + 8 +64,这样就得到了这个FLAG包含的意思:PE read,read比对不上参考序列,它的配对read也同样比不上参考序列,它是read1。
二进制的质量描述见下表:
二进制质量值对照表
- MAPQ:比对质量值,这个是大家最为熟悉的比对质量值了。比如说Q30(错配率为0.001),Q20(错配率为0.01),计算公式为:-10logP{错比概率} 。一般结果是这一列的数值是从0到60,且0和60这两个数字出现次数最多。
- CIGAR:该标签采用数字和几个字符的组合形象记录了read比对到参考序列上的细节情况,读起来要比FLAG直观友好许多,只是记录的是不同的信息。比如,一条150bp长的read比对到基因组之后,假如看到它的CIGAR字符串为:33S117M,其意思是说在比对的时候这条read开头的33bp在被跳过了(S),紧接其后的117bp则比对上了参考序列(M)。这里的S代表软跳过(Soft clip),M代表匹配(Match)。N表示可变剪接位置,常见于RNA-seq。H只出现在一条read的前端或末端,但不会出现在中间,S一般会和H成对出现,当有H出现时,一定会有一个与之对应的S出现。CIGAR的标记字符有“MIDNSHP=XB”这10个,分别代表read比对时的不同情况:
CIGAR的标记字符