參考學(xué)習(xí)《R語(yǔ)言與Bioconductor生物信息學(xué)應(yīng)用》第六章
前言
Y叔的公眾號(hào)biobabble發(fā)過(guò)一篇【聽(tīng)說(shuō)你想學(xué)R?】,七月份發(fā)的但昨天推送了一次,所以我看到了,看到了對(duì)《R語(yǔ)言與Bioconductor生物信息學(xué)應(yīng)用》這本書(shū)的強(qiáng)力吐槽,而我發(fā)的這篇筆記,連同上次發(fā)的Bioconductor分析基因芯片數(shù)據(jù)都是來(lái)自于對(duì)該書(shū)內(nèi)容的提煉和學(xué)習(xí)。所以呢我覺(jué)得有必要在這里說(shuō)幾句。
坦白說(shuō),這本書(shū)確實(shí)有很多問(wèn)題,我自己講講幾點(diǎn)吧:首先,它有點(diǎn)過(guò)時(shí)了,公眾號(hào)評(píng)論就有人說(shuō)基因芯片分析過(guò)時(shí)了,我個(gè)人覺(jué)得不客觀,但確實(shí)這本書(shū)有些過(guò)時(shí),由此產(chǎn)生了一系列問(wèn)題,特別要提到的就是代碼的可重復(fù)性,我個(gè)人在運(yùn)行書(shū)中一些代碼時(shí)很多時(shí)候會(huì)不work,然后我會(huì)自己思考怎么讓它work,實(shí)在不行就放棄;第二點(diǎn),它不適合R入門的人,特別是你去看它的第一章,云里霧里,好歹我也摸了半年R了啊,好吧,我就直接跳過(guò)了;第三點(diǎn),它的流程不完整,就是不是很連續(xù)的都能讓你從頭到尾的go through下去,自然心里會(huì)感覺(jué)不爽快。如此種種。
接著你心里已經(jīng)有準(zhǔn)備聽(tīng)我下面要將的“but”的跳轉(zhuǎn)了,我為什么會(huì)學(xué)它并做筆記,乃至分享出來(lái)?首先,在我需要學(xué)習(xí)芯片和RNAseq分析的時(shí)候身邊剛好有這本書(shū),我也不知道是誰(shuí)的,好吧,那就拿起來(lái)看看,發(fā)現(xiàn)正是我需要的,所以我看它,第一章看不太懂,沒(méi)意思,我也不想看,直接跳過(guò)從第二章看起,到現(xiàn)在整本書(shū)基本看了大半,看過(guò)的代碼都嘗試著去運(yùn)行過(guò),確實(shí)有所收獲,所以我會(huì)寫(xiě)前言,算是對(duì)這本書(shū)的客觀評(píng)價(jià)吧;其次,我想談?wù)動(dòng)心男┦斋@,我本人可以算是有編程基礎(chǔ)的,算不得菜鳥(niǎo),但是對(duì)于基因芯片的基礎(chǔ)也好,RNAseq乃至基因組分析流程、背景等等可以說(shuō)是菜鳥(niǎo)的不能再菜鳥(niǎo),這本書(shū)給了我對(duì)芯片數(shù)據(jù)來(lái)源、處理流程的一些基本認(rèn)知,其實(shí)這在一些國(guó)內(nèi)資源上是找不到的。有一點(diǎn)我心里非常的不服氣,為什么我聽(tīng)說(shuō)中國(guó)做生信非常厲害的人很多,找得到的中文資料卻很少?為什么百度其他搜索引擎很強(qiáng)大,一涉及科研領(lǐng)域就非常之垃圾?這也是我挺佩服生信技能樹(shù)或類似的這樣的團(tuán)隊(duì)以及相關(guān)個(gè)人,當(dāng)我們?cè)趪娨恍?shū)籍很垃圾,而實(shí)際它確實(shí)有很多問(wèn)題的時(shí)候,我們能不能貢獻(xiàn)自己的力量呢?幾個(gè)月的學(xué)習(xí)里我深知自己才能有限,所知甚少,所以不斷模仿和記錄。我把這些筆記陳列出來(lái)并不是它寫(xiě)的有多好,多值得模仿,而是它能夠給予我們新的知識(shí),又能夠在我們忘記時(shí)方便查詢。學(xué)習(xí)必然是一個(gè)探尋和思索的過(guò)程,技能的掌握它不是一本書(shū)可以帶給你的,特別是一本技術(shù)類書(shū)籍,它給了你一個(gè)看似可行的方案,你要實(shí)際去操作它,然后心里給予評(píng)價(jià),在你不確定時(shí),需要多方面整理實(shí)踐不同的解決方案,然后找到自己的出路,建立自己對(duì)該某個(gè)問(wèn)題處理的完整體系。
這篇筆記并不會(huì)帶你真正學(xué)好RNA-seq的分析,至少我看完之后沒(méi)有,但它確實(shí)可以補(bǔ)一些知識(shí)的模塊。它不適應(yīng)入門R,也不適應(yīng)完全模仿做具體的分析,而是適合你在掌握R之后,你在做測(cè)序分析之前想了解的一些知識(shí)。當(dāng)你知道它非你所需,你可以完全不看它。
整體而言,這本書(shū)非常短,整體評(píng)價(jià)偏差,但國(guó)內(nèi)在這個(gè)方面學(xué)習(xí)恐怕沒(méi)有比這好的中文書(shū)籍吧?(所以我建議多看網(wǎng)絡(luò)資料,這也是我在交互學(xué)習(xí)的,比如生信媛公眾號(hào)文章目錄)我希望那些厲害的人物(教授級(jí)人物們)能夠多拓展一些中文科研的視界(提升國(guó)內(nèi)人員對(duì)生信的整體認(rèn)知與分析能力,加速學(xué)習(xí)周期),我也會(huì)持續(xù)記錄這樣一些知識(shí),與生信技能樹(shù)里面的小伙伴一起從不同的研究方向,角度去拓展形形色色的基礎(chǔ)知識(shí)與理論。我再次強(qiáng)調(diào),我專注于筆記的目的除了自身學(xué)習(xí)以外,是當(dāng)你在面對(duì)一些概念或者問(wèn)題的疑惑時(shí),你能鍵入百度搜索后快速地鏈接到本文,并從中找到可執(zhí)行的方案或者幫助你理解,而不是完完全全整篇的通讀。而當(dāng)你確實(shí)是需要對(duì)所有的知識(shí)點(diǎn)有學(xué)習(xí)的需求時(shí),你再選擇讀它,不僅僅是這一篇筆記或博文。不要浪費(fèi)自己的時(shí)間,也要耐心地投入自己的時(shí)間。
如果想了解測(cè)序基本原理和知識(shí),查看我整理的測(cè)序與平臺(tái)的幾個(gè)鏈接。
使用的學(xué)習(xí)數(shù)據(jù):NCBI SRA (Sequence Read Archive)數(shù)據(jù)庫(kù),數(shù)據(jù)集編號(hào)SRA091277
使用的是菊花轉(zhuǎn)錄組樣品,分析過(guò)程包括原始數(shù)據(jù)獲取、數(shù)據(jù)清理、質(zhì)量控制、轉(zhuǎn)錄組拼接、轉(zhuǎn)錄本定量、標(biāo)準(zhǔn)化和表達(dá)差異分析等過(guò)程。
樣品名稱 | 樣品描述 | RUN編號(hào) | 測(cè)序長(zhǎng)度 |
---|---|---|---|
T1 | 處理組(脫水處理3小時(shí)) | SRR921340 | 100bp |
T2 | 處理組(脫水處理3小時(shí)) | SRR921341 | 100bp |
T3 | 處理組(脫水處理3小時(shí)) | SRR921342 | 100bp |
T1-1 | 處理組(脫水處理3小時(shí)) | SRR921346 | 51bp |
T2-1 | 處理組(脫水處理3小時(shí)) | SRR921344 | 51bp |
T3-1 | 處理組(脫水處理3小時(shí)) | SRR921345 | 51bp |
CK1 | 對(duì)照組(不做任何處理) | SRR921321 | 100bp |
CK2 | 對(duì)照組(不做任何處理) | SRR921322 | 100bp |
CK3 | 對(duì)照組(不做任何處理) | SRR921324 | 100bp |
CK1-1 | 對(duì)照組(不做任何處理) | SRR921336 | 51bp |
CK2-1 | 對(duì)照組(不做任何處理) | SRR921337 | 51bp |
CK3-1 | 對(duì)照組(不做任何處理) | SRR921338 | 51bp |
高通量測(cè)序基礎(chǔ)知識(shí)
(這里只記錄書(shū)中重要的知識(shí)點(diǎn)并加以理解)
基于第二代測(cè)序建立起來(lái)的基因組測(cè)序、RNA-seq和Small RNA-seq等應(yīng)用,都由樣本收集、文庫(kù)制備和測(cè)序三個(gè)過(guò)程組成,不同之處在于樣品收集和文庫(kù)制備。
第二代測(cè)序儀(Illumina)測(cè)的序列,無(wú)論來(lái)自DNA-seq文庫(kù)還是RNA-seq文庫(kù),從左到右依次分為3個(gè)區(qū)域:5'接頭(Adapter)區(qū)、目標(biāo)序列區(qū)和3'接頭區(qū)。當(dāng)多個(gè)樣品在一個(gè)泳道(Lane)中同時(shí)測(cè)序時(shí),我們可以使用多樣品(Multiplex)技術(shù),具體而言是給每個(gè)樣品分配一個(gè)不重復(fù)的條形碼(Barcode),其實(shí)質(zhì)是一個(gè)6-8位的DNA序列,測(cè)序后可以通過(guò)這個(gè)序列將不同的樣品分開(kāi)。單端測(cè)序(Single end)指僅從正向測(cè)序;雙端測(cè)序(Paired end)指先從正向測(cè)序,然后從反向測(cè)序。Barcode則根據(jù)另一引物“Sb”獨(dú)立測(cè)序得到。
理論上,由于制備的RNA-seq文庫(kù)插入長(zhǎng)度的峰值常常為200或300bp,所以測(cè)序應(yīng)該只得到文庫(kù)中目標(biāo)序列5'端開(kāi)始的部分(這就是常說(shuō)的read了,以前總搞不懂~)。但是呢,文庫(kù)中會(huì)有少量目標(biāo)序列不到測(cè)序長(zhǎng)度(比如測(cè)100bp實(shí)際目標(biāo)序列只有幾十),那么測(cè)序就可能會(huì)測(cè)到3'端接頭序列,這就是所謂的接頭污染。數(shù)據(jù)預(yù)處理時(shí),如果發(fā)現(xiàn)接頭序列過(guò)多,一般是RNA-seq文庫(kù)插入長(zhǎng)度沒(méi)有控制好;如果出現(xiàn)大量全長(zhǎng)的3'接頭,一般是接頭過(guò)量,導(dǎo)致了大量接頭自連(Self ligation)。
實(shí)際應(yīng)用中,估計(jì)測(cè)序深度使用更多的是達(dá)到質(zhì)量標(biāo)準(zhǔn)的有效數(shù)據(jù)量,而不是原始數(shù)據(jù)量。當(dāng)RNA-seq有效數(shù)據(jù)比例過(guò)低時(shí),無(wú)法檢測(cè)一些低豐度的轉(zhuǎn)錄本,要考慮重新測(cè)序。
測(cè)序深度,也叫乘數(shù),指每個(gè)堿基被測(cè)序的平均次數(shù),是用來(lái)衡量測(cè)序量的首要參數(shù)。測(cè)序覆蓋度,也叫覆蓋率,指被測(cè)序到的堿基占全基因組大小的比率。假如用Illumina 2000測(cè)序儀完成一次人類基因組(3G大小)單端測(cè)序,即可得到300G數(shù)據(jù)(假設(shè)全部是有效數(shù)據(jù)),估計(jì)的測(cè)序深度即為100倍(300G/3G),常見(jiàn)表示為100X。將所有讀段比對(duì)到人類基因組,如果發(fā)現(xiàn)只有2.7G的堿基至少有1個(gè)讀段覆蓋到,其實(shí)際測(cè)序深度為111X(300G/2.7G),測(cè)序覆蓋度為90%(2.7G/3G)。
不同的測(cè)序目的要使用不同的測(cè)序策略。如DNA組裝使用較多的是2X100bp或更長(zhǎng)的雙端測(cè)序;RNA-seq使用較多的是100bp或更長(zhǎng)的單端鏈特異性測(cè)序;small RNA-seq多用50bp單端測(cè)序。
從測(cè)序得到的讀段組裝成目標(biāo)基因組或者轉(zhuǎn)錄組的基因策略是比對(duì)和拼接,比對(duì)是把讀段定位到參考基因組或者轉(zhuǎn)錄組上,然后再拼接成連續(xù)序列;拼接也膠從頭組裝(Denovo assembly),是在沒(méi)有參考基因組或者轉(zhuǎn)錄組前提下,根據(jù)讀段之間的重疊區(qū),把所有讀段拼接起來(lái),直接獲得基因組或者轉(zhuǎn)錄組(參考文章)。
轉(zhuǎn)錄組比對(duì)常用的軟件有BWA、Bowtie和Tophat;拼接常用的軟件是Trinity。
基因組和轉(zhuǎn)錄組組裝的不同點(diǎn):基因組組裝希望盡量獲得唯一或較少的組裝結(jié)果,即一致性序列(Consensus sequence)。一致性序列上并不是每個(gè)位點(diǎn)都只有一種堿基,它實(shí)際上只代表該位點(diǎn)出現(xiàn)頻率最高的堿基,存在兩種以上堿基的位點(diǎn)叫做雜合位點(diǎn)。注意,過(guò)分追求一致性會(huì)導(dǎo)致過(guò)拼接,即來(lái)自不同基因的相似序列會(huì)被誤拼接到一起。基因組和轉(zhuǎn)錄組組裝可以用一個(gè)非常重要的指標(biāo)N50來(lái)評(píng)價(jià),即將所有組裝后的序列按照長(zhǎng)度從大到小排列,累加值接近所有序列長(zhǎng)度總和一半時(shí)的那個(gè)位置對(duì)應(yīng)的序列長(zhǎng)度。N50越大,組裝的結(jié)果越好,類似的有N90。
測(cè)序的質(zhì)量分?jǐn)?shù)
Phred分?jǐn)?shù)
測(cè)序中常用錯(cuò)誤概率(Error probability)來(lái)表示每個(gè)核苷酸測(cè)量的準(zhǔn)確性,還可以賦予一個(gè)數(shù)值來(lái)更簡(jiǎn)便地表示這個(gè)意思,叫做測(cè)序質(zhì)量分?jǐn)?shù)(Quality score)。因?yàn)檫@個(gè)分?jǐn)?shù)最開(kāi)始通過(guò)Phred軟件從測(cè)序儀生成的色譜圖中得到的,所以也叫做Phred分?jǐn)?shù)(
)。Phred分?jǐn)?shù)的取值范圍是0到93,可以表示很寬的誤差范圍,即從1(完全錯(cuò)誤)到非常低的錯(cuò)誤率
。Phred分?jǐn)?shù)是最基本的質(zhì)量分?jǐn)?shù),其他的質(zhì)量計(jì)分標(biāo)準(zhǔn)都來(lái)自Phred分?jǐn)?shù)。
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ù)字,還需要用空格分隔,不方便閱讀,又要占用大量存儲(chǔ)空間,實(shí)際上文件中不采用它。為了在文件中方便地表示質(zhì)量,常常將Phred分?jǐn)?shù)加上33(從33到126變化,ASCII碼正好覆蓋了可打印區(qū)),并用其ASCII碼值對(duì)應(yīng)的字符表示,這就是Sanger分?jǐn)?shù)。Sanger分?jǐn)?shù)常用于FASTQ格式的文件。
Illumina/Solexa分?jǐn)?shù)(Phred+64)
分?jǐn)?shù)之間的轉(zhuǎn)換公式:
Solexa分?jǐn)?shù)的取值范圍是-5到62,它在FASTQ文件中需要加上64并轉(zhuǎn)換為相應(yīng)的ASCII碼值(59到126)對(duì)應(yīng)的字符來(lái)表示質(zhì)量。2006年,Illumina公司收購(gòu)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(即常見(jiàn)的Q20標(biāo)準(zhǔn))為例,其Sanger分?jǐn)?shù)為53,對(duì)應(yīng)數(shù)字5;其Illumina分?jǐn)?shù)為84,對(duì)應(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
高通量測(cè)序文件格式
FASTQ格式
FASTQ格式是序列文件中常見(jiàn)的一種,它一般包括四部分:第一部分是由“@”開(kāi)始,后面跟著序列的描述信息(對(duì)于高通量數(shù)據(jù),這里是讀段的名稱),這點(diǎn)跟FASTA格式是一樣的(起頭的符號(hào)不一樣);第二部分是DNA序列;第三部分是由“+”號(hào)開(kāi)始,后面或者是讀段的名稱,或者為空;第四部分是DNA序列上每個(gè)堿基的質(zhì)量分?jǐn)?shù),每個(gè)質(zhì)量分?jǐn)?shù)對(duì)應(yīng)一個(gè)DNA堿基。
Bioconductor中的ShortRead包提供了quality函數(shù)可以自動(dòng)識(shí)別FASTQ文件中的質(zhì)量分?jǐn)?shù)的種類。
我隨便寫(xiě)了一個(gè)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)) # 這里好像一個(gè)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ù)庫(kù),接受FASTQ格式的高通量數(shù)據(jù)上傳,并將分?jǐn)?shù)標(biāo)準(zhǔn)從開(kāi)始的Illumina分?jǐn)?shù)轉(zhuǎn)換成了Sanger分?jǐn)?shù)。而且,NCBI在讀段名稱前面增加了數(shù)據(jù)在SRA庫(kù)的編號(hào)和版本,后面增加了讀段的長(zhǎng)度。SRA數(shù)據(jù)庫(kù)為了節(jié)省存儲(chǔ)空間,將FASTQ文件壓縮為二進(jìn)制的SRA格式進(jìn)行保存。用戶如果下載SRA格式數(shù)據(jù),可以使用工具軟件fastq-dump將數(shù)據(jù)從SRA格式轉(zhuǎn)回FASTQ格式。
QUAL格式文件
Solid測(cè)序儀產(chǎn)生分離的序列文件(CSFASTA格式)和質(zhì)量文件(QUAL格式),兩者必須成對(duì)出現(xiàn)。QUAL文件采用Phred分?jǐn)?shù),而且行必須與FASTA文件中的行一一對(duì)應(yīng)。CSFASTA文件與FASTA格式看似相同,但實(shí)際不同,Solid不是用核苷酸殘基表示序列數(shù)據(jù),而是采用了顏色空間的表示方法。Solid的序列文件如果和質(zhì)量文件合并,可以產(chǎn)生CSFASTAQ格式的文件,也可以根據(jù)顏色編碼轉(zhuǎn)為真正的FASTAQ格式的文件。
Solid的結(jié)果文件轉(zhuǎn)為標(biāo)準(zhǔn)FASTQ格式的文件需要注意兩個(gè)問(wèn)題:第一是第1個(gè)堿基由于來(lái)自測(cè)序引物,必須刪除;第二就是由于Solid顏色空間的編碼是前后依賴的,一旦錯(cuò)一個(gè),會(huì)導(dǎo)致后面連續(xù)錯(cuò)誤,一般都將參考基因組反轉(zhuǎn)為顏色空間編碼再進(jìn)行比對(duì)等分析,而不主張將Solid的結(jié)果文件直接轉(zhuǎn)換為FASTQ文件。
關(guān)于常見(jiàn)的生信數(shù)據(jù)文件格式,參見(jiàn)生信常見(jiàn)數(shù)據(jù)格式。
RNA-seq技術(shù)的特點(diǎn)
RNA-seq對(duì)芯片的優(yōu)勢(shì)
RNA-seq檢測(cè)基因表達(dá)主要在7個(gè)方面比基因芯片有優(yōu)勢(shì)。
基因芯片 | RNA-seq | |
---|---|---|
參考序列 | 需要 | 不需要 |
動(dòng)態(tài)范圍 | 小 | 大 |
背景噪聲 | 大 | 小 |
受降解影響 | 大 | 小 |
序列變異 | 無(wú)法檢測(cè) | 可以檢測(cè) |
轉(zhuǎn)錄組方向 | 不能確定 | 能確定 |
可重復(fù)性 | 一般 | 高 |
RNA-seq存在的問(wèn)題
- RNA-seq測(cè)序之前需要一個(gè)比較復(fù)雜的文庫(kù)構(gòu)建過(guò)程,這個(gè)過(guò)程的每一步都可能帶來(lái)誤差甚至導(dǎo)致實(shí)驗(yàn)失敗。如cDNA片段化、PCR擴(kuò)增等都會(huì)帶來(lái)偏倚,最終導(dǎo)致有的片段被反復(fù)測(cè)了多次,有的沒(méi)有測(cè)到。rRNA去除不干凈等因素也會(huì)帶來(lái)大量污染(即非目標(biāo)序列)。還有其他一些實(shí)驗(yàn)問(wèn)題。
- RNA-seq檢測(cè)靈敏度和最大值是隨測(cè)序深度變化的,深度不夠,不能發(fā)現(xiàn)超低表達(dá)的轉(zhuǎn)錄本,需要在測(cè)序前預(yù)估轉(zhuǎn)錄本大小。而由于復(fù)雜的RNA編輯等原因,高等生物的轉(zhuǎn)錄組與其編碼基因數(shù)量沒(méi)有固定比例關(guān)系,所以預(yù)估容易產(chǎn)生較大誤差。
- 參考基因組或轉(zhuǎn)錄組不準(zhǔn)確、測(cè)序誤差、錯(cuò)誤拼接或比對(duì)帶來(lái)的錯(cuò)誤會(huì)大大影響各種變異或者可變剪切事件的識(shí)別。
- 各種其他的問(wèn)題。比如整個(gè)實(shí)驗(yàn)流程可能引進(jìn)了各種污染;原始數(shù)據(jù)預(yù)處理的數(shù)據(jù)模型不完善等等。
下面看一下如何計(jì)算由測(cè)序誤差引起的Barcode的錯(cuò)誤分配,假設(shè)Barcode(Barcode唯一確定樣本)長(zhǎng)度為6個(gè)堿基,每個(gè)Barcode兩兩之間兩個(gè)堿基不同,所有的Barcode都用滿,同時(shí)假設(shè)錯(cuò)誤的發(fā)生符合二項(xiàng)分布,那么只要2個(gè)堿基錯(cuò)誤,就會(huì)發(fā)生一次錯(cuò)誤分配,在Illumina測(cè)序儀每個(gè)堿基的平均錯(cuò)誤率0.5%的前提下,下面例子可以計(jì)算出一個(gè)泳道的錯(cuò)誤錯(cuò)誤分配概率。
> p = 0.0005
> sum(sapply(2:6, FUN=function(k) choose(6,k)*p^k*(1-p)^(6-k)))
[1] 3.745003e-06
也就是說(shuō),在一個(gè)泳道,每百萬(wàn)讀段就會(huì)有370個(gè)讀段分配錯(cuò)誤。如果還考慮DNA簇混合和跳躍PCR引起的Barcode錯(cuò)誤分配,這個(gè)數(shù)值還要高很多。這種分配錯(cuò)誤對(duì)一般的轉(zhuǎn)錄組分析沒(méi)有影響,但是對(duì)一些高靈敏度的突變檢測(cè)項(xiàng)目影響很大。
Illumine 2000測(cè)序儀中,一次運(yùn)行(Run)可以使用2個(gè)流動(dòng)槽(Flow cell),每個(gè)流動(dòng)槽包括8個(gè)泳道(Lane),一個(gè)泳道包含2個(gè)面(Surface),每個(gè)面還有3個(gè)條(Swath)也叫列(Column),每一列由16個(gè)小區(qū)(Tile)組成,后者又由大量DNA簇(Cluster)組成。
Illumine 2000測(cè)序儀每次運(yùn)行(單端測(cè)序)理論上可以產(chǎn)生大約30億個(gè)DNA簇,每個(gè)DNA簇理論上可以產(chǎn)生一條讀段(Read),如果測(cè)序長(zhǎng)度為100bp,一次運(yùn)行可以得到3G個(gè)讀段,其原始數(shù)據(jù)量為300G個(gè)堿基。
RNA-seq數(shù)據(jù)預(yù)處理
RNA-seq數(shù)據(jù)預(yù)處理與基因芯片預(yù)處理的目的一致,都是要得到基因表達(dá)數(shù)據(jù),這里確切說(shuō)是轉(zhuǎn)錄本。但它們的實(shí)現(xiàn)細(xì)節(jié)和方法則有很大不同,下面逐一介紹。
質(zhì)量控制
數(shù)據(jù)質(zhì)量分析報(bào)告可以調(diào)用ShortRead包中的qa
函數(shù)得到,另一個(gè)常用的工具是FastQC。
下面是一個(gè)用qa
函數(shù)生成質(zhì)量分析報(bào)告的實(shí)例,示例數(shù)據(jù)來(lái)自SRA數(shù)據(jù)庫(kù)的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ì)量分析的記過(guò)
qa <- qa(dirPath = "../fast-format/", pattern=fastqfile, type="fastq")
# 輸出html格式的分析報(bào)告
report(qa, dest="qcReport", type="html")
執(zhí)行完畢后會(huì)得到名為qcReport
的結(jié)果目錄,主要包括質(zhì)量分析的報(bào)告文件“index.html”和文件夾“image”,image文件夾下包括所有的統(tǒng)計(jì)信息圖示。
比較重要的圖示信息有前20個(gè)高頻出現(xiàn)的讀段統(tǒng)計(jì)信息,這對(duì)于確定接頭或者其他污染很重要。FastQC軟件帶有一個(gè)文件包括了常用的Illumina接頭序列,會(huì)把高頻出現(xiàn)的序列比對(duì)到這些接頭序列,并給予提示;Biocondutor則需要編程比對(duì)到NCBI UniVec數(shù)據(jù)庫(kù)(http://www.ncbi.nlm.nih.gov/tools/vecscreen/univec)來(lái)確定接頭序列。
接下來(lái)是四種堿基的逐點(diǎn)質(zhì)量圖,該圖橫坐標(biāo)是測(cè)序的循環(huán)數(shù),對(duì)應(yīng)測(cè)序時(shí)5'端開(kāi)始的每個(gè)位點(diǎn),縱坐標(biāo)是所有該位點(diǎn)測(cè)量的堿基的質(zhì)量分?jǐn)?shù)平均數(shù)。
質(zhì)量控制中最重要的一個(gè)圖是逐點(diǎn)質(zhì)量圖,它與四種堿基逐點(diǎn)質(zhì)量圖的區(qū)別在于不區(qū)分堿基種類,給出每個(gè)位點(diǎn)的測(cè)序質(zhì)量分?jǐn)?shù)的平均數(shù)、中位數(shù)和上下四分位線。
通過(guò)質(zhì)量控制,可以確定當(dāng)前樣品的數(shù)據(jù)是否應(yīng)該保留進(jìn)入下一步分析或者丟棄。對(duì)于通過(guò)質(zhì)量控制的數(shù)據(jù),還要進(jìn)行讀段處理,清理后的數(shù)據(jù)才是實(shí)際分析中使用的數(shù)據(jù)。
讀段清理
讀段清理主要去掉讀段中多個(gè)“N”堿基,讀段兩端的低質(zhì)量區(qū)域(質(zhì)量分?jǐn)?shù)少于Q20),讀段3'端可能混入的接頭序列,還有可能污染進(jìn)來(lái)的rRNA和病毒序列。
轉(zhuǎn)錄組組裝
轉(zhuǎn)錄組組裝包括從頭組裝和基于參考序列的組裝。從頭組裝最常用的軟件是Trinity,其優(yōu)點(diǎn)是:不依賴參考序列;能較好地重建變異的、可變剪切的或者來(lái)自染色體重組的轉(zhuǎn)錄本。從頭組裝的缺點(diǎn)是會(huì)消耗大量的內(nèi)存資源,測(cè)序深度的需求也很高,對(duì)測(cè)序錯(cuò)誤很敏感,高相似度的轉(zhuǎn)錄本可能會(huì)被誤拼到一起。基于參考序列的組裝常使用TopHat和Cufflinks(主要用于轉(zhuǎn)錄本的識(shí)別、定量、標(biāo)準(zhǔn)化與差異分析)兩種軟件的組合來(lái)完成。其優(yōu)點(diǎn)是:內(nèi)存需求小;污染影響小,因?yàn)槲廴咀x段不能比對(duì)到參考序列;靈敏度高,所需測(cè)序深度低,能檢測(cè)低豐度的轉(zhuǎn)錄本;組裝的轉(zhuǎn)錄本序列更完整;可以增加參考基因組中的轉(zhuǎn)錄本注釋。基于參考序列的組裝的缺點(diǎn):嚴(yán)重依賴參考序列及其注釋信息等。
轉(zhuǎn)錄組定量和標(biāo)準(zhǔn)化
有參的轉(zhuǎn)錄組定量,需要利用TopHat比對(duì)軟件將所有讀段比對(duì)到參考基因組上,然后由Cuffinks軟件完成定量;無(wú)參的轉(zhuǎn)錄組定量需要利用Bowtie或BWA比對(duì)軟件將所有讀段比對(duì)到組裝得到的轉(zhuǎn)錄組上直接計(jì)數(shù)。
單端測(cè)序讀段的比對(duì)比較簡(jiǎn)單,雙端測(cè)序的質(zhì)量不一致,往往是反向一端測(cè)序質(zhì)量低,如果按照同樣的標(biāo)準(zhǔn)要求兩端測(cè)序的讀段都比對(duì)上,會(huì)丟失很多比對(duì)結(jié)果。一般采取的方式是兩端讀段分別依據(jù)不同的標(biāo)準(zhǔn)(例如正向允許錯(cuò)配一個(gè),反向允許錯(cuò)配兩個(gè))做單端比對(duì),然后根據(jù)兩端對(duì)齊后中間距離抽取成對(duì)的比對(duì)結(jié)果。
轉(zhuǎn)錄組定量得到的基因表達(dá)矩陣是簡(jiǎn)單計(jì)數(shù)得來(lái)的,因此稱作原始計(jì)數(shù)(Raw counts)。有參的轉(zhuǎn)錄組定量,可以用Bioconductor的GenomicRanges/Rsamtools軟件包中的summarizeOverlaps函數(shù)實(shí)現(xiàn)。輸入的數(shù)據(jù)為比對(duì)后得到的Bam或者Sam文件,經(jīng)過(guò)基因水平或者外顯子水平的計(jì)數(shù),可以直接輸出為某種預(yù)定義對(duì)象,便于下游軟件(如edgeR包和DESeq包)繼續(xù)處理。
下面例子使用summarizeOverlaps
函數(shù)從Bam文件中獲取原始計(jì)數(shù),并輸出為edgeR包和DESeq包中的數(shù)據(jù)對(duì)象。
require(BiocInstaller)
# biocLite("TxDb.Dmelanogaster.UCSC.dm3.ensGene")
# biocLite("DESeq")
require(Rsamtools)
require(DESeq)
require(edgeR)
require(pasillaBamSubset)
library(GenomicAlignments)
#此處數(shù)據(jù)已經(jīng)不能用了,所以從其他包里弄了個(gè)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)化,使得所有的樣品具有可比性。最常見(jiàn)的一個(gè)指標(biāo)是RPKM(Reads Per Kilo base per Million reads),即每百萬(wàn)讀段中來(lái)自某一個(gè)基因每千堿基長(zhǎng)度的讀段數(shù)目。具體計(jì)算時(shí)使用比對(duì)到某個(gè)基因的讀段個(gè)數(shù)除以比對(duì)到基因組或者轉(zhuǎn)錄組的所有讀段個(gè)數(shù)(以百萬(wàn)為單位),再除以基因或轉(zhuǎn)錄本的長(zhǎng)度(以KB為單位)。基因表達(dá)差異分析的常用軟件edgeR軟件和DESeq都自帶了數(shù)據(jù)標(biāo)準(zhǔn)化功能,可以直接處理用原始計(jì)數(shù)表示的基因表達(dá)矩陣,RPKM表示的基因表達(dá)矩陣的使用主要是為了方便用戶直接觀察數(shù)據(jù)。
RNA-seq數(shù)據(jù)分析
RNA-seq數(shù)據(jù)與表達(dá)譜芯片數(shù)據(jù)在基因表達(dá)差異的顯著性分析流程基本相同,不同的地方只在確定差異表達(dá)基因方面。
基因表達(dá)差異的顯著性分析
表達(dá)差異分析只對(duì)比不同樣本之間的同一個(gè)轉(zhuǎn)錄本,所以不需要考慮轉(zhuǎn)錄本長(zhǎng)度,只考慮總讀段數(shù)。一個(gè)最簡(jiǎn)單思想就是,樣本測(cè)序得到的總讀段數(shù)(實(shí)際上是可以比對(duì)到轉(zhuǎn)錄組的總讀段數(shù))越多,則每個(gè)基因分配到的讀段越多。因此最簡(jiǎn)單的標(biāo)準(zhǔn)化因子就是總讀段數(shù),用總讀段數(shù)作標(biāo)準(zhǔn)化的前提是大部分基因的表達(dá)是非顯著變化的,這與基因芯片中的基本假設(shè)相同。但是實(shí)際工作中發(fā)現(xiàn)很多情況下總讀段數(shù)主要是一小部分大量表達(dá)的基因貢獻(xiàn)的。Bullard等(2010)在比較了幾種標(biāo)準(zhǔn)化方法的基礎(chǔ)上發(fā)現(xiàn)在每個(gè)泳道內(nèi)使用非零計(jì)數(shù)分布的上四分位數(shù)(Q75%)作為標(biāo)準(zhǔn)化因子是一種更穩(wěn)健的選擇,總體表現(xiàn)是所研究方法中最優(yōu)的。
Bioconductor的edgeR包和DESeq包分別提供了上四分位數(shù)和中位數(shù)來(lái)作為標(biāo)準(zhǔn)化因子,就是出于這個(gè)思想。
edgeR提供了三種標(biāo)準(zhǔn)化算法,分別是M值加權(quán)截?cái)嗑捣ǎ╓eighted trimmed mean of M-values, TMM),相對(duì)對(duì)數(shù)表達(dá)值法(Relative log expression, RLE)和上四分位法(Upperquartile),其中TMM是默認(rèn)設(shè)定。這些標(biāo)準(zhǔn)化方法大同小異,其基本思想就是去除表達(dá)值較大的少數(shù)基因的影響,而保留大部分沒(méi)有顯著變化的基因。
由于基因芯片檢測(cè)雜交的熒光強(qiáng)度信號(hào)是連續(xù)值,往往假設(shè)它符合正態(tài)分布;而RNA-seq測(cè)量的是離散值,最簡(jiǎn)單的假設(shè)就是二項(xiàng)分布。由于RNA-seq讀段數(shù)量非常多,而且一條讀段映射到一個(gè)給定基因的概率足夠小,在實(shí)際計(jì)算中,二項(xiàng)分布常用它的極限形式泊松分布來(lái)替代。泊松分布的一個(gè)性質(zhì)是其方差等于均值,但是當(dāng)有生物學(xué)重復(fù)時(shí),RNA-seq數(shù)據(jù)會(huì)表現(xiàn)出比泊松分布期望的更高的變異性,對(duì)相當(dāng)多的基因來(lái)說(shuō)方差可能超過(guò)均值,這種現(xiàn)象叫過(guò)離散。對(duì)過(guò)離散數(shù)據(jù),基于泊松分布假設(shè)的分析容易低估不同生物學(xué)重復(fù)帶來(lái)的取樣誤差而得到過(guò)多的假陽(yáng)性的差異表達(dá)基因。為了允許額外的變異,一個(gè)自然的想法就是給均值加上一個(gè)散度參數(shù),以使方差可以大于均值。于是作為泊松分布的推廣,又引入了負(fù)二項(xiàng)分布(NB)來(lái)作為基本假設(shè),負(fù)二項(xiàng)分布是當(dāng)前基因表達(dá)的顯著性分析中最常用假設(shè)。
現(xiàn)在從百度百科摘取二項(xiàng)分布與負(fù)二項(xiàng)分布的公式,以加強(qiáng)理解。
二項(xiàng)分布,即重復(fù)n次的貝努利試驗(yàn),用表示隨機(jī)試驗(yàn)的結(jié)果。如果事件發(fā)生的概率是p,不發(fā)生的概率是1-p,那么N次獨(dú)立重復(fù)試驗(yàn)中發(fā)生k次的概率是:
期望:
方差:
而負(fù)二項(xiàng)分布的公式(概率密度)為:
它表示,已知一個(gè)事件在貝努利試驗(yàn)中每次的出現(xiàn)概率是p,在一連串貝努利試驗(yàn)中,一件事剛好在第r+k次試驗(yàn)出現(xiàn)第r次的概率。
寫(xiě)作:X ~ NB(r; p)
基于負(fù)二項(xiàng)分布的edgeR、DESeq包是當(dāng)前最主要的分析程序。在edgeR中,對(duì)于任一樣品i中的任一個(gè)基因g,假設(shè)它的分布符合負(fù)二項(xiàng)分布。
其中是樣品i中的讀段總數(shù)(實(shí)際中是可以比對(duì)上的讀段總數(shù));
就是基因g的散度;
是基因g在某個(gè)實(shí)驗(yàn)條件j下或者分組j中的相對(duì)豐度。第g個(gè)基因在某個(gè)實(shí)驗(yàn)條件j下或分組j中,NB分布的均值為
,方差為
,對(duì)于表達(dá)差異分析,需要估計(jì)的是散度
,當(dāng)它趨于0時(shí),負(fù)二項(xiàng)分布退化為泊松分布,這時(shí)方差退化為第一項(xiàng)
,一般認(rèn)為來(lái)自技術(shù)重復(fù),方差第2項(xiàng)
來(lái)自生物學(xué)重復(fù)。
RNA-seq數(shù)據(jù)分析往往只有很小的樣本量,為每個(gè)基因估計(jì)一個(gè)散度非常困難。比較好的策略是允許不同的基因有不同的個(gè)體散度,而這些個(gè)體散度的估計(jì)可以用一些合適的統(tǒng)計(jì)方法借助基因間的信息來(lái)改進(jìn)。相對(duì)于edgeR,DESeq默認(rèn)設(shè)置采取了最保守的估計(jì)策略,即選取每個(gè)基因的經(jīng)驗(yàn)散度和擬合得到的散度趨勢(shì)線取值中最大的作為最終的散度估計(jì)值,因此DESeq往往選出更少的差異表達(dá)基因(為什么呢?)。DESeq由于可以利用同一個(gè)樣本基因間的數(shù)據(jù)估計(jì)散度,而不一定需要重復(fù)樣本來(lái)計(jì)算,因此可以直接用于無(wú)重復(fù)實(shí)驗(yàn)的表達(dá)差異分析。
后面一些實(shí)例代碼不好重復(fù),不再描述。