生信从湿到干 · 交互式动画教程
⭑ 试用 OmicOne
第 10 章数据分析

UMAP:一张地图,而不是一把尺子

UMAP 把细胞在几十个 PC 维度里的邻居关系画到一张二维图上。它是单细胞论文里出现最多的图,也是最容易被误读的图:它是一张地图,告诉你谁和谁是邻居;它不是一把尺子,不能用来量距离。

UMAP 是怎样画出来的

UMAP 的思路分两步。第一步和聚类相似:在 PC 空间里为每个细胞找最近的邻居(Seurat 默认 n.neighbors = 30),得到一张带权重的邻居图。第二步是在二维平面上摆放所有细胞,让图里相连的细胞靠近、不相连的细胞推开,反复优化直到稳定。

两个参数影响最大:

  • n.neighbors:每个细胞考虑多少邻居。小了强调局部细节,大了更照顾整体布局。
  • min.dist(Seurat 默认 0.3):点与点之间允许多近。小了簇更紧凑,大了点更分散。

优化过程有随机性,换一个随机种子,簇的位置和朝向就会变,但“谁和谁相邻”基本保持。

obj <- RunUMAP(obj, dims = 1:10)

从 PCA 到 UMAP

从 PCA 到 UMAP真实数据
正在加载数据…

组件把每个细胞从 PC1/PC2 散点图上的位置,动画移动到它在 UMAP 上的位置。在 PC1/PC2 上重叠在一起的群体,在 UMAP 上分开了,因为 UMAP 用的是全部选定的 PC(这里是前 10 个),而不只是前两个。代价是距离被扭曲:UMAP 为了把邻居放在一起,会拉伸和压缩空间。

再切换到 t-SNE:同样的簇,排布却不一样。这说明簇在图上的相对位置不是数据本身的属性,而是算法的选择。

常见误区

UMAP 可以告诉你:哪些细胞彼此相邻;一个群体在这次嵌入中是否与其他群体分开;某个基因的表达在哪些区域偏高。

UMAP 不能告诉你:

  • 簇与簇之间的距离。 两个簇在图上离得远,不代表它们比离得近的两个簇差异更大。
  • 细胞数量和异质性。 簇的面积和密度不对应细胞数量或簇内的变异程度。
  • 轨迹。 两个簇之间有一条“桥”,不一定意味着存在分化过程(第 12 章)。
  • 聚类和统计。 簇在 PC 空间的图上计算,所以一个簇在 UMAP 上看起来分成两块,或与相邻簇有交错,都不说明聚类出错;也不要在 UMAP 坐标上算距离或做检验。

另外,UMAP 上的分离不等于统计显著;发表时写明 PC 数、n.neighbors、min.dist 和随机种子。