基因表達標準化Normalisation
我們在比較不同樣品不同基因的差異表達情況時,期望表達水平分布符合統計方法的基本假設,但由于測序深度和基因長度的不同,直接使用原始count分析會導致假陽性和假陰性過高,因此對原始數據進行標準化/均一化是十分必要的。
根據樣本間和樣本內重復可以把現有的諸多標準化方法大致分為兩類,一類WSN(within-sample normalization):RPKM和quartile四分位數法;另一類BSN(between-sample normalization):TMM和upper quartile上四分位處理。
WSN(within-sample normalization)
最普遍的做法是計算CPM (Counts Per Million),即原始reads count除以總reads數乘以1,000,000。CPM按照基因或轉錄本長度歸一化后的表達即RPKM (Reads Counts Per Million)、FPKM (Fragments Per Kilobase Million)和TPM (Trans Per Million),推薦使用TPM(原理如圖)。
calc_cpm <- function (expr_mat, spikes = NULL){
norm_factor <- colSums(expr_mat[-spikes,])
return(t(t(expr_mat)/norm_factor)) * 10^6
}
使用此類計算方式時,如果不同樣品之間存在某些基因的表達值極高或者極低,由于它們對細胞中分子總數的影響較大(也就是公式中的分母較大), 有可能導致標準化之后這些基因不存在表達差異,而原本沒有差異的基因在標準化之后卻顯示出差異。BSN(between-sample normalization)
為了解決上述問題,BSM類分出control set去評估測序深度而不是用所有數據,主要分三種:
TMM (trimmed mean of M-values)
TMM是M-值的加權截尾均值,即選定一個樣品為參照,其它樣品中基因的表達相對于參照樣品中對應基因表達倍數的log2值定義為M-值。隨后去除M-值中最高和最低的30%,剩下的M值計算加權平均值,權重來自Binomial data的delta方法 (Robinson and Oshlack, 2010)。RLE (relative log expression)
RLE (relative log expression) 首先計算每個基因在所有樣品中表達的幾何平均值。然后再計算該值與每個樣品的比值的中位數,也叫被稱為量化因子scale factor (Anders and Huber 2010)。
calc_sf <- function (expr_mat, spikes=NULL){
geomeans <- exp(rowMeans(log(expr_mat[-spikes,])))
SF <- function(cnts){
median((cnts/geomeans)[(is.finite(geomeans) & geomeans >0)])
}
norm_factor <- apply(expr_mat[-spikes,],2,SF)
return(t(t(expr_mat)/norm_factor))
}
UQ (upper quartile)
上四分位數 (upper quartile, UQ)是樣品中所有基因的表達除以處于上四分位數的基因的表達值。同時為了保證表達水平的相對穩定,計算得到的上四分位數值要除以所有樣品中上四分位數值的中位數。
calc_uq <- function (expr_mat, spikes=NULL){
UQ <- function(x) {
quantile(x[x>0],0.75)
}
uq <- unlist(apply(expr_mat[-spikes,],2,UQ))
norm_factor <- uq/median(uq)
return(t(t(expr_mat)/norm_factor))
}
以上三種方法效果大同小異,通常比較流行的是TMM和DESeq normalization
edgeR中三種標準化TMM\UQ\RLE方法的比較以及不做標準化的后果
WSN和BSN兩類方法的選擇
沒有定論,這方面研究較少,也可以先用BSN處理counts再做一下WSN。“Every normalization technique that I have seen assumes you are modeling counts, so the assumptions might be violated if you are using them directly on TPM or FPKM. While this is true, I think most techniques will give reasonable results in practice. Another possibility is to apply a BSN technique to the counts, then perform your within-sample normalization. This area has not been studied well, though we are actively working on it.”
From blog In RNA-Seq, 2 != 2: Between-sample normalization (里面有很多資料文獻,可以進一步了解)
強烈推薦:
基因課視頻
轉錄組原理篇
推文
RNA-Seq分析|RPKM, FPKM, TPM, 傻傻分不清楚?
Normalisation methods implemented in edgeR
DESeq2差異基因分析和批次效應移除
RNA-seq中的基因表達量計算和表達差異分析
What the FPKM? A review of RNA-Seq expression units
P.S. 這些天看著果子哥在微信號里筆耕不輟,感覺自己要更努力。特別是他最近發布的針對RNA-seq reads count批次效應處理的內容,我有些困惑,與其等著他人解答,不如自己主動找答案。正好那篇推文的英文參考鏈接里有詳細的說明,了解到edgeR里三種均一化normalisation方法TMM,UQ和RLE的異同,而批次效應應該是要單獨考慮的,今天先講講均一化,幫助自己能更新相關的基礎概念,優化自己RNA-seq數據處理的流程,常學常新