【原创】R语言实战:read counts如何转化为TPM和FPKM, TPM和FPKM相互转化

Python010

【原创】R语言实战:read counts如何转化为TPM和FPKM, TPM和FPKM相互转化,第1张

mycounts<-read.csv("2020武汉加油.csv")

head(mycounts)

rownames(mycounts)<-mycounts[,1]

mycounts<-mycounts[,-1]

head(mycounts)

kb <- mycounts$Length / 1000

kb

countdata <- mycounts[,1:9]

rpk <- countdata / kb

rpk

tpm <- t(t(rpk)/colSums(rpk) * 1000000)

head(tpm)

write.table(tpm,file="2020武汉加油_tpm.xls",sep="\t",quote=F)

fpkm <- t(t(rpk)/colSums(countdata) * 10^6) (之前这里写成了10^9,多谢@不爱说话的生物狗 提醒,现在已经修改)

head(fpkm)

write.table(fpkm,file="2020武汉加油_fpkm.xls",sep="\t",quote=F)

fpkm_to_tpm = t(t(fpkm)/colSums(fpkm))*10^6

head(fpkm_to_tpm)

当然,已知所有基因的FPKM情况下,可以通过上述公式直接在excel里计算相应基因的TPM值。

获取表达矩阵,处理TCGA的count数据,1表示为行。

导入数据

加 ENTREZID列,用于富集分析(symbol转entrezid,然后inner_join)

转化空格为NA

用花花的专属TCGA包,ID进行转换

把空着的值改为NA

以病人为中心,表达矩阵按病人ID去重复

去除重复

TPM数据做单个基因的生存分析file:///C:/Users/denghuan/Desktop/The%20learning%20of%20R%20software/Practice/%E7%94%9F%E5%AD%98%E5%88%86%E6%9E%90%20survival%20analysis/6.Survival.html

stringr::str_replace_all()

str_detect(colnames(exp),"TCGA-W5-AA2R")

在用 featureCounts 做完表达矩阵的counts值后进行TPM需要注意这个细节问题,在计算TPM时每个基因需要除以各自的基因长度来校正基因长度,每一个样本又要除以它各自的文库大小校正测序深度。

因此,我们的表达矩阵,其实是需要除以两个长度不一的向量,而且方向不一样,一个是按照行来除以(基因长度),一个是按照列来除以(测序深度),在我之前的文章 https://www.jianshu.com/p/cd1c7b4ec6a2 RNA-seq数据分析一:(HISAT2+featureCounts) 中有提到

count 是表达矩阵,kb是不同基因长度向量,而 colSums(count) 是不同样本的长度向量。

矩阵除以向量,是按行的顺序来的,如果需要按列的顺序来(不同样本,一列一列),就得先转置,再转回来

我们可以看到,一个矩阵除以向量是将向量按照行(第一行第一个,第二行第一个...)的顺序与矩阵中的数据相除。