当前位置: 首页 > news >正文

单细胞学习(12)——RunUMAP() 详解学习笔记

R 语言 RunUMAP() 详解

UMAP(Uniform Manifold Approximation and Projection)是一种流行的非线性降维方法,特别适用于单细胞 RNA 测序(scRNA-seq)等高维数据可视化。而在 Seurat 包中,我们主要通过 RunUMAP() 来执行 UMAP 计算。

这篇学习笔记记录 RunUMAP() 的用法,搞清楚它的关键参数,并提供一些调优技巧,让UMAP 结果更加美观、稳定。


1. RunUMAP() 的基本用法

在 Seurat 分析流程中,RunUMAP() 一般用于 PCA 降维之后。代码示例如下:

data_object <- RunUMAP(data_object, dims = 1:30, n.neighbors = 20, min.dist = 0.3)

这是最常见的 UMAP 运行方式,默认基于 PCA 降维后的数据进行计算。别急,我们来逐个拆解参数。


2. RunUMAP() 的核心参数解析

参数默认值作用
reduction = "pca""pca"指定 UMAP 运行的降维数据来源,一般是 PCA 结果。
dims = 1:501:50选择 PCA 维度(通常设 30 左右)。
n.neighbors = 3030UMAP 计算的邻居点数量,决定局部 vs 全局结构。
min.dist = 0.30.3控制点的聚合程度,越小点越紧密,越大点越松散。
spread = 11影响 UMAP 低维表示的整体扩展程度。
metric = "cosine""cosine"计算相似度的度量方式,默认使用余弦相似度。
n.components = 22UMAP 的降维维度,通常设为 2D(可设 3D)。
seed.use = 4242设置随机种子,以保证 UMAP 结果可复现。

其中,n.neighborsmin.dist 是影响 UMAP 结果最关键的两个参数,调整得当可以让 UMAP 结果更符合你的需求。


3. RunUMAP() 运行过程解析

当你运行 RunUMAP() 时,Seurat 内部执行以下计算步骤:

  1. 降维预处理:选择 PCA 结果(默认 30 维)。
  2. 邻近点搜索(KNN 计算):使用 Annoy 计算最近邻(n.neighbors = 30)。
  3. 距离校准:平滑化 KNN 结果。
  4. UMAP 初始化:使用拉普拉斯归一化生成初始嵌入。
  5. UMAP 优化:运行 200 轮优化,将高维数据投影到 2D/3D 空间。

此外,Seurat 4.x 版本默认使用 R-native UWOT 计算 UMAP,而非 Python umap-learn,如果需要使用 Python 版本,可以手动指定:

RunUMAP(data_object, umap.method = "umap-learn", metric = "correlation")

4. 如何调整 UMAP 结果?

4.1 如果 UMAP 结果太散,看不清聚类

调整方案

RunUMAP(data_input, dims = 1:30, n.neighbors = 15, min.dist = 0.1)
  • 减少 n.neighbors:让 UMAP 更关注局部结构。
  • 降低 min.dist:让点更加聚集。
    在这里插入图片描述

4.2 如果 UMAP 结果过于紧密,类别堆在一起

调整方案

RunUMAP(data_input, dims = 1:30, n.neighbors = 50, min.dist = 0.5)
  • 增大 n.neighbors:让 UMAP 更关注全局关系。
  • 提高 min.dist:使点更加分散。
    在这里插入图片描述

4.3 运行 3D UMAP

如果想要 3D 可视化:

RunUMAP(data_input, dims = 1:30, n.components = 3)

然后用 plotly 进行 3D 绘图。


5. FindClusters() 的参数解析

FindClusters() 是 Seurat 中用于聚类分析的函数,通常与 RunUMAP() 搭配使用。其核心参数如下:

参数默认值作用
resolution0.8控制聚类的颗粒度,值越大,聚类数越多。
algorithm1选择不同的聚类算法(1 = Louvain,2 = Louvain with multilevel refinement,3 = SLM)。
graph.nameNULL指定用于聚类的图(通常是 FindNeighbors() 生成的)。
random.seedNULL设定随机种子,以确保聚类结果可复现。
verboseTRUE是否显示计算过程的日志信息。

是否需要设定随机种子?

是的,FindClusters() 由于涉及到随机初始化,默认情况下,每次运行的结果可能会有所不同。如果希望聚类结果可复现,建议在运行前固定随机种子,如:

set.seed(42)  # 设定全局随机种子
FindClusters(data_input, resolution = 0.8, random.seed = 42)

这样,每次运行 FindClusters() 时都会得到相同的结果,确保分析的稳定性。


6. 结语

UMAP 是 scRNA-seq 可视化的利器,而 RunUMAP() 在 Seurat 中的实现提供了丰富的参数调节空间。同时,FindClusters() 作为关键的聚类方法,与 UMAP 搭配使用,能帮助研究者更好地理解细胞群体结构。

理解 n.neighborsmin.dist 的作用,并学会如何调整它们,可以让 UMAP 结果更加清晰、易读。而在聚类分析中,设定 resolution 以及 random.seed 可以让聚类结果更稳定、更具解释性。

下次你在 scRNA-seq 分析时,不妨试试调整这些参数,让你的 UMAP 和聚类结果更完美!🚀

相关文章:

  • 基于Qlearning强化学习的1DoF机械臂运动控制系统matlab仿真
  • 科普:“数据”与“元数据”
  • 双指针思想
  • ELK架构基础
  • 往年5级考题(c++)
  • 【spring cloud 3.0微服务部署】第一章:Nacos、LoadBalancer、GateWay、Ribbon集成之Nacos部署
  • stable diffusion 文生图流程
  • Vim操作笔记
  • 【BUG】conda虚拟环境下,pip install安装直接到全局python目录中
  • Java 语言深度剖析与实践应用
  • 字节Trae使用感想(后端)
  • 若依系统环境搭建记录
  • 基于SSM+uniapp的数学辅导小程序+LW示例参考
  • 【mysql】记一次mysql服务挂了后的数据恢复过程
  • FPGA与传统硬件开发:开发流程与效率对比
  • spring 学习 (注解)
  • 图神经网络简介
  • C37.【C++ Cont】二叉树的存储方式和四种遍历
  • stm32 lwip tcp服务端频繁接收连接失效问题解决(tcp_recved)
  • 基于单片机的仓库安防系统(论文+源码)
  • 农行再回应客户办理业务期间离世:亲属连续三次输错密码,理解亲属悲痛,将协助做好善后
  • 央媒评网红质疑胖东来玉石定价暴利:对碰瓷式维权不能姑息
  • 江苏省委社会工作部部长等多人拟在省志愿服务联合会任职
  • 洗冤录|县令遇豪强:黄榦处理的一起地产纠纷案
  • 咸宁市委常委、市纪委书记官书云调任湖北省司法厅副厅长
  • 中国象棋协会坚决支持司法机关依法打击涉象棋行业的违法行为