关于RNA-seq 的那点事Count 数的标准化 (一) RPKM 和FPKM,TPM及C(R)PM

2023-11-07

在这里插入图片描述

图片来自网络 

我们都知道,在RNA seq 测序的过程中,我们测完序的最终目的是想根据测序的结果,最终分析得到差异基因以及潜在可能的功能分析,那么在进行差异分析以及对表达量进行分析的时候,对基因原始的Count 进行标准化,消除由于测序过程中单个基因自身的长度以及测序深度对数据的影响,是非常关键的一步。

RNAseq 测序,对于一个基因的Count 的计数呢,主要是基于匹配到该基因的外显子上的数目,那么按照这样理解的话,基因越长,比对到该基因(外显子)上的count 数就越多;而影响Count 的另一个因素就是测序深度,也就是该基因在测序的过程中每百万碱基检测到的数目,测序深度越大,那么本次RNA seq 中的所有read count都会增加,因在差异化以及探索表达量的过程中呢,需要对基因长度测序深度进行标准化,消除这2个因素带来的影响,从而准确的确定基因在样本中是真实的差异表达。

那讲到了这里我们就需要来理解一下在RNA seq 的Count 数进行标准化的常用方法:

常用的方法,包括

1.C(R)PM究竟指什么呢?在常见的分析中,它出现在那里呢?

参考链接(链接:https://cloud.tencent.com/developer/article/1484078  (名称RNA-seq的counts值,RPM, RPKM, FPKM, TPM 的异同))

Deseq2 的分析方法 (https://www.jianshu.com/p/bdf2b72b8761  4. edgeR/limma/DESeq2差异基因分析→ggplot2作火山图→biomaRt转换ID并注释)

RPM/CPM: RPM (Reads per million mapped reads)
Calculate Formula:
RPM=Number of reads mapped to a gene *10^6/ Total number of mapped reads from given library

R(C)PM:通过10^6标准化了测序深度的影响,但是没有考虑测序长度的影响。

RPM适合用于产生的read 读数不受基因长度的影响,比如miRNA-seq测序,miRNA的长度一般在20-24个碱基之间。

 

Deseq2和edgeR 差异分析时,主要涉及CPM数据的归一化

(参考帖子 https://www.jianshu.com/p/2689e9a1d10c DESeq2详细用法)

通常情况下,Deseq2和edgeR进行差异化的分析的时候,都会对数据进行归一化处理,它们的处理方式呢,主要是基于CPM即RPM的分析,然后再通过标准化因子size factor  进行处理,得到一个近似为同方差的值矩阵(沿均值范围具有恒定的方差),这个矩阵可以用于后续的聚类以及PCA 分析以及差异分析。

关于Deseq2

dds <- DESeqDataSet( se, design = ~ cell + dex) 
dds <- DESeqDataSetFromMatrix( countData = countData, colData = colData, design = ~ Group) 

在进行这一步的分析时,其中的design=~batch+condition

设计公式通常格式为~ batch + conditions,batch和conditions都是colData的一列,是因子型变量。为了方便后续计算,最为关注的分组信息放在最后一位。如果记录了样本的批次信息,或者其它需要抹除的信息可以定义在design参数中,在下游回归分析中会根据design formula来估计batch effect的影响,并在下游分析时减去这个影响。这是处理batch effect的推荐方式。在模型中考虑batch effect并没有在数据矩阵中移除bacth effect,如果下游处理时确实有需要,可以使用limma包的removeBatchEffect来处理。

低丰度的数据过滤

dds <- dds[rowSums(counts(dds)) > 1, ] 

在独立筛选(independent filtering)中,DESeq2可以去掉在所有样品中平均表达量CPM不大于min.CPM的基因,以减少假阴性
EdgeR是保留在2个或更多样品中表达量大于min.CPM的基因
可以尝试不同的cutoff,以获得最佳效果。

数据的Normolization 的2种方法

Deseq2可以有2种转换数据的方法,其中一种是方差稳定变换,另一种则是正则化对数变换

(1)方差稳定变换,The variance stabilizing transformation

vsd <- vst(object=dds,blind=T) 

样本信息的列名names(colData(vsd))多了1列sizeFactor,colData(vsd)$sizeFactor
基因信息的列名names(rowData(vsd))多了4列
vst函数快速估计离散趋势并应用方差稳定变换。该函数从拟合的离散-均值关系中计算方差稳定变换(VST),然后变换count data(除以标准化因子),得到一个近似为同方差的值矩阵(沿均值范围具有恒定的方差)。许多常见的多维数据探索性分析方法,例如聚类或PCA,对于同方差的数据表现良好。数据集小于30个样品可以用rlog,数据集大于30个样品用vst,因为rlog速度慢。
 

(2)正则化对数变换,The regularized-logarithm transformation

rld <- rlog(object=dds,blind=F) 

 

样本信息多了1列sizeFactor,和vsd的sizeFactor相同
基因信息多了7列
rlog函数将count data转换为log2尺度,以最小化有small counts的行的样本间差异,并使library size标准化。rlog在size factors变化很大的情况下更稳健

blind,转换时是否忽视实验设计。blind=T,不考虑实验设计,用于样品质量保证(sample quality assurance,QA)。blind=F,考虑实验设计,用于downstream analysis。

为什么需要转换?

为什么要转换?为了确保所有基因有大致相同的贡献。
对于RNA-seq raw counts,方差随均值增长,如果直接用size-factor-normalized read counts:counts(dds, normalized=T) 进行主成分分析,结果通常只取决于少数几个表达最高的基因,因为它们显示了样本之间最大的绝对差异。为了避免这种情况,一个策略是采用the logarithm of the normalized count values plus a small pseudocount:log2(counts(dds2, normalized=T) +1)。但是这样,有很低counts的基因将倾向于主导结果。作为一种解决方案,DESeq2为counts数据提供了stabilize the variance across the mean的转换。其中之一是regularized-logarithm transformation or rlog2。对于counts较高的基因,rlog转换可以得到与普通log2转换相似的结果。然而,对于counts较低的基因,所有样本的值都缩小到基因的平均值。用于绘制PCA图或聚类的数据可以有多种:counts、CPM、log2(counts+1)、log2(CPM+1)、vst、rlog等。

关于edgeR中对于数据的归一化(参考帖子  https://cloud.tencent.com/developer/article/1553526  基因芯片数据分析(六):DESeq2包的基本原理)

edgeR是按照CPM来过滤数据的,通常情况下情况下,阈值设置为1,保留在2个及2个以上样本中大于1 的基因,剩余的基因就被剔除。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于RNA-seq 的那点事Count 数的标准化 (一) RPKM 和FPKM,TPM及C(R)PM 的相关文章

  • python-selenium-pytest-allure UI自动化测试

    一 下载及安装插件 python selenium pytest allure 辅助 pyautoit pymysql 二 代码框架 1 基础文件 main py if name main pytest main alluredir all
  • 台式电脑没鼠标怎么移动光标_台式电脑没有鼠标怎么操作电脑

    没鼠标只能靠键盘操作了 以下都是键盘快捷键命令F6 选择操作区域光标键 选择目标backspac 退回上一级目录enter 进入 运行 table 项目选择单独按Windows 显示或隐藏 开始 功能表Windows BREAK 显示 系统
  • gettimeofday windows上的实现

    gettimeofday是Linux上的函数 在windows的实现 这里直接转doubango工程中的tsk time c 源文件种的实现 可以参考 include tsk time h include tsk debug h if TS
  • CodeBlocks新手安装以及汉化(20,03版本)

    CodeBlocks 20 03安装以及汉化设置 CodeBlocks官网 https www codeblocks org downloads binaries CodeBlocks 20 03安装包及汉化包下载 链接 https pan
  • 利用python实现简易版的贪吃蛇游戏(面向python小白)

    本文来源于公众号 csdn2299 喜欢可以关注公众号 程序员学府 引言 作为python 小白 总是觉得自己要做好百分之二百的准备 才能开始写程序 以至于常常整天在那看各种语法教程 学了几个月还是只会print hello world 这
  • 线性回归算法

    一 监督学习完整流程 房价预测为例 给出正确答案 根据我们的数据来说房子实际的价格是多少 回归问题 根据之前的数据预测出一个准确的输出值 另一种监督学习流程 分类问题 寻找癌症肿瘤问题 当我们想要预测离散的输出值 例如寻找癌症肿瘤并想要确认
  • 新安装的IDEA 2019.2---没法启动 Start Failed

    Internal error Please report to http jb gg ide critical startup errors com intellij ide plugins MainRunner StartupAborte
  • 数学基础(一)矩阵对角化、SVD分解以及应用

    目录 一 矩阵 1 矩阵的性质 2 单位矩阵和逆矩阵 3 矩阵的对角化 二 矩阵的SVD分解 三 SVD的应用 一 矩阵 1 矩阵的性质 下面列出了矩阵的一些性质 A表示一个p m的矩阵 B C表示一个m n的矩阵 最后一条比较常用 由于x
  • Python编程基础题(18-求平均值)

    Description 本题的基本要求非常简单 给定 N 个实数 计算它们的平均值 但复杂的是有些输入数据可能是非法的 一个 合法 的输入是 1000 1000 区间内的实数 并且最多精确到小数点后 2 位 当你计算平均值的时候 不能把那些
  • TS实现排序算法之选择排序

    选择排序算法 每次从待排序序列中找出最大值或最小值 查找过程重复 n 1 次 对于每次找到的最大值或最小值 通过交换元素位置的方式将它们放置到适当的位置 最终使整个序列变成有序序列 升序排列时 每次查找待排序序列中的最小值的位置 然后交换位
  • MQTT协议详解及v5.0实践——实践类

    本文主要包含了以下内容 1 MQTT协议演进历史及协议特点 总结和分析MQTT协议族的优缺点 分析和总结了为什么相比于其他协议 MQTT适合IoT 业内支持现状等 2 阿里云IoT MQTT3和5协议在实践中的一些关键设计及思考 包括连接复
  • LMS自适应滤波算法

    LMS自适应滤波算法 一 随机过程的简介 1 广义平稳 WSS 过程需要满足的两个条件 WSS过程的自相关函数具有的性质 MATLAB中的互相关函数xcorr 二 自适应滤波器 1 简介 自适应FIR滤波器 2 性能函数 基于平均误差 MS
  • react取消捕获_React 阻止默认事件和阻止冒泡

    首先有这样一段代码 很久很久以前有这样一个故事 这要从远古时代说起 fn和fn1是一对父子 div是parent span是children fn是子 fn1是父 最近在学react 首先 fn ev alert children fn1
  • (十七)DAC转换实验

    上一节我们写了关于ADC的相关内容 这一节我们就要写有关于DAC的相关内容 DAC即是将数字信号转换为模拟信号 它的功能与ADC相反 我们这节通过输出数字信号转换为模拟信号实现led灯先逐渐变亮再逐渐变暗来实现相应的功能 关于DAC 我们知
  • 通过SSID,密码,和连接类型来连接WiFi,并保存配置

    public class MainActivity extends Activity WifiManager mWifiManager Override protected void onCreate Bundle savedInstanc
  • Android 模拟返回键、菜单键、主页键

    发送命令模拟按键操作 方法一 用Runtime模拟按键操作 param keyCode 按键事件 KeyEvent 的按键值 private void sendKeyCode1 int keyCode try String keyComma
  • python实现ip地址查询

    encoding utf8 根据ip地址查询出IP所在的地理位置 import requests def get ip info ip r requests get http ip taobao com service getIpInfo
  • websocket简单使用

    简单实现 参考 https websockets readthedoc PS 此文章只限于python版本大于3 6 前期准备 pip install websocket server端 import asyncio import webs
  • 怎么插入svg_公众号文章SVG使用教程分享

    嘿 胖友们大家好呀 我是三儿 每天 困扰在我们新时代新媒体人面前的 不是今天不知道该写啥 也不是粉丝咋又掉了 而是 今天中午吃啥 每天一到饭点 公司的外卖群里就开始了灵魂质问 今天吃啥 这个时候 就轮到貌美如花的小三儿出场了 先来看看三儿是

随机推荐

  • 小程序用户隐私保护指引设置填写指南(小程序隐私保护说明如何填写)

    小程序隐私保护指引完整填写范本 小程序隐私保护说明如何填写 小程序用户隐私保护指南填写指南仅供参考 为了区分用户 开发者在征得你明确同意后 会收集你的微信昵称和头像 为了显示距离 开发商在征得你的明确同意后 会收集你的位置信息 对于用户互动
  • MCU学习笔记_PWR电源管理系统

    MCU学习笔记 电源管理系统 1 STM32电源监控器概述 2 STM32电源 3 HAL库配置PVD实例 1 STM32电源监控器概述 原因 保持系统正常运行 实现特定条件下的低功耗模式 上电复位 POR 掉电复位 PDR 上电复位是指上
  • 面试官:说说react的渲染过程

    hello 这里是潇晨 大家在面试的过程中有没有遇到过一些和react相关的问题呢 比如面试官让你说说react渲染的过程 这到题目比较开放 也比较考验大家对react渲染原理以及源码的整体架构的理解 整体流程 react的核心可以用ui
  • STM32局部变量过大导致栈溢出

    最近项目调试中发现只要使用memset函数对一个局部数组赋值时 就会导致其他全局变量值被更改 接着就进入HardFault错误 后来发现局部变量和全局变量地址重叠 Data Write结构体为全局变量 OTA Data为局部数组 看了启动文
  • 利用类实现rand函数,以及相应的优化

    亮点 实现了一个非常高效的跳越性调用函数 见代码part 4 include
  • IDEA将jar包部署到Docker中使用TLS认证

    一 无CA认证 1 修改服务器配置 开放Docker的远程连接访问 root localhost vim usr lib systemd system docker service 将ExecStart属性value值改为 usr bin
  • vue + elementui:分页查询,el-pagination,纯前端分页

    效果 新建pages js文件 文件内容 数据分页 function pageData total pageRow currentPage allTableDataList var dealData var onePageList var
  • ChatGPT在指尖跳舞: open-interpreter实现本地数据采集、处理一条龙

    更多详情请点击查看原文ChatGPT在指尖跳舞 open interpreter实现本地数据采集 处理一条龙 Python教学专栏 旨在为初学者提供系统 全面的Python编程学习体验 通过逐步讲解Python基础语言和编程逻辑 结合实操案
  • vue集成汉字转拼音(附多音字解决方案)

    1 结果显示 输出首字母 N 输出拼音 NiHaoMa 2 js调用 import HanziToPinyin from hanziToPinyin export default class Message extends Vue moun
  • Intellij IDEA的激活(使用破解补丁永久激活)

    1 先下载个idea 给个官网下载吧 https www jetbrains com idea 这里只介绍破解补丁方式 个人觉得破解补丁方式是最一劳永逸的 破解步骤如下 2 从http idea lanyus com 这个网址下载破解补丁
  • HTTPS加密流程详解

    文章目录 HTTPS与HTTP的关系 HTTPS基本工作过程 对称密钥 非对称密钥 中间人攻击 证书 HTTPS与HTTP的关系 HTTPS协议基于HTTP 只是比HTTP多了一个加密层 为什么要加密呢 因为网络传输的过程中 明文传输的数据
  • 华为OD机试 - 找终点(Java)

    题目描述 给定一个正整数数组 设为nums 最大为100个成员 求从第一个成员开始 正好走到数组最后一个成员 所使用的最少步骤数 要求 第一步必须从第一元素开始 且1 lt 第一步的步长
  • css-赛博朋克风动画组件

    css 赛博朋克风动画组件 目录 文章目录 前言 结果展示 代码 前言 Tutorials收费课程中的一种实现 实现思路 先绘制盒子 制作动画 通过颜色位置变化来实现流转 webkit box reflect below 2px linea
  • 李宏毅机器学习课程笔记1:Regression、Error、Gradient Descent

    台湾大学李宏毅老师的机器学习课程是一份非常好的ML DL入门资料 李宏毅老师将课程录像上传到了YouTube 地址 NTUEE ML 2016 这篇文章是学习本课程第1 3课所做的笔记和自己的理解 Lecture 1 Regression
  • android开发:gradle 3.X中dependencies依赖api、compile和implementation的区别

    参考 Android Studio3 X中dependencies依赖api compile和implementation的区别 注意 文中的Android Studio3 X应该是gradle3 x
  • golang数据结构初探之动态数组slice

    动态数组slice slice 又称动态数组 依托于数组实现 可以方便的进行扩容和传递 实际使用时比数组更灵活 但正是因为灵活 实际使用时更容易出错 避免出错的最好方法便是了解其实现原理 特性速览 初始化 声明和初始化切片的方式主要有以下几
  • Jupyter Notebook常用快捷键(在命令模式中按H也可查看)

    命令模式 按键 Esc 开启 Enter 转入编辑模式 Shift Enter 运行本单元 选中下个单元 Ctrl Enter 运行本单元 Alt Enter 运行本单元 在其下插入新单元 Y 单元转入代码状态 M 单元转入markdown
  • chatgpt赋能python:Python如何读取npz文件?

    Python 如何读取 npz 文件 在 Python 中 我们可以使用多种方式读取 npz 格式的文件 npz 文件是 numpy 的压缩文件格式 可以用于存储多个数组数据 什么是 npz 文件 npz 文件是一个多个数组数据的压缩文件格
  • 推荐一款超厉害的国产Java工具类Hutool

    文章目录 Hutool 是什么 入门和安装 Maven Gradle 非Maven项目 编译安装 包含组件 日期时间工具 DateUtil 转换 Date long Calendar之间的相互转换 字符串转日期 格式化日期输出 获取Date
  • 关于RNA-seq 的那点事Count 数的标准化 (一) RPKM 和FPKM,TPM及C(R)PM

    图片来自网络 我们都知道 在RNA seq 测序的过程中 我们测完序的最终目的是想根据测序的结果 最终分析得到差异基因以及潜在可能的功能分析 那么在进行差异分析以及对表达量进行分析的时候 对基因原始的Count 进行标准化 消除由于测序过程