xio'a做完質控與過濾之後,轉錄組分析上遊最核心部分就來了:比對。
那我們得到了測序文件,要幹嘛?為什麼要對比?如何比對有哪些軟體的選擇?別說你們我自己想想都頭大。
第一個問題:得到了乾淨測序文件,要幹嘛?
對於NGS流程來說肯定就是為了找到SNP和Indel,那Gwas流程就是找差異表達基因或尋找新的可變剪切。總之任何一個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如果比對不到參考序列,會被分開,重新比對一次,判斷中間是否有內含子。
連結:https://www.jianshu.com/p/681e02e7f9af
第三個問題:如何比對,有哪些軟體的選擇?
在2016年的一篇綜述A survey of best practices for RNA-seq data analysis,提到目前有三種RNA數據分析的策略。那個時候的工具也主要用的是TopHat,STAR和Bowtie.其中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選一個就行。
參考連結:https://www.jianshu.com/p/681e02e7f9af
本文我將著重降解HISAT2和bowtie、bowtie2的使用(主要就是我現在做的轉錄組和samllRNA會使用用到這兩款軟體相對來說更熟悉一些。)這麼多主流軟體各有優點,先給自己挖個坑,等過幾天時間充足了分別講一下各個軟體的優缺點,及該如何根據自己的測序文件選擇最佳比對軟體。
比對第一步:建立index
問題1:什麼是索引?
答:舉個小例子,在圖書館書籍有成千上萬本書,其中各種散文、傳記、文學、科普、小說、詩集等等,要是雜亂無章的去找那就真是太痛苦了。要是圖書管理員給你按照類別分好類。包括指定在那個書架,是不是就會方便很多? 同理我們做比對的時候有成千上萬可能還上億,又來索引文件index是不是就更輕鬆?
問題2:如何獲得和建立index?
答:大多數模式物種都會有自己建立的index,一些非模式物種可能會有,但是一般來說都沒有,沒有現成的index,我們就需要自己重新構建索引;包括外顯子、剪切位點及SNP索引的建立。
因為我的課題是葫蘆科相關作物的育種和遺傳鑑定,典型的植物非模式物種,那我這裡就開始講一講自己該如何讓去構建index。
1.1用hisat2構建自己的index
# hisat2的安裝
# 源文件安裝
wget ftp://ftp.ccb.jhu.edu/pub/infphilo/hisat2/downloads/hisat2-2.1.0-Linux_x86_64.zip
unzip hisat2-2.1.0-beta-Linux_x86_64.zip
export PATH=/home/xxx/xxx/bin/hisat2-2.1.0-beta:$PATH
source ~/.bashrc
# conda 安裝
conda install hisat2
建立索引
# 其實hisat2-buld在運行的時候也會自己尋找exons和splice_sites,但是先做的目的是為了提高運行效率
extract_exons.py watermelen.gtf > genome.exonsextract_splice_sites.py watermelen.gtf > genome.ss
#同時支持將snp文件加入
extract_snps.py watermelen.txt > genome.snp
# 建立index, 必須選項是基因組所在文件路徑和輸出的前綴參數簡單的說明
extract_exons.py watermelen.gtf > genome.exons&
將gtf文件中的exons(外顯子)
extract_splice_sites.py watermelen.gtf > genome.ss
將gtf文件中的剪切位點提取出來
extract_snps.py watermelen.txt > genome.snp
將SNP位置信息提取出來
hisat2-build -p 16 --snp genomne.snp --ss genome.ss --exon genome.exons watermelen.fa xigua
-p 指定線程數 --snp將snp信息加入 --ss將剪接位點信息加入 --exon將外顯子信息加入 watermlen.fa是參考基因組 xigua是index文件名
ps:說了半天第一步才搞完真的痛苦,今天同窗問我一個問題,我覺得很有意思可以拿出來簡單說一下。 他按照我給的步驟走了一遍說沒辦法提取exons,提取出來為0,當時我第一反應是不是參數錯了,從到到尾看了一遍,沒錯,很糾結,我記得我完整的做過這個物種的參考基因組和gtf文件,難受,懷疑我之前都做錯了。然後他告訴我說看了gtf裡面沒有exon文件,我開始還不信,後面自己看了一眼。果然沒有,在它較新的一個版本中有就有。後面百度了一些東西,發現是早期版本沒有這麼完善也就是沒有完整注釋,這種情況很正常。其實我們這樣寫入外顯子、剪切位點、snp是為了提高運行效率,hisat2自己就可以找到。所以你的參考基因組文件是早期版本也不用擔心哦。可以簡化參數為:
hisat2-build -p 16 watermelen.fa watermelen
$ hisat2-build -p 16 watermelen.fa xigua
比對第二步:將測序文件比對到參考基因組
老規矩hisat2 -h 查看用法說明
(base) kelly@DESKTOP-MRA1M1F:/mnt/f/rna_seq/data$ hisat2 -h
HISAT2 version 2.1.0 by Daehwan Kim (infphilo@gmail.com, www.ccb.jhu.edu/people/infphilo)
Usage:
hisat2 [options]* -x <ht2-idx> {-1 <m1> -2 <m2> | -U <r> | --sra-acc <SRA accession number>} [-S <sam>]
<ht2-idx> Index filename prefix (minus trailing .X.ht2).
<m1> Files with #1 mates, paired with files in <m2>.
Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
<m2> Files with #2 mates, paired with files in <m1>.
Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
<r> Files with unpaired reads.
Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
<SRA accession number> Comma-separated list of SRA accession numbers, e.g. --sra-acc SRR353653,SRR353654.
<sam> File for SAM output (default: stdout)
<m1>, <m2>, <r> can be comma-separated lists (no whitespace) and can be
specified many times. E.g. '-U file1.fq,file2.fq -U file3.fq'.
-x <hisat2-idx>
參考基因組索引文件的前綴。
-1 <m1>
雙端測序結果的第一個文件。若有多組數據,使用逗號將文件分隔。Reads的長度可以不一致。
-2 <m2>
雙端測序結果的第二個文件。若有多組數據,使用逗號將文件分隔,並且文件順序要和-1參數對應。Reads的長度可以不一致。
-U <r>
單端數據文件。若有多組數據,使用逗號將文件分隔。可以和-1、-2參數同時使用。Reads的長度可以不一致。
–sra-acc <SRA accession number>
輸入SRA登錄號,比如SRR353653,SRR353654。多組數據之間使用逗號分隔。HISAT將自動下載並識別數據類型,進行比對。
-S <hit>
指定輸出的SAM文件。
參考連結:https://www.jianshu.com/p/479c7b576e6f
# hisat2的安裝
hisat2 -t -x index/xigua -1 watermelon/P1.R1.clean.fastq -2 watermelon_/P1.R2.clean.fastq -S sam/P1.sam &
參數說明(-t指定線程數, -x指定索引位置和參考序列,-1 指定雙端測序左鏈的位置,-2指定雙端測序右鏈的位置,-S輸出文件位置及輸出文件名稱)
得到了輸出結果類似下圖(圖是網上找的,因為我自己當時忘記保存圖片,重新開始又太耗費時間,理解一下)
輸出結果可以看出總體比對率,正向比對到了多少,反向比對到多少,沒有比對多少的有多少。。。等等重要的信息一目了然。
這個時候你就應該問了:那我跟你一樣我忘記保存了呢?我看別人統計都有比對率多少那我難道這個錯過了我就不知道了?(我不管,你就是有這個問題)
這個時候就需要用到另一個神器了 那就是samtools軟體了。
因為我得到的是sam文件,你自己做完之後發現動不動就20.30個G,無論是伺服器還是個人pc那都是及其恐怖的一個數據。 如果我們想查看數據,我怕等你下載完就過去了10天半個月。那有沒有吧這個sam文件給簡化呢?嘿嘿嘿,那就是將sam文件轉換成bam文件。(我知道你想問:你不是說看比對率嗎?怎麼就講啥sam、bam文件了,不要著急。我們慢慢來嘛)
先看看SAMTOOLS這個軟體能幹啥吧
SAMtools的wiki介紹:SAMtools Wiki
官方手冊:Manual page from samtools-1.9
必看:詳細了解SAMtools的用法和來龍去脈
而目前處理SAM格式的工具主要是SAMTools,這是Heng Li大神寫的.除了C語言版本,還有Java的Picard,Python的Pysam,Common lisp的cl-sam等其他版本。SAMTools的主要功能如下:
最常用的三板斧就是格式轉換,排序,索引。而進階教程就是看文檔提高。
參考連結:https://www.jianshu.com/p/681e02e7f9af
我們主要講將sam文件轉換成bam文件,還有對其排序、建立索引和查看比對率。
基礎用法:
##第三步將sam文件轉換成bam文件並對bam文件進行排序。
samtools view -bS sam/P1.sam > bam/P1.bam &(轉換成bam文件)
samtools view -bS sam/P2.sam >bam/P2.bam &(轉換成bam文件)
samtools sort sam/P1.bam -o bam/P1.sort.bam & (對P1按照染色體位置排序,-n就是按照read name排序,-r 按照染色體排序,不輸入則默認染色體排序)
samtools sort sam/P2.bam -o bam/P2.sort.bam & (對P2按照染色體位置排序,-n就是按照read name排序,-r 按照染色體排序,不輸入則默認染色體排序)
##第四步對參考基因組進行索引和排序後的bam文件進行索引(方便在IGV中查看,建立索引的目的就是為了讓文件快速找到,同時IGV中查看也必須有索引文件 不然無法打開)
samtools faidx watermlen.fa(對參考基因組建立索引)
samtools index P1.sort.bam
samtools index P2.sort.bam(對bam文件建立索引)
你發現bam文件比sam文件數據小了至少一半,sort之後bam文件又變小了
bam文件和sam文件之間的轉換可以多去了解我在上面放出了連結。簡單來說
為什麼 BAM 文件 sort 之後體積會變小因為 BAM 文件是壓縮的二進位文件,對文件內容排序之後相似的內容排在一起,使得文件壓縮比提高了,因此排序之後的 BAM 文件變小了,相對應的 SAM 文件就是純文本文件,對SAM 文件進行排序就不會改變文件大小。而且由於 RNA-seq 中由於基因表達量的關係,RNA-seq 的數據比對結果 BAM 文件使用 samtools 進行 sort 之後文件壓縮比例變化會比DNA-seq 更甚。另外,samtools 對 BAM 文件進行排序之後那些沒有比對上的 reads 會被放在文件的末尾。
回到最開始的問題我怎麼去查看比對率呢?
#查看比對情況
samtools flagstat XXX.bam
比對結果
(rna-seq) [lmyang@compute01 bam3]$ samtools flagstat AB1.sort.bam
64149401 + 0 in total (QC-passed reads + QC-failed reads)
3161137 + 0 secondary
0 + 0 supplementary
0 + 0 duplicates
60566539 + 0 mapped (94.41% : N/A)
60988264 + 0 paired in sequencing
30494132 + 0 read1
30494132 + 0 read2
56272878 + 0 properly paired (92.27% : N/A)
56357432 + 0 with itself and mate mapped
1047970 + 0 singletons (1.72% : N/A)
33272 + 0 with mate mapped to a different chr
26411 + 0 with mate mapped to a different chr (mapQ>=5)
在這裡我提一個小問題:你們看看samtools得到的比對率和直接hisat2得到的對率有什麼不同?小驚喜等著你喲。(又是一個坑,可以自己網上查查有什麼解釋,人生處處是驚喜。)
得到bam文件和它的索引文件之後我們就可以去IGV裡面看看情況如何,比如有沒有snp、indel、可變剪切之類的。沒錯下期預告來了,就是講解IGV的使用。
講完這個我的狀態已經虛脫了,感覺還是有很多不足,希望大家批評指正!
聲明:本文章內容多參考《簡書》、《微信公眾號》等原創內容,個人對其優質內容進行整理總結,僅用於學習和交流,本人不負責其法律責任如侵權,聯繫本人刪除。