1. counts 转 FPKM
计算FPKM的三要素:原始counts矩阵,样本总reads数,基因长度。
# expr: counts 表达矩阵, 行:转录本,列:样本
# transcript_len$length 转录本长度
expr1 = expr/transcript_len$length
fpkm = t(t(expr1)/colSums(expr)) * 10^9
————————————————
2. counts 转 TPM
# expr: counts 表达矩阵
# transcript_len$length 转录本长度
expr1 = expr/transcript_len$length
fpkm = t(t(expr1)/colSums(expr)) * 10^9
tpm <- t(t(fpkm)/colSums(fpkm))*10^6
## 函数法
Counts2TPM <- function(counts, effLen){
rate <- log(counts) - log(effLen)
denom <- log(sum(exp(rate)))
exp(rate - denom + log(1e6))}
tpm <- Counts2TPM(expr,transcript_len$length)
3. FPKM转TPM
tpm = t(t(fpkm)/colSums(fpkm))*10^6
## 函数法
# FPKM数据转为TPM数据
FPKM2TPM <- function(fpkm){
exp(log(fpkm) - log(sum(fpkm)) + log(1e6))}
tpm <- apply(fpkm,2,FPKM2TPM)
limma,edgeR, DESeq2进行差异表达分析,要用原始counts矩阵。
FPKM可以用limma去运行,不过数值比较大的话要先进行log2转化。
————————————————
联系客服