使用Tophat+cufflinks分析差異表達
使用TopHat+Cufflinks的流程圖
序列的比對是RNA分析流程中核心的一步。序列的比對,或者說是字串的比對本身就是電腦科學中的一個經典問題,在生物資訊學中更加頻繁的出現。序列比對中的錯配,插入、缺失可以識別出樣本和基因組之間的多型性,甚至可以找出腫瘤樣本中的gene fusion。而map到沒有註釋的基因可能是新的編碼基因,或者是非編碼RNA。同時RNA-seq的序列比對可以揭示新的選擇性剪接和同工型(isoform)。
此外,序列的比對也可以用作精確定量基因或者轉錄本的表達量,因為顯然表達丰度與產生的reads是直接成比例的(需要標準化)
Tophat使用Bowtie作為比對引擎,Bowtie使用了一種極其緊湊的資料結構FM index 來儲存參考基因組的序列,並且能夠迅速的查詢( tens of millions per CPU hour)。但是Bowtie的比對不允許gap的出現(Bowtie2中已經可以允許了),所以Bowtie不能比對跨越了內含子的reads。
Tophat將Bowtie不能align的reads打斷成更小的片段稱作segments。一般情況下,當單獨處理時,這些segmens可以map到基因組,當一個read的幾個segmens可以map到基因組時,Tophat推斷這個read跨越了剪接位點同時推測剪接位點的位置。通過處理每個‘initially unmappable’ read,Tophat在沒有剪接位點註釋的資訊下能夠在轉錄組上建立起一個剪接位點的索引。但是這個剪接位點圖譜的構建還不夠完整,即使是在一些深入研究的模式植物中,每個轉錄組測序中都能發現新的剪接位點。
Transcript assembly with Cufflinks
計算基因表達量的另一個問題是,因為選擇性剪接的原因,幾個不同的轉錄本(isoform)可能擁有相同的外顯子,此時難以確定reads到底來自其中哪個轉錄本(isoform)。所以能否確定所有的splice variants(isoform)決定著表達量計算的準確性。而這個又很難確定,所以cufflinks通過map到基因組的reads組裝起一個簡陋的轉錄組,用reads拼接成含有重疊部分但是長度不同的轉錄本(稱作”transfrags“,作為splice variants的推測。拼接以後,Cufflinks計算使用嚴格的統計模型來計算每個transfrag的表達量。
當有多個樣本的時候,一種方法是將所有樣本的reads合起來,拼接成一個轉錄組。這種方法的缺點是:
- 大量reads帶來的計算不便,需要更高配置的伺服器和大量的時間(可以參考 de no vo Trinity,動輒上百G的記憶體需求)
- 多個樣本重疊使得確定所有的splice variants(isoform)更加困難
所以Cufflinks採用的策略是先單獨拼接每一個樣本的reads,然後使用cuffmerge來綜合所有樣本的拼接結果
Differential analysis with Cuffdiff
Cufflinks還包括一個cuffdiff程式,用於計算基因表達丰度和統計推斷。
除了基本的差異表達分析外,cuffdiff還
執行環境需求:
- Bowtie2
- SAM tools
要求Bowtie2和SAM tools 都已經安裝且新增到系統環境變數中
- Tophat
- Cufflinks
- Cummerbund
- 64-bit linux or Mac os x,最低要求是4G記憶體,推薦16G記憶體以上
http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0125031#references
資料來自於plos one上的一篇文獻,測序策略是一小部分測序資料用來拼接轉錄組(雙端),因為當時茶樹的基因組還沒有公佈,只能deno vo拼接。剩下的做定量的單端測序,兩個重複。
今年發表了一篇茶樹基因組的文章,上傳了一個拼接的基因組fasta檔案,我們可以用做參考。
TopHat
安裝
Tophat在執行中會呼叫Bowtie1 或者Bowtie2,所以首先要確定你的系統中安裝了Bowtie,並且已經新增到了環境變數中
Tophat提供了已經編譯好的包可以直接下載,也可以直接下載原始碼編譯,為了方便我們當然選擇前一種。網頁下載好壓縮包或者直接
- wget http://ccb.jhu.edu/software/tophat/downloads/tophat-2.1.1.Linux_x86_64.tar.gz
- tar -xvf tophat-2.1.1.Linux_x86_64.tar.gz
- export PATH="${PATH}:/usr/local/biosoft/tophat-2.1.1.Linux_x86_64/"
- #新增快捷方式
- ln -s ~/tophat-2.0.0.Linux_x86_64/tophat2 .
解壓後將目錄新增到環境變數中,或者新增一個快捷連結
為了確保安裝正確,最好進行一下測試,尤其是使用編譯原始碼的方式安裝的時候。下載test_data
- tar -xvf test_data.tar.gz
- cd test_data
- tophat -r 20 test_ref reads_1.fq reads_2.fq
結果也沒讓我們失望,果然失敗了。。
研究了一下原因,發現是因為bowtie2的版本太新的原因,換成比較舊的版本就ok了
tophat 官網上最新更新的版本還是2016/02/23的,而且官網上也強調了
Please note that TopHat has entered a low maintenance, low support stage as it is now largely superseded by HISAT2 which provides the same core functionality (i.e. spliced alignment of RNA-Seq reads), in a more accurate and much more efficient way.
建立基因組索引
對於一些研究比較深入的物種,可以下載已經建立好的索引 using a pre-built index
或者根據你自己的fasta參考檔案使用Bowtie2建立,
- bowtie2-build /home/shady/RNA-seq/reference_genome_tea/Teatree_Assembly.fas Tea_genome
執行成功後產生字尾為.1.bt2
, .2.bt2
, .3.bt2
, .4.bt2
, .rev.1.bt2
, and .rev.2.bt2 這些檔案組成了索引
用我自己的筆記本,大概3G的基因組,build了將近一個小時。。
準備reads
Tophat 可以接受FASTQ or FASTA 格式,推薦fastq
可以用fastqc看一下資料的質量,主要是看看有沒有特別差的資料以及接頭有沒有去除
fastqc有圖形介面,也可以使用命令列模式
具體的引數和結果輸出請看這篇文章,講的比較詳細
因為是已經發表了的資料,這裡只是簡單的看一下
- #直接安裝
- sudo apt-get fastqc
- fastqc *.gz --outdir=/home/shady/RNA-seq/quality_control --extrct
- #結果對每個檔案都生成一個html檔案和一個壓縮包
- #引數--extrcat 會自動解壓壓縮包,進去看一下summary.txt
- cd /home/shady/RNA-seq/quality_control/SRR1747100-25du-4h-1.sra_fastqc
- cat summary.txt
執行 Tophat
Tophat首先會呼叫Bowtie2使用全域性比對的方法map你的reads到參考基因組,因為你的reads來自於經過剪接的轉錄本,所以reads map到基因組位置堆積起來就像一個參考基因組上的"islands",許多個這樣的"island" 就組成了所謂的外顯子
Tophat然後執行一個程式,使用沒有map到的reads來尋找剪接位點
一個典型的使用方法為
使用如下指令碼處理我們的6個數據
- #引數 -p 表示執行的執行緒數
- #引數 -G 可以選擇基因組的註釋檔案(可選)
- ls `pwd` |grep "gz"| while read filename
- do
- tophat -p 4 -G Teatree.gff3 -o ${filename%%.*} Tea_genome ${filename}
- done
引數詳解 一般用預設引數
輸出
Tophat執行結束後,將在當前目錄產生以下幾個檔案,可以直接在基因組瀏覽器中檢視如IGV等
- accepted_hits.bam 一個SAM格式的read alignment 列表,SAM是一種緊湊的短序列比對格式檔案,裡面包含可以map到基因組上的比對資訊
- junctions.bed 一個UCSC BED 檔案。是ucsc 的genome browser的一個格式,報告剪接位點
- insertions.bed and deletions.bed
常用
-
o 輸出目錄,預設值為 “./tophat_out”。
-
–solexa-quals/solexa1.3-quals 質量編碼,關於質量編碼格式請參考《FastQ格式介紹》
-
-p 執行緒數,預設值為單執行緒1.,可以使用多執行緒
-
-G/–GTFSupply TopHat with a set of gene model annotations and/or known transcripts, as a GTF 2.2 or GFF3 formatted file.指定已有轉錄本資訊
-
–no-novel-juncs 不查詢新的可變剪下
-
-r 比對時兩成對引物間的距離中值。比如說,如果你的插入片段有300bp,而每個引物有50bp,那麼r值就應該是200=(300+50*2)/2。沒有預設值,如果是末端配對比對時這個值是必須的。
-
–mate-std-dev 末端配對時中間插入片段的長度的標準差,預設值為20bp
參考:http://ccb.jhu.edu/software/tophat/manual.shtml#output
使用Cufflinks計算差異表達
Cufflinks包含了以下程式:
- Cufflinks 使用經過Tophat比對好的SAM格式來拼接轉錄組(每一個樣本都進行拼接),如果有基因組註釋檔案的話,效果會更好。這個步驟的目的在前面已經講過,包括後面的cuffmerge,即為了更精確地確定轉錄組的所有轉錄本以及其所有的剪接變體,從而更精確的進行定量分析。
如果已經有了參考基因組和基因組註釋檔案,這個步驟和cuffmerge都可以跳過,也就是說
cuffquant/ cuffdiff 可以直接接受Tophat輸出的檔案進行定量分析,差別就是選項中的基因
組註釋檔案用你之前下載的基因組註釋檔案,而不是由cufflinks、cuffmerge生成的註釋文
件,一般不推薦這麼做。因為即使是研究比較深入的模式植物,每次轉錄組測序都會發現新
的轉錄本。
- cuffmerge 將Cufflinks拼接的所有轉錄組整合起來
- cuffquant v2.2.0 後出現的新功能,在之前的cuffmerge 和 cuffdiff 之間插入了一步,作用是計算每個樣本的表達量(應該是raw count),產生一箇中間檔案,這個檔案可以用cuffdiff 和cuffnorm分析,是一個可選步驟。
- cuffdiff 可接受Tophat的輸出/cuffquant的輸出/或者跳過cuffquant
對每個處理都兩兩進行差異分析,分析哪些基因上調或者下調,顯著性如何等,後面介紹。
- cuffnorm 也是v2.2.0 後新出來的功能,不進行差異分析,只計算FPKM等值,進行標準化
下面指令碼進行了從Cufflinks到cuffdiff的一個流程,絕大部分引數使用預設引數即可,其他引數請看官方手冊,因為中間涉及幾個不同程式,需要要搞清楚每個程式需要的輸入檔案和輸出檔案。
- #執行Cufflinks,分別拼接每一個樣本的轉錄組
- ls `pwd` |grep 'gz'|while read filename
- do
- cufflinks -p 4 -o "./${filename%%.*}_clout" "${filename%%.*}/accepted_hits.bam"
- done
- #建立一個 assemblies.txt
- #執行cuffmerge,將所有樣本拼接好的轉錄組合成一個
- #引數 -g 新增基因組註釋檔案,可選
- #引數 -s 為參考基因組 fasta格式
- cuffmerge -g Teatree.gff3 -s Teatree_Assembly.fas -o ./cuffmerge_out/-p 4 assemblies.txt
- #執行 cuffquant
- ls `pwd` |grep 'gz'|while read filename
- do
- cuffquant -p 4 -o "./cuffquant_result/${filename%%.*}_cqout/" ./cuffmerge_out/merged.gtf "${filename%%.*}/accepted_hits.bam"
- done
- #執行cuffdiff
- cuffdiff -p 4 -o ./cuffdiff_out -L T25_4h,T4_4h,T4_8h ./cuffmerge_out/merged.gtf\
- ./cuffquant_result/SRR1747100-25du-4h-1_cqout/abundances.cxb\
- ,./cuffquant_result/SRR1747101-25du-4h-2_cqout/abundances.cxb\
- ./cuffquant_result/SRR1747102-4du-4h-1_cqout/abundances.cxb\
- ,./cuffquant_result/SRR1747103-4du-4h-2_cqout/abundances.cxb\
- ./cuffquant_result/SRR1747105-4du-8h-1_cqout/abundances.cxb\
- ,./cuffquant_result/SRR1747107-4du-8h-2_cqout/abundances.cxb\
- ~
最終cuffdiff執行結束後產生的結果如下
產生了一大堆檔案,大致分為以下幾類
本次分析有3個樣本每個樣本兩個重複,共6個檔案
FPKM trcking files 計算的每個樣本的FPKM值
其中又分為如下四種,下面的類似
isoforms.fpkm_tracking | Transcript FPKMs |
genes.fpkm_tracking | Gene FPKMs. 因為一個基因可以有多個轉錄本,所以gene FPKM值是具有相同基因id的轉錄本的Fpkm值的總和 |
cds.fpkm_tracking | Coding sequence FPKMs. 具有相同蛋白id轉錄本fpkm值的總和 |
tss_groups.fpkm_tracking | Primary transcript FPKMs. 具有相同轉錄起始位點的轉錄本FPKM值的總和 |
Count tracking files 計算的每個樣本的raw ount數,依舊分為
isoforms.count_tracking | Transcript counts |
genes.count_tracking | Gene counts. Tracks the summed counts of transcripts sharing each gene_id |
cds.count_tracking | Coding sequence counts. Tracks the summed counts of transcripts sharing each p_id, independent of tss_id |
tss_groups.count_tracking | Primary transcript counts. Tracks the summed counts of transcripts sharing each tss_id |
Read group tracking files 計算的樣本里每個重複的表達數 和count數
isoforms.read_group_tracking | Transcript read group tracking |
genes.read_group_tracking | Gene read group tracking. Tracks the summed expression and counts of transcripts sharing each gene_id in each replicate |
cds.read_group_tracking | Coding sequence FPKMs. Tracks the summed expression and counts of transcripts sharing each p_id, independent of tss_id in each replicate |
tss_groups.read_group_tracking |
Primary transcript FPKMs. Tracks the summed expression and counts of transcripts sharing each tss_id in each replicate |
Differential expression tests
樣本之間的兩兩比較的差異表達和統計推斷
isoform_exp.diff | Transcript-level differential expression. |
gene_exp.diff | Gene-level differential expression. Tests differences in the summed FPKM of transcripts sharing each gene_id |
tss_group_exp.diff | Primary transcript differential expression. Tests differences in the summed FPKM of transcripts sharing each tss_id |
cds_exp.diff | Coding sequence differential expression. Tests differences in the summed FPKM of transcripts sharing each p_id independent of tss_id |
Differential splicing tests - splicing.diff
對每個轉錄前體產生的可變剪接變體的數目
Differential coding output - cds.diff
在這個檔案中只記錄了能產生多個CDS的基因的差異表達數
Differential promoter use - promoters.diff
在這個檔案中只記錄了能產生不同轉錄前體(i.e. muti-promoter genes)的基因的差異表達
Read group info - read_groups.info
記錄了樣本重複之間計算定量的一些資訊
使用cummeRbund 做一些常見的統計圖