Featurecount to RPKM计算

参考:

基因长度之多少
Htseq Count To Fpkm

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

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

  • 挑选基因的最长转录本
  • 选取多个转录本长度的平均值
  • 非冗余外显子(EXON)长度之和
  • 非冗余 CDS(Coding DNA Sequence) 长度之和

实践

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

image.png

其他尝试

1.TPM FPKM 计算公式R

  • 群主解答
  • TPM ,RPKM计算,首先需要求得count 数,再用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
  • 计算结果


    image.png

思考:

  • 当初以为gene length 就是gtf 第三列标注为gene的那个长度,而没有考虑内含子区域,最近才明白需要计算外显子之和。
  • 目前计算gene length 已经有好多工具
  • TPM,RPKM 直接定量工具也很多,比如cufflink【rpkm】,stringtie【rpkm,TPM】.需要注意的是:
    1.hisat2 需要添加特定参数进行比对,才可以与cufflink 进行配套使用,否则会报错;
  1. stringtie 可以方便计算TPM,但是每一次计算的gene数目不一样,比如有时候20001,20005 不等,需要手动过滤一些不相关的gene
  2. 有时候cufflinkfeaturecount 计算方式不一样,导致两者分别计算rpkm结果会有偏差。

欢迎评论留言~

你可能感兴趣的:(Featurecount to RPKM计算)