Bioconductor分析RNA-seq數(shù)據(jù)

參考學(xué)習(xí)《R語言與Bioconductor生物信息學(xué)應(yīng)用》第六章

前言

Y叔的公眾號biobabble發(fā)過一篇【聽說你想學(xué)R?】,七月份發(fā)的但昨天推送了一次,所以我看到了,看到了對《R語言與Bioconductor生物信息學(xué)應(yīng)用》這本書的強(qiáng)力吐槽,而我發(fā)的這篇筆記,連同上次發(fā)的Bioconductor分析基因芯片數(shù)據(jù)都是來自于對該書內(nèi)容的提煉和學(xué)習(xí)。所以呢我覺得有必要在這里說幾句。

坦白說,這本書確實有很多問題,我自己講講幾點吧:首先,它有點過時了,公眾號評論就有人說基因芯片分析過時了,我個人覺得不客觀,但確實這本書有些過時,由此產(chǎn)生了一系列問題,特別要提到的就是代碼的可重復(fù)性,我個人在運(yùn)行書中一些代碼時很多時候會不work,然后我會自己思考怎么讓它work,實在不行就放棄;第二點,它不適合R入門的人,特別是你去看它的第一章,云里霧里,好歹我也摸了半年R了啊,好吧,我就直接跳過了;第三點,它的流程不完整,就是不是很連續(xù)的都能讓你從頭到尾的go through下去,自然心里會感覺不爽快。如此種種。

接著你心里已經(jīng)有準(zhǔn)備聽我下面要將的“but”的跳轉(zhuǎn)了,我為什么會學(xué)它并做筆記,乃至分享出來?首先,在我需要學(xué)習(xí)芯片和RNAseq分析的時候身邊剛好有這本書,我也不知道是誰的,好吧,那就拿起來看看,發(fā)現(xiàn)正是我需要的,所以我看它,第一章看不太懂,沒意思,我也不想看,直接跳過從第二章看起,到現(xiàn)在整本書基本看了大半,看過的代碼都嘗試著去運(yùn)行過,確實有所收獲,所以我會寫前言,算是對這本書的客觀評價吧;其次,我想談?wù)動心男┦斋@,我本人可以算是有編程基礎(chǔ)的,算不得菜鳥,但是對于基因芯片的基礎(chǔ)也好,RNAseq乃至基因組分析流程、背景等等可以說是菜鳥的不能再菜鳥,這本書給了我對芯片數(shù)據(jù)來源、處理流程的一些基本認(rèn)知,其實這在一些國內(nèi)資源上是找不到的。有一點我心里非常的不服氣,為什么我聽說中國做生信非常厲害的人很多,找得到的中文資料卻很少?為什么百度其他搜索引擎很強(qiáng)大,一涉及科研領(lǐng)域就非常之垃圾?這也是我挺佩服生信技能樹或類似的這樣的團(tuán)隊以及相關(guān)個人,當(dāng)我們在噴一些書籍很垃圾,而實際它確實有很多問題的時候,我們能不能貢獻(xiàn)自己的力量呢?幾個月的學(xué)習(xí)里我深知自己才能有限,所知甚少,所以不斷模仿和記錄。我把這些筆記陳列出來并不是它寫的有多好,多值得模仿,而是它能夠給予我們新的知識,又能夠在我們忘記時方便查詢。學(xué)習(xí)必然是一個探尋和思索的過程,技能的掌握它不是一本書可以帶給你的,特別是一本技術(shù)類書籍,它給了你一個看似可行的方案,你要實際去操作它,然后心里給予評價,在你不確定時,需要多方面整理實踐不同的解決方案,然后找到自己的出路,建立自己對該某個問題處理的完整體系。

這篇筆記并不會帶你真正學(xué)好RNA-seq的分析,至少我看完之后沒有,但它確實可以補(bǔ)一些知識的模塊。它不適應(yīng)入門R,也不適應(yīng)完全模仿做具體的分析,而是適合你在掌握R之后,你在做測序分析之前想了解的一些知識。當(dāng)你知道它非你所需,你可以完全不看它。

整體而言,這本書非常短,整體評價偏差,但國內(nèi)在這個方面學(xué)習(xí)恐怕沒有比這好的中文書籍吧?(所以我建議多看網(wǎng)絡(luò)資料,這也是我在交互學(xué)習(xí)的,比如生信媛公眾號文章目錄)我希望那些厲害的人物(教授級人物們)能夠多拓展一些中文科研的視界(提升國內(nèi)人員對生信的整體認(rèn)知與分析能力,加速學(xué)習(xí)周期),我也會持續(xù)記錄這樣一些知識,與生信技能樹里面的小伙伴一起從不同的研究方向,角度去拓展形形色色的基礎(chǔ)知識與理論。我再次強(qiáng)調(diào),我專注于筆記的目的除了自身學(xué)習(xí)以外,是當(dāng)你在面對一些概念或者問題的疑惑時,你能鍵入百度搜索后快速地鏈接到本文,并從中找到可執(zhí)行的方案或者幫助你理解,而不是完完全全整篇的通讀。而當(dāng)你確實是需要對所有的知識點有學(xué)習(xí)的需求時,你再選擇讀它,不僅僅是這一篇筆記或博文。不要浪費自己的時間,也要耐心地投入自己的時間。


如果想了解測序基本原理和知識,查看我整理的測序與平臺的幾個鏈接。

使用的學(xué)習(xí)數(shù)據(jù):NCBI SRA (Sequence Read Archive)數(shù)據(jù)庫,數(shù)據(jù)集編號SRA091277

使用的是菊花轉(zhuǎn)錄組樣品,分析過程包括原始數(shù)據(jù)獲取、數(shù)據(jù)清理、質(zhì)量控制、轉(zhuǎn)錄組拼接、轉(zhuǎn)錄本定量、標(biāo)準(zhǔn)化和表達(dá)差異分析等過程。

樣品名稱 樣品描述 RUN編號 測序長度
T1 處理組(脫水處理3小時) SRR921340 100bp
T2 處理組(脫水處理3小時) SRR921341 100bp
T3 處理組(脫水處理3小時) SRR921342 100bp
T1-1 處理組(脫水處理3小時) SRR921346 51bp
T2-1 處理組(脫水處理3小時) SRR921344 51bp
T3-1 處理組(脫水處理3小時) SRR921345 51bp
CK1 對照組(不做任何處理) SRR921321 100bp
CK2 對照組(不做任何處理) SRR921322 100bp
CK3 對照組(不做任何處理) SRR921324 100bp
CK1-1 對照組(不做任何處理) SRR921336 51bp
CK2-1 對照組(不做任何處理) SRR921337 51bp
CK3-1 對照組(不做任何處理) SRR921338 51bp

高通量測序基礎(chǔ)知識

(這里只記錄書中重要的知識點并加以理解)

基于第二代測序建立起來的基因組測序、RNA-seq和Small RNA-seq等應(yīng)用,都由樣本收集、文庫制備和測序三個過程組成,不同之處在于樣品收集和文庫制備。

rna-seq.jpg

第二代測序儀(Illumina)測的序列,無論來自DNA-seq文庫還是RNA-seq文庫,從左到右依次分為3個區(qū)域:5'接頭(Adapter)區(qū)、目標(biāo)序列區(qū)和3'接頭區(qū)。當(dāng)多個樣品在一個泳道(Lane)中同時測序時,我們可以使用多樣品(Multiplex)技術(shù),具體而言是給每個樣品分配一個不重復(fù)的條形碼(Barcode),其實質(zhì)是一個6-8位的DNA序列,測序后可以通過這個序列將不同的樣品分開。單端測序(Single end)指僅從正向測序;雙端測序(Paired end)指先從正向測序,然后從反向測序。Barcode則根據(jù)另一引物“Sb”獨立測序得到。

理論上,由于制備的RNA-seq文庫插入長度的峰值常常為200或300bp,所以測序應(yīng)該只得到文庫中目標(biāo)序列5'端開始的部分(這就是常說的read了,以前總搞不懂~)。但是呢,文庫中會有少量目標(biāo)序列不到測序長度(比如測100bp實際目標(biāo)序列只有幾十),那么測序就可能會測到3'端接頭序列,這就是所謂的接頭污染。數(shù)據(jù)預(yù)處理時,如果發(fā)現(xiàn)接頭序列過多,一般是RNA-seq文庫插入長度沒有控制好;如果出現(xiàn)大量全長的3'接頭,一般是接頭過量,導(dǎo)致了大量接頭自連(Self ligation)。

實際應(yīng)用中,估計測序深度使用更多的是達(dá)到質(zhì)量標(biāo)準(zhǔn)的有效數(shù)據(jù)量,而不是原始數(shù)據(jù)量。當(dāng)RNA-seq有效數(shù)據(jù)比例過低時,無法檢測一些低豐度的轉(zhuǎn)錄本,要考慮重新測序。

測序深度,也叫乘數(shù),指每個堿基被測序的平均次數(shù),是用來衡量測序量的首要參數(shù)。測序覆蓋度,也叫覆蓋率,指被測序到的堿基占全基因組大小的比率。假如用Illumina 2000測序儀完成一次人類基因組(3G大小)單端測序,即可得到300G數(shù)據(jù)(假設(shè)全部是有效數(shù)據(jù)),估計的測序深度即為100倍(300G/3G),常見表示為100X。將所有讀段比對到人類基因組,如果發(fā)現(xiàn)只有2.7G的堿基至少有1個讀段覆蓋到,其實際測序深度為111X(300G/2.7G),測序覆蓋度為90%(2.7G/3G)。

不同的測序目的要使用不同的測序策略。如DNA組裝使用較多的是2X100bp或更長的雙端測序;RNA-seq使用較多的是100bp或更長的單端鏈特異性測序;small RNA-seq多用50bp單端測序。

從測序得到的讀段組裝成目標(biāo)基因組或者轉(zhuǎn)錄組的基因策略是比對和拼接,比對是把讀段定位到參考基因組或者轉(zhuǎn)錄組上,然后再拼接成連續(xù)序列;拼接也膠從頭組裝(Denovo assembly),是在沒有參考基因組或者轉(zhuǎn)錄組前提下,根據(jù)讀段之間的重疊區(qū),把所有讀段拼接起來,直接獲得基因組或者轉(zhuǎn)錄組(參考文章)。

轉(zhuǎn)錄組比對常用的軟件有BWA、Bowtie和Tophat;拼接常用的軟件是Trinity。

基因組和轉(zhuǎn)錄組組裝的不同點:基因組組裝希望盡量獲得唯一或較少的組裝結(jié)果,即一致性序列(Consensus sequence)。一致性序列上并不是每個位點都只有一種堿基,它實際上只代表該位點出現(xiàn)頻率最高的堿基,存在兩種以上堿基的位點叫做雜合位點。注意,過分追求一致性會導(dǎo)致過拼接,即來自不同基因的相似序列會被誤拼接到一起。基因組和轉(zhuǎn)錄組組裝可以用一個非常重要的指標(biāo)N50來評價,即將所有組裝后的序列按照長度從大到小排列,累加值接近所有序列長度總和一半時的那個位置對應(yīng)的序列長度。N50越大,組裝的結(jié)果越好,類似的有N90。

測序的質(zhì)量分?jǐn)?shù)

Phred分?jǐn)?shù)

測序中常用錯誤概率P_e(Error probability)來表示每個核苷酸測量的準(zhǔn)確性,還可以賦予一個數(shù)值來更簡便地表示這個意思,叫做測序質(zhì)量分?jǐn)?shù)(Quality score)。因為這個分?jǐn)?shù)最開始通過Phred軟件從測序儀生成的色譜圖中得到的,所以也叫做Phred分?jǐn)?shù)(Q_{Phred})。Phred分?jǐn)?shù)的取值范圍是0到93,可以表示很寬的誤差范圍,即從1(完全錯誤)到非常低的錯誤率10^{-93}。Phred分?jǐn)?shù)是最基本的質(zhì)量分?jǐn)?shù),其他的質(zhì)量計分標(biāo)準(zhǔn)都來自Phred分?jǐn)?shù)。
Q_{Phred} = -10\times log_{10}P_e

Q_{Phred} P_{e} Base call accuracy
0 1 0
10 0.1 0.9
20 0.01 0.99
30 0.001 0.999
40 0.0001 0.9999
50 0.00001 0.99999

Sanger分?jǐn)?shù)(Phred+33)

Phred分?jǐn)?shù)包括2位數(shù)字,還需要用空格分隔,不方便閱讀,又要占用大量存儲空間,實際上文件中不采用它。為了在文件中方便地表示質(zhì)量,常常將Phred分?jǐn)?shù)加上33(從33到126變化,ASCII碼正好覆蓋了可打印區(qū)),并用其ASCII碼值對應(yīng)的字符表示,這就是Sanger分?jǐn)?shù)。Sanger分?jǐn)?shù)常用于FASTQ格式的文件。

Illumina/Solexa分?jǐn)?shù)(Phred+64)

分?jǐn)?shù)之間的轉(zhuǎn)換公式:
Q_{Solexa} = -10 \times log_{10}(\frac{P_e}{1-P_e}) \\ Q_{Solexa} = 10 \times log_{10}(10^{\frac{Q_{Phred}}{10}}- 1) \\ Q_{Phred} = 10 \times log_{10}(10^{\frac{Q_{Solexa}}{10}}- 1) \\
Solexa分?jǐn)?shù)的取值范圍是-5到62,它在FASTQ文件中需要加上64并轉(zhuǎn)換為相應(yīng)的ASCII碼值(59到126)對應(yīng)的字符來表示質(zhì)量。2006年,Illumina公司收購Solexa公司后繼續(xù)沿用其標(biāo)準(zhǔn)。顯著Illmina采用新的標(biāo)準(zhǔn),采用了Phred分?jǐn)?shù)(范圍0-62)加64的質(zhì)量分?jǐn)?shù)。

Sanger分?jǐn)?shù)(Phred+33)和Illumina分?jǐn)?shù)(Phred+64)是當(dāng)前應(yīng)用最為普遍的質(zhì)量分?jǐn)?shù)系統(tǒng)。

以Phred=20(即常見的Q20標(biāo)準(zhǔn))為例,其Sanger分?jǐn)?shù)為53,對應(yīng)數(shù)字5;其Illumina分?jǐn)?shù)為84,對應(yīng)字母T。

Bioconductor中的ShortRead包提供了SolexaQuality和PhredQuality函數(shù)分別生成Illumina分?jǐn)?shù)和Sanger分?jǐn)?shù)。

source("http://Bioconductor.org/biocLite.R")
biocLite("ShortRead")
library(ShortRead)
Q=20
PhredQuality(as.integer(Q))
SolexaQuality(as.integer(Q))
> Q=20
> PhredQuality(as.integer(Q))
  A PhredQuality instance of length 1
    width seq
[1]     1 5
> SolexaQuality(as.integer(Q))
  A SolexaQuality instance of length 1
    width seq
[1]     1 T

高通量測序文件格式

FASTQ格式

FASTQ格式是序列文件中常見的一種,它一般包括四部分:第一部分是由“@”開始,后面跟著序列的描述信息(對于高通量數(shù)據(jù),這里是讀段的名稱),這點跟FASTA格式是一樣的(起頭的符號不一樣);第二部分是DNA序列;第三部分是由“+”號開始,后面或者是讀段的名稱,或者為空;第四部分是DNA序列上每個堿基的質(zhì)量分?jǐn)?shù),每個質(zhì)量分?jǐn)?shù)對應(yīng)一個DNA堿基。

Bioconductor中的ShortRead包提供了quality函數(shù)可以自動識別FASTQ文件中的質(zhì)量分?jǐn)?shù)的種類。

我隨便寫了一個fastq的demo文件,內(nèi)容

@HWUSI-EAS100R:123:COEPYACXX:6:73:941:1973#0/1
GATTTGGGGTTCAAAGCAGTATCGATCAAAATAGTAAAATCCATTTGTTCAACTCACAGTTT
+ HWUSI-EAS100R:123:***********************
!"************************************************************

進(jìn)行一些操作:

library(ShortRead)
# 讀入FASTQ文件
reads <- readFastq("./demo.fastq")
# 得到質(zhì)量分?jǐn)?shù)的類型
score_sys <- data.class(quality(reads))
# 得到質(zhì)量分?jǐn)?shù)
qual <- quality(quality(reads)) # 這里好像一個quality函數(shù)就夠了,還是尊重原文吧
# 質(zhì)量分?jǐn)?shù)轉(zhuǎn)為16進(jìn)制表示
myqual_mat <- charToRaw(as.character(unlist(qual)))

# 如果是Phred+64分?jǐn)?shù)表示系統(tǒng)
if(score_sys=="SFastqQuality"){
  # 顯示分?jǐn)?shù)系統(tǒng)類型
  cat("The quality score system is Phred+64", "\n")
  # 輸出原始分?jǐn)?shù)值
  strtoi(myqual_mat, 16L)-64
}
# 如果是Phred+33分?jǐn)?shù)表示系統(tǒng)
if(score_sys=="FastqQuality"){
  # 顯示分?jǐn)?shù)系統(tǒng)類型
  cat("The quality score system is Phred+33", "\n")
  # 輸出原始分?jǐn)?shù)值
  strtoi(myqual_mat, 16L)-33
}

The quality score system is Phred+33 
 [1] 0 1 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9

NCBI中的FASTQ與SRA格式

NCBI的Sequence Read Archive (SRA)數(shù)據(jù)庫,接受FASTQ格式的高通量數(shù)據(jù)上傳,并將分?jǐn)?shù)標(biāo)準(zhǔn)從開始的Illumina分?jǐn)?shù)轉(zhuǎn)換成了Sanger分?jǐn)?shù)。而且,NCBI在讀段名稱前面增加了數(shù)據(jù)在SRA庫的編號和版本,后面增加了讀段的長度。SRA數(shù)據(jù)庫為了節(jié)省存儲空間,將FASTQ文件壓縮為二進(jìn)制的SRA格式進(jìn)行保存。用戶如果下載SRA格式數(shù)據(jù),可以使用工具軟件fastq-dump將數(shù)據(jù)從SRA格式轉(zhuǎn)回FASTQ格式。

QUAL格式文件

Solid測序儀產(chǎn)生分離的序列文件(CSFASTA格式)和質(zhì)量文件(QUAL格式),兩者必須成對出現(xiàn)。QUAL文件采用Phred分?jǐn)?shù),而且行必須與FASTA文件中的行一一對應(yīng)。CSFASTA文件與FASTA格式看似相同,但實際不同,Solid不是用核苷酸殘基表示序列數(shù)據(jù),而是采用了顏色空間的表示方法。Solid的序列文件如果和質(zhì)量文件合并,可以產(chǎn)生CSFASTAQ格式的文件,也可以根據(jù)顏色編碼轉(zhuǎn)為真正的FASTAQ格式的文件。

Solid的結(jié)果文件轉(zhuǎn)為標(biāo)準(zhǔn)FASTQ格式的文件需要注意兩個問題第一是第1個堿基由于來自測序引物,必須刪除;第二就是由于Solid顏色空間的編碼是前后依賴的,一旦錯一個,會導(dǎo)致后面連續(xù)錯誤,一般都將參考基因組反轉(zhuǎn)為顏色空間編碼再進(jìn)行比對等分析,而不主張將Solid的結(jié)果文件直接轉(zhuǎn)換為FASTQ文件。

關(guān)于常見的生信數(shù)據(jù)文件格式,參見生信常見數(shù)據(jù)格式。

RNA-seq技術(shù)的特點

RNA-seq對芯片的優(yōu)勢

RNA-seq檢測基因表達(dá)主要在7個方面比基因芯片有優(yōu)勢。

基因芯片 RNA-seq
參考序列 需要 不需要
動態(tài)范圍
背景噪聲
受降解影響
序列變異 無法檢測 可以檢測
轉(zhuǎn)錄組方向 不能確定 能確定
可重復(fù)性 一般

RNA-seq存在的問題

  • RNA-seq測序之前需要一個比較復(fù)雜的文庫構(gòu)建過程,這個過程的每一步都可能帶來誤差甚至導(dǎo)致實驗失敗。如cDNA片段化、PCR擴(kuò)增等都會帶來偏倚,最終導(dǎo)致有的片段被反復(fù)測了多次,有的沒有測到。rRNA去除不干凈等因素也會帶來大量污染(即非目標(biāo)序列)。還有其他一些實驗問題。
  • RNA-seq檢測靈敏度和最大值是隨測序深度變化的,深度不夠,不能發(fā)現(xiàn)超低表達(dá)的轉(zhuǎn)錄本,需要在測序前預(yù)估轉(zhuǎn)錄本大小。而由于復(fù)雜的RNA編輯等原因,高等生物的轉(zhuǎn)錄組與其編碼基因數(shù)量沒有固定比例關(guān)系,所以預(yù)估容易產(chǎn)生較大誤差。
  • 參考基因組或轉(zhuǎn)錄組不準(zhǔn)確、測序誤差、錯誤拼接或比對帶來的錯誤會大大影響各種變異或者可變剪切事件的識別。
  • 各種其他的問題。比如整個實驗流程可能引進(jìn)了各種污染;原始數(shù)據(jù)預(yù)處理的數(shù)據(jù)模型不完善等等。

下面看一下如何計算由測序誤差引起的Barcode的錯誤分配,假設(shè)Barcode(Barcode唯一確定樣本)長度為6個堿基,每個Barcode兩兩之間兩個堿基不同,所有的Barcode都用滿,同時假設(shè)錯誤的發(fā)生符合二項分布,那么只要2個堿基錯誤,就會發(fā)生一次錯誤分配,在Illumina測序儀每個堿基的平均錯誤率0.5%的前提下,下面例子可以計算出一個泳道的錯誤錯誤分配概率。

> p = 0.0005
> sum(sapply(2:6, FUN=function(k) choose(6,k)*p^k*(1-p)^(6-k)))
[1] 3.745003e-06

也就是說,在一個泳道,每百萬讀段就會有370個讀段分配錯誤。如果還考慮DNA簇混合和跳躍PCR引起的Barcode錯誤分配,這個數(shù)值還要高很多。這種分配錯誤對一般的轉(zhuǎn)錄組分析沒有影響,但是對一些高靈敏度的突變檢測項目影響很大。

Illumine 2000測序儀中,一次運(yùn)行(Run)可以使用2個流動槽(Flow cell),每個流動槽包括8個泳道(Lane),一個泳道包含2個面(Surface),每個面還有3個條(Swath)也叫列(Column),每一列由16個小區(qū)(Tile)組成,后者又由大量DNA簇(Cluster)組成。

Illumine 2000測序儀每次運(yùn)行(單端測序)理論上可以產(chǎn)生大約30億個DNA簇,每個DNA簇理論上可以產(chǎn)生一條讀段(Read),如果測序長度為100bp,一次運(yùn)行可以得到3G個讀段,其原始數(shù)據(jù)量為300G個堿基。

RNA-seq數(shù)據(jù)預(yù)處理

RNA-seq數(shù)據(jù)預(yù)處理與基因芯片預(yù)處理的目的一致,都是要得到基因表達(dá)數(shù)據(jù),這里確切說是轉(zhuǎn)錄本。但它們的實現(xiàn)細(xì)節(jié)和方法則有很大不同,下面逐一介紹。

質(zhì)量控制

數(shù)據(jù)質(zhì)量分析報告可以調(diào)用ShortRead包中的qa函數(shù)得到,另一個常用的工具是FastQC。

下面是一個用qa函數(shù)生成質(zhì)量分析報告的實例,示例數(shù)據(jù)來自SRA數(shù)據(jù)庫的RNA-seq數(shù)據(jù)SRR921344。

library(BiocInstaller)
# 安裝包
biocLite("SRAdb")
biocLite("R.utils")
# 導(dǎo)入包
library(ShortRead)
library(SRAdb)
library(R.utils)
# download data
db_dir <- "~/Projects/coGECP-pro/db/"
sra_dbname <- paste0(db_dir, 'SRAmetadb.sqlite')    
sra_con <- dbConnect( dbDriver("SQLite"), sra_dbname )
getFASTQfile("SRR921344", sra_con, destDir = "~/Projects/coGECP-pro/fast-format/", srcType = 'ftp', ascpCMD = NULL )
dbDisconnect( sra_con )

# 解壓后改名
gunzip("../fast-format/SRR921344.fastq.gz", destname="../fast-format/T2-1.fastq")

# 需要分析的數(shù)據(jù)文件名稱
fastqfile="T2-1.fastq"
# 得到質(zhì)量分析的記過
qa <- qa(dirPath = "../fast-format/", pattern=fastqfile, type="fastq")

# 輸出html格式的分析報告
report(qa, dest="qcReport", type="html")

執(zhí)行完畢后會得到名為qcReport的結(jié)果目錄,主要包括質(zhì)量分析的報告文件“index.html”和文件夾“image”,image文件夾下包括所有的統(tǒng)計信息圖示。

比較重要的圖示信息有前20個高頻出現(xiàn)的讀段統(tǒng)計信息,這對于確定接頭或者其他污染很重要。FastQC軟件帶有一個文件包括了常用的Illumina接頭序列,會把高頻出現(xiàn)的序列比對到這些接頭序列,并給予提示;Biocondutor則需要編程比對到NCBI UniVec數(shù)據(jù)庫(http://www.ncbi.nlm.nih.gov/tools/vecscreen/univec)來確定接頭序列。

接下來是四種堿基的逐點質(zhì)量圖,該圖橫坐標(biāo)是測序的循環(huán)數(shù),對應(yīng)測序時5'端開始的每個位點,縱坐標(biāo)是所有該位點測量的堿基的質(zhì)量分?jǐn)?shù)平均數(shù)。

質(zhì)量控制中最重要的一個圖是逐點質(zhì)量圖,它與四種堿基逐點質(zhì)量圖的區(qū)別在于不區(qū)分堿基種類,給出每個位點的測序質(zhì)量分?jǐn)?shù)的平均數(shù)、中位數(shù)和上下四分位線。

通過質(zhì)量控制,可以確定當(dāng)前樣品的數(shù)據(jù)是否應(yīng)該保留進(jìn)入下一步分析或者丟棄。對于通過質(zhì)量控制的數(shù)據(jù),還要進(jìn)行讀段處理,清理后的數(shù)據(jù)才是實際分析中使用的數(shù)據(jù)。

讀段清理

讀段清理主要去掉讀段中多個“N”堿基,讀段兩端的低質(zhì)量區(qū)域(質(zhì)量分?jǐn)?shù)少于Q20),讀段3'端可能混入的接頭序列,還有可能污染進(jìn)來的rRNA和病毒序列。

轉(zhuǎn)錄組組裝

轉(zhuǎn)錄組組裝包括從頭組裝和基于參考序列的組裝。從頭組裝最常用的軟件是Trinity,其優(yōu)點是:不依賴參考序列;能較好地重建變異的、可變剪切的或者來自染色體重組的轉(zhuǎn)錄本。從頭組裝的缺點是會消耗大量的內(nèi)存資源,測序深度的需求也很高,對測序錯誤很敏感,高相似度的轉(zhuǎn)錄本可能會被誤拼到一起。基于參考序列的組裝常使用TopHat和Cufflinks(主要用于轉(zhuǎn)錄本的識別、定量、標(biāo)準(zhǔn)化與差異分析)兩種軟件的組合來完成。其優(yōu)點是:內(nèi)存需求??;污染影響小,因為污染讀段不能比對到參考序列;靈敏度高,所需測序深度低,能檢測低豐度的轉(zhuǎn)錄本;組裝的轉(zhuǎn)錄本序列更完整;可以增加參考基因組中的轉(zhuǎn)錄本注釋。基于參考序列的組裝的缺點:嚴(yán)重依賴參考序列及其注釋信息等。

轉(zhuǎn)錄組定量和標(biāo)準(zhǔn)化

有參的轉(zhuǎn)錄組定量,需要利用TopHat比對軟件將所有讀段比對到參考基因組上,然后由Cuffinks軟件完成定量;無參的轉(zhuǎn)錄組定量需要利用Bowtie或BWA比對軟件將所有讀段比對到組裝得到的轉(zhuǎn)錄組上直接計數(shù)。

單端測序讀段的比對比較簡單,雙端測序的質(zhì)量不一致,往往是反向一端測序質(zhì)量低,如果按照同樣的標(biāo)準(zhǔn)要求兩端測序的讀段都比對上,會丟失很多比對結(jié)果。一般采取的方式是兩端讀段分別依據(jù)不同的標(biāo)準(zhǔn)(例如正向允許錯配一個,反向允許錯配兩個)做單端比對,然后根據(jù)兩端對齊后中間距離抽取成對的比對結(jié)果。

轉(zhuǎn)錄組定量得到的基因表達(dá)矩陣是簡單計數(shù)得來的,因此稱作原始計數(shù)(Raw counts)。有參的轉(zhuǎn)錄組定量,可以用Bioconductor的GenomicRanges/Rsamtools軟件包中的summarizeOverlaps函數(shù)實現(xiàn)。輸入的數(shù)據(jù)為比對后得到的Bam或者Sam文件,經(jīng)過基因水平或者外顯子水平的計數(shù),可以直接輸出為某種預(yù)定義對象,便于下游軟件(如edgeR包和DESeq包)繼續(xù)處理。

下面例子使用summarizeOverlaps函數(shù)從Bam文件中獲取原始計數(shù),并輸出為edgeR包和DESeq包中的數(shù)據(jù)對象。

require(BiocInstaller)
# biocLite("TxDb.Dmelanogaster.UCSC.dm3.ensGene")
# biocLite("DESeq")
require(Rsamtools)
require(DESeq)
require(edgeR)
require(pasillaBamSubset)
library(GenomicAlignments)

#此處數(shù)據(jù)已經(jīng)不能用了,所以從其他包里弄了個bam格式文件試試
# bamfile <- system.file("extdata", "ex1.bam", package="Rsamtools")
# bf1 <- BamFileList(bamfile, index=character())
# features <- GRanges(seqnames = c())

# from GenomicRanges::GenomicRangesHOWTOs   
reads <- c(untrt1=untreated1_chr4(),
             untrt3=untreated3_chr4())
# single-end reads
# paired-end reads

library(TxDb.Dmelanogaster.UCSC.dm3.ensGene)
exbygene <- exonsBy(TxDb.Dmelanogaster.UCSC.dm3.ensGene, "gene")
se <- summarizeOverlaps(exbygene, reads, mode="IntersectionNotEmpty")

# back 
deseq <- newCountDataSet(assays(se)$counts, rownames(colData(se)))
edger <- DGEList(assays(se)$counts, group=rownames(colData(se)))

類似基因芯片,RNA-seq定量后的數(shù)據(jù)需要標(biāo)準(zhǔn)化,使得所有的樣品具有可比性。最常見的一個指標(biāo)是RPKM(Reads Per Kilo base per Million reads),即每百萬讀段中來自某一個基因每千堿基長度的讀段數(shù)目。具體計算時使用比對到某個基因的讀段個數(shù)除以比對到基因組或者轉(zhuǎn)錄組的所有讀段個數(shù)(以百萬為單位),再除以基因或轉(zhuǎn)錄本的長度(以KB為單位)?;虮磉_(dá)差異分析的常用軟件edgeR軟件和DESeq都自帶了數(shù)據(jù)標(biāo)準(zhǔn)化功能,可以直接處理用原始計數(shù)表示的基因表達(dá)矩陣,RPKM表示的基因表達(dá)矩陣的使用主要是為了方便用戶直接觀察數(shù)據(jù)。

RNA-seq數(shù)據(jù)分析

RNA-seq數(shù)據(jù)與表達(dá)譜芯片數(shù)據(jù)在基因表達(dá)差異的顯著性分析流程基本相同,不同的地方只在確定差異表達(dá)基因方面。

基因表達(dá)差異的顯著性分析

表達(dá)差異分析只對比不同樣本之間的同一個轉(zhuǎn)錄本,所以不需要考慮轉(zhuǎn)錄本長度,只考慮總讀段數(shù)。一個最簡單思想就是,樣本測序得到的總讀段數(shù)(實際上是可以比對到轉(zhuǎn)錄組的總讀段數(shù))越多,則每個基因分配到的讀段越多。因此最簡單的標(biāo)準(zhǔn)化因子就是總讀段數(shù),用總讀段數(shù)作標(biāo)準(zhǔn)化的前提是大部分基因的表達(dá)是非顯著變化的,這與基因芯片中的基本假設(shè)相同。但是實際工作中發(fā)現(xiàn)很多情況下總讀段數(shù)主要是一小部分大量表達(dá)的基因貢獻(xiàn)的。Bullard等(2010)在比較了幾種標(biāo)準(zhǔn)化方法的基礎(chǔ)上發(fā)現(xiàn)在每個泳道內(nèi)使用非零計數(shù)分布的上四分位數(shù)(Q75%)作為標(biāo)準(zhǔn)化因子是一種更穩(wěn)健的選擇,總體表現(xiàn)是所研究方法中最優(yōu)的。

Bioconductor的edgeR包和DESeq包分別提供了上四分位數(shù)和中位數(shù)來作為標(biāo)準(zhǔn)化因子,就是出于這個思想。

edgeR提供了三種標(biāo)準(zhǔn)化算法,分別是M值加權(quán)截斷均值法(Weighted trimmed mean of M-values, TMM),相對對數(shù)表達(dá)值法(Relative log expression, RLE)和上四分位法(Upperquartile),其中TMM是默認(rèn)設(shè)定。這些標(biāo)準(zhǔn)化方法大同小異,其基本思想就是去除表達(dá)值較大的少數(shù)基因的影響,而保留大部分沒有顯著變化的基因。

由于基因芯片檢測雜交的熒光強(qiáng)度信號是連續(xù)值,往往假設(shè)它符合正態(tài)分布;而RNA-seq測量的是離散值,最簡單的假設(shè)就是二項分布。由于RNA-seq讀段數(shù)量非常多,而且一條讀段映射到一個給定基因的概率足夠小,在實際計算中,二項分布常用它的極限形式泊松分布來替代。泊松分布的一個性質(zhì)是其方差等于均值,但是當(dāng)有生物學(xué)重復(fù)時,RNA-seq數(shù)據(jù)會表現(xiàn)出比泊松分布期望的更高的變異性,對相當(dāng)多的基因來說方差可能超過均值,這種現(xiàn)象叫過離散。對過離散數(shù)據(jù),基于泊松分布假設(shè)的分析容易低估不同生物學(xué)重復(fù)帶來的取樣誤差而得到過多的假陽性的差異表達(dá)基因。為了允許額外的變異,一個自然的想法就是給均值加上一個散度參數(shù),以使方差可以大于均值。于是作為泊松分布的推廣,又引入了負(fù)二項分布(NB)來作為基本假設(shè),負(fù)二項分布是當(dāng)前基因表達(dá)的顯著性分析中最常用假設(shè)。

現(xiàn)在從百度百科摘取二項分布與負(fù)二項分布的公式,以加強(qiáng)理解。

二項分布,即重復(fù)n次的貝努利試驗,用\xi表示隨機(jī)試驗的結(jié)果。如果事件發(fā)生的概率是p,不發(fā)生的概率是1-p,那么N次獨立重復(fù)試驗中發(fā)生k次的概率是:
P(\xi=k)=C_n^k * p^k *(1-p)^{n-k}
期望:E_\xi = np

方差: D_\xi = npq

而負(fù)二項分布的公式(概率密度)為:
f(k; r, p)=P_r(x=k) = C_{k+r+1}^{r-1}*p^k*(1-p)^{n-k}
它表示,已知一個事件在貝努利試驗中每次的出現(xiàn)概率是p,在一連串貝努利試驗中,一件事剛好在第r+k次試驗出現(xiàn)第r次的概率。

寫作:X ~ NB(r; p)

基于負(fù)二項分布的edgeR、DESeq包是當(dāng)前最主要的分析程序。在edgeR中,對于任一樣品i中的任一個基因g,假設(shè)它的分布符合負(fù)二項分布。
Y_{gi} = NB(M_ip_{gj}, \phi_g)
其中M_i是樣品i中的讀段總數(shù)(實際中是可以比對上的讀段總數(shù));\phi_g就是基因g的散度;p_{gj}是基因g在某個實驗條件j下或者分組j中的相對豐度。第g個基因在某個實驗條件j下或分組j中,NB分布的均值為\mu_{gj}=p_gjM_i,方差為\mu_{gj}(1+\mu_{gj}\phi_g),對于表達(dá)差異分析,需要估計的是散度\phi_g,當(dāng)它趨于0時,負(fù)二項分布退化為泊松分布,這時方差退化為第一項\mu_{gj},一般認(rèn)為來自技術(shù)重復(fù),方差第2項\mu^2_{gj}\phi_g來自生物學(xué)重復(fù)。

RNA-seq數(shù)據(jù)分析往往只有很小的樣本量,為每個基因估計一個散度非常困難。比較好的策略是允許不同的基因有不同的個體散度,而這些個體散度的估計可以用一些合適的統(tǒng)計方法借助基因間的信息來改進(jìn)。相對于edgeR,DESeq默認(rèn)設(shè)置采取了最保守的估計策略,即選取每個基因的經(jīng)驗散度和擬合得到的散度趨勢線取值中最大的作為最終的散度估計值,因此DESeq往往選出更少的差異表達(dá)基因(為什么呢?)。DESeq由于可以利用同一個樣本基因間的數(shù)據(jù)估計散度,而不一定需要重復(fù)樣本來計算,因此可以直接用于無重復(fù)實驗的表達(dá)差異分析。

后面一些實例代碼不好重復(fù),不再描述。

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

推薦閱讀更多精彩內(nèi)容