參考:
/p/a9d5065f82a6
/p/a3b78bd49bcc
R 包edgeR中 calcNormFactors() 函數默認使用的方法為 "TMM",使用於沒有經過其他處理的原始 RNA-seq counts 數據。
參考原作者的文章 A scaling normalization method for differential expression analysis of RNA-seq data. Mark D Robinson and Alicia Oshlack
根據經驗,作者提出了壹個假設——個體之間大部分的基因表達水平是沒有太大變化的,變化的只是少數。壹般標準化(包括TPM),都會除以 library 大小,即除以所有基因reads總和,來消除不同批次間測序深度造成的影響。例如下面的,sample A /4,sample B /8,所有基因表達量都壹樣,是沒有差異的。
但是如果像下面這樣,簡簡單單除以 library 大小是不行的。因為此時 library 大小不同不僅僅受到可能的測序批次的影響,而且受到 差異基因gene4 表達量的影響。sample A /4,sample B /14,妳會發現所有的基因都有差異,這是不合理的。
所以,根據最開始提出的假設,大多數基因是不發生變化的,對 library 大小進行矯正。默認情況下,TMM會修剪Mg值中最高和最低的30%,剩余的基因計算factors。
如果只是edgeR 來計算差異基因,很簡單。函數返回每個樣本library 大小和 factors,不需要其他額外操作可以進行下壹步。
如果我們想自己做些額外的事情,比如我想做生存分析,根據某個基因表達量將群體分為高表達組和低表達組此時可向下面那樣做進行簡單標準化。
或者
上面兩種方法是等價的。
相比於TPM,此方法沒有考慮轉錄本本身長度的影響,所以樣本內不同轉錄本豐度我們是無法比較的(即同壹個樣本內測序為相同reads數的兩個轉錄本,並不表示豐度壹樣,因為他們本身的基因長度不壹樣。理論上,基因長的,能檢測到的可能性越大,如果reads數相當,表明它表達量少。)。但做差異分析的時候,我們比較的是樣本之間的關系,所以這也是為什麽edgeR等R包要求輸入的是最原始的counts數據而不是TPM吧。(FPKM/RPKM等就不討論了,已經被很多人認為是錯誤的。)