RunUMAP
函数在 Seurat 中可以使用不同的数据进行计算,具体取决于您传递给它的参数。即使没有显式地运行 FindNeighbors
,RunUMAP
仍然可以计算 UMAP,因为它会自动构建邻居图(neighbor graph)。以下是详细解释:
数据来源
-
PCA 结果:
- 如果您指定了
dims
参数(例如dims = 1:30
),RunUMAP
将使用 PCA 降维后的数据来计算 UMAP。 - 这是默认行为,如果您没有提供邻居图,Seurat 会使用 PCA 的结果来构建邻居图。
- 如果您指定了
-
邻居图:
- 如果您已经运行了
FindNeighbors
并生成了一个邻居图,RunUMAP
可以直接使用这个邻居图来进行 UMAP 计算。 - 您可以通过
graph
参数传递邻居图对象,或者nn.name
参数指定邻居图的名称。
- 如果您已经运行了
-
原始数据或特定特征:
- 您也可以选择使用原始数据或特定特征集来计算 UMAP。通过
features
参数指定要使用的特征。
- 您也可以选择使用原始数据或特定特征集来计算 UMAP。通过
为什么没有经过 FindNeighbors
也能计算 UMAP
RunUMAP
在没有显式调用 FindNeighbors
的情况下,会自动调用 FindNeighbors
来构建邻居图。这是通过以下方式实现的:
- 自动构建邻居图:如果
RunUMAP
没有检测到现有的邻居图,它会自动调用FindNeighbors
使用指定的维度(例如 PCA 维度)来构建邻居图。 - 默认参数:如果没有提供
n.neighbors
等参数,RunUMAP
会使用默认值来构建邻居图。
示例代码
以下是一个示例代码,展示了如何在没有显式调用 FindNeighbors
的情况下运行 RunUMAP
:
library(Seurat)# 假设 sce.all.filt 是已经加载好的 Seurat 对象# 标准化数据
sce.all.filt <- ScaleData(sce.all.filt, features = rownames(sce.all.filt))# 运行 PCA
sce.all.filt <- RunPCA(sce.all.filt, features = VariableFeatures(object = sce.all.filt))# 运行 UMAP
sce.all.filt <- RunUMAP(sce.all.filt, dims = 1:30)# 可视化 UMAP 结果
DimPlot(sce.all.filt, reduction = "umap", label = TRUE)
在这个例子中,RunUMAP
会自动调用 FindNeighbors
使用 PCA 的前 30 个主成分来构建邻居图,并基于这个邻居图计算 UMAP。
显式调用 FindNeighbors
的好处
虽然 RunUMAP
可以自动处理邻居图的构建,但显式调用 FindNeighbors
有以下几个好处:
- 控制参数:您可以更精细地控制邻居图的参数,例如
n.neighbors
和k.param
。 - 一致性:确保 UMAP 和其他分析步骤(如聚类)使用相同的邻居图,从而保持分析的一致性。
- 性能优化:显式构建邻居图后,后续的 UMAP 计算可能会更快,因为不需要重复构建邻居图。
完整代码示例
以下是一个完整的代码示例,包括 FindNeighbors
和 FindClusters
,以确保 UMAP 的计算基于一致的邻居图:
library(Seurat)# 假设 sce.all.filt 是已经加载好的 Seurat 对象# 标准化数据
sce.all.filt <- ScaleData(sce.all.filt, features = rownames(sce.all.filt))# 运行 PCA
sce.all.filt <- RunPCA(sce.all.filt, features = VariableFeatures(object = sce.all.filt))# 找到邻居
sce.all.filt <- FindNeighbors(sce.all.filt, dims = 1:30)# 找到聚类
sce.all.filt <- FindClusters(sce.all.filt, resolution = c(0.5, 0.6, 0.8, 1, 1.2, 1.5, 1.8, 2, 2.5, 3))# 运行 UMAP
sce.all.filt <- RunUMAP(sce.all.filt, dims = 1:30)# 运行 t-SNE
sce.all.filt <- RunTSNE(sce.all.filt, dims = 1:30)# 可视化 UMAP 结果
DimPlot(sce.all.filt, reduction = "umap", label = TRUE, group.by = "seurat_clusters")
通过这种方式,您可以确保 UMAP 的计算基于一致的邻居图,并且可以在后续分析中更好地利用聚类信息。