转录组实战三代测序技术

Featurecount to RPKM计算

2020-08-24  本文已影响0人  caokai001

参考:

基因长度之多少
Htseq Count To Fpkm

由公式可知,知道了featurecount count 矩阵,同时有基因长度信息,可以计算RPKM.
FPKM= read counts / (mapped reads (Millions) * exon length(KB))
目前最关键是如何计算基因长度,以及如何衡量基因长度。

我们就能理解目前主流定义基因长度的几种方式。

实践

下面列举的是 非冗余外显子(EXON)长度之和 计算方法

image.png

其他尝试

1.TPM FPKM 计算公式R

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)
}

2. python 可能代码

import numpy as np
import pandas as pd
A=pd.DataFrame({"gene_length":[2,4,1,10],
              "sample1":[10,20,5,0],
              "sample2":[12,25,8,0],
              "sample3":[30,60,15,1]})
A.index=np.array(["A","B","C","D"])


#apply 列作为变量
def count_fpkm(A):
    B=A[["sample1","sample2","sample3"]].apply(lambda x:x/sum(x))
    C=B.div(A["gene_length"].values,axis=0).applymap(lambda x:"{:.2f}".format(x))
    return C


def count_TPM(A):
    B=A[["sample1","sample2","sample3"]].div(A["gene_length"].values,axis=0)
    C=B.apply(lambda x:x/sum(x))
    return C

3.gtftools 工具计算基因长度

http://genomespot.blogspot.com/2019/01/using-gtf-tools-to-get-gene-lengths.html
gtftools工具使用

wget http://www.genemine.org/codes/GTFtools_0.6.9.zip

思考:

  1. stringtie 可以方便计算TPM,但是每一次计算的gene数目不一样,比如有时候20001,20005 不等,需要手动过滤一些不相关的gene
  2. 有时候cufflinkfeaturecount 计算方式不一样,导致两者分别计算rpkm结果会有偏差。

😊欢迎评论留言~

上一篇下一篇

猜你喜欢

热点阅读