轉錄組入門(5): 序列比對

歡迎來GitHub上fork,一起進步: https://github.com/xuzhougeng

比對軟件很多,首先大家去收集一下,因為我們是帶大家入門,請統一用hisat2,并且搞懂它的用法。
直接去hisat2的主頁下載index文件即可,然后把fastq格式的reads比對上去得到sam文件。
接著用samtools把它轉為bam文件,并且排序(注意N和P兩種排序區別)索引好,載入IGV,再截圖幾個基因看看!
順便對bam文件進行簡單QC,參考直播我的基因組系列。

前面四篇基本都算是準備工作,從這一篇開始才算進入了RNA-Seq數據分析的核心部分。

比對

比對還是不比對

在比對之前,我們得了解比對的目的是什么?RNA-Seq數據比對和DNA-Seq數據比對有什么差異?
RNA-Seq數據分析分為很多種,比如說找差異表達基因或尋找新的可變剪切。如果找差異表達基因單純只需要確定不同的read計數就行的話,我們可以用bowtie, bwa這類比對工具,或者是salmon這類align-free工具,并且后者的速度更快。

但是如果你需要找到新的isoform,或者RNA的可變剪切,看看外顯子使用差異的話,你就需要TopHat, HISAT2或者是STAR這類工具用于找到剪切位點。因為RNA-Seq不同于DNA-Seq,DNA在轉錄成mRNA的時候會把內含子部分去掉。所以mRNA反轉的cDNA如果比對不到參考序列,會被分開,重新比對一次,判斷中間是否有內含子。


工具抉擇

在2016年的一篇綜述A survey of best practices for RNA-seq data analysis,提到目前有三種RNA數據分析的策略。那個時候的工具也主要用的是TopHat,STARBowtie.其中TopHat目前已經被它的作者推薦改用HISAT進行替代。


最近的Nature Communication發表了一篇題為的Gaining comprehensive biological insight into the transcriptome by performing a broad-spectrum RNA-seq analysis的文章--被稱之為史上最全RNA-Seq數據分析流程,也是我一直以來想做的事情,只不過他們做的超乎我的想象。文章中在基于參考基因組的轉錄本分析中所用的工具,是TopHat,HISAT2和STAR,結論就是HISAT2找到junction正確率最高,但是在總數上卻比TopHat和STAR少。從這里可以看出HISAT2的二類錯誤(納偽)比較少,但是一類錯誤(棄真)就高起來。
唯一比對而言,STAR是三者最佳的,主要是因為它不會像TopHat和HISAT2一樣在PE比對不上的情況還強行把SE也比對到基因組上。而且在處理較長的read和較短read的不同情況,STAR的穩定性也是最佳的。
速度而言,HISAT2比STAR和TopHat2平均快上2.5~100倍。

如果學習RNA-Seq數據分析,上面提到的兩篇文獻是必須要看上3遍以上的,而且建議每隔一段時間回顧一下。但是如果就比對工具而言,基本上就是HISAT2和STAR選一個就行。

下載index

首先,問自己一個問題,為什么比對的時候需要用到index?這里強烈建議大家去看Jimmy寫的bowtie算法原理探究bowtie算法原理探究。但是只是建議,你不需要真的去看,反正你也看不懂。

高通量測序遇到的第一個問題就是,成千上萬甚至上幾億條read如果在合理的時間內比對到參考基因組上,并且保證錯誤率在接受范圍內。為了提高比對速度,就需要根據參考基因組序列,經過BWT算法轉換成index,而我們比對的序列其實是index的一個子集。當然轉錄組比對還要考慮到可變剪切的情況,所以更加復雜。

因此我門不是直接把read回貼到基因組上,而是把read和index進行比較。人類的index一般都是有現成的,我建議大家下載現成的,我曾經嘗試過用服務器自己創建index,花的時間讓我懷疑人生。

cd referece && mkdir index && cd index
wget ftp://ftp.ccb.jhu.edu/pub/infphilo/hisat2/data/hg19.tar.gz
tar -zxvf hg19.tar.gz

覺得電腦配置還行的,或者是沒有現成index的,可以通過HISAT2的方法進行創建

# 其實hisat2-buld在運行的時候也會自己尋找exons和splice_sites,但是先做的目的是為了提高運行效率
extract_exons.py gencode.v26lift37.annotation.sorted.gtf > hg19.exons.gtf &
extract_splice_sites.py gencode.v26lift37.annotation.gtf > hg19.splice_sites.gtf &
# 建立index, 必須選項是基因組所在文件路徑和輸出的前綴
hisat2-build --ss hg19.splice_sites.gtf --exon hg19.exons.gtf genome/hg19/hg19.fa hg19

我的是i7-7700處理器,內存是64G,運行的資源效率如下:


正式比對

hisat2基本用法就是hisat2 [options]* -x <hisat2-idx> {-1 <m1> -2 <m2> | -U <r> } [-S <hit>],基本就是提供index的位置,PE數據或者是SE數據存放位置。然而其他可選參數卻是進階的一大名堂。新手就用默認參數唄。

因為RNA-Seq數據是從 SRR3589957 ~ SRR3589962,6個樣本的PE數據,也就是有6次循環,可以寫腳本,也可以直接在命令行里運行
如下命令運行所在目錄為/mnt/f/Data/,我的參考基因組的index數據存放在/mnt/f/Data/reference/index/hg19/,而RNA-seq數據存放在/mnt/f/Data/RNA-Seq下。比對結果會存放在/mnt/f/Data/RNA-Seq/aligned

mkdir -p RNA-Seq/aligned
for i in `seq 57 62`
do
    hisat2 -t -x reference/index/hg19/genome -1 RNA-Seq/SRR35899${i}_1.fastq.gz -2 SRR35899${i}_2.fastq.gz -S RNA-Seq/aligned/SRR35899${i}.sam &
done

&會把任務丟到后臺,所以會同時執行這3個比對程序,如果CPU和內存承受不住,去掉&一個個來。比對這一步是非常消耗內存資源的,這是比對工具要將索引數據放入內存引起的。我有64G內存,理論上可以同時處理20個PE數據。在我的電腦配置下,大致花了2個小時同時才完成這一步.

基本參數說明

在數據比對的時候,可以安靜一下讀讀HISAT2的額外選項,主要分為如下幾塊

  • 主要參數,一定要填寫的內容
  • 輸入選項, 對結果影響不大
  • 比對選項,主要是--n-ceil決定模糊字符的數量
  • 得分選項, 當一個read比對到不同部位時,確定那個才是最優的。基于mismatch, soft-cliping, gap得分。
  • 可變剪切比對選項, 你要決定exon,intron的長度,GT/AG的得分,還可以提供已知的可變剪切和外顯子gtf文件,
  • 報告選項,確定要找多少的位置
  • PE選項, 與gap有關的參數
  • 輸出選項,建議加上-t記錄時間,其他就是壓縮格式,不影響比對
  • SAM選項, 主要是決定SAM的header應該添加哪些內容
  • 性能選項和其他選項不考慮

: soft clipping 指的是比對的read只有部分匹配到參考序列上,還有部分沒有匹配上。也就是一個100bp的read,就匹配上前面20 bp或者是后面20bp,或者是后面20bp比對的效果不太好。

因此影響比對結果就是比對選項得分選項可變剪切選項PE選項,在有生之年我應該會寫一片文章介紹這些選項對結果的影響。

HISAT2輸出結果

比對之后會輸出如下結果,解讀一下就是全部數據都是100%的,96.68%的配對數據一次都沒有比對,1.23%的數據比是唯一比對,2.09%是多個比對。然后96.68%一次都沒有比對的數據,如果不按照順序來,有0.05%的比對。之后把剩下的部分用單端數據進行比對的話,95.20%數據沒比對上,3.60%的數據比對一次,1.20%比對超過一次。零零總總的加起來是8%的比對!!!


這個總體比對率讓我開始懷疑人生,怎么可能呀,我翻了翻輸出記錄,發現有幾個結果的比對率超過90%呀。我思索了片刻,驚醒這個實驗好像是用人類和小鼠都做了一遍。于是又去GEO上查了一下記錄,恍然大悟,差點翻車。

Samples 9-15 are mRNA-seq to determine effect of AKAP95 knockdown in human 293 cells (9-11) or mouse ES cells (12-15).

同時我反思了一下出錯的原因,我默認這個實驗是KO和非KO各3個重復,其實文章的實驗設計并不是如此,可見理解實驗設計很重要,于是我把數據下載這一部分進行了完善。

mkdir -p RNA-Seq/aligned
for i in `seq 56 58`
do
    hisat2 -t -x reference/index/hg19/genome -1 RNA-Seq/SRR35899${i}_1.fastq.gz -2 SRR35899${i}_2.fastq.gz -S RNA-Seq/SRR35899${i}.sam &
done

如上是修改后的代碼

SAMtools三板斧

SAM(sequence Alignment/mapping)數據格式是目前高通量測序中存放比對數據的標準格式,當然他可以用于存放未比對的數據。所以,SAM的格式說明

而目前處理SAM格式的工具主要是SAMTools,這是Heng Li大神寫的.除了C語言版本,還有Java的Picard,Python的Pysam,Common lisp的cl-sam等其他版本。SAMTools的主要功能如下:

  • view: BAM-SAM/SAM-BAM 轉換和提取部分比對
  • sort: 比對排序
  • merge: 聚合多個排序比對
  • index: 索引排序比對
  • faidx: 建立FASTA索引,提取部分序列
  • tview: 文本格式查看序列
  • pileup: 產生基于位置的結果和 consensus/indel calling

最常用的三板斧就是格式轉換,排序,索引。而進階教程就是看文檔提高。

for i in `seq 56 58`
do
    samtools view -S SRR35899${i}.sam -b > SRR35899${i}.bam
    samtools sort SRR35899${i}.bam -o SRR35899${i}_sorted.bam
    samtools index SRR35899${i}_sorted.bam
done

  • -S是最新版samtools為了兼容以前版本寫的,所以可以省去
  • 0.1.19版本和最新版有比較大差別,請注意版本

Jimmy說樣我們仔細判斷sam排序兩種方式的不同,因此我截取前面100行數據,分別排序然后查看結果。

head -1000 SRR3589957.sam > test.sam
samtools view -b  test.sam > test.bam
samtools view test.bam | head

默認排序是根據染色體位置

samtools sort test.bam default
samtools view default.bam | head

Sort alignments by leftmost coordinates, or by read name when -n is used

samtools sort -n test.bam sort_left
samtools view sort_left.bam | head

也就說說默認按照染色體位置進行排序,而-n參數則是根據read名進行排序。當然還有一個-t 根據TAG進行排序。

說說samtools view

三板斧的view是一個非常實用的子命令,除了之前的格式轉換以外,還能進行數據提取和提取。
比如說提取1號染色體1234-123456區域的比對read

samtools view SRR3589957_sorted.bam chr1:1234-123456 | head


在比如搭配flag(0.1.19版本沒有)和flagstat,使用-f-F參數提取不同匹配情況的read。
flag是一種描述read比對情況的標記,一種12種,可以搭配使用。

0x1    PAIRED    paired-end (or multiple-segment) sequencing technology
0x2    PROPER_PAIR    each segment properly aligned according to the aligner
0x4    UNMAP    segment unmapped
0x8    MUNMAP    next segment in the template unmapped
0x10    REVERSE    SEQ is reverse complemented
0x20    MREVERSE    SEQ of the next segment in the template is reverse complemented
0x40    READ1    the first segment in the template
0x80    READ2    the last segment in the template
0x100    SECONDARY    secondary alignment
0x200    QCFAIL    not passing quality controls
0x400    DUP    PCR or optical duplicate
0x800    SUPPLEMENTARY    supplementary alignment

可以先用flagstat看下總體情況

samtools flagstat SRR3589957_sorted.bam

也就是說如果我想用samtools篩選恰好配對的read,就需要用0x10

samtools view -b -f 0x10 SRR3589957_sorted.bam chr1:1234-123456  > flag.bam
samtools flagstat flag.bam

我應該會在有生之年寫一篇文章好好介紹samtools。

比對質控(QC)

還是在A survey of best practices for RNA-seq data analysis里面,提到了人類基因組應該有70%~90%的比對率,并且多比對read(multi-mapping reads)數量要少。另外比對在外顯子和所比對鏈(uniformity of read coverage on exons and the mapped strand)的覆蓋度要保持一致。

常用工具有

我們就用RSeQC吧,畢竟使用python寫的工具,天生的親切感,而且安裝非常方便。

# Python2.7環境下
pip install RSeQC

一共有如下幾個文件,根據命名就知道功能是啥了。

先對bam文件進行統計分析, 從結果上看是符合70~90的比對率要求。

bam_stat.py -i SRR3589956_sorted.bam

基因組覆蓋率的QC需要提供bed文件,可以直接RSeQC的網站下載,或者可以用gtf轉換

read_distribution.py -i RNA-Seq/aligned/SRR3589956_sorted.bam -r reference/hg19_RefSeq.bed

IGV查看

載入參考序列,注釋和BAM文件,隨便看看吧。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容