为什么需要降维?
单细胞转录组数据通常有数千个基因的表达值,这使得数据非常高维。降维分析的目的是将这些高维数据映射到一个低维空间中,以便:
-
去除噪声:减少不必要的技术噪声,并保留重要的生物学信息。
-
可视化:将数据投射到二维或三维空间中,便于观察不同细胞群之间的差异和模式。
-
聚类和分类:在低维空间中,可以更好地进行细胞群的聚类或分类。
-
加速计算:降维后,后续的计算任务(如聚类或拟合模型)可以在低维数据上完成,减少计算量。
三种常用降维方法
| 方法 | 类型 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|
| PCA | 线性降维 | 初步降维,数据预处理 | 计算快速,易解释,适合大规模数据处理 | 只能捕捉线性关系,难以处理复杂非线性数据 |
| t-SNE | 非线性降维 | 数据可视化,局部结构分析 | 展示复杂的非线性结构,常用于细胞群的可视化 | 计算较慢,不适合大数据集,结果不稳定(非确定性) |
| UMAP | 非线性降维 | 数据可视化,局部和全局结构 | 计算速度快,比 t-SNE 更稳定,能够保持全局和局部结构,适合大规模数据集 | 对参数较为敏感,结果受超参数调整影响,需要调参优化 |
实操
# PCA 是基于 HVG
seob <- RunPCA(seob, assay = "SCT")
# s-SNE 不是基于表达矩阵做的,而是基于PCA结果
seob <- RunTSNE(seob, assay = "SCT", dims = 1:30)
# UMAP
seob <- RunUMAP(seob, assay = "SCT", dims = 1:30)
#可视化
p_pca <- DimPlot(seob,
reduction = "pca", # pca, umap, tsne
group.by = "samples",
label = F)
p_umap <- DimPlot(seob,
reduction = "umap", # pca, umap, tsne
group.by = "samples",
label = F)
p_pca + p_umap
数据整合去批次效应
方法原理
如果存在明显的批次效应,则需要去除。
参考:https://satijalab.org/seurat/articles/seurat5_integration
五种方法: CCAIntegration, RPCAIntegration, HarmonyIntegration, FastMNNIntegration, scVIIntegration
-
数据规模:对于较大数据集,RPCAIntegration、HarmonyIntegration 和 FastMNNIntegration 更为合适。对于超大规模数据,scVIIntegration 表现优异。
-
模态类型:CCAIntegration 和 scVIIntegration 更适合处理多模态数据,如 RNA 和 ATAC-seq。
-
批次效应:HarmonyIntegration 和 FastMNNIntegration 是处理批次效应的好选择。
-
计算资源:如果计算资源有限,RPCAIntegration 是一个高效的选择,而 scVIIntegration 适合在有 GPU 资源时使用。
FastMNNIntegration 与 SCTransform 不兼容,需要用传统标准化方法 scVIIntegration 需要GPU 加速。
实操
seob_harmony <- IntegrateLayers(object = seob,
normalization.method = "SCT",
orig.reduction = "pca",
method = HarmonyIntegration,
new.reduction = "integrated.harmony")
#重新降维
seob_harmony <- RunUMAP(seob_harmony, assay = "SCT", dims = 1:30,
reduction = "integrated.harmony")
DimPlot(seob_harmony,
reduction = "umap",
group.by = "samples",
label = F)

tips:是否要进行批次整合,根据项目的具体情况。有时候整合后会丢掉真实的样本差异。
聚类分析
FindNeighbors 函数用于计算数据集中每个细胞的 k 个最近邻居,并可选构建共享近邻图(SNN),通过计算每个细胞和其 k 个最近邻居之间的邻域重叠(Jaccard 指数)来实现。近邻图和共享近邻图在后续的聚类分析中用于确定细胞之间的相似性。
seob <- FindNeighbors(seob, reduction = "pca", dims = 1:20)
-
k.param:用于最近邻居算法的 k 值,默认为 20,表示计算每个细胞的 20 个最近邻居。
-
nn.method:用于寻找最近邻居的算法,选项包括 rann 和 annoy。annoy 是一种近似最近邻居算法,适合大规模数据集。
-
dims:用于构建近邻图的降维结果的维度,通常是 PCA 结果的前几个主成分。
FindClusters 函数用于基于共享近邻图的模块性优化算法(如 Louvain 或 Leiden 算法)来识别细胞簇。它首先计算每个细胞的 k 近邻,并基于近邻图构建 SNN 图,随后通过优化模块化函数来划分细胞簇。
seob <- FindClusters(seob,
resolution = 0.4, # 值越大,cluster 越多
random.seed = 1)
DimPlot(seob,
reduction = "umap",
group.by = c("seurat_clusters"),
label = T)
resolution:控制聚类的分辨率。分辨率值越高,得到的细胞簇越多。
algorithm:用于模块化优化的算法,选项包括 Louvain(默认)和 Leiden(更适合大数据集)。Leiden 需要安装 leidenalg Python 包。

数信院服务器助力科研
1.生信全领域答疑:从入门到精通,全程护航。无论是数据分析,还是算法应用,数信院生信服务器提供全方位的答疑支持。遇到任何问题,我们的硕博团队随时为您提供帮助,确保您的研究进展无阻。
2.技术无限制支持:软件安装、报错解决"一站式"服务。我们为用户提供技术支持,协助进行软件安装及配置,同时,解决在使用过程中遇到的报错和技术难题。无论是常见的生信工具,还是特殊需求的定制软件,我们都能为您提供有效解决方案。
3.免费AI服务:智能算力触手可及。作为科研创新的一部分,我们还为用户提供免费的AI技术服务,帮助您在数据分析、预测建模等方面提升研究效率,为您的科研成果加速赋能。
4.海量实用脚本资源:即拿即用,效率翻倍。为了进一步提升用户的工作效率,我们提供了大量实用的生物信息学脚本,涵盖数据处理、分析流程、可视化等多个领域。
5.自采购硬件。全自采购裸金属服务器,部署于华东TOP 50IDC 机房,省级骨干专线。