在进行统计推断之前,原始的count数据需要对各种biases(测序深度、基因长度等)进行矫正。如果使用DESeq2、Limma、edgeR的R包进行差异表达分析,则必须使用原始count数据,因为这些包在内部进行矫正和转换。
DESeq2
Limma
edgeR
对于除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_normalisationhttps://www.jianshu.com/p/9dfb65e405e8