前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Seurat 4.0 || 单细胞BMNC多模态参考数据集

Seurat 4.0 || 单细胞BMNC多模态参考数据集

作者头像
生信技能树jimmy
发布2020-11-09 14:21:47
1.1K0
发布2020-11-09 14:21:47
举报
文章被收录于专栏:单细胞天地单细胞天地

分享是一种态度

作者 | 周运来

男,

一个长大了才会遇到的帅哥,

稳健,潇洒,大方,靠谱。

一段生信缘,一棵技能树。

生信技能树核心成员,单细胞天地特约撰稿人,简书创作者,单细胞数据科学家。

前情回顾

Seurat 4.0 || 您的单细胞数据分析工具箱上新啦 Seurat 4.0 || 单细胞多模态数据整合算法WNN Seurat 4.0 || 分析scRNA和膜蛋白数据 Seurat 4.0 || WNN整合scRNA和scATAC数据 Seurat 4.0 || 单细胞PBMC多模态参考数据集

正文

多模态数据越来越多地用来分析单细胞的状态,在之前的文章中我们介绍了PBMC的多模态数据集,它使我们可以快速方便地定义PBMC细胞类型。这里我们绘制了一个人类骨髓单核细胞(BMNC)数据集,这些细胞来自8个捐赠者,由人类细胞图谱(HCA)制作。我们使用人类BMNC的CITE-seq参考数据集,并使用加权最近邻分析(WNN)进行分析。

这里展示了与的PBMC示例相同的参考数据映射功能。此外,我们还将演示:

  • 如何构造一个监督的PCA (sPCA)转换
  • 如何映射多个数据集到同一个参考数据集上
  • 优化步骤,进一步提高映射速度
代码语言:javascript
复制
library(Seurat)
# Both datasets are available through SeuratData
library(SeuratData)
#load reference data
# InstallData("bmcite")
bm <- LoadData(ds = "bmcite")
bm

An object of class Seurat 
17034 features across 30672 samples within 2 assays 
Active assay: RNA (17009 features, 2000 variable features)
 1 other assay present: ADT
 1 dimensional reduction calculated: spca

#load query data
InstallData('hcabm40k')
library(hcabm40k.SeuratData)
hcabm40k
# hcabm40k <- LoadData(ds = "hcabm40k")

hcabm40k
An object of class Seurat 
17369 features across 40000 samples within 1 assay 
Active assay: RNA (17369 features, 0 variable features)

 head(hcabm40k@meta.data)
                                     orig.ident nCount_RNA nFeature_RNA
MantonBM1_HiSeq_8-CCCAATCGTATGCTTG-1  MantonBM1       3235          856
MantonBM1_HiSeq_8-CTGCTGTAGGACACCA-1  MantonBM1       1566          653
MantonBM1_HiSeq_3-CAGCTGGGTACATGTC-1  MantonBM1       2103          716
MantonBM1_HiSeq_7-GCTTCCAAGATGTAAC-1  MantonBM1       1798          750
MantonBM1_HiSeq_6-AGTGAGGCAGGGTTAG-1  MantonBM1      11540         2760
MantonBM1_HiSeq_5-ATGTGTGCACCGAATT-1  MantonBM1      25616         1966

参考数据集包含一个WNN图,反映了本次CITE-seq实验中RNA和蛋白质数据的加权组合。我们可以根据这个图计算UMAP可视化。我们设置return.model = TRUE,,这将使我们能够将查询数据集投影到参考数据集可视化空间中。

代码语言:javascript
复制

 bm <- RunUMAP(bm, nn.name = "weighted.nn", reduction.name = "wnn.umap", 
              reduction.key = "wnnUMAP_", return.model = TRUE)

head(bm@meta.data)
                     orig.ident nCount_RNA nFeature_RNA nCount_ADT nFeature_ADT      lane  donor      celltype.l1 celltype.l2 RNA.weight
a_AAACCTGAGCTTATCG-1     bmcite       7546         2136       1350           25 HumanHTO4 batch1 Progenitor cells    Prog_RBC  0.4827011
a_AAACCTGAGGTGGGTT-1     bmcite       1029          437       2970           25 HumanHTO1 batch1           T cell         gdT  0.2417890
a_AAACCTGAGTACATGA-1     bmcite       1111          429       2474           23 HumanHTO5 batch1           T cell   CD4 Naive  0.5077136
a_AAACCTGCAAACCTAC-1     bmcite       2741          851       4799           25 HumanHTO3 batch1           T cell  CD4 Memory  0.4313079
a_AAACCTGCAAGGTGTG-1     bmcite       2099          843       5434           25 HumanHTO2 batch1          Mono/DC   CD14 Mono  0.5685085
a_AAACCTGCACGGTAGA-1     bmcite       2291          783       4658           25 HumanHTO6 batch1           B cell     Naive B  0.4255879

代码语言:javascript
复制
DimPlot(bm, group.by = "celltype.l2", reduction = "wnn.umap")

正如我们在手稿中所描述的,我们首先计算一个“监督的”PCA。这标识了WNN图结构的transcriprome转换。使得蛋白质和RNA测量的加权组合能够“监督”PCA,并突出最相关的变异来源。在计算此转换之后,我们可以将其投影到查询数据集中。我们也可以计算和投射一个PCA投影,但是建议在处理由WNN分析构建的多模态引用时使用sPCA。

sPCA计算执行一次,然后可以快速地投影到每个查询数据集中。

代码语言:javascript
复制
bm <- ScaleData(bm, assay = 'RNA')
bm <- RunSPCA(bm, assay = 'RNA', graph = 'wsnn')

因为我们将把多个查询数据映射到同一个参考数据集上,所以我们可以缓存只涉及该参考数据的特定步骤。这个步骤是可选的,但是可以提高映射多个样本的速度。我们计算参考数据集在sPCA空间中的前50个邻居,并将这些信息存储在spca中(cache.index = TRUE)。

代码语言:javascript
复制
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
)

如果你想保存和加载一个用method = "annoy"生成的Neighbor对象的缓存索引,可以使用SaveAnnoyIndex()/LoadAnnoyIndex()函数。重要的是,这个索引通常不能保存到RDS或RDA文件中,因此对于包含它的Seurat对象,它在R会话重启或saveRDS/readRDS期间将不能正确持久。相反,每次R重启时,使用LoadAnnoyIndex()将Annoy 索引添加到邻居对象,或者从RDS加载引用Seurat对象。SaveAnnoyIndex()创建的文件可以与参考数据的Seurat对象一起分发,并添加到参考集中的邻居对象。

代码语言:javascript
复制
bm[["spca.annoy.neighbors"]]              
A Neighbor object containing the 50 nearest neighbors for 30672 cells

代码语言:javascript
复制
SaveAnnoyIndex(object = bm[["spca.annoy.neighbors"]], file = "../data/reftmp.idx")
bm[["spca.annoy.neighbors"]] <- LoadAnnoyIndex(object = bm[["spca.annoy.neighbors"]], file = "../data/reftmp.idx")

在这里,我们将演示如何将多个供体骨髓样本映射到多模式骨髓参考数据上。这些查询数据集来自人类细胞图谱(HCA)免疫细胞图谱骨髓数据集,并可通过SeuratData获得。这个数据集是提供8位捐赠者的合并对象。我们首先将数据分割回8个单独的Seurat对象,每个原始捐赠者分别映射。

代码语言:javascript
复制
hcabm40k.batches <- SplitObject(hcabm40k, split.by = "orig.ident")
$MantonBM1
An object of class Seurat 
17369 features across 5000 samples within 1 assay 
Active assay: RNA (17369 features, 0 variable features)

$MantonBM2
An object of class Seurat 
17369 features across 5000 samples within 1 assay 
Active assay: RNA (17369 features, 0 variable features)

$MantonBM3
An object of class Seurat 
17369 features across 5000 samples within 1 assay 
Active assay: RNA (17369 features, 0 variable features)

$MantonBM4
An object of class Seurat 
17369 features across 5000 samples within 1 assay 
Active assay: RNA (17369 features, 0 variable features)

$MantonBM5
An object of class Seurat 
17369 features across 5000 samples within 1 assay 
Active assay: RNA (17369 features, 0 variable features)

$MantonBM6
An object of class Seurat 
17369 features across 5000 samples within 1 assay 
Active assay: RNA (17369 features, 0 variable features)

$MantonBM7
An object of class Seurat 
17369 features across 5000 samples within 1 assay 
Active assay: RNA (17369 features, 0 variable features)

$MantonBM8
An object of class Seurat 
17369 features across 5000 samples within 1 assay 
Active assay: RNA (17369 features, 0 variable features)

然后,我们以与参考数据相同的方式均一化查询。在这里,通过NormalizeData()使用log均一化对参考数据进行均一化。如果参考数据已经使用SCTransform()进行了均一化,那么查询也必须使用SCTransform()进行均一化。即,要保证两者的均一化方式是一样的。

代码语言:javascript
复制
hcabm40k.batches <- lapply(X = hcabm40k.batches, FUN = NormalizeData, verbose = FALSE)

然后我们在每个捐赠者查询数据集和多模态参考数据之间找到锚点。这个命令经过优化,通过传入预先计算的参考邻居集,并关闭锚点过滤来最小化映射时间。

代码语言:javascript
复制
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
  )
}

然后我们分别映射每个数据集。

代码语言:javascript
复制
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"
  )
}

可视化映射结果。

代码语言:javascript
复制
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")

我们还可以将所有对象合并到一个数据集中。注意,它们都被集成到由参考数据所定义的公共空间中。然后我们可以一起将结果可视化。

代码语言:javascript
复制
# 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()

代码语言:javascript
复制
head(hcabm40k@meta.data)
                                     orig.ident nCount_RNA nFeature_RNA predicted.celltype.score predicted.celltype
MantonBM1_HiSeq_8-CCCAATCGTATGCTTG-1  MantonBM1       3235          856                0.9230445           Memory B
MantonBM1_HiSeq_8-CTGCTGTAGGACACCA-1  MantonBM1       1566          653                0.7258886                 NK
MantonBM1_HiSeq_3-CAGCTGGGTACATGTC-1  MantonBM1       2103          716                0.8573307         CD4 Memory
MantonBM1_HiSeq_7-GCTTCCAAGATGTAAC-1  MantonBM1       1798          750                1.0000000          CD14 Mono
MantonBM1_HiSeq_6-AGTGAGGCAGGGTTAG-1  MantonBM1      11540         2760                0.8110870            Prog_Mk
MantonBM1_HiSeq_5-ATGTGTGCACCGAATT-1  MantonBM1      25616         1966                1.0000000        Plasmablast

我们可以可视化查询细胞中的基因表达、聚类预测分数和(估算)表面蛋白表达水平:

代码语言:javascript
复制
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


References

[1] 手稿: https://satijalab.org/seurat/v4.0/www.satijalab.org/v4preprint [2] https://satijalab.org/seurat/v4.0/reference_mapping.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 单细胞天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前情回顾
  • 正文
相关产品与服务
灰盒安全测试
腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档