RNA-seq或者ChIP-seq等等測序的上游分析流程里的比對步驟相信大家都知道,我之前也只是按照各種教程去走流程,并沒有仔細的研究過每一步的內容。今天這篇文章學習一下sam文件的格式,以及如何根據read比對的質量來過濾你的sam文件。
一般比對后生成的SAM文件怎么查看里面的內容呢?
$ less -SN *.sam(sam文件的文件名稱)
然后會顯示如下內容:
SAM比對結果部分有11列,每一列都是不同的信息:
第1列:fastq的read ID
第2列:FLAG,對應的數值如下:
(如果某一個數值不是下面的任意值,那么那個數值就是下面這些數里面幾個的和)
1:該read是成對的paired reads中的一個
2:paired reads中每個都正確比對到參考序列上
4:該read沒比對到參考序列上
8:與該read成對的matepair read沒有比對到參考序列上
16:該read其反向互補序列能夠比對到參考序列
32:與該read成對的matepair read其反向互補序列能夠比對到參考序列
64:在paired reads中,該read是與參考序列比對的第一條
128:在paired reads中,該read是與參考序列比對的第二條
256:該read是次優的比對結果
512:該read沒有通過質量控制
1024:由于PCR或測序錯誤產生的重復reads
2048:補充匹配的read
比如說,我的比對結果里這一列的值有一個83。那么這個83并不在上述的值里,但是83是1+2+16+64的結果,那么這個read的比對結果的解讀就是:
該read是成對read里的一條,該read反向互補序列可以比對到參考基因組上,并且和這read配對的read也能比對到參考基因組上,這條read是這一對read里的第一條。
第3列:染色體名稱。如果這列是“ * ”,可以認為這條read沒有比對上的序列,則這一行的第四,五,八,九 列是“0”,第六,七列與該列是相同的表示方法。
第4列:比對的位置,從對應上的染色體第1位開始往后計算。沒有比對上的,此處為0。
第5列:MAPQ比對質量值。越高說明該read比對到參考基因組上的位置越唯一,例如42。Mapping qulity的計算方法是:Q=-10log10p,Q是一個非負值,p是這個序列不來自這個位點的估計值。假如說一條序列在某個參考序列上找到了兩個位點,但是其中一個位點的Q明顯大于另一個位點的Q值,這條序列來源于前一個位點的可能性就比較大。Q值的差距越大,獨特性越高。如果值為255表示mapping值是不可用的,如果是unmapped read則為0。
第6列:簡要比對信息表達式(Compact Idiosyncratic Gapped Alignment Report)。其以參考序列為基礎,使用數字加字母表示比對結果,match/mismatch、insertion、deletion、skipped region from the reference(表示可變剪接位置)、soft clipping (clipped sequences present in SEQ)、hard clipping (clipped sequences NOT present in SEQ)。對應字母 M、I、D、N、S、H。比如3S6M1P1I4M,前三個堿基被剪切去除了,然后6個比對上了,然后打開了一個缺口,有一個堿基插入,最后是4個比對上了,是按照順序的;例如:36M 表示36個堿基在比對時完全匹配。再比如:如37M1D2M1I,這段字符的意思是37個匹配,1個參考序列上的刪除,2個匹配,1個參考序列上的插入。
(NOTE:clipped均表示一條read的序列被分開,之所以被分開,是因為read的一部分序列能匹配到第三列的RNAME序列上,而被分開的那部分不能匹配到RNAME序列上。而H只出現在一條read的前端或末端,但不會出現在中間,S一般會和H成對出現,當有H出現時,一定會有一個與之對應的S出現)
第7列: 這條reads第二次比對的位置。=表示參考序列與reads一模一樣,*表示沒有完全一模一樣的參考序列
第8列: 該列表示與該reads對應的mate pair reads的比對位置(即mate),若無mate,則為0。
(NOTE:mate,在Illuminated中有兩種測序技術:paired end sequencing,mate pair sequencing。這兩種測序都是測的一個片段的兩端,這兩端產生的reads被稱為mate1,mate2,單末端測序則無mate。)
第9列: 序列模板長度,如果同一個片段都比對上了同一個參考序列,為最左邊的堿基位置到最右邊的堿基位置(左為正,右為負)。當mate 序列位于本序列上游時該值為負值。不可用時,為0。
第10列: read的序列
第11列: ASCII碼格式的序列質量。格式同FASTQ一樣。
第12列: 可選的區域。
格式一般差不多是這樣的:AS:i:-1 XN:i:0 XM:i:1 XO:i:0 XG:i:0 NM:i:1 MD:Z:35T0 YT:Z:UU
AS:i 匹配的得分
XS:i 第二好的匹配的得分
YS:i mate 序列匹配的得分
XN:i 在參考序列上模糊堿基的個數
XM:i 錯配的個數
XO:i gap open的個數
XG:i gap 延伸的個數
NM:i 經過編輯的序列
YF:i 說明為什么這個序列被過濾的字符串
YT:Z 值為UU表示不是pair中一部分(單末端?)、CP(是pair且可以完美匹配)
DP(是pair但不能很好的匹配)、UP(是pair但是無法比對到參考序列上)
MD:Z 代表序列和參考序列錯配的字符串
以上就是SAM文件的格式說明。我的這篇文章主要會focus on 在sam文件的第5列:MAPQ。因為后續我想做一個ATAC-seq的練習,那篇文獻里方法部分提到他們把sam文件根據MAPQ過濾了一下,所以下面主要是學習MAPQ相關知識點。
參考文章:
1.生信人必會數據格式持續收集-測序原理-數據格式-數據庫-生信技能樹
2.SAM文件格式介紹 | Public Library of Bioinformatics
3.SAM文件格式說明 | 寂寞先生
4.生信:2:sam格式文件解讀https://blog.csdn.net/genome_denovo/article/details/78712972
##############################我是分割線##################################
別人的MAPQ值和你比對出來的MAPQ值能直接拿來比較嗎?
這篇文章給了一個很好的解答:
http://www.acgt.me/blog/2014/12/16/understanding-mapq-scores-in-sam-files-does-37-42
以下是這篇文章的一個大概的內容,并沒有完全翻譯:
序列比對圖(SAM)格式文件每一列中都存儲了相應的內容。其中,SAM文件的第五列存儲比對質量(MAPQ)值。
MAPQ: MAPping Quality. It equals ?10 log10 Pr{mapping position is wrong}, rounded to the nearest integer. A value 255 indicates that the mapping quality is not available.
按照上面的公式,如果某一個read的正確比對概率是0.99,那么它的MAPQ值應該是是20,即:-10×log10(1-0.99)。如果正確比對概率是0.999,那么MAPQ的值就是30。所以MAPQ的值取決于你的正確比對的概率。(如果MAPQ值是255,那么這個值不可用)。相反,當正確比對概率趨向于0時,MAPQ的值也趨于0。
在比對read后做的第一件事,就是統計sam文件里MAPQ值的分布。但是也有很多人并沒有關心MAPQ值。也許你很相信比對軟件輸出的sam文件,但是這些分數真的會有很大差異嗎?
下面的圖是來自兩個比對的MAPQ值的分布。下面的圖是上面圖的放大,可以更清晰地顯示0-1之間MAPQ分數的分布:
從這個圖里我們能得出什么結論呢?這兩個比對有很明顯的區別。experiment1最常見的MAPQ得分是42,其次是1。在experiment2中,得分最多的只有37分,其次是0分。實驗1基于小鼠數據,實驗2使用擬南芥數據。但這可能不是分布不同的原因。小鼠的數據是基于DNase-Seq實驗中未配對的Illumina read,a . thaliana的數據來自于全基因組測序中Illumina讀取的成對read。然而,這些區別仍然可能不是造成差異的原因。
造成這些MAPQ值分布的不同的真實原因,是實驗1利用的bowtie2基因的比對,而實驗2利用BWA基因MAPQ值的計算。所以你不應該比較這兩個試驗的MAPQ值,除非你用的是同一個比對軟件。
對于bowtie2比對的sam文件,MAPQ值最大是42;而BWA比對出來的MAPQ值最大是37。
MAPQ的影響因素(參考認識MAPQ):
(1)基因組重復區域MAPQ會比較低,因為會出現multiple mapping 和 reads聚集的情況;
(2)read 中堿基質量值,低質量值的堿基意味著序列很可能是錯誤的,錯誤的序列可能會導致錯誤的比對,所以MAPQ會低;
(3)比對算法的敏感性,如果比對算法敏感性差,會造成比對錯誤,MAPQ低;
(4)單雙端測序的影響,如果reads兩端都可以比對到基因組同一位置,那么比對正確的可能性很大,MAPQ會高。
所以,你需要注意的是:
(1)MAPQ值在不同比對軟件的結果是不一樣的。
(2)你應該根據你自己的MAPQ值來過濾“真正”不好的比對read。
##############################我是分割線##################################
Bowtie2是如何分配MAPQ值的呢?
上面說了不一樣的比對軟件,得到的MAPQ值并不一樣,你也不能將它們直接拿來比較大小。BWA我就不學習了,因為我主要用的都是bowtie2,如果有同學需要請自行學習。這里我主要搜索一些關于bowtie2比對結果MAPQ值。
這里有一篇文章非常的詳細:How does bowtie2 assign MAPQ scores?
下面就來學習一下這篇文章:
比對質量值(MAPQ或MQ)被bowtie2和bwa等軟件來評估read比對到基因組的質量。公式是這樣滴:
MAPQ的值從0到37,40或者42,取決于你用什么軟件進行比對。這里只說一下bowtie2的MAPQ值。bowtie2的MAPQ的值并不用上面的公式來計算。
當我們分析NGS數據時,應該根據MAPQ的值來過濾一下,把低于某一個值的read剔除,但是應該選什么值來作為閾值呢?有人說(一個研究果蠅的同事)應該保留MAPQ值>=30的Read。但是在實際分析中,對于人類細胞系,這個值就不太合適了,因為人類細胞系里SNP,microdeletion,microinsertions,breakpoints等等有很多,導致了比對質量值會偏低。有的人認為MAPQ>=10的read都可以保留,甚至還有人認為只要MAPQ>=1都是可以接受的。還有人說MAPQ值為255的read是unique比對,但這是根據舊的定義來說的,新的定義在SAM官網稱MAPQ值為255的read是不可用的。為了搞清楚用bowtie2比對到底應該怎么過濾,這篇文章的作者設計了一個小實驗來確定。
這個具體的實驗過程我就不詳細說了,各種的代碼。。。各種公式。。。比較上頭,我們來直接看結論吧:
在bowtie2里,第12列的可選字段里,真正的multiread(AS=XS)也可以得到MAPQ=1(如果AS == XS,則認為這個read是真正的multiread,并且MAPQ只能得到0或1),不管這個read比對到基因組多少個位置。當read比對發生0或者1次錯配,那么AS=XS將為-6。像這樣:
AS:i:-6 XS:i:-6 MAPQ=1
如果有2-5個錯配,那么結果是這樣的:
AS=XS <= -12 (i.e. -12 to -30.6) MAPQ=0
所以,當你想從你的data里排除“真正的multireads”時,用MAPQ>=2也是可以的。對于高質量的比對結果,MAPQ >= 3代表允許3個錯配,MAPQ >= 23代表允許2個錯配,MAPQ >= 40允許1個錯配,MAPQ >= 42代表允許0個錯配。
而在bowtie2里,真正的uniread 可以得到不同的MAPQ值,例如3,8,23,24,40,42。如果你只想保留uniread,那么你就可以只保留MAPQ為上述這些值的reads。比如你可以用下面這個代碼:
$ awk '$5 == 3 || $5 == 8 || $5 == 23 || $5 == 24 || $5 == 40 || $5 == 42' file.sam
或者:
$ grep -v XS:i: file.sam
那么如果你想根據某一個MAPQ的值來過濾你的sam文件:
#如果你想把MAPQ小于2的sam文件都丟掉,并轉成bam文件
$ samtools view -bSq 2 file.sam > filtered.bam
##-q INT Skip alignments with MAPQ smaller than INT [0]
參考文章:
1.Question: Filtering A Sam File For Quality Scores
2.bowtie2