RNA-Seq的Counts和FPKM数据如何转换成TPM?
我们做转录组分析,得到的数据通常是raw counts 的数据,raw counts 的数据有很多R包进行归一化。在TCGA数据库中下载的RNA-Seq的数据就有2种形式,raw counts 和FPKM,尽管有很多文章是直接利用FPKM进行分析的,但是FPKM存在不准确性,通常我们会使用TPM。关于什么是FPKM?什么是TPM?我在前面的文章中就有介绍:RNA-seq的counts,RPM, RPKM, FPK值到底有什么区别?。如果从原始的下机数据开始分析,那就根据自己需要进行转换,但通常我们大多数拿到的是raw counts数据,一般送测序,也会要求返回raw counts的数据,从数据库下载的数据我们通常也是选择raw counts数据或者FPKM的数据。那么我们如何将这些数据进行转换成TPM的数据呢?read count和FPKM结果都可以转成TPM,但是因为FPKM跟TPM的计算都考虑了基因长度,所以从FPKM转TPM最方便快捷。只需要按照下面公式就可以计算:
具体可参考前面的文章:RNA-seq的counts,RPM, RPKM, FPK值到底有什么区别?,这里提供的是R代码。
首先我们得有FPKM的数据,这里我以之前TCGA数据库的数据为例。数据可在文章【TCGA数据库33个Project的RNA-Seq转录组数据为你整理打包好了】中下载。
load("F:/TCGA/HTSeq-FPKM/Rdata/data/TCGA-COAD-Exp.Rdata")
exp <- transomeData[["proteinCodingExpData"]][["Exp"]]
之前上传的数据是字符串,需要转换成数值。
library(dplyr)
exp <- exp %>% data.matrix() %>% as.data.frame()
head(exp)[,1:2]
首先,我们定义个函数,也就是上面的公式。
FPKM2TPM <- function(fpkm){
exp(log(fpkm) - log(sum(fpkm)) + log(1e6))
}
然后我们利用apply函数进行遍历,就可以转换啦。
TPMs <- apply(exp,2,FPKM2TPM)
除了FPKM转换成TPM外,其他的数据也可以进行转换。
- Counts转TPM
Counts2TPM <- function(counts, effLen){
rate <- log(counts) - log(effLen)
denom <- log(sum(exp(rate)))
exp(rate - denom + log(1e6))
}
- Counts转FPKM
Counts2FPKM <- function(counts, effLen){
N <- sum(counts)
exp( log(counts) + log(1e9) - log(effLen) - log(N) )
}
- Counts转Effective counts
Counts2EffCounts <- function(counts, len, effLen){
counts * (len / effLen)
}
参考:https://haroldpimentel.wordpress.com/2014/05/08/what-the-fpkm-a-review-rna-seq-expression-units/
- 自己写个 Prisma
- Numpy|需要信手拈来的功能
- 数据库连接池极简教程
- 碎片化 | 第四阶段-35-Struts2-Spring结合jdbc实现查询列表-视频
- 碎片化 | 第四阶段-28-Struts2框架概述以及原理图解-视频
- nginx 负载均衡
- 机器学习算法应用中常用技巧-1
- 碎片化 | 第四阶段-29-Struts2入门示例1-视频
- nginx虚拟主机配置
- nginx rewrite
- 碎片化 | 第四阶段-30-Struts2入门示例流程梳理-视频
- 碎片化 | 第一阶段-01-基本常识-视频
- 你真的了解For循环吗?一道For循环Java面试题引发的思考
- 碎片化 | 第一阶段-02-Java的跨平台性-视频
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 解决tensorflow 释放图,删除变量问题
- php生成word并下载代码实例
- TensorFlow保存TensorBoard图像操作
- 浅谈PHP SHA1withRSA加密生成签名及验签
- PHP PDO数据库操作预处理与注意事项
- laravel 框架配置404等异常页面
- Django –Xadmin 判断登录者身份实例
- Laravel 队列使用的实现
- keras 两种训练模型方式详解fit和fit_generator(节省内存)
- Keras 中Leaky ReLU等高级激活函数的用法
- Python错误的处理方法
- python3的pip路径在哪
- MySQL 案例:init_connect 引发的 Lost connection
- PHP一个简单的无需刷新爬虫
- PHP实现函数内修改外部变量值的方法示例