单细胞分析:多模态 reference mapping (2)

2024-05-11 00:52

本文主要是介绍单细胞分析:多模态 reference mapping (2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

本文[1]介绍了如何在Seurat软件中将查询数据集与经过注释的参考数据集进行匹配。我们展示了如何将来自不同个体的人类骨髓细胞(Human BMNC)的人类细胞图谱(Human Cell Atlas)数据集,有序地映射到一个统一的参考框架上。

我们之前利用参考映射的方法来标注查询数据集中的细胞标签。在Seurat v4版本中,大幅提高了执行集成任务,包括参考映射的速度和内存效率,并且还新增了将查询细胞投影到之前计算好的UMAP(Uniform Manifold Approximation and Projection,均匀流形近似和投影)可视化界面的功能。

内容

在本示例中,我们将展示如何利用一个已经建立的参考数据集来解读单细胞RNA测序(scRNA-seq)查询:

  1. 根据参考数据集定义的细胞状态集,对每个查询细胞进行标注。
  2. 将每个查询细胞投影到之前计算完成的UMAP可视化界面上。
  3. 估算在CITE-seq参考数据集中测量到的表面蛋白的预测水平。

要运行本示例,请确保安装了Seurat v4,该软件可在CRAN上下载。同时,您还需要安装SeuratDisk包。

library(Seurat)
library(ggplot2)
library(patchwork)

options(SeuratData.repo.use = "http://seurat.nygenome.org")

Example 2:绘制人类骨髓细胞图谱

Data

例如,我们将由人类细胞图谱项目生成的,来自八位不同捐献者的人类骨髓单核细胞(BMNC)数据集进行了映射。我们以之前使用加权最近邻分析(WNN)方法分析过的人类BMNC的CITE-seq参考集作为比对标准。

本文除了展示与之前PBMC案例相同的参考映射功能外,还进一步介绍了:

  • 如何构建一个监督的主成分分析(sPCA)转换。
  • 如何将多个不同的数据集依次映射到同一个参考集上。
  • 采取哪些优化措施来提高映射过程的速度。
# Both datasets are available through SeuratData
library(SeuratData)
#load reference data
InstallData("bmcite")
bm <- LoadData(ds = "bmcite")
#load query data
InstallData('hcabm40k')
hcabm40k <- LoadData(ds = "hcabm40k")

参考数据集构建了一个加权最近邻(WNN)图,该图体现了在本次CITE-seq实验中RNA和蛋白质数据的加权整合情况。

基于这个WNN图,我们可以生成一个UMAP(Uniform Manifold Approximation and Projection)的可视化表示。在计算过程中,我们设置参数return.modelTRUE,这样就可以将待查询的数据集映射到这个UMAP可视化空间中。

bm <- RunUMAP(bm, nn.name = "weighted.nn", reduction.name = "wnn.umap"
              reduction.key = "wnnUMAP_", return.model = TRUE)
DimPlot(bm, group.by = "celltype.l2", reduction = "wnn.umap"
alt

计算 sPCA 变换

如我们在论文中所述,我们首先执行一个“监督式”的主成分分析(PCA)。该分析旨在找出转录组数据的最佳转换方式,以最准确地反映加权最近邻(WNN)图中的结构特征。通过这种方法,我们可以将蛋白质和RNA的测量值进行加权组合,以“指导”PCA的计算过程,从而凸显出数据中最为重要的变异因素。一旦计算出这种转换,就可以将其应用到任何查询数据集上。尽管我们也可以计算并应用传统的PCA投影,但在处理通过WNN分析构建的多模态参考数据时,我们更推荐使用监督式PCA(sPCA)。

sPCA的计算过程只需进行一次,之后就可以快速地将其应用到每一个查询数据集上。

bm <- ScaleData(bm, assay = 'RNA')
bm <- RunSPCA(bm, assay = 'RNA', graph = 'wsnn')

计算缓存的邻居索引

鉴于我们需要将多个查询样本与同一个参考集进行比对,我们可以对那些仅与参考集相关的特定步骤进行缓存处理。这个步骤虽然是可选的,但在处理多个样本的映射时,它可以有效提升运算速度。

我们首先在参考集的监督式PCA(sPCA)空间内计算出前50个最近邻。然后,我们将这些信息保存在Seurat对象的spca.annoy.neighbors属性中,并通过设置cache.index = TRUE来缓存annoy索引数据结构。

bm <- FindNeighbors(
  object = bm,
  reduction = "spca",
  dims = 1:50,
  graph.name = "spca.annoy.neighbors"
  k.param = 50,
  cache.index = TRUE,
  return.neighbor = TRUE,
  l2.norm = TRUE
)
  • 如何保存和加载缓存的烦恼索引?

如果您需要保存或加载一个利用 "annoy" 方法和启用了缓存索引(通过设置 cache.index = TRUE)创建的 Neighbor 对象的缓存索引,可以使用 SaveAnnoyIndex() 和 LoadAnnoyIndex() 这两个函数来完成。需要注意的是,这个索引不能通过常规方式保存到 RDS 或 RDA 文件,这意味着它不会在 R 会话重新启动或使用 saveRDS/readRDS 函数保存和读取包含该索引的 Seurat 对象时被正确保留。因此,每次当 R 重新启动或者您从 RDS 文件加载参考 Seurat 对象时,都需要使用 LoadAnnoyIndex() 函数来重新将 Annoy 索引加载到 Neighbor 对象中。SaveAnnoyIndex() 函数生成的文件可以与参考 Seurat 对象一起分发,以便在需要时将其添加到参考对象中的 Neighbor 对象里。

bm[["spca.annoy.neighbors"]]

## A Neighbor object containing the 50 nearest neighbors for 30672 cells

SaveAnnoyIndex(object = bm[["spca.annoy.neighbors"]], file = "/brahms/shared/vignette-data/reftmp.idx")
bm[["spca.annoy.neighbors"]] <- LoadAnnoyIndex(object = bm[["spca.annoy.neighbors"]], file = "/brahms/shared/vignette-data/reftmp.idx")

查询数据集预处理

本节我们将展示如何将来自多位捐献者的骨髓样本与一个多模态骨髓参考集进行比对。这些待查询的数据集来源于人类细胞图谱(Human Cell Atlas,HCA)的免疫细胞图谱中的骨髓数据集,可以通过SeuratData包访问。提供的数据集是一个合并后的对象,涵盖了8位捐献者的数据。我们首先需要将这些数据拆分成8个独立的Seurat对象,对应每位捐献者,然后分别进行映射分析。

library(dplyr)
library(SeuratData)
InstallData('hcabm40k')
hcabm40k.batches <- SplitObject(hcabm40k, split.by = "orig.ident")

接下来,我们按照参考数据集的处理方式对查询数据集进行标准化处理。具体来说,参考数据集是通过NormalizeData()函数采用对数标准化的方法进行处理的。如果参考数据集是利用SCTransform()函数进行标准化的,那么查询数据集同样需要应用SCTransform()函数来进行标准化处理。

hcabm40k.batches <- lapply(X = hcabm40k.batches, FUN = NormalizeData, verbose = FALSE)

Mapping

接下来,我们在每位捐献者的数据集与多模态参考集之间确定锚点。为了缩短映射时间,我们采用了一种优化的命令,该命令通过输入预先计算好的参考邻居集合,并关闭锚点筛选功能来实现效率提升。

anchors <- list()
for (i in 1:length(hcabm40k.batches)) {
  anchors[[i]] <- FindTransferAnchors(
    reference = bm,
    query = hcabm40k.batches[[i]],
    k.filter = NA,
    reference.reduction = "spca"
    reference.neighbors = "spca.annoy.neighbors"
    dims = 1:50
  )
}

然后我们单独映射每个数据集。

for (i in 1:length(hcabm40k.batches)) {
  hcabm40k.batches[[i]] <- MapQuery(
    anchorset = anchors[[i]], 
    query = hcabm40k.batches[[i]],
    reference = bm, 
    refdata = list(
      celltype = "celltype.l2"
      predicted_ADT = "ADT"),
    reference.reduction = "spca",
    reduction.model = "wnn.umap"
  )
}

探索映射结果

现在映射已完成,我们可以可视化各个对象的结果

p1 <- DimPlot(hcabm40k.batches[[1]], reduction = 'ref.umap', group.by = 'predicted.celltype', label.size = 3)
p2 <- DimPlot(hcabm40k.batches[[2]], reduction = 'ref.umap', group.by = 'predicted.celltype', label.size = 3)
p1 + p2 + plot_layout(guides = "collect")
alt

我们还可以把所有的数据对象合并成一个统一的数据集。需要注意的是,这些数据对象都已经通过参考集被整合到了一个共同的分析空间中。之后,我们就能够将这些数据的分析结果一并展现出来。

# Merge the batches 
hcabm40k <- merge(hcabm40k.batches[[1]], hcabm40k.batches[2:length(hcabm40k.batches)], merge.dr = "ref.umap")
DimPlot(hcabm40k, reduction = "ref.umap", group.by =  "predicted.celltype", label = TRUE, repel = TRUE, label.size = 3) + NoLegend()
alt

我们可以对查询细胞中的基因表达模式、聚类预测得分以及(估算得到的)表面蛋白水平进行可视化展示:

p3 <- FeaturePlot(hcabm40k, features = c("rna_TRDC""rna_MPO""rna_AVP"), reduction = 'ref.umap'
                  max.cutoff = 3, ncol = 3)

# cell type prediction scores
DefaultAssay(hcabm40k) <- 'prediction.score.celltype'
p4 <- FeaturePlot(hcabm40k, features = c("CD16 Mono""HSC""Prog-RBC"), ncol = 3
                  cols = c("lightgrey""darkred"))

# imputed protein levels
DefaultAssay(hcabm40k) <- 'predicted_ADT'
p5 <- FeaturePlot(hcabm40k, features = c("CD45RA""CD16""CD161"), reduction = 'ref.umap',
                  min.cutoff = 'q10', max.cutoff = 'q99', cols = c("lightgrey""darkgreen") ,
                  ncol = 3)
p3 / p4 / p5
alt
Reference
[1]

Source: https://satijalab.org/seurat/articles/multimodal_reference_mapping

本文由 mdnice 多平台发布

这篇关于单细胞分析:多模态 reference mapping (2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/978046

相关文章

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

线性因子模型 - 独立分量分析(ICA)篇

序言 线性因子模型是数据分析与机器学习中的一类重要模型,它们通过引入潜变量( latent variables \text{latent variables} latent variables)来更好地表征数据。其中,独立分量分析( ICA \text{ICA} ICA)作为线性因子模型的一种,以其独特的视角和广泛的应用领域而备受关注。 ICA \text{ICA} ICA旨在将观察到的复杂信号

【软考】希尔排序算法分析

目录 1. c代码2. 运行截图3. 运行解析 1. c代码 #include <stdio.h>#include <stdlib.h> void shellSort(int data[], int n){// 划分的数组,例如8个数则为[4, 2, 1]int *delta;int k;// i控制delta的轮次int i;// 临时变量,换值int temp;in

三相直流无刷电机(BLDC)控制算法实现:BLDC有感启动算法思路分析

一枚从事路径规划算法、运动控制算法、BLDC/FOC电机控制算法、工控、物联网工程师,爱吃土豆。如有需要技术交流或者需要方案帮助、需求:以下为联系方式—V 方案1:通过霍尔传感器IO中断触发换相 1.1 整体执行思路 霍尔传感器U、V、W三相通过IO+EXIT中断的方式进行霍尔传感器数据的读取。将IO口配置为上升沿+下降沿中断触发的方式。当霍尔传感器信号发生发生信号的变化就会触发中断在中断

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据