count normalization的方法

count normalization的方法

這應該會是一個小系列,我會簡單介紹下現在的一些count normaliztion的方法,以及對應的代碼解釋、思考,從而最后得出我所認為比較適合的count normaliztion的方法。

這個部分我會介紹下Count nromaliztion需要考慮的因素、以及一些方法

Count normaliztion需要考慮的因素

首先我們需要明確的一點是如果你的Seq count如果沒有經過矯正的話,那么不管是組內還是組間的基因比較,都是不可取的。所以,為了讓Gene count能夠在組間或者組內進行比較,我們需要考慮一些因素,然后根據這些因素來對我們的count進行normalize,從而來讓組間或者組內的基因比較變得更加地合理。

Sequencing depth(測序深度)

image

我們在圖中可以看到,Sample A中的Gene reads counts都基本上是Sample B中的reads counts的兩倍,但這并不意味著Sample A中的Gene表達量就要比Sample B中的高,因為Sample A自身的測序深度就要比Sample B高(通俗來說,就是Sample A可能測了10G,而Sample B測了5G)

Gene length(基因長度)

image

Gene length在進行組內比較的時候,也是一個重要的因素。可能實際上Gene X跟Gene Y的分子數是差不多的,但因為 Gene X的長度更長,所以其對應的counts就越多。

RNA composition

image

RNA composition也是一個重要的因素。以上圖為例,我們可以看到Sample A的total reads counts是遠大于Sample B的,所以我們就可以考慮Sample A和B都除以其total reads counts,這樣得到的就是每個基因所占全部基因的比例了(其實就是CPM,還是比較合理的 :))。

就像你的資產是1w人民幣,而你美國朋友的資產是2k美元, 你想比較下誰更有錢,但直接比是不太恰當的。這時候就可以考慮你的資產除以中國全部的資產,你美國朋友的資產除以美國全部的資產。比如你是1%,而你美國朋友是5%,那我們就有理由相信他更有錢一點。

但這樣其實有個很大的問題就是,Sample A和Sample B的RNA composition是非常不一樣的,Sample A中的Gene DE占據了total counts中的大部分,這樣就會壓縮Gene X、Y、Z的比例,從而讓X、Y、Z無辜地 “被” 降低了表達量。因為我們算的是"the proportion of the total count for each gene",proportion總和加起來肯定是1,DE如果占據了大部分,那么對應的剩下就肯定會“少了”。

這個問題其實也引出了TPM、FPKM、CPM等根據proportion矯正的方法的一些局限性,這一點我會在后面思考的部分提到。

當然,我還見過有考慮測序文庫的reads length因素的……但我不知道為啥要考慮這個

三張圖的來源是:Introduction to DGE

其實在考慮normaliztion factor的時候,還有一個很有意思的點,即我們其實真正關心的是molecule counts但我們幾乎是無法知道Gene真正的molecule counts的。對應的,我們只能對Gene molecular進行破碎建庫,然后進行抽樣測序,用reads count來表征對應的Gene molecular counts(其實這也就是用樣本分布來代表總體分布)。在這其中,除了我們上述提到的factor之外,還會有諸多的問題,包括Gene與isoform的關系,Reads multi-mapped,library sequence complexity等等問題。

Count nromaliztion所用的方法

這里我用一張表來先來總結下

Normalization method Description Accounted factors Recommendations for use
CPM (counts per million) counts scaled by total number of reads sequencing depth gene count comparisons between replicates of the same sample group; NOT for within sample comparisons or DE analysis
TPM (transcripts per kilobase million) counts per length of transcript (kb) per million reads mapped sequencing depth and gene length gene count comparisons within a sample or between samples of the same sample group; NOT for DE analysis
RPKM/FPKM (reads/fragments per kilobase of exon per million reads/fragments mapped) similar to TPM sequencing depth and gene length gene count comparisons between genes within a sample; NOT for between sample comparisons or DE analysis
DESeq2’s median of ratios [1] counts divided by sample-specific size factors determined by median ratio of gene counts relative to geometric mean per gene sequencing depth and RNA composition gene count comparisons between samples and for DE analysis; NOT for within sample comparisons
EdgeR’s trimmed mean of M values (TMM) [2] uses a weighted trimmed mean of the log expression ratios between samples sequencing depth, RNA composition, and gene length gene count comparisons between and within samples and for DE analysis

關于TMM能根據gene length矯正,從而進行組內基因的比較,我好像還沒聽說過……不過可能是我沒怎么細看吧

表來自:Introduction to DGE

CPM

公式:
CPM_i=\frac{X_i}{N}10^6

X_i是對應基因的count值,而N則是你整個文庫count。之所以還有乘上10^6只是單純的有些比例太小了,乘上10^6才會變成個位數。然后之所以是10^6這個數字,我盲猜是因為最一開始的時候文庫最終得到的數目一般是幾M,得到的最小count是個位數。然后我們得到百分比之后,再乘上 10^6 剛好大部分基因都可以回復到原來的位數。

CPM (counts per million,有時候也叫RPM, Reads per million mapped reads) 其實就是單純根據測序深度來進行矯正,但我個人覺得“根據測序深度矯正“解釋不好。我更偏愛的解釋是CPM展示的是這個基因在這個樣本測序文庫中的比例,也只有這個解釋,才可以幫助我們更好地理解后面的TPM、FPKM。

CPM 這里還有一個問題就是,你如何定義N這個值。在普通的RNA-Seq中,我們可以認為 N 是你基因count數目的總和,亦或是mapped reads,(雖然這也是值得商榷的,因為如果你的基因組組裝的稀爛,或者注釋稀爛的話,那么不管是基因count數目的總和,或者mapped reads的總和,都不能充分定量你文庫中的分子數目)。

在 ChIP-Seq 或者 ATAC-Seq 中,這個N更是一個很難定義的問題,你是數你Peak所含的count呢,還是數整個bam文件里面的count呢。

TPM

公式:
TPM_i=\frac{\frac{X_i}{l_i}}{\sum_j\frac{X_j}{l_j}}10^6

X_i 是對應基因的count值,而l_i則是基因的長度。\sum_j\frac{X_j}{l_j} 這個則是 每個基因count除對應基因長度 的值的總和。

我上面在CPM中說過,我們可以通過 基因在這個樣本測序文庫中的比例 來對不同文庫的測序深度進行矯正,但有一個問題是 如果基因A是30k,count是100,而基因B是300bp,count是50,我們能說基因A比基因B表達量高么,那肯定是不能的。因為基因A的長度是基因B的100倍,理論上來說count應該也是100倍。但現在 基因A的count 只是 基因B 的2倍而已。所以我們在考慮 基因在這個樣本測序文庫中的比例 也應該考慮基因長度這個問題。

用我之前那個中國和美國人資產比較例子的話,就是 我們家有100個人,年薪 20w RMB,而美國小伙伴家里是2個人,年薪2k美元。我如果想要比較 我們家 和 美國小伙伴家 的賺錢能力的話,應該是 用我們家的人均年薪 除以 中國每個家庭的人均年薪的總和,比上 對應美國小伙伴的。

但這里有一個問題就是我們怎么界定基因長度,是整個基因的長度,還是外顯子的長度,還是各種isoform長度的累加。其實這也是不同 數count軟件 在算法上的區別。

hhhh,對應到家庭那個例子的話,就是 我們家有些人是不賺錢的(有些isoform是不表達的)……

FPKM

公式:
FPKM_i=\frac{\frac{X_i}{l_i}}{N}10^9

X_i 是對應基因的count值,而l_i則是基因的長度。N則是整個文庫的count值。

這里之所以要乘 10^9 是因為 \frac{\frac{X_i}{l_i}}{N} 這個值太小了而已……之所以是 10^9 這個數字,我盲猜只是因為大部分基因的長度是 kb 級別的。

可以看到,FPKM和TPM其實是差不多的,唯一的區別就是一個除的是N,另一個除的是 \sum_j\frac{X_j}{l_j} 。所以轉換也比較方便
TPM_i=(\frac{FPKM_i}{\sum_jFPKMj})10^6

基因在這個樣本測序文庫中的比例 這個角度來看,自然是TPM更加的合理一點,因為TPM才真正做到從百分比的角度來進行矯正。

但其實還有一個問題,即如果兩個樣本的RNA composition很不一樣的話,TPM 真的是一個合理的樣本間比較方法么?

參考:

DESeq2 normalized count

這個是DESeq2自己的count矯正方法,主要是為了矯正不同文庫的深度以及RNA組成,從而使得大部分基因在樣本之間保持不變,本質上就是為每個樣本計算一個size Factor,從而得到normalize count,進行后續的差異分析。就像下圖一樣,如果我們只是根據樣本文庫深度進行矯正的話(藍線),那么所有基因都會有差異,如果我們根據 “大部分基因保持不變” 的原則來進行矯正(紅線),那么就只會是 點C 有差異了。

image

盡管常見的normalized方法是每個樣本得到一個size factor,但其實你也可以對每個樣本里的每個基因都指定一個size factor

大部分基因在樣本之間保持不變這個假設前提在大部分實驗中都是成立的,但有時候也會有例外。比如說在正常組織和腫瘤樣本中,腫瘤樣本的基因就會有極大的改變,從而使得不符合這個假設前提。其實哪怕你是不同組織之間比較,也是不符合這個假設的,因為每個組織是各司其職,都有其主要表達的基因簇,你拿心臟和腦組織的RNA做差異分析,結果肯定是有很多很多的差異基因的。還有就是你拿DESeq2去做ChIP-Seq的差異分析的時候,可能你的對照組是野生型,而你的處理組是組蛋白酶缺失的突變體,那么其實組蛋白水平是整體降低的,這也不符合大部分保持不變的原則。

但話說回來,怎么樣才算 大部分呢?超過50%就算大部分么?回答就是我也不知道╮(╯_╰)╭

其實DESeq2對于這種情況應該還是比較robust的……不然也不會廣泛使用了,尤其是在各種癌癥組織中。

圖來自:

8 High-Throughput Count Data

edgeR的TMM

TMM應該是也是基于大部分基因保持不變的原則,但TMM應該是更加的復雜,有更多的參數,我也更加地不懂……

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容