單細(xì)胞分析|Seurat中的跨模態(tài)整合

簡介

在單細(xì)胞基因組學(xué)領(lǐng)域,將新數(shù)據(jù)集映射到已建立的參考數(shù)據(jù)集上的能力,與讀取映射工具變革基因組序列分析的方式如出一轍。

一個關(guān)鍵的挑戰(zhàn)是將這種參考映射框架擴(kuò)展到不測量基因表達(dá)的技術(shù),即使底層參考是基于單細(xì)胞RNA測序(scRNA-seq)的。在Hao et al, Nat Biotechnol 2023中,介紹了“橋接整合”(bridge integration),它使得將補(bǔ)充技術(shù)(如單細(xì)胞ATAC-seq(scATAC-seq)、單細(xì)胞DNA甲基化(scDNAme)、細(xì)胞因子分析(CyTOF))映射到scRNA-seq參考數(shù)據(jù)上成為可能,使用一個“多組學(xué)”數(shù)據(jù)集作為分子橋接。

在本文中,我們將展示如何將人類PBMC的scATAC-seq數(shù)據(jù)集映射到我們之前構(gòu)建的PBMC參考數(shù)據(jù)。我們使用一個公開可用的10x多組學(xué)數(shù)據(jù)集作為橋接數(shù)據(jù)集,該數(shù)據(jù)集在同一細(xì)胞中同時測量基因表達(dá)和染色質(zhì)可及性。

我們展示了以下內(nèi)容:

  • 加載和預(yù)處理scATAC-seq、多組學(xué)和scRNA-seq參考數(shù)據(jù)集
  • 通過橋接整合映射scATAC-seq數(shù)據(jù)集
  • 探索和評估所得注釋

Azimuth ATAC用于橋接整合

用戶現(xiàn)在可以在Azimuth網(wǎng)站或R中使用新發(fā)布的Azimuth ATAC工作流程自動運(yùn)行PBMC和骨髓scATAC-seq查詢的橋接整合。有關(guān)在R中本地運(yùn)行的更多詳細(xì)信息,請參見此vignette中的ATAC數(shù)據(jù)部分。

library(Seurat)
library(Signac)
library(EnsDb.Hsapiens.v86)
library(dplyr)
library(ggplot2)

加載橋接、查詢和參考數(shù)據(jù)集

我們首先加載一個包含約12,000個健康捐獻(xiàn)者的PBMC的10x多組學(xué)數(shù)據(jù)集。該數(shù)據(jù)集在同一細(xì)胞中測量RNA-seq和ATAC-seq,并可從10x Genomics 此處下載。我們遵循Signac包vignette中的加載說明。請注意,使用Signac時,請確保您使用的是最新版本的Bioconductor,因?yàn)?a target="_blank">用戶在使用較舊的BioC版本時報告了錯誤。

加載和設(shè)置10x多組學(xué)對象

# 10x hdf5文件包含兩種數(shù)據(jù)類型。
inputdata.10x <- Read10X_h5("/brahms/hartmana/vignette_data/pbmc_cellranger_arc_2/pbmc_granulocyte_sorted_10k_filtered_feature_bc_matrix.h5")

# 提取RNA和ATAC數(shù)據(jù)
rna_counts <- inputdata.10x$`Gene Expression`
atac_counts <- inputdata.10x$Peaks

# 創(chuàng)建Seurat對象
obj.multi <- CreateSeuratObject(counts = rna_counts)

# 獲取線粒體基因的百分比
obj.multi[["percent.mt"]] <- PercentageFeatureSet(obj.multi, pattern = "^MT-")

# 添加ATAC-seq檢測
grange.counts <- StringToGRanges(rownames(atac_counts), sep = c(":", "-"))
grange.use <- seqnames(grange.counts) %in% standardChromosomes(grange.counts)
atac_counts <- atac_counts[as.vector(grange.use), ]

# 獲取基因注釋
annotations <- GetGRangesFromEnsDb(ensdb = EnsDb.Hsapiens.v86)

# 切換到UCSC風(fēng)格
seqlevelsStyle(annotations) <- 'UCSC'
genome(annotations) <- "hg38"

# 包含ATAC每個片段信息的文件
frag.file <- "/brahms/hartmana/vignette_data/pbmc_cellranger_arc_2/pbmc_granulocyte_sorted_10k_atac_fragments.tsv.gz"

# 將ATAC-seq數(shù)據(jù)作為ChromatinAssay對象添加
chrom_assay <- CreateChromatinAssay(
  counts = atac_counts,
  sep = c(":", "-"),
  genome = 'hg38',
  fragments = frag.file,
  min.cells = 10,
  annotation = annotations)

# 將ATAC檢測添加到多組學(xué)對象
obj.multi[["ATAC"]] <- chrom_assay

# 根據(jù)QC指標(biāo)過濾ATAC數(shù)據(jù)
obj.multi <- subset(
  x = obj.multi,
  subset = nCount_ATAC < 7e4 &
    nCount_ATAC > 5e3 &
    nCount_RNA < 25000 &
    nCount_RNA > 1000 &
    percent.mt < 20)

scATAC-seq 查詢數(shù)據(jù)集代表來自健康捐贈者的約 10,000 個 PBMC。我們加載峰/細(xì)胞矩陣,存儲片段文件的路徑,并向?qū)ο筇砑踊蜃⑨專裱嘟M實(shí)驗(yàn)中 ATAC 數(shù)據(jù)的步驟。

加載并設(shè)置 10x scATAC-seq 查詢

我們從最近的論文中加載 reference:

obj.rna <- readRDS("/brahms/haoy/seurat4_pbmc/pbmc_multimodal_2023.rds")

映射scATAC-seq數(shù)據(jù)集使用橋接整合

現(xiàn)在我們已經(jīng)設(shè)置了參考、查詢和橋接數(shù)據(jù)集,我們可以開始整合。橋接數(shù)據(jù)集使得scRNA-seq參考和scATAC-seq查詢之間的轉(zhuǎn)換成為可能,有效地擴(kuò)展了參考數(shù)據(jù)集,使其能夠映射新的數(shù)據(jù)類型。

我們稱這個擴(kuò)展的參考為“擴(kuò)展參考”,首先設(shè)置它。請注意,您可以保存此函數(shù)的結(jié)果,而無需重新運(yùn)行即可映射多個scATAC-seq數(shù)據(jù)集。

首先,我們丟棄ATAC降維的第一個維度。

dims.atac <- 2:50
dims.rna <- 1:50
DefaultAssay(obj.multi) <- "RNA"
DefaultAssay(obj.rna) <- "SCT"
obj.rna.ext <- PrepareBridgeReference(
  reference = obj.rna,
  bridge = obj.multi,
  reference.reduction = "spca",
  reference.dims = dims.rna,
  normalization.method = "SCT")

現(xiàn)在,我們可以直接在擴(kuò)展參考和查詢對象之間找到錨點(diǎn)。我們使用FindBridgeTransferAnchors函數(shù),它使用與轉(zhuǎn)換參考相同的字典來轉(zhuǎn)換查詢數(shù)據(jù)集,然后在該空間中識別錨點(diǎn)。該函數(shù)旨在模仿我們的FindTransferAnchors函數(shù),但是要識別跨模態(tài)的對應(yīng)關(guān)系。

bridge.anchor <- FindBridgeTransferAnchors(
  extended.reference = obj.rna.ext,
  query = obj.atac,
  reduction = "lsiproject",
  dims = dims.atac)

一旦我們識別了錨點(diǎn),我們就可以將查詢數(shù)據(jù)集映射到參考上。MapQuery函數(shù)與我們之前介紹的用于參考映射的函數(shù)相同。它從參考數(shù)據(jù)集中轉(zhuǎn)移細(xì)胞注釋,并且還在先前計算的UMAP嵌入上可視化查詢數(shù)據(jù)集。由于我們的參考數(shù)據(jù)集包含三個分辨率級別的細(xì)胞類型注釋(l1 - l3),我們可以將每個級別轉(zhuǎn)移到查詢數(shù)據(jù)集中。

obj.atac <- MapQuery(
  anchorset = bridge.anchor,
  reference = obj.rna.ext,
  query = obj.atac,
  refdata = list(
    l1 = "celltype.l1",
    l2 = "celltype.l2",
    l3 = "celltype.l3"
  ),
  reduction.model = "wnn.umap")

現(xiàn)在我們可以可視化結(jié)果,在參考UMAP嵌入上繪制基于其預(yù)測注釋的scATAC-seq細(xì)胞。您可以看到,每個scATAC-seq細(xì)胞都根據(jù)scRNA-seq定義的細(xì)胞本體學(xué)被分配了一個細(xì)胞名稱。

DimPlot(
  obj.atac, group.by = "predicted.l2",
  reduction = "ref.umap", label = TRUE
) + ggtitle("ATAC") + NoLegend()

評估映射

為了評估映射和細(xì)胞類型預(yù)測,我們首先看看預(yù)測的細(xì)胞類型標(biāo)簽是否與scATAC-seq數(shù)據(jù)集的無監(jiān)督分析一致。我們遵循scATAC-seq數(shù)據(jù)的標(biāo)準(zhǔn)無監(jiān)督處理工作流程:

obj.atac <- FindTopFeatures(obj.atac, min.cutoff = "q0")
obj.atac <- RunSVD(obj.atac)
obj.atac <- RunUMAP(obj.atac, reduction = "lsi", dims = 2:50)

現(xiàn)在,我們在無監(jiān)督UMAP嵌入上可視化預(yù)測的簇標(biāo)簽。我們可以看到,預(yù)測的簇標(biāo)簽(來自scRNA-seq參考)與scATAC-seq數(shù)據(jù)的結(jié)構(gòu)一致。然而,有些細(xì)胞類型(例如Treg)在無監(jiān)督分析中似乎沒有分開。這些可能是預(yù)測錯誤,或者是參考映射提供額外分辨率的情況。

DimPlot(obj.atac, group.by = "predicted.l2", reduction = "umap", label = FALSE)

最后,我們通過檢查scATAC-seq數(shù)據(jù)在典型位點(diǎn)的染色質(zhì)可及性剖面來驗(yàn)證預(yù)測的細(xì)胞類型。我們使用CoveragePlot函數(shù)在CD8A、FOXP3和RORC處可視化可及性模式,按照其預(yù)測標(biāo)簽對細(xì)胞進(jìn)行分組。我們在每種情況下都看到了預(yù)期的模式。例如,PAX5位點(diǎn)顯示出僅在B細(xì)胞中可訪問的峰,CD8A位點(diǎn)在CD8 T細(xì)胞亞群中也是如此。同樣,預(yù)測的Tregs中FOXP3的可及性為我們的預(yù)測準(zhǔn)確性提供了強(qiáng)有力的支持。

CoveragePlot(
  obj.atac, region = "PAX5", group.by = "predicted.l1",
  idents = c("B", "CD4 T", "Mono", "NK"), window = 200,
  extend.upstream = -150000
)
CoveragePlot(
  obj.atac, region = "CD8A", group.by = "predicted.l2",
  idents = c("CD8 Naive", "CD4 Naive", "CD4 TCM", "CD8 TCM"),
  extend.downstream = 5000, extend.upstream = 5000
)
CoveragePlot(
  obj.atac, region = "FOXP3", group.by = "predicted.l2",
  idents = c("CD4 Naive", "CD4 TCM", "CD4 TEM", "Treg"),
  extend.downstream = 0, extend.upstream = 0
)
CoveragePlot(
  obj.atac, region = "RORC", group.by = "predicted.l2",
  idents = c("CD8 Naive", "CD8 TEM", "CD8 TCM", "MAIT"),
  extend.downstream = 5000, extend.upstream = 5000
)

未完待續(xù),歡迎關(guān)注!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容