专栏名称: 生信师兄
本公众号旨在帮助广大的生信小白更好、更轻松的入门生信,专注生信干货分享。
目录
相关文章推荐
新疆949交通广播  ·  飙涨600%,销售异常火爆 ·  昨天  
新疆949交通广播  ·  多地官宣:免票!半价! ·  2 天前  
新疆949交通广播  ·  最新!这些名称不再使用→ ·  3 天前  
51好读  ›  专栏  ›  生信师兄

Seurat单细胞数据标准化常规流程解析!

生信师兄  · 公众号  ·  · 2025-01-18 09:26

正文

封面

熟悉师兄公众号的都应该清楚,师兄之前的推文主要集中在各种类型的科研绘图上!但是不少粉丝小伙伴们还是反应,只知道绘图,数据不会分析,还是不行的呀!没错,拿不到可靠的分析结果,只知道绘图,这当然是远远不够的!因此, 学习各种常用的生信数据分析则必然成为了每一个生信人必须要经历的事情。 因此,后续的推文中,师兄会尽可能地多更新一些有关数据分析的内容,可能包含的系列包括《R语言数据处理基本技巧》、《从零开始学单细胞转录组》、《从零开始学空间转录组》等;

本系列,师兄将 从单细胞转录组学开始 ,带领大家一起 从零开始学单细胞 !系列内容可以详见下方大纲!

说明: 由于本系列教程还是强调 面对完全零基础小白 ,所以很多内容师兄会介绍的非常细,对于部分已经入门的老手来说可能比较多余,所以 大家选择性阅读即可!

本系列主要内容目录及单细胞学习交流群,请看Part 1;

本期主要内容,请看Part 2;

合作服务器推荐及生信师兄粉丝专属优惠详情,请看Part 3;

如果您觉得本系列文章对你有帮助的话,欢迎 点赞、收藏、在看+转发 !您的支持是师兄持续更新的最大动力!

Part 1 系列介绍

1.1 内容大纲

单细胞转录组系列教程目录

1.2 生信师兄单细胞学习交流群

当然了,好的学习过程离不开详尽地交流讨论和重难点答疑!因此,在发布教程的同时,师兄也成立了 《生信师兄单细胞学习交流群》 用于本系列内容的学习交流。需要的小伙伴可以扫描下方二维码,添加师兄微信后备注 “单细胞学习交流群” 后付费加群!

1.2.1 群内资源:

  • 本系列所有免费及付费内容的配套学习资源、代码资源及示例数据;
群内资源(以上图课程目录为准)

1.2.2 入群费用

  • 入群费用: ¥299元(每集赞1个抵扣1元,至多抵扣100元!此优惠永久有效!)

1.2.3 本系列不含视频教程

  • 目前,师兄还没有足够的时间进行视频课程的录制,所以 本系列教程不包含视频课程 !但是如果大家需要,师兄也一定会尽可能抽时间录制课程!

  • 如果后续推出视频课程 ,还是和《R语言科研绘图进阶版视频教程》一样, 加群的小伙伴届时可凭借入群截图,抵扣购课差价。 所以,早入群早享受吧!

1.2.4 声明

  • 是否加群,纯属自愿! 本系列的大部分内容会是免费阅读, 所以完全支持白嫖! 但是看完还请动动你的手指, 点个赞!点个在看!如果能转发那就太感谢了!

  • 加群可以 获取本系列所有付费部分内容,代码,示例数据,以及定期答疑的交流群

  • 如果考虑好加群,就 早加早享受,随着群内资源的增加,入群的费用也可能会随之增加

  • 优惠方式 点赞 + 在看,并转发这个系列任意一篇文章至朋友圈,每集赞1个抵扣1元,至多抵扣100元!此优惠永久有效哦!

Part2 归一化&标准化(Normalization & Scaling)

在单细胞转录组测序(scRNA-seq)数据分析中, 数据归一化和标准化是至关重要的步骤 。这些步骤有助于 平衡不同细胞间的测序深度差异,提高数据的可比性和分析的准确性 。本文将介绍 几种常用的 单细胞数据归一化和标准化方法,包括 NormalizeData、SCTransform等 ,并以 pbmc3k 数据为例进行实操。

有关 归一化和标准化的基本概念及基础标准化方法 可以参考师兄的往期推文:

其实, 还是有很多小伙伴纠结这两个定义 ,实际上它们之间 没有完完全全的边界 ,广义上的标准化概念非常宽泛,个人认为 归一化可以理解为标准化的一种特殊形式(将数据调整到一个特定的范围内变换) ,而广义标准化的理解可以简单的理解为 将数据转换为某种标准形式 ,以便于比较和分析。所以 后者完全可以包含前者,无需纠结!

2.1 NormalizeData函数

2.1.1 简介

NormalizeData Seurat 包中的一个函数,用于 对单细胞RNA测序(scRNA-seq)数据进行归一化和标准化处理 。该函数提供了 三种 对数据进行Normalize的方法,分别是 ”LogNormalize“、“CLR(Centered Log-Ratio)“和”RC(Relative Counts)“ ,三种方法中最常用的,也是该函数的 默认方法”LogNormalize“

2.1.2 LogNormalize方法

  • 原理 :对每个基因的表达值进行 总计数归一化 (每个基因的表达值除以该细胞的总RNA计数),然后 乘以一个标准化因子(默认10,000) ,最后进行 对数转换
  • 特点 :一种快速而有效的归一化和标准化方法,适用于大多数scRNA-seq数据集。

Tips: 其实看过这篇文章: 为啥要做标准化?这么多方法,你的数据该用哪个? 的小伙伴一定能够理解, 这种方法和CPM方法+对数转换的思路完全一致, 只不过CPM的标准化因子是1,000,000,至于 为啥这里少了3个零 ,其实非常好理解,因为单细胞的测序深度很明显没有Bulk RNA-seq高,所以总Counts数就低,相应的分子如果乘一个很大的数,会 导致表达矩阵中的整体数值都偏大 ,不利于后续分析。

2.1.3 CLR(Centered Log-Ratio)

  • 原理 :对于每个细胞中的基因表达值,其计算的具体步骤如下:

    • 计算每个细胞中所有基因表达值的 几何均值

    • 对每个基因表达值 除以几何均值,再取对数

  • 特点 :CLR方法主要用于 处理相对丰度数据,消除总RNA计数的影响 ,这种方法在微生物组学的数据中用的相对较多。

2.1.4 RC(Relative Counts)

  • 原理 :对每个基因的表达值进行 总计数归一化 ,即每个基因的表达值除以该细胞的总RNA计数, 不进行对数转换
  • 特点 :简单的相对计数归一化方法,适用于需要保留原始表达值比例关系的分析。

2.1.5 实操

# 安装并加载所需包
if (!requireNamespace("Seurat", quietly = TRUE)) install.packages("Seurat")
if (!requireNamespace("SeuratData", quietly = TRUE)) install.packages("SeuratData")
library(Seurat)
library(SeuratData)

# 加载pbmc3k示例数据
# InstallData("pbmc3k")  # 确保示例数据已安装
data("pbmc3k")  # 加载数据
pbmc3k

# 创建Seurat对象,并简单质控:
seurat_object                                     min.cells = 3, min.features = 200

# 使用NormalizeData函数进行归一化
seurat_object   object = seurat_object,          # 要归一化的Seurat对象
  normalization.method = "LogNormalize"# 归一化方法,默认为"LogNormalize"
  scale.factor = 10000             # 归一化比例因子,默认为10,000
)

# 查看归一化后的数据
seurat_object@assays$RNA$data[1:51:5]

# 此外,还需要对数据进行中心化和标准化处理,以方便后续降维:
all.genes pbmc pbmc@assays$RNA$scale.data[1:51:5]
数据标准化

可以看到,在运行完 NormalizeData ScaleData 函数之后, layers 层多了两个矩阵,分别是 data -- 对应Normalize之后的数据, scale.data -- 对于scale之后的数据。

Seurat对象的各层结构可以参考师兄的这篇推文:==你真的读懂Seurat对象了吗?==

2.2 SCTransform

2.2.1 简介

SCTransform 是一种用于单细胞RNA测序(scRNA-seq) 数据标准化和方差稳定化 的方法,由纽约基因组中心Rahul Satija实验室的Christoph Hafemeister开发。该方法通过正则化负二项式回归模型对单细胞UMI(Unique Molecular Identifier)表达数据进行建模,以 消除由于测序深度和其他技术因素引起的变化,从而改善下游分析如聚类、降维和差异表达检测的结果

目前,SCTransform方法已经集成到Seurat包中,成为单细胞数据分析的常用工具之一。此外,SCTransform已于2022年更新到了第二版,并且Seurat V5中默认的SCTransform也是第二版。详情可以参考官方介绍:

  • https://satijalab.org/seurat/articles/sctransform_vignette

  • https://satijalab.org/seurat/archive/v4.3/sctransform_v2_vignette

2.2.2 原理

SCTransform的原理基于 正则化负二项式回归 ,主要步骤如下:

  1. 构建广义线性模型(GLM)
  • 以每个细胞的测序深度(即总UMI数)作为自变量,以每个基因在每个细胞中的UMI计数作为因变量,为每个基因构建GLM。
  • 这一步的目的是估计每个基因的表达量如何随测序深度变化。
  1. 正则化参数估计
  • 对GLM中的参数进行正则化处理,以减少过拟合和噪声的影响。
  • 正则化有助于稳定低表达基因的参数估计,同时保留高表达基因的信息。
  1. 计算残差
  • 使用正则化后的参数和细胞的测序深度,重新计算每个基因在每个细胞中的预期表达量。
  • 将实际表达量与预期表达量相减,得到残差项。这些残差项反映了基因表达的生物学变异,而非技术变异。
  1. 方差稳定变换
  • 将残差项除以负二项分布推断的标准差,得到Pearson残差。这些残差构成了最终的标准化结果,即每个基因的标准化表达水平。

Tips: SCTransform的原理比较复杂,师兄这里只是简单的进行一个总结,大家如果感兴趣可以去详细阅读作者的原文(PMC6927181)。

这里也附上几个师兄觉得写的很不错的帖子,大家感兴趣可以跳转阅读:

  • https://mp.weixin.qq.com/s/OwanhzSZa8R1mwz-FFnD1g
  • https://mp.weixin.qq.com/s/SJVwtnzx1Rx68UK3RcQe4w

2.2.3 特点

  • 简单易用 SCTransform 函数可以完全替代 NormalizeData ScaleData FindVariableFeatures 三个函数;
  • 消除测序深度影响 :通过建模测序深度对基因表达的影响,SCTransform能够消除不同细胞间测序深度差异带来的偏差, 其对测序深度的矫正效果要明显好于LogNormalize方法,10万细胞以下的数据都建议使用SCTransform方法。
  • 消除线粒体和细胞周期效应: SCTransform 可以通过在回归中加入一些 连续变量 ,来消除其变异对数据的影响,例如 线粒体、细胞周期因素 等,但是 批次效应作为一个分类变量,不能使用SCTransform方法去除!

2.2.4 实操







请到「今天看啥」查看全文