转录本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倍之间。

转录本counts,FPKM,TPM相互转化_第1张图片

转录本counts,FPKM,TPM相互转化_第2张图片

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

转录本counts,FPKM,TPM相互转化_第3张图片

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

你可能感兴趣的:(r语言,生物信息学)