小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

用tophat和cufflinks分析RNAseq數(shù)據(jù)

 xiaohua1314 2016-12-12

本文來引自倪帥科學(xué)網(wǎng)博客 http://blog.sciencenet.cn/blog-635619-884213.html 

人的基因組一共有兩萬多個(gè)基因,但是這些基因不是每時(shí)每刻都在表達(dá),在不同發(fā)育時(shí)期和不同組織中,基因的表達(dá)是不同的,一個(gè)檢測這些表達(dá)的有效的方法就是RNA-seq,它結(jié)合了下一代測序的技術(shù)來對(duì)細(xì)胞整個(gè)的mRNA進(jìn)行測序,從而確定每一個(gè)基因的表達(dá)量和表達(dá)區(qū)段,主要用在分析不同條件下細(xì)胞內(nèi)基因表達(dá)差異和分析基因表達(dá)的不同可變剪接上。


RNAseq分析大致分下面幾個(gè)步驟,首先要把測到的序列map到基因組上,然后根據(jù)map到的區(qū)段對(duì)細(xì)胞構(gòu)建轉(zhuǎn)錄本,然后比較幾種細(xì)胞的轉(zhuǎn)錄本并且合并,最后衡量差異和可變間接和其他的分析。


1. Mapping


所有的序列分析的第一步,都是把測到的序列map到基因組上,這樣就能知道序列原來是在基因組的什么地方。mapping一般基于兩種快速索引算法,一種是哈希,MOSAIK,SOAP,SHRiMP用的就是這種算法,在對(duì)參照基因組建好哈希表之后,可以在常數(shù)次的運(yùn)算里查找到給定序列的位置,雖然高效,但是由于基因組有些區(qū)段重復(fù)性很高,所以查找次數(shù)雖是常數(shù),但有時(shí)會(huì)變得非常大,降低效率;還有一種叫Burrows-Wheeler變換,BWA,Bowtie 和SOAP2都是用它,Burrows-Wheeler變換的設(shè)計(jì)比哈希更加巧妙,它最開始是一種文本壓縮算法,文本重復(fù)性越高,它的壓縮比就越大,這正好克服了基因組重復(fù)性高的問題,而且對(duì)于一個(gè)精確的序列查找,最多在給定序列的長度的次數(shù)里就能找到匹配,所以說基于Burrows-Wheeler變換的軟件在mapping里用得更加廣泛。可是RNAseq的map還有另外一個(gè)問題,那就是要允許可變剪接的存在,因?yàn)橐粭lRNA不一定是一個(gè)外顯子表達(dá)出來的,也有可能是幾個(gè)外顯子結(jié)合在了一起,原來基因里的內(nèi)含子被空了出來,這些內(nèi)含子的長度從五十到十萬個(gè)堿基不等,如果直接用DNAseq的方法的話去在基因組里尋找,有些正好在兩個(gè)exon連接處的序列就會(huì)有錯(cuò)配,而且有些在進(jìn)化過程中遺漏下來的假基因是沒有intron的,這樣就導(dǎo)致有些序列會(huì)被map到假基因上去,使假基因的表達(dá)變得很高,所以,傳統(tǒng)的bwa和bowtie在RNAseq里都不是最好的選擇。


更加適合RNA mapping的軟件需要克服上面的兩個(gè)問題,Tophat,subread, STAR, GSNAP, RUM, MapSplice都是為RNA測序而開發(fā)的,我只用過Tophat,它的新版Tophat2,在map的過程中分三個(gè)步驟,如果基因注釋文件存在的話,它會(huì)先用注釋文件的轉(zhuǎn)錄組來map,然后再對(duì)剩下的序列用bowtie進(jìn)行普通的map,最后再用bowtie里用過的所有的序列做剪接map,所以跟其他的軟件比起來會(huì)有比較高的正確率。在運(yùn)行tophat之前,要對(duì)參考基因組作index,samtools可以輕松搞定。


samtools faidx hg38.fasta


如果用的是tophat的話,還需要用bowtie2做index.


bowtie2-build genome.fa genome


hg38.fasta是人類的參考基因組,對(duì)參考基因組做index是為了提高mapping時(shí)查找的效率.


(對(duì)懶人來說,在這里可以直接下載到Bowtie打包做好的index文件,這樣就可以省略掉做index的步驟了 :D )


然后用Tophat開始mapping:


path/tophat

-p 8

-G $path_ref/Homo.GTF  

-o tophat_output

$path_ref/hg38

single_end.fastq;


-p指定用幾個(gè)線程來工作,-G指定注釋文件的位置,-o指定輸出文件的路徑和文件名,最后兩個(gè)參數(shù)分別告訴參考基因組的位置和要map的fastq文件。在參考基因組里不用加.fa的后綴,因?yàn)槌绦蜻€要去尋找其他后綴的index文件。

這步的運(yùn)行時(shí)間是根據(jù)fastq文件的大小和設(shè)定的線程數(shù)來決定的,一般單端8個(gè)線程需要每G一個(gè)小時(shí),雙端各4G,線程數(shù)設(shè)為16的話需要五六小時(shí),運(yùn)行完之后會(huì)在fastq文件的目錄里產(chǎn)生一個(gè)-o命令指定的文件夾,這個(gè)文件夾里有幾個(gè)bam文件和bed文件,還有一個(gè)summary,在下一步需要用到的是accepted_hits.bam這個(gè)文件。


注釋文件的后綴是GTF,它包含了所有已知的基因的外顯子在基因組中的位置。(hg38的注釋文件可以在這里下載)所以對(duì)于已經(jīng)map在基因組上的序列,我們可以直接根據(jù)它的位置從注釋文件里查找它是不是屬于一個(gè)外顯子,或者是一個(gè)轉(zhuǎn)錄本。對(duì)于要不要在這一步提供注釋文件,各有各的看法,我用單端測序的序列用兩種方法做了實(shí)驗(yàn),發(fā)現(xiàn)他們有些差別


有注釋的時(shí)候:


沒注釋的時(shí)候:


發(fā)現(xiàn)沒注釋的時(shí)候有更多的序列被map上去,但是重復(fù)的map也變多了,但是既然Tophat2三步map的第一步是根據(jù)注釋文件來map,我還是覺得在運(yùn)行tophat的時(shí)候用注釋文件比較好。


Mapping的最后一步是去除map到基因組中多于一處的序列,如果出現(xiàn)好幾個(gè)序列都map在完全相同的一個(gè)區(qū)段,那么就應(yīng)該只保留一個(gè)這樣的序列,所以,只保留匹配最高的那一個(gè)。而且這樣的序列占很大一部分,這步也很簡單,samtools里的rmdup可以輕松解決:


samtools rmdup -s input.bam output.bam


-s小寫是告訴samtools,bam文件是單端測序的結(jié)果,不指定-s的話默認(rèn)是雙端。


2。構(gòu)建轉(zhuǎn)錄本


Mapping完了以后,cufflinks就可以把map到基因組里的序列組裝成一個(gè)轉(zhuǎn)錄組了,這個(gè)轉(zhuǎn)錄組理論上包含了所有當(dāng)時(shí)細(xì)胞里的所有mRNA,組裝好的轉(zhuǎn)錄組包含了可能的剪切信息和所有轉(zhuǎn)錄的表達(dá)量,這個(gè)表達(dá)量是根據(jù)map到基因組的序列的總數(shù)和每個(gè)轉(zhuǎn)錄片斷的長度進(jìn)行歸一化的,聽起來比較難懂,它是對(duì)于在轉(zhuǎn)錄片斷里的每一千個(gè)堿基對(duì),在每一百萬個(gè)成功map的序列中,map在這一千個(gè)堿基對(duì)上的序列的比例,fragments per kilobase of transcript per million mapped fragments (FKPM)。


FPKM是這么算出來的:


在公式里,C代表的是map在這一千個(gè)堿基對(duì)上的序列的個(gè)數(shù),N是所有成功map的序列的個(gè)數(shù),L是轉(zhuǎn)錄片斷的長度。


命令:

~/software/cufflinks-2.2.1/cufflinks

-g  /wrk/ref/Homo_sapiens.GRCh38.78.gtf

-o ../cufflinks_sample1

-p 8

accepted_hits.bam;


然后在輸出的cufflinks_sample1文件夾里會(huì)產(chǎn)生四個(gè)文件,genes.fpkm_tracking, isoforms.fpkm_tracking,skipped.gtf 和 transcripts.gtf,下一步需要用到的就是transcripts.gtf這個(gè)文件,transcripts.gtf就是這個(gè)樣品的轉(zhuǎn)錄組。


3。合并轉(zhuǎn)錄組


為了比較不同樣本間的差異,需要把實(shí)驗(yàn)組和對(duì)照組的轉(zhuǎn)錄組合并起來,cuffmerge不僅可以用來合并兩個(gè)或者多個(gè)轉(zhuǎn)錄組,還能把注釋過后的基因組的信息也合并起來,從而找到新的基因可變剪接,提高合并轉(zhuǎn)錄組的質(zhì)量。有人說需要在合并之前用cuffcompare,但從官網(wǎng)的說法來看沒有是必要的。它們最大的區(qū)別是,cuffcompare不改變?cè)袠颖纠锏霓D(zhuǎn)錄片段,只是將他們的位置作比較,輸出的combined文件也只是包含了所有的小轉(zhuǎn)錄片段,而cuffmerge會(huì)尋找?guī)讉€(gè)樣本間的不同,試著把幾個(gè)樣本里的轉(zhuǎn)錄片段從頭開始盡可能拼接成更長更完整的片段,所以cuffmerge的輸出merge文件比cuffcompare輸出的combined文件更有說服力。兩個(gè)小工具的作用都是為了生成一個(gè)合并的注釋文件給接下來要用的cuffdiff。


命令:

~/software/cufflinks-2.2.1/cuffmerge

-g /wrk/ref/Homo_sapiens.GRCh38.78.gtf

-s /wrk/ref/hg38.fa

-p 16

assembly_list.txt


在最后輸入的assemby_list.txt文件里,要寫上所有需要合并的transcripts.gtf文件的路徑,兩個(gè)和多個(gè)都可以,然后cuffmerge就會(huì)生成一個(gè)merged文件夾,里面有一個(gè)merged.gtf,這個(gè)文件就是合并好的轉(zhuǎn)錄組。


4. 基因差異表達(dá)分析


最后一步就是分析可變剪接和差異表達(dá)了,用到的小工具叫cuffdiff,這個(gè)的輸入比較復(fù)雜,不僅需要上一步的merge文件,還需要每個(gè)樣本的mapping結(jié)果的bam文件,最后還需要對(duì)每一個(gè)bam文件對(duì)應(yīng)的樣本按順序起一個(gè)名字作為標(biāo)簽,標(biāo)簽之間記得用逗號(hào)。


~/software/cufflinks-2.2.1/cuffdiff

-o diff22rv1/

-labels vap,vcap_neg_control

-p 32

-u merged_asm/merged.gtf  

vcap/accepted_hits.bam vcapneg/accepted_hits.bam


在這個(gè)例子里只有一個(gè)case和一個(gè)control,所以我們只要兩個(gè)標(biāo)簽,在最后按順序輸入bam文件。


diff的輸出比較多,他會(huì)對(duì)每個(gè)基因,每個(gè)轉(zhuǎn)錄片段,每個(gè)編碼序列,和每個(gè)基因的不同剪接體進(jìn)行FPKM,個(gè)數(shù)和樣本間差異進(jìn)行分析,最后生成幾組不同的文件,按照不同的分析需求,就可以試著往下分析了。



到現(xiàn)在結(jié)果就基本都差不多了,剩下的主要是作圖了,發(fā)現(xiàn)新的基因的可變剪接,發(fā)現(xiàn)差異表達(dá)的基因,對(duì)差異表達(dá)的基因做富集分析等等。作圖也是非常重要的環(huán)節(jié),再好的結(jié)果也需要有好的圖表示出來,可變剪接我也沒做過,但是如果做差異表達(dá)的話,CummRbund是一個(gè)非常兼容cufflinks的作圖工具。


CummRbund是R里的一個(gè)包,用來分析cuffdiff的結(jié)果非常方便,在安裝好這個(gè)包之后,要做的只是把路徑改在cuffdiff生成結(jié)果的文件夾里,然后在R里運(yùn)行這兩行代碼就好了。


library(cummeRbud)      #這一行需要在R里加載已經(jīng)安裝好的cummeRbud包

cuff <- readCufflinks()    #這一行就告訴R把所有cuffdiff生成的結(jié)果讀入cuff這個(gè)變量里。


下一步就可以作差異表達(dá)的基因的熱圖了,這里稍微復(fù)雜一點(diǎn):


#取前100個(gè)差異最顯著的基因,或者取多少個(gè)隨你便,標(biāo)準(zhǔn)是t檢驗(yàn)的p值,p值越小差異就越大。

gene.diff <- diffData(genes(cuff))

gene.diff.top <- gene.diff[order(gene.diff$p_value),][1:100,]

#找到這前100個(gè)差異基因的ID

myGeneIds <- gene.diff.top$gene_id

# 然后根據(jù)基因ID來得到基因的名字

myGenes <- getGenes(cuff, myGeneIds)

# 是畫圖

csHeatmap(myGenes, cluster="both")

作出的圖基本上是這個(gè)樣子的:

接下來就可以進(jìn)行富集分析了,有很多種方法,可以直接把基因的名字導(dǎo)出來后上傳到david來分析,也可以用bioconductor里的Goseq包來分析,詳細(xì)的goseq用法的代碼有點(diǎn)長,我以后會(huì)寫,如果需要的話可以直接去這里下載我使用Goseq時(shí)的代碼。


Cuff系列的分析流程是這篇文章介紹的,它里面也有非常詳細(xì)的命令和例子,可以去這里看看。Differential gene and transcript expression analysis of RNA-seq experiments with TopHat and Cufflinks

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多