展开

RNA-seq数据标准化

最后发布时间 : 2023-01-16 17:36:05 浏览量 :

在进行统计推断之前,原始的count数据需要对各种biases(测序深度、基因长度等)进行矫正。如果使用DESeq2LimmaedgeR的R包进行差异表达分析,则必须使用原始count数据,因为这些包在内部进行矫正和转换。

CPM/TPM

对于除DEG之外的分析,数据必须在使用之前被矫正。最基础的矫正是测序深度,使用每个基因的reads数目占比乘以100万。

CPM数据有一个缺点,不适用于样本内的比较。在这种矫正中,没有考虑到基因的长度。FPKM的标准化矫正了基因长度,但是他们不能用于样本之间的比较。一个更好的选择是TPM。TPM的计算方法如下:

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


countToTpm <- function(counts, effLen)
{
    rate <- log(counts) - log(effLen)
    denom <- log(sum(exp(rate)))
    exp(rate - denom + log(1e6))
}

countToEffCounts <- function(counts, len, effLen)
{
    counts * (len / effLen)
}
fpkm <- apply(count,2,function(x){
    countToFpkm(x, feature$length)
}) |>as.data.frame()
tpm <- apply(fpkm,2,fpkmToTpm)

参考
https://nbisweden.github.io/workshop-RNAseq/1906/lab_dge.html#2_normalisation
https://www.jianshu.com/p/9dfb65e405e8