单细胞36计之16欲擒故纵---集成大型数据集的技巧

第十六计 欲擒故纵
要捉住他,故意先放开他。比喻为了进一步的控制,先故意放松一步。

对于非常大的数据集,标准集成工作流程有时可能会在计算上过高。在此工作流程中,我们采用了两个可以提高效率和运行时间的选项:

  1. 互惠PCA(RPCA)
  2. 基于参考的集成

在中获得了主要的效率改进FindIntegrationAnchors()`。首先,我们使用互惠PCA(RPCA)而不是CCA来标识可在其中找到锚点的有效空间。在使用互惠PCA确定任意两个数据集之间的锚点时,我们将每个数据集投影到其他PCA空间中,并通过相同的相互邻域要求约束锚点。所有下游集成步骤均保持不变,我们能够“校正”(或协调)数据集。

此外,我们使用基于参考的集成。在标准工作流程中,我们确定所有数据集对之间的锚点。尽管这使数据集在下游集成中具有同等的权重,但它也可能变得计算量大。例如,当集成10个不同的数据集时,我们执行45个不同的成对比较。作为替代方案,我们在此处介绍了将一个或多个数据集指定为集成分析的“参考”的可能性,而其余的则指定为“查询”数据集。在此工作流程中,我们不标识查询数据对之间的锚点,从而减少了比较次数。例如,当将10个数据集与一个指定为参考的数据集集成时,我们仅执行9个比较。基于引用的集成可以应用于对数归一化或SCTransform归一化的数据集。

此替代工作流程包括以下步骤:

  • 创建要集成的Seurat对象列表
  • 对每个数据集分别执行归一化,特征选择和缩放
  • 在列表中的每个对象上运行PCA
  • 整合数据集,并进行联合分析

通常,我们在标准工作流程和此处演示的工作流程之间观察到惊人的相似结果,同时大大减少了计算时间和内存。但是,如果数据集高度分散(例如,跨模式映射或跨物种映射),则只能使用一小部分要素来促进集成,并且使用CCA可能会得到更好的结果。

对于此示例,我们将使用来自人类细胞图集的“免疫细胞图集”数据,可在此处找到。

library(Seurat)

在获取数据之后,我们首先执行标准归一化和可变特征选择。

bm280k.data <- Read10X_h5("../data/ica_bone_marrow_h5.h5")
bm280k <- CreateSeuratObject(counts = bm280k.data, min.cells = 100, min.features = 500)
bm280k.list <- SplitObject(bm280k, split.by = "orig.ident")
bm280k.list <- lapply(X = bm280k.list, FUN = function(x) {
    x <- NormalizeData(x, verbose = FALSE)
    x <- FindVariableFeatures(x, verbose = FALSE)
})

接下来,选择用于下游集成的功能,然后在列表中的每个对象上运行PCA,这是运行其他互惠PCA工作流所必需的。

features <- SelectIntegrationFeatures(object.list = bm280k.list)
bm280k.list <- lapply(X = bm280k.list, FUN = function(x) {
    x <- ScaleData(x, features = features, verbose = FALSE)
    x <- RunPCA(x, features = features, verbose = FALSE)
})

由于此数据集包含男性和女性,因此我们将选择一个男性和一个女性(BM1和BM2)用于基于参考的工作流程中。我们通过检查XIST基因的表达来确定供体性别。

anchors <- FindIntegrationAnchors(object.list = bm280k.list, reference = c(1, 2), reduction = "rpca", 
    dims = 1:50)
bm280k.integrated <- IntegrateData(anchorset = anchors, dims = 1:50)
bm280k.integrated <- ScaleData(bm280k.integrated, verbose = FALSE)
bm280k.integrated <- RunPCA(bm280k.integrated, verbose = FALSE)
bm280k.integrated <- RunUMAP(bm280k.integrated, dims = 1:50)
DimPlot(bm280k.integrated, group.by = "orig.ident")
image.png

你可能感兴趣的:(单细胞36计之16欲擒故纵---集成大型数据集的技巧)