转录本counts,FPKM,TPM相互转化

FPKM: Fragments Per Kilobase of exon model per Million mapped fragments(每千个碱基的转录每百万映射读取的fragments)

FPKM:Fragments per Kilobase Million,FPKM意义与RPKM极为相近。二者区别仅在于,Fragment 与 Read。RPKM的诞生是针对早期的SE测序,FPKM则是在PE测序上对RPKM的校正。只要明确​Reads 和 Fragments的区别,RPKM和FPKM的概念便易于区分。Reads即是指下机后fastq数据中的每一条Reads,Fragments则是指每一段用于测序的核酸片段,在SE中,一个Fragments只测一条Reads,所以,Reads数与Fragments数目相等;在PE中,一个Fragments测两端,会得到2条Reads,但由于后期质量或比对的过滤,有可能一个Fragments的2条Reads最后只有一条进入最后的表达量分析。总之,对某一对Reads而言,这2条Reads只能算一个Fragments,所以,Fragment的最终数目是Reads的1到2倍之间。

TPM:Transcripts Per Kilobase of exon model per Million mapped reads (每千个碱基的转录每百万映射读取的Transcripts)

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转化。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值