簡單小需求:如何將FPKM轉(zhuǎn)換成TPM?

劉小澤寫于19.2.21

或許這還是個(gè)比較常用的需求

我們做轉(zhuǎn)錄組分析,得到的結(jié)果可能是FPKM。但是FPKM確實(shí)存在不準(zhǔn)確性,推薦使用TPM。

read count和FPKM結(jié)果都可以轉(zhuǎn)成TPM,但是因?yàn)镕PKM跟TPM的計(jì)算都考慮了基因長度,所以從FPKM轉(zhuǎn)TPM最方便快捷。

假設(shè)原來的表達(dá)矩陣fpkm_expr.txt中行為基因,列為樣本,中間數(shù)值是FPKM計(jì)算得到的值

先讀取自己的表達(dá)矩陣

expMatrix<-read.table("fpkm_expr.txt",header = T,row.names = 1)

其實(shí)早已經(jīng)有人幫我們整理好了

https://haroldpimentel.wordpress.com/2014/05/08/what-the-fpkm-a-review-rna-seq-expression-units/

countToTpm <- function(counts, effLen)
{
    rate <- log(counts) - log(effLen)
    denom <- log(sum(exp(rate)))
    exp(rate - denom + log(1e6))
}
 
countToFpkm <- function(counts, effLen)
{
    N <- sum(counts)
    exp( log(counts) + log(1e9) - log(effLen) - log(N) )
}
 
fpkmToTpm <- function(fpkm)
{
    exp(log(fpkm) - log(sum(fpkm)) + log(1e6))
}
 
countToEffCounts <- function(counts, len, effLen)
{
    counts * (len / effLen)
}

如果要計(jì)算TPM值,只需要用一下apply函數(shù)

tpms <- apply(expMatrix,2,fpkmToTpm)
tpms[1:3,]

最后可以根據(jù)TPM的特征進(jìn)行檢查,看每列加和是否一致

colSums(tpms)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容