查看原文
其他

DESeq2 归一化原理解析

JunJunLab 老俊俊的生信笔记 2022-08-15


包容你的一切就是对你的纵容

1引言

平常我们经常使用不同的差异软件做差异分析,此外我们还是有必要学习和了解其中的原理的。今天来介绍一下 不同的归一化算法区别DESeq2 的归一化原理。

2归一化(Normalization)

差异分析工作流程的第一步是计数标准化,这对于进行 样品之间的基因表达准确的可比较 是必要的:

除了许多其他因素之外,每个基因的映射读数的计数与 RNA 的表达成比例。归一化是缩放原始计数值的过程,以解释 “其它” 因素。以这种方式,样本之间和或之内的表达水平更加可比较。

归一化主要考虑的因素有:

1.测序深度: 在比较样本之间的基因表达时,需要考虑测序深度。在下面的例子中,每个基因在样本 A 中相对于样本 B 的表达量增加了一倍,然而这是样本 A 的测序深度增加了一倍的结果。

2.基因长度: 在比较同一样本内不同基因的表达时,考虑基因长度是必要的。在这个例子中,基因 X 和基因 Y 有相似的表达水平,但是映射到基因 X 的读取数量会比映射到基因 Y 的数量多得多,因为基因 X 更长。

3.RNA 的组成: 样本之间表达的一些高度差异的基因,样本之间表达的基因数量的差异,或污染的存在都可能使某些类型的标准化方法产生偏差。为了准确比较样本之间的表达,建议考虑 RNA 组成,这在进行差异表达分析时尤为重要。


在下面例子中,如果我们将每个样本除以总计数进行归一化,那么差异基因将会极大地影响计数,它占据了样本 A 的大部分计数,样本 A 的大多数其他基因会被更大的总计数数除以,似乎比样本 B 中相同的基因表达更少。

虽然归一化对于差分表达式分析是必不可少的,但对于探索性数据分析、数据可视化以及在探索或比较样本之间或样本内的计数时也是必要的。

3常见的归一化方法

CPM/TPM/FPKM/RPKM:

推荐的使用场景:

  • CPM: 同一样本重复间的比较。
  • TPM: 样本间或样本内的基因比较。
  • RPKM/FPKM: 样本内的基因比较。

median of ratios/trimmed mean of M values (TMM):

推荐的使用场景:

  • median of ratios: 差异分析的样本间的基因比较,样本内不可比较。
  • trimmed mean of M values (TMM): 异分析的样本间和内的基因比较。

建议:

TPM 和 RPKM/FPKM 标准化方法都考虑了测序深度和基因长度,但 不推荐 RPKM/FPKM。原因在于 RPKM/FPKM 方法输出的归一化计数值 在样本之间不具有可比性

使用 RPKM/FPKM 归一化方法,每个样本的 RPKM/FPKM 归一化计数总数是不同的。因此,不能在样本之间比较每个基因的归一化计数相等

4DESeq2 的 Median of ratios 方法

由于差异表达分析是比较同一基因的样本组之间的计数,因此 基因长度 不需要来解释。然而,测序深度RNA 组成 需要考虑。

为了归一化测序深度和 RNA 组成,DESeq2 采用 比值中位数法 。在用户端只有一个步骤,但在后端涉及到多个步骤,如下所述。

步骤 1:创建一个伪参考样本(行级几何平均值)

步骤 2:计算每个样本与参考样本的比率

步骤 3:计算每个样本的归一化因子(因子大小)

一个给定样本 所有比率的中位数值(上表按列)作为该样本的归一化系数,计算如下。注意,差异表达的基因不应该影响中位数值:

normalization_factor_sampleA <- median(c(1.281.31.391.350.59))

normalization_factor_sampleB <- median(c(0.780.770.720.741.35))

下图说明了一个样本(频率在 y 轴上)所有基因比率分布的中位数值:

比值中位数法假定并非所有基因都有差异表达,因此,归一化因子应考虑样本的测序深度和 RNA 组成(大的异常基因不能代表中位数比值)。该方法对上调/下调不平衡和大量差异表达基因具有较好的适用性。

通常这些 因子大约在 1 左右,如果你发现样本之间存在很大的差异,那么重要的一点是要注意,因为这可能表明存在极端离群值。

步骤 4:使用归一化因子计算归一化计数值

这是通过将给定样本中的每个原始计数值除以该样本的标准化因子来实现的,以生成标准化计数值。这是执行所有计数值(每个样本中的每个基因)。例如,如果 SampleB 的中位数比率为 1.3,而 SampleB 的中位数比率为 0.77,你可以按以下方式计算归一化计数:

这样我们就计算得到了最终的归一化数值了。

5使用函数获取归一化数值

构建对象:

## Create DESeq2Dataset object
dds <- DESeqDataSetFromMatrix(countData = data, colData = meta, design = ~ sampletype)

计算因子大小:

dds <- estimateSizeFactors(dds)

# 查看因子
sizeFactors(dds)

获取归一化矩阵:

normalized_counts <- counts(dds, normalized=TRUE)

# 导出保存
write.table(normalized_counts, file="data/normalized_counts.txt", sep="\t", quote=F, col.names=NA)

本篇文章参考自: Introduction to DGE - ARCHIVED[1]

6贵州乡景

参考资料

[1]

Introduction to DGE - ARCHIVED: https://hbctraining.github.io/DGE_workshop/lessons/02_DGE_count_normalization.html



欢迎加入生信交流群。加我微信我也拉你进 微信群聊 老俊俊生信交流群 哦,代码已上传至QQ群文件夹,欢迎下载。

群二维码:

老俊俊微信:


知识星球:



所以今天你学习了吗?

欢迎小伙伴留言评论!

今天的分享就到这里了,敬请期待下一篇!

最后欢迎大家分享转发,您的点赞是对我的鼓励肯定

如果觉得对您帮助很大,赏杯快乐水喝喝吧!



 往期回顾 




绘制 m6A peak 在 lncRNA 上的分布

snakemake 使用多环境分析数据

跟着 Genome Research 学画图: 等高线散点图

基因 hclust 聚类并绘制聚类热图和表达趋势图

设置 wsl 子系统的使用线程和内存

使用 Mfuzz 包聚类分析并自定义绘图

clusterProfiler 的 shiny 版上线了!

听说你想把 spearman 和 pearson 展示在一张相关性热图里?

snakemake 进阶用法

听说你离成功还差个对象?

◀...

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存