欢迎关注”生信修炼手册”!

我们都知道raw count的定量方式,是无法直接在样本间进行比较的。所以差异分析时,都会对原始的表达量数据进行归一化。

在之前的文章中,我们介绍了DESeq2提供的归一化算法,本章介绍下edgeR的TMM归一化算法。

造成raw count无法直接比较的因素有很多,最常见的有以下两个因素
1.测序量
2.RNA的组成

测序量对count的影响很好理解,测序的数据量越大,对应的reads也就越多。RNA的组成是如何影响表达量的呢?

由于RNA的组织特异性,时间特异性等因素,我们无法保证两个样本中表达的RNA的种类和数量完全相同。假设两个样本A和B, B中的RNA的种类是A的两倍,共有的RNA表达量相同,在相同测序量的情况下,共有的RNA在A中的表达量会是B中的两倍,由此可见,不同样本RNA的构成也会对检测到的RNA表达量造成影响。

归一化时,通常的做法是只考虑样本间相同的RNA, 在此基础上,再消除测序量的影响。

DESeq2的归一化算法只考虑在所有样本中表达量都大于零的基因,也是出于相同RNA构成的考虑。edgeR采取了参照样本的策略,首先从所有样本中挑选一个样本作为参照,在对其他样本进行归一化时,只考虑哪些在参照样本和待归一化的样本间共有的RNA。

选取参照样本的代码如下

y   <- t(t(data)/lib.size)
f75 <- apply(y,2,function(x) quantile(x,p=p0.75))
refColumn <- which.min(abs(f75-mean(f75)))

根据相对丰度,计算每个样本的第三四分位数,采用该值代表每个样本的表达
水平,选取与所有样本第三四分位数均值相差最小的样本作为参照样本。

参照样本选好之后,采用循环对每个样本进行归一化。在归一化时,重点关注基因的选取。代码如下

obs <- as.numeric(obs)
ref <- as.numeric(ref)
nO <- sum(obs)
nR <- sum(ref)
logR <- log2((obs/nO)/(ref/nR))
absE <- (log2(obs/nO) + log2(ref/nR))/2
v <- (nO-obs)/nO/obs + (nR-ref)/nR/ref
fin <- is.finite(logR) & is.finite(absE) & (absE > -1e10)
logR <- logR[fin]
absE <- absE[fin]
v <- v[fin]

ref代表参照样本的表达量,obs代表待归一化样本的表达量。通过构建的3个统计量对基因进行初步过滤,logR 其实就是样本间的log2FD值,absE是表达量的均值,通过fin指定的过滤措施,过滤掉在任意样本中表达量为的基因,通过absE过滤掉一部分表达量很低的基因。

在此基础上,分别从头尾再去除部分基因,代码如下

n <- length(logR)
loL <- floor(n * 0.3) + 1
hiL <- n + 1 - loL
loS <- floor(n * 0.05) + 1
hiS <- n + 1 - loS
keep <- (rank(logR)>=loL & rank(logR)<=hiL) & (rank(absE)>=loS & rank(absE)<=hiS)

这样做的目的是保留在样本间表达量没有差异的基因。最后在利用下列公式计算每个样本的sizefactor

f <- sum(logR[keep]/v[keep], na.rm=TRUE) / sum(1/v[keep], na.rm=TRUE)
2^f

相比DESeq2的归一化算法,TMM算法基于表达量没有差异的基因来进行归一化。

·end·

—如果喜欢,快分享给你的朋友们吧—

扫描关注微信号,更多精彩内容等着你!

edgeR提供的TMM归一化算法详解相关推荐

  1. 深度学习归一化算法详解(BN,LN,IN,GN)

    目录 一.Batch Normalization(BN) 1.1为什么提出BN? 1.2BN的基本原理和公式 1.3BN在神经网络中的实现 1.4BN的优点和缺点 二.LN,IN,GN的原理和适用范围 ...

  2. DESeq2归一化算法详解

    欢迎关注"生信修炼手册"! 对于RNA_Seq而言,得到基因/转录本的定量结果仅仅是第一步, 只是对测序数据的汇总, 相同的工作也可以通过芯片直接得到. 无论是芯片也好,测序也罢, ...

  3. AdBoost算法详解

    AdBoost算法详解 1 算法简介 1.2AdaBoost特点 1.3Bagging与AdaBoost区别 2AdaBoost算法步骤 3 AdaBoost的数学定义 4 推广到多分类 算法引入: ...

  4. kmeans聚类算法matlab_KMeans聚类算法详解

    "如果把人工智能比作一块大蛋糕,监督学习只是上面的一层奶油". 日常生活中,从人脸识别.语音识别到搜索引擎,我们看到越来越多人工智能领域的算法逐渐走向落地.尽管全球每日新增数据量以 ...

  5. SIFT特征点提取及描述论文算法详解

    SIFT特征点提取及描述论文算法详解 1. 尺度空间极值检测(Scale-space extrema detection) 1.1 尺度空间和极值 1.2 DoG和LoG的关系 1.3 构建高斯尺度差 ...

  6. 推荐系统简介+算法详解+项目介绍

    目录标题 推荐系统简介 1.推荐系统目的 2.推荐系统的应用 3.推荐系统的基本思想 4.推荐系统的数据分析 5.推荐系统的分类 6.推荐算法简介 6.1 基于人口统计学的推荐算法(基于用户数据) 6 ...

  7. C++中的STL算法详解

    1.STL算法详解 STL提供能在各种容器中通用的算法(大约有70种),如插入.删除.查找.排序等.算法就是函数模板,算法通过迭代器来操纵容器中的元素.许多算法操作的是容器上的一个区间(也可以是整个容 ...

  8. 目标检测 RCNN算法详解

    原文:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 [目标检测]RCNN算法详解 Girshick, Ross, et al ...

  9. 数据结构与算法详解目录

    数据结构与算法详解是一本以实例和实践为主的图书,主要是经典的数据结构与常见算法案例,来自历年考研.软考等考题,有算法思路和完整的代码,最后提供了C语言调试技术的方法. 后续配套微课视频. 第0章  基 ...

最新文章

  1. Redis-stat的安装与使用
  2. BZOJ3862Little Devil I——树链剖分+线段树
  3. Java BigDecimal Rounding Mode
  4. Android--通知之Notification
  5. oracle活跃用户,监控数据库中的活跃用户及其运行
  6. 向Maven的本地库中添加jar文件
  7. matlab Tricks(二十七)—— 可变输入参数输出参数的适配
  8. 小程序支付一定要后台服务器,2.字节跳动小程序支付配置
  9. 原生Android开发自学过程(二)之TextView基础属性
  10. PanDownloadSpeedPan迅雷极速版合集
  11. NLP的巨人肩膀[转]
  12. geforce rtx3090显卡安装cuda11.0
  13. Windows高级工程师:GDI+绘图;基础入门大全
  14. 清除flashback日志
  15. 【SSE-HARD】
  16. 使用键盘录入给选手打分
  17. 中科大计算机科学与浙大比,高校实力大比拼:浙大和中科大的实力对比
  18. eclipse 创建maven project时候,到retrieving archetypes就卡住的问题(华为云maven仓库可解决)
  19. System.Data.Odbc.OdbcException: ERROR [IM001] [Microsoft][ODBC 驱动程序管理器] 驱动程序不支持此功能
  20. 国密算法(SM3)java语言的实现:利用bcprov和huttol库来实现SM3算法,国产哈希算法

热门文章

  1. Win7和Win10 关闭驱动程序强制签名的方法
  2. JavaWeb_CSS(17)_背景设置
  3. 计算机网络——TCP 协议原理总结
  4. echarts的标记线和标记点
  5. Automation Anywhere进阶培训-1-AA简介
  6. 教你把多段视频合并成一个长视频,并添加转场特效
  7. N!含有质因子2的个数
  8. Linux - Linux命令大全
  9. 按键精灵改php文件代码,如何吧按键精灵的代码转成易语言代码
  10. suse linux双网卡绑定,suse linux双网卡绑定设置详解