劉小澤寫于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)