单细胞转录组|scATAC-seq 数据整合

简介: 单细胞转录组|scATAC-seq 数据整合

引言

本文在此展示了如何将多个源自人类外周血单核细胞的单细胞染色质数据集进行整合。其中一个数据集是通过10x Genomics的多组学技术获得的,它涵盖了每个细胞的DNA可及性和基因表达数据。另一个数据集则是通过10x Genomics的单细胞ATAC测序(scATAC-seq)技术得到的,仅包含DNA可及性信息。

将利用Seurat软件包中的工具,基于两者共有的DNA可及性检测方法,将这两个数据集合并。此外,本文还将展示如何将连续变量(如基因表达)和分类变量(如细胞标签)的信息,从一个参考数据集转移到另一个查询数据集中。

预处理

在这里,将加载预处理的 PBMC 多组数据以及 PBMC scATAC-seq 数据:

library(Signac)
library(Seurat)
library(ggplot2)

# load the pre-processed multiome data
pbmc.multi <- readRDS("pbmc_multiome/pbmc_multiomic.rds")

# load the pre-processed atac data
pbmc.atac <- readRDS("pbmc_vignette/pbmc.rds")

进行单细胞染色质数据综合分析时,关键的第一步是确认每个数据集都包含了相同的特征。为此,对ATAC数据集中的多组学峰值进行了量化,以确保两个数据集之间存在共通之处。更多关于如何合并染色质检测的信息,请参阅合并指南。

# quantify multiome peaks in the scATAC-seq dataset
counts <- FeatureMatrix(
  fragments = Fragments(pbmc.atac),
  features = granges(pbmc.multi),
  cells = colnames(pbmc.atac)
)

# add new assay with multiome peaks
pbmc.atac[['ATAC']] <- CreateChromatinAssay(
  counts = counts,
  fragments = Fragments(pbmc.atac)
)

# compute LSI
DefaultAssay(pbmc.atac) <- "ATAC"
pbmc.atac <- FindTopFeatures(pbmc.atac, min.cutoff = 10)
pbmc.atac <- RunTFIDF(pbmc.atac)
pbmc.atac <- RunSVD(pbmc.atac)

然后,可以将多组学数据和单细胞ATAC数据集合并,注意到它们之间存在差异,这种差异似乎源于批次效应(即由实验和特定技术引起的变异)。

# first add dataset-identifying metadata
pbmc.atac$dataset <- "ATAC"
pbmc.multi$dataset <- "Multiome"

# merge
pbmc.combined <- merge(pbmc.atac, pbmc.multi)

# process the combined dataset
pbmc.combined <- FindTopFeatures(pbmc.combined, min.cutoff = 10)
pbmc.combined <- RunTFIDF(pbmc.combined)
pbmc.combined <- RunSVD(pbmc.combined)
pbmc.combined <- RunUMAP(pbmc.combined, reduction = "lsi", dims = 2:30)
p1 <- DimPlot(pbmc.combined, group.by = "dataset")

整合

为了在两个数据集之间建立整合的基准点,需要将它们映射到一个共同的低维空间。将通过设置reduction参数为"rlsi",使用互反最小二乘投影(即让每个数据集映射到对方的最小二乘空间)来实现这一点。

与通常对单细胞RNA测序(scRNA-seq)数据进行的标准化数据矩阵整合不同,将使用IntegrateEmbeddings()函数,对跨数据集的低维细胞嵌入(即最小二乘坐标)进行整合。

# find integration anchors
integration.anchors <- FindIntegrationAnchors(
  object.list = list(pbmc.multi, pbmc.atac),
  anchor.features = rownames(pbmc.multi),
  reduction = "rlsi",
  dims = 2:30
)

# integrate LSI embeddings
integrated <- IntegrateEmbeddings(
  anchorset = integration.anchors,
  reductions = pbmc.combined[["lsi"]],
  new.reduction.name = "integrated_lsi",
  dims.to.integrate = 1:30
)

# create a new UMAP using the integrated embeddings
integrated <- RunUMAP(integrated, reduction = "integrated_lsi", dims = 2:30)
p2 <- DimPlot(integrated, group.by = "dataset")

最终,对比了合并与整合后的数据集结果,发现整合过程成功地去除了数据集中由技术差异引起的变异,同时保留了与细胞类型相关的(生物学上的)变异。

(p1 + ggtitle("Merged")) | (p2 + ggtitle("Integrated"))

在这里,演示了使用两个数据集的整合方法,但可以应用相同的工作流程来整合任意数量的数据集。

Reference mapping

当手头有一个数据量庞大且质量上乘的数据集,或者是一个包含了其他数据集中没有的独特信息(比如细胞类型的标注或额外的数据形式)的数据集时,通常希望将其作为基准数据集,并把查询数据集映射到它上面,这样就能在已有基准的背景下对查询数据集进行解读。

为了展示如何利用单细胞染色质的基准数据集和查询数据集来实现这一点,将把PBMC多组学数据集作为基准,并利用Seurat软件包中的FindTransferAnchors()和MapQuery()函数,将scATAC-seq数据集映射到这个基准数据集上。

# compute UMAP and store the UMAP model
pbmc.multi <- RunUMAP(pbmc.multi, reduction = "lsi", dims = 2:30, return.model = TRUE)

# find transfer anchors
transfer.anchors <- FindTransferAnchors(
  reference = pbmc.multi,
  query = pbmc.atac,
  reference.reduction = "lsi",
  reduction = "lsiproject",
  dims = 2:30
)

# map query onto the reference dataset
pbmc.atac <- MapQuery(
  anchorset = transfer.anchors,
  reference = pbmc.multi,
  query = pbmc.atac,
  refdata = pbmc.multi$predicted.id,
  reference.reduction = "lsi",
  new.reduction.name = "ref.lsi",
  reduction.model = 'umap'
)
  • MapQuery() 函数的作用是什么?

MapQuery() 是一个辅助函数,它自动执行 TransferData()、IntegrateEmbeddings() 和 ProjectUMAP() 这三个步骤,用于处理查询数据集,并根据生成锚点对象的方式自动设定合适的默认参数。如果你需要更细致地调整这些函数的参数,你可以通过 MapQuery() 传递参数到每个具体的函数,使用 MapQuery() 提供的 transferdata.args、integrateembeddings.args 和 projectumap.args 参数,或者你也可以直接单独运行这些函数。例如:

pbmc.atac <- TransferData(
  anchorset = transfer.anchors, 
  reference = pbmc.multi,
  weight.reduction = "lsiproject",
  query = pbmc.atac,
  refdata = list(
    celltype = "predicted.id",
    predicted_RNA = "RNA")
)
pbmc.atac <- IntegrateEmbeddings(
  anchorset = transfer.anchors,
  reference = pbmc.multi,
  query = pbmc.atac, 
  reductions = "lsiproject",
  new.reduction.name = "ref.lsi"
)
pbmc.atac <- ProjectUMAP(
  query = pbmc.atac, 
  query.reduction = "ref.lsi",
  reference = pbmc.multi, 
  reference.reduction = "lsi",
  reduction.model = "umap"
)

执行了 MapQuery() 函数后,成功地将单细胞ATAC测序(scATAC-seq)数据集与多模态基准数据集进行了映射,并且实现了从基准数据集到查询数据集的细胞类型标签传递。现在,可以将这些映射结果进行可视化,并查看与 scATAC-seq 数据集现在关联的细胞类型标签:

p1 <- DimPlot(pbmc.multi, reduction = "umap", group.by = "predicted.id", label = TRUE, repel = TRUE) + NoLegend() + ggtitle("Reference")
p2 <- DimPlot(pbmc.atac, reduction = "ref.umap", group.by = "predicted.id", label = TRUE, repel = TRUE) + NoLegend() + ggtitle("Query")

p1 | p2

RNA 数据填充

之前已经将分类信息(即细胞标签)转移,并把查询数据映射到了已有的参考 UMAP 上。同样,也可以将连续数据从参考数据集转移到查询数据集中。这里,展示了如何将基因表达数据从 PBMC 多组学数据集(该数据集在同一细胞中同时测量了 DNA 可及性和基因表达)转移到只测量了 DNA 可及性的 PBMC scATAC-seq 数据集中。需要注意的是,也可以通过在上述 MapQuery() 函数调用中设置 refdata 参数为一个值列表,来实现这些数据的转移。

# predict gene expression values
rna <- TransferData(
  anchorset = transfer.anchors,
  refdata = LayerData(pbmc.multi, assay = "SCT", layer = "data"),
  weight.reduction = pbmc.atac[["lsi"]],
  dims = 2:30
)

# add predicted values as a new assay
pbmc.atac[["predicted"]] <- rna

可以查看一些免疫标记基因,发现预测的表达模式与基于已知表达模式的预期相符。

DefaultAssay(pbmc.atac) <- "predicted"

FeaturePlot(
  object = pbmc.atac,
  features = c('MS4A1', 'CD3D', 'LEF1', 'NKG7', 'TREM1', 'LYZ'),
  pt.size = 0.1,
  max.cutoff = 'q95',
  reduction = "ref.umap",
  ncol = 3
)

相关文章
|
10天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
7天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2513 16
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
6天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1520 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
2天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
9天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
545 14
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19282 30
|
9天前
|
人工智能 自动驾驶 机器人
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
过去22个月,AI发展速度超过任何历史时期,但我们依然还处于AGI变革的早期。生成式AI最大的想象力,绝不是在手机屏幕上做一两个新的超级app,而是接管数字世界,改变物理世界。
464 48
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18837 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17526 13
Apache Paimon V0.9最新进展
|
1天前
|
云安全 存储 运维
叮咚!您有一份六大必做安全操作清单,请查收
云安全态势管理(CSPM)开启免费试用
359 4
叮咚!您有一份六大必做安全操作清单,请查收