引言
本系列开启 R 中scRNA-seq数据分析教程,持续更新,欢迎关注,转发!想要获取更多教程内容或者生信分析服务可以添加文末的学习交流群或客服QQ:941844452。
基于 Seurat 的标签转移方法
目前最主流的标签转移方法,也就是 Seurat 中实现的基于锚点的标签转移。它的原理不算太复杂。首先,它会把参考数据集中用过的降维方式(比如 PCA)同样应用到查询数据上。然后,它会尝试找出两个数据集之间的“锚点”。所谓锚点,就是一对细胞——一个来自参考数据,一个来自查询数据——它们在变换后的数据上计算距离时互为最近邻。这些锚点还会再经过筛选,要求两细胞在原始表达空间上有一定相似性。接着,会生成一个权重矩阵,用来描述每个查询细胞和每个锚点之间的关系。最后,这个权重矩阵会被用来根据权重,把锚点参考细胞的标签或数值传递给查询细胞。
这些步骤都已经被整合到 Seurat 的两个函数中:FindTransferAnchors 和 TransferData。下面是我们针对参考和查询大脑类器官数据集提供的示例代码。
anchors <- FindTransferAnchors(reference = seurat_ref, query = seurat_DS1, dims = 1:30, npcs = 30)
predictions <- TransferData(anchorset = anchors, refdata = seurat_ref$celltype, dims = 1:30)
seurat_DS1$celltype_transfer <- predictions$predicted.id
plot1 <- UMAPPlot(seurat_DS1, label=T)
plot2 <- UMAPPlot(seurat_DS1, group.by="celltype_transfer", label=T)
plot1 | plot2
TransferData 函数的输出不仅有预测的标签,还提供了更多细节。对于需要转移的分类信息(比如这里的细胞类型标签),输出数据框中还包括每个细胞针对不同参考细胞类型的预测得分,这些得分可以理解为每个查询细胞属于某种细胞类型的概率估计。这样,我们就可以把这些得分汇总到查询细胞的群集上,进行对比分析。
pred_scores_sum2cl <- t(sapply(levels(seurat_DS1@active.ident), function(cl)
colMeans(predictions[which(seurat_DS1@active.ident == cl),-c(1,ncol(predictions))]) ))
heatmap.2(pred_scores_sum2cl, scale="none", trace="none", key=F, keysize=0.5, margins=c(15,17),
labRow = colnames(avg_expr_ds1), labCol = unique(seurat_ref$celltype), cexRow=0.8, cexCol=0.8,
col=colorRampPalette(rev(c("#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac")))(30))
其他方法
上面只介绍了两种(或者三种)方法,但其实还有更多选择。比如,一些数据整合方法,像之前提到的 CSS 和 Harmony,就能支持将查询数据投影到参考数据上(CSS 本身就支持这个功能,而 Harmony 整合过的参考数据可以通过 Symphony 来实现)。不过它们的局限在于,参考数据必须先用这些方法处理过。另外,还有基于深度学习的方法,可以用来构建参考数据集的模型,然后应用到其他数据集上进行查询。比如 Theis 实验室开发的 Sfaira就是一例。但显然,这也要求参考数据得在这个框架下处理过。所有这些方法在特定情况下可能会比我们介绍的几种表现更好,但我们提到的这两种/三种方法对参考数据的分析要求没那么多限制,所以通常是我们会先尝试的。
不过,有一点得时刻记在心里:这些分析其实都默认参考数据集是完备的,也就是说,它包含了查询数据里所有的细胞类型或状态。但实际情况往往并非如此。所以,我们不能光靠跟参考数据的对比就下结论,还得再看看标记基因的表达情况,或者用一些定量的指标来评估投影出来的细胞类型或状态,跟查询数据里的细胞群体到底有多相似。
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。