RNA-seq数据标准化
最后发布时间 : 2023-01-16 17:36:05
浏览量 :
在进行统计推断之前,原始的count数据需要对各种biases(测序深度、基因长度等)进行矫正。如果使用DESeq2
、Limma
、edgeR
的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