SCTransform normalization seurat

完成了前面的基础质控过滤以及去除细胞周期的影响后,我们可以开始SCTransform normalization

SCTransform normalization优势

  • 1️⃣ 一个SCTransform函数即可替代NormalizeDataScaleDataFindVariableFeatures三个函数;
  • 2️⃣ 对测序深度的校正效果要好于log标准化(10万以内的细胞都建议使用SCT);
  • 3️⃣ SCTransform,可用于矫正线粒体细胞周期等因素的影响,但不能用于批次矫正;
  • 4️⃣ 改善信/噪比
  • 5️⃣ 发现稀有细胞

用到的包

rm(list = ls())
library(Seurat)
library(tidyverse)
library(SingleR)
library(celldex)
library(RColorBrewer)
library(SingleCellExperiment)
library(ggsci)

示例数据

这里我们还是使用之前建好的srat文件,我之前保存成了.Rdata,这里就直接加载了。

load("./srat1.Rdata")
srat

计算细胞周期评分

4.1 新版基因集

这次我们用新版的细胞周期基因集。

cc.genes.updated.2019


4.2 计算评分

s.genes <- cc.genes.updated.2019$s.genes
g2m.genes <- cc.genes.updated.2019$g2m.genes

srat <- CellCycleScoring(srat, s.features = s.genes, g2m.features = g2m.genes)
table(srat[[]]$Phase)

SCTransform normalization

这里我们用一个函数就可以完成。

srat <- SCTransform(srat, 
                    method = "glmGamPoi", 
                    ncells = 8824, 
                    vars.to.regress = c("percent.mt","S.Score","G2M.Score"), 
                    verbose = T)
srat

降维与聚类

我们这里进行一下的标准降维聚类,这里的dims推荐大家尽可能设置的大一些。

srat <- RunPCA(srat, verbose = F)
srat <- RunUMAP(srat, dims = 1:30, verbose = F)
srat <- FindNeighbors(srat, dims = 1:30, verbose = F)
srat <- FindClusters(srat, verbose = F)
table(srat[[]]$seurat_clusters)


可视化一下吧。

ncluster <- length(unique(srat[[]]$seurat_clusters))

mycol <- colorRampPalette(brewer.pal(8, "Set2"))(ncluster)

DimPlot(srat, label = T,
        cols = mycol)

稀有细胞marker探索

接着我们探索一下血小板树突状细胞marker,分别为PPBPLILRA4

7.1 可视化

这里我们可以发现在PPBP在一个极小的细胞群中没有被标注出来。

FeaturePlot(srat,c("PPBP","LILRA4"),
            label = T,
            cols = colorRampPalette(brewer.pal(11, "Spectral"))(10)
            )


7.2 解决方案

我们可以通过提高FindClusters函数中的resolution选项来提高聚类数量
当然最简答的办法就是手动标记啦,这里就不演示啦。

srat <- FindNeighbors(srat, dims = 1:30, k.param = 15, verbose = F)

## Leiden algorithm即algorithm = 4, 需要配置python环境
srat <- FindClusters(srat, verbose = F, algorithm = 4, resolution = 0.95)

看一下现在有多少个聚类吧。

table(srat[[]]$seurat_clusters)


可视化一下吧!~

ncluster <- length(unique(srat[[]]$seurat_clusters))

mycol <- colorRampPalette(brewer.pal(8, "Set2"))(ncluster)

DimPlot(srat, label = T,
        cols = mycol)

### 深度归一化在单细胞RNA测序(scRNA-seq)数据分析中的应用 #### 归一化的必要性 由于实验条件和技术差异,来自不同样本的scRNA-seq数据通常具有显著不同的读取深度。这种变异会影响后续分析的结果准确性,因此需要采用适当的方法来消除这些批次效应并使得跨样品比较成为可能[^1]。 #### 方法概述 深度归一化旨在调整每个细胞总的分子计数至相同规模,以便公平对比各个单元间的表达模式。具体来说,此过程涉及计算每种转录本相对丰度的比例因子,并据此缩放原始计数值以达到统一标准。这一策略有助于减少由采样深度不均造成的偏差,提高下游聚类、降维等步骤的有效性[^3]。 #### 实现方式 一种常见的做法是利用Seurat包提供的`NormalizeData()`函数执行总和比例尺转换(library-size normalization)。该算法首先估计各细胞内的预期mRNA总量作为参照基线;接着基于此基准重新衡量所有特征的实际测量值。此外,还可以考虑其他高级方案如SCTransform(),它结合负二项分布模型拟合与回归校正手段进一步优化性能表现[^2]。 ```r # 使用 Seurat 进行深度归一化 library(Seurat) # 创建 Seurat 对象 sce <- CreateSeuratObject(counts = pbmc_data, project = "pbmc") # 应用总和比例尺转换法进行初步归一化 sce <- NormalizeData(sce, verbose = FALSE) # 或者使用 SCTransform 方法进行更精细的处理 sce <- SCTransform(sce, vars.to.regress = c("nCount_RNA", "percent.mt"), verbose = FALSE) ``` #### 结果评估 完成上述操作之后,应当仔细审查所得结果的质量控制指标,比如查看经过变换后的基因表达矩阵是否存在异常离散点或趋势偏离等情况。同时也可以借助可视化工具直观感受整体结构特性及其随时间演变规律的变化情况[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信小博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值