RPKM、FPKM 和 TPM cpm

news2025/2/2 11:08:19

落在一个基因区域内的read counts数目取决于基因长度和测序深度。一个基因越长,测序深度越高,落在其内部的reads数目就会相对越多。而为了比较不同样本中不同基因的表达量,就去除测序深度和基因长度的的影响。采用了两个标准化:reads数标准化和长度标准化

一,计算并不复杂,记住测序深度和基因长度就OK

RPKM、FPKM 和 TPM这三个指标试图标准化测序深度和基因长度。以下是您如何为 RPKM 执行此操作:

  1. 计算样本中的总读数并将该数字除以 1,000,000——这是我们的“每百万”比例因子。
  2. 将读取计数除以“每百万”比例因子。这使测序深度标准化,为您提供每百万读数 (RPM)
  3. 将 RPM 值除以基因的长度,以千碱基为单位。这为您提供 RPKM。

FPKM 与 RPKM 非常相似。RPKM 是为单端 RNA-seq 制作的,其中每个读数对应一个已测序的片段。FPKM 是为配对末端 RNA-seq 制作的。使用配对末端 RNA-seq,两个读数可以对应一个片段,或者,如果对中的一个读数没有映射,一个读数可以对应一个片段。RPKM 和 FPKM 之间的唯一区别是 FPKM 考虑到两个读取可以映射到一个片段(因此它不会将该片段计算两次)。

TPM 与 RPKM 和 FPKM 非常相似。唯一的区别是操作顺序。以下是计算 TPM 的方法:

  1. 将读取计数除以每个基因的长度(以千碱基为单位)。这为您提供了每千碱基 (RPK) 的读数。
  2. 计算一个样本中的所有 RPK 值并将这个数字除以 1,000,000。这是您的“每百万”比例因子。
  3. 将 RPK 值除以“每百万”比例因子。这为您提供了 TPM。

测序的度量单位

在RNA-Seq中,我们通常使用RPKM(全称为Reads Per Kilobase Million)或FPKM(Fragments Per Kilobase Million)来进行均一化,这些均一化的数据(normalized data)主要解决两个问题:

  1. 测序深度(这个是指Million这一部分,侧重于数量),我们知道,测序深度越高,那么比对到基因上的reads数就越多;
  2. 基因的长度(这个指的是Kilobase这一部分,侧生于长度),我们知道,一个基因越长,那么比对到这个基因上的reads数就越多。

不过现在我们还使用TPM(全称为Transcripts per million)来作为均一化后的基因的表达单位,如下所示:

image

为了能够更好的区分这三个单位,即RPKM,FPKM和TPM,我们就通过一个简单的案例来说明一下,在这个案例中,我们一共有3个重复,分别为Rep1,Rep2和Rep3,检测了4个基因,分别为A,B,C,D,如下所示:

image

从上面的图表可以发现,Rep3的reads数比其它的2个更多,如下所示:

image

我们再看一下基因B,它的长度(4kb)是基因A(2kb)的2倍,这个或许就可以说明为什么基因B的reads数是基因A的reads数的2倍了,如下所示:

image

RPKM

RPKM的全称为Reads Per Kilobase Million,中文翻译就是每千个碱基的转录每百万映射读取的reads数

现在我们使用RPKM来均一化这些数据,如下所示

image

均一化的步骤如下所示

第一步:均一化read深度。

我们计算一下某个重复的总reads数,然后用它们除以10,这里我们只是简单地模拟一下,真正的应该是除以1000000,因为RPKM的M指的就是million,是百万,但如果要除以1百万的话,小数点太多,不太直观,如下所示:

image

现在就得到了总reads数除以10的结果,分别为3.5,4.5,10.6,此时,再用每个基因对应的reads数除以相应的前面结果,例如对于Rep1中的基因A来说,就是使用10除以3.5,也就是2.86,得到的这个单位我们称之为RPM,也就是reads per million,如下所示:

image

第二步:均一化基因长度。

在这一步骤中,我们需要对基因的长度进行均一化,如下所示:

image

此时,用RPM的数值除以每个基因的长度,例如,对于Rep1的基因A来说,就是2.86,基因A的长度是2kb,那么这个数值就是2.86除以2等于1.43,这就是RPKM,如下所示:

image

现在我们看一下RPKM的效果,在均一化之前的数据与均一化之后的数据,我们可以发现,经过均一化后的数据,每个重复里的每个基因的RPKM就非常接近了,如下所示:

image

FPKM

FPKM的全称为Fragments Per Kilobase Million,对应的中文就是每千个碱基的转录每百万映射读取的fragments。FPKM与RPKM的计算非常接近,其中区别就在于一个是FPKM的Fragemnts,而RPKM则是reads。

另外,RPKM通常用于单端测序,FPKM常用于双端测序,如下所示:

image

在RNA-Seq中,我们建库时会把DNA打断成小片段(fragment),两端加上接头,然后测序。

如果是单端测序,那么一个fragmetns就对应了一条read,如下所示:

image

如果是双端测序,那么一条fragments就对应两条reads,当然,有时候双端测序也有可能出现一条fragment对应一条read(另外一条read有可能会因为质量低而被剔除),FPKM就保证了,一条fragment的两条reads不会被统计2次,如下所示:

image

也就是说FPKM是以fragment为准,而不是以reads数为准,它们的计算方式是一样的。

TPM

TPM的全称为Transcripts per million,中文就是每百万条reads的转录本。我们现在还以原来的案例,看一下TPM是如何计算的。

第一步:均一化基因长度。

每个重复中的每个基因的reads数除以该基因的长度,对于Rep1的基因A来说,就是10除以2,也就是5,也叫RPK,如下所示:

image

第二步:均一化测序深度。

先计算出一个重复中总的RPK之和,然后除以10,对于Rep1来说,总的RPK是15,除以10就是1.5,如下所示:

image

然后再用每个基因的RPK除以上面计算出来的数值,对于Rep1的基因A来说,就是5除以1.5,即3.33,如下所示:

image

经过TPM这样的均一化后,我们可以发现,这3个重复的数值就比较接近了。

TPM和RPKM的区别

我们比较一下RPKM与TPM均一化扣的结果,如下所示:

image

TPM和RPKM(FPKM)都是基于基因的长度与测序深度进行均一化的,但是它们也有所不同。我们看一下,对于每个重复来说,它们的总TPM和RPKM的数据数据之间的是存在一定差异的,如下所示:

image

对于RPKM来说,每个重复的总RPKM值不一样,分别是4.29,4.5和4.25。

对于TPM来说,每个重复的总TPM是相同的,都是10(也就是说总的TPM)。

我们再来看一下这两种的差异有何重要意义。

我们先看下面的3个饼图,每个饼图的有大小相同,数值都是10。从中我们可以发现,对于同样的饼图来说,一份3.33的扇形(它代表了Rep1中的基因A)肯定比一份3.32的扇形(它代表了Rep2中的基因A)要大。而TPM就能发现这种3.33和3.32的这种差异,我们可以看到,在Rep1的总reads数中,比对到基因A上的reads数的比例肯定比Rep3中相应的比例要高,如下所示:

image

为什么会出现这种差异,我们可以再看上图,我们可以发现,在Rep3中,比对到基因D上的reads数所占的比例要大于Rep1中,比对到基因D的reads数的比例。通过TPM我们更容易发现,在每个重复中,比对到哪些基因上的reads更高或更低。

而对于RPKM这种均一化来说,很难比较比对到哪个基因上的总reads高,因为每个重复的总reads数都不同,也就是说这个饼图形的大小都不一样,如下所示:

image

还看上图,对于Rep1中的基因A来说,它的RPKM是1.43,而在Rep3中,基因A的RPKM是1.42,那么我们不能直接说在Rep1中,比对到基因A上的总Reads数大于Rep3中基因A的总Reads数,也就是无法直接说在Rep1中基因A的转录水平高于Rep3中基因A的转录水平,因为Rep1和Rep3的总RPKM不同。

而对于TPM就不一样,每个重复的总TPM是一样的,这样很容易比较相同基因在不同的重复中的转录水平高低。由于RNA-Seq主要是研究基因的转录水平,也就是说研究基因的转录本的reads的相对比例,因此使用TPM更加合理,如下所示:

image

CPM

有的时候还需要做到CPM,CPM的计算流程为:①总reads数除以100万;②用每个样本中的每个基因对应的reads数再除以①中的数字,就是CPM。

总reads数除以100万主要是为了方便计算CPM,否则CPM的数值会非常小,不方便,如下所示:

image

用途:在某些情况下,只想了解每个基因被覆盖到的相对reads数,而不希望对其做长度校正,就会使用这个指标。在某些RNA-seq文章或一些软件输出结果中(如edgeR)会出现。CPM只对read count相对总reads数做了数量的均一化。当如果想进行表达量的基因间比较,则就需要考虑基因长度的不同。如果进一步做长度的均一化,就是RPKM。

参考

StatQuest学习笔记24——RPKM FPKM TPM - 简书 (jianshu.com)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1337964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023 NCTF writeup

CRYPTO Sign 直接给了fx,gx,等于私钥给了,直接套代码,具体可以参考: https://0xffff.one/d/1424 fx [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…

后端业务架构文档模板

文章目录 1 业务理解1.1 项目目标1.2 业务术语1.3 系统边界1.4 关键领域模型 2 系统架构图2.1 分层架构图2.2 系统链路图2.3 系统部署图 3 关键流程3.1 关键流程13.1.2 流程简述3.1.2 业务流程图3.1.3 安全性3.1.3.1 资金安全3.1.3.2 内容安全 3.1.4 稳定性3.1.4.1 接口依赖3.1…

Zookeeper的使用场景

统一命名服务 利用ZooKeeper节点的树形分层结构和子节点的顺序维护能力,来为分布式系统中的资源命名。 例:分布式节点命名 分布式消息队列 1.在Zookeeper中创建一个持久节点,用作队列的根节点。队列元素的节点放在这个根节点下。 2.入队:…

【Linux学习笔记】Linux下nginx环境搭建

1、下载nginx 安装rpm命令: rpm ivh nginx-release.rpm。(直接使用linux命令下载wget http://nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm 2、设置nginx开机启动 chkconfig nginx on 3、开启nginx服务 方法一:service nginx…

centos7 安装最新版jenkins; 安装jdk17 jenkins; 2024安装最新版jenkins; jenkins部署服务器启动失败

注意: java, maven配置,不再赘述,主要解决:配置端口,启动失败,问题 提供一个jdk下载网站: https://www.injdk.cn/ /etc/profile配置: MAVEN_HOME/home/maven export PATH$MAVEN_HO…

SEO网站分类完整指南

你知道吗,适当的网站分类结构对于良好的SEO很重要?在我们的最新指南中了解如何使用网站分类。 对于那些已经在SEO领域工作了一段时间的人来说,你可能听说过网站分类法,因为它指的是网站。 当您提到网站的结构以及用户浏览的难易…

k8s面试之——简述网络模型

kubernetes网络模型是kubernetes集群中管理容器网络通信的一种机制,用于实现pod间、pod与外部网络间的通信和互联,并提供了多种网络插件和配置选项来满足不同应用场景下的需求。kubernetes网络模型可以分为一下几个部分: 1. pod网络模型 在…

IntelliJ IDEA配置:过滤Project显示的文件类型

在IntelliJ IDEA-Settings-Editor-File Types界面设置,可设置识别的文件类型及忽略的文件类型,被识别的文件类型会展示在Project浏览窗口,忽略的文件类型不会展示在Project浏览窗口。

使用python netmiko模块批量配置Cisco、华为、H3C路由器交换机(支持 telnet 和 ssh 方式)

0. 当前环境 外网电脑Python版本:3.8.5(安装后不要删除安装包,以后卸载的时候用这个)外网电脑安装netmiko第三方库:cmd中输入pip install netmiko内网电脑环境:无法搭建python环境,需外网电脑完…

【kafka消息里会有乱序消费的情况吗?如果有,是怎么解决的?】

文章目录 什么是消息乱序消费了?顺序生产,顺序存储,顺序消费如何解决乱序数据库乐观锁是怎么解决这个乱序问题吗 保证消息顺序消费两种方案固定分区方案乐观锁实现方案 前几天刷着视频看见评论区有大佬问了这个问题:你们的kafka消…

Bug:Too many open files【ulimit限制】

Bug:Too many open files 今天在开发某个下载功能时,发现文件总是下载到250多个程序就挂掉,同时会打崩服务器,查看错误日志发现报:too many open files. 思路:根据错误信息可以知道打开的文件数过多&#x…

【滑动窗口】【map】LeetCode:76最小覆盖子串

作者推荐 【二叉树】【单调双向队列】LeetCode239:滑动窗口最大值 本文涉及知识点 滑动窗口 题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。 注意: 对…

【工具】windeployqt 在windows + vscode环境下打包

目录 0.背景简介 1.windeployqt简介 2.打包具体过程 1)用vscode编译,生成Release文件夹(也有Debug文件夹,但是发布版本一般都是用Release) 2)此时可以看下Release文件夹内,一般是.exe可执行…

PYTHON基础:最小二乘法

最小二乘法的拟合 最小二乘法是一种常用的统计学方法,用于通过在数据点中找到一条直线或曲线,使得这条直线或曲线与所有数据点的距离平方和最小化。在线性回归中,最小二乘法被广泛应用于拟合一条直线与数据点之间的关系。 对于线性回归&…

OSPF多区域配置-新版(12)

目录 整体拓扑 操作步骤 1.基本配置 1.1 配置R1的IP 1.2 配置R2的IP 1.3 配置R3的IP 1.4 配置R4的IP 1.5 配置R5的IP 1.6 配置R6的IP 1.7 配置PC-1的IP地址 1.8 配置PC-2的IP地址 1.9 配置PC-3的IP地址 1.10 配置PC-4的IP地址 1.11 检测R5与PC1连通性 1.12 检测…

C# WPF上位机开发(扩展上位机之外的技能)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 如果把c# wpf只是看成是一个做界面的框架,那确实有点狭隘了。单独的上位机软件,如果不需要上下游的支持,没有与…

vue3+ts 可视化大屏无限滚动table效果实现

注意:vue3版本需使用 vue3-seamless-scroll npm npm install vue3-seamless-scroll --save页面引入 TS import { Vue3SeamlessScroll } from "vue3-seamless-scroll";代码使用(相关参数可参考:https://www.npmjs.com/package/vu…

Unity与Android交互通信系列(3)

在上两篇文章中,我们已经能够通过直接使用Java,或者通过AndroidJavaClass、AndroidJavaObject这两个类实现在Unity端和Android原生端的通信。这已经可以解决很多问题,但这种方式不够模块化,不够优雅。 在实际使用中,将…

【宇宙猜想】AR文创入驻今日美术馆、北京天文馆等众多展馆,在AR互动中感受科技魅力!

近日,由「宇宙猜想」推出的AR系列文创产品先后入驻今日美术馆、北京天文馆、国家自然博物馆、上海天文馆、国家海洋馆、中华手工展馆等各大馆场并与其展开相关合作。 「宇宙猜想」致力于创造虚拟空间价值,用AR技术与文创产品碰撞出新的火花,为…

Qt Designer 常见需求

窗口 参考链接 【转载】Qt Designer 使用全攻略_qtdesigner使用-CSDN博客 QT屏幕自适应自动布局,拖动窗口自动变大变小(一)_qt布局随窗口大小变化-CSDN博客 pyqt5设置高分辨率以及icon显示模糊解决办法_python qt图显示不清晰-CSDN博客 窗…