Seurat软件学习3-scrna数据整合分析注释数据集

2022-10-04 15:58:13 浏览数 (1)

Seurat软件学习1-多个模型得数据进行整合:https://cloud.tencent.com/developer/article/2130078

Seurat软件学习2-scrna数据整合分析:https://cloud.tencent.com/developer/article/2131431

单细胞参考图谱介绍

在这个小节中,我们首先建立一个集成参考,然后演示如何利用这个参考来注释新的查询数据集。生成一个集成的参考与集成介绍说明中详细描述的工作流程相同。一旦生成,该参考可以通过细胞类型标签转移和将查询细胞投射到参考UMAPs等任务来分析其他查询数据集。值得注意的是,这不需要对基础的原始查询数据进行校正,因此,如果有高质量的参考数据,这将是一个有效的策略。

数据集预处理

出于本示例的目的,我们选择了通过四种技术产生的人类胰岛细胞数据集,即 CelSeq (GSE81076) CelSeq2 (GSE85241)、Fluidigm C1 (GSE86469) 和 SMART-Seq2 (E-MTAB-5061)。为方便起见,我们通过 SeuratData 包分发此数据集。元数据包含四个数据集中每个单元的技术(技术列)和单元类型注释(单元类型列)。

代码语言:javascript复制
library(Seurat)
library(SeuratData)
InstallData("panc8")

为了构建一个参考,我们将确定各个数据集之间的 "锚"。首先,我们将合并后的对象分成一个列表,每个数据集都是一个元素(这只是必要的,因为数据被捆绑在一起,便于分割)。

代码语言:javascript复制
data("panc8")
pancreas.list <- SplitObject(panc8, split.by = "tech")
pancreas.list <- pancreas.list[c("celseq", "celseq2", "fluidigmc1", "smartseq2")]

在寻找锚点之前,我们进行标准的预处理(对数正态化),并为每个人单独确定变量特征。请注意,Seurat实现了一种基于方差稳定变换("vst")的改进方法来选择变量特征。

代码语言:javascript复制
for (i in 1:length(pancreas.list)) {
    pancreas.list[[i]] <- NormalizeData(pancreas.list[[i]], verbose = FALSE)
    pancreas.list[[i]] <- FindVariableFeatures(pancreas.list[[i]], selection.method = "vst", nfeatures = 2000,
        verbose = FALSE)
}

整合3个胰岛细胞数据集

接下来,我们使用FindIntegrationAnchors()函数来识别锚点,该函数将Seurat对象的列表作为输入。在这里,我们将其中的三个对象整合到一个参考中(我们将在本小节的后面使用第四个对象作为查询数据集来演示映射)。

我们在这里使用所有的默认参数来识别锚点,包括数据集的 "维度"(30;请自由尝试在大范围内改变这个参数,例如在10和50之间)。

代码语言:javascript复制
reference.list <- pancreas.list[c("celseq", "celseq2", "smartseq2")]
pancreas.anchors <- FindIntegrationAnchors(object.list = reference.list, dims = 1:30)

然后我们将这些锚传递给IntegrateData()函数,该函数返回一个Seurat对象。

返回的对象将包含一个新的Assay,它持有所有细胞的综合(或 "批量校正")表达矩阵,使它们能够被联合分析。

代码语言:javascript复制
pancreas.integrated <- IntegrateData(anchorset = pancreas.anchors, dims = 1:30)

运行IntegrateData()后,Seurat对象将包含一个新的具有整合表达矩阵的Assay。请注意,原始的(未校正的)数值仍然保存在 "RNA "测定的对象中,所以你可以来回切换。

然后我们可以使用这个新的整合矩阵进行下游分析和可视化。在这里,我们对整合后的数据进行缩放,运行PCA,并使用UMAP对结果进行可视化。整合后的数据集按细胞类型分组,而不是按技术分组。

代码语言:javascript复制
library(ggplot2)
library(cowplot)
library(patchwork)
# switch to integrated assay. The variable features of this assay are automatically set during
# IntegrateData
DefaultAssay(pancreas.integrated) <- "integrated"
# Run the standard workflow for visualization and clustering
pancreas.integrated <- ScaleData(pancreas.integrated, verbose = FALSE)
pancreas.integrated <- RunPCA(pancreas.integrated, npcs = 30, verbose = FALSE)
pancreas.integrated <- RunUMAP(pancreas.integrated, reduction = "pca", dims = 1:30, verbose = FALSE)
p1 <- DimPlot(pancreas.integrated, reduction = "umap", group.by = "tech")
p2 <- DimPlot(pancreas.integrated, reduction = "umap", group.by = "celltype", label = TRUE, repel = TRUE)  
    NoLegend()
p1   p2
analysis-1.pnganalysis-1.png

使用综合参考的细胞类型分类

Seurat 还支持将参考数据(或元数据)投影到查询对象上。虽然许多方法是保守的(两个过程都从识别锚点开始),但数据传输和集成之间有两个重要区别:

1.在数据传输中,Seurat 不会更正或修改查询表达式数据。

2.在数据传输中,Seurat 有一个选项(默认设置)将参考的 PCA 结构投影到查询上,而不是使用 CCA 学习联合结构。我们通常建议在 scRNA-seq 数据集之间投影数据时使用此选项。

找到锚点后,我们使用 TransferData() 函数根据参考数据(参考细胞类型标签的向量)对查询细胞进行分类。 TransferData() 返回一个包含预测 ID 和预测分数的矩阵,我们可以将其添加到查询元数据中。

代码语言:javascript复制
pancreas.query <- pancreas.list[["fluidigmc1"]]
pancreas.anchors <- FindTransferAnchors(reference = pancreas.integrated, query = pancreas.query,
    dims = 1:30, reference.reduction = "pca")
predictions <- TransferData(anchorset = pancreas.anchors, refdata = pancreas.integrated$celltype,
    dims = 1:30)
pancreas.query <- AddMetaData(pancreas.query, metadata = predictions)

因为我们有来自完整集成分析的原始标签注释,所以我们可以评估我们预测的细胞类型注释与完整参考的匹配程度。在这个例子中,我们发现细胞类型分类的一致性很高,超过 96% 的细胞被正确标记。

代码语言:javascript复制
pancreas.query$prediction.match <- pancreas.query$predicted.id == pancreas.query$celltype
table(pancreas.query$prediction.match)
## 
## FALSE  TRUE 
##    21   617

为了进一步验证这一点,我们可以检查特定胰岛细胞群的一些典型细胞类型标记。请注意,即使其中一些细胞类型仅由一两个细胞(例如 epsilon 细胞)表示,我们仍然能够正确分类它们。

代码语言:javascript复制
table(pancreas.query$predicted.id)
## 
##             acinar activated_stellate              alpha               beta 
##                 22                 17                253                256 
##              delta             ductal        endothelial              gamma 
##                 22                 30                 12                 18 
##         macrophage               mast            schwann 
##                  1                  2                  5
VlnPlot(pancreas.query, c("REG1A", "PPY", "SST", "GHRL", "VWF", "SOX10"), group.by = "predicted.id")
vlnplots-1.pngvlnplots-1.png

UMAP 投影

在 Seurat v4 中,我们还启用了将查询投影到参考 UMAP 结构上。这可以通过计算参考 UMAP 模型然后调用 MapQuery() 而不是 TransferData() 来实现。

代码语言:javascript复制
pancreas.integrated <- RunUMAP(pancreas.integrated, dims = 1:30, reduction = "pca", return.model = TRUE)
pancreas.query <- MapQuery(anchorset = pancreas.anchors, reference = pancreas.integrated, query = pancreas.query,
    refdata = list(celltype = "celltype"), reference.reduction = "pca", reduction.model = "umap")

MapQuery 在做什么?

MapQuery() 是三个函数的包装器:TransferData()、IntegrateEmbeddings() 和 ProjectUMAP()。 TransferData() 用于传输细胞类型标签并估算 ADT 值; IntegrateEmbeddings() 用于通过校正查询的投影低维嵌入来整合参考与查询;最后 ProjectUMAP() 用于将查询数据投影到引用的 UMAP 结构上。使用中间函数执行此操作的等效代码如下:

代码语言:javascript复制
pancreas.query <- TransferData(anchorset = pancreas.anchors, reference = pancreas.integrated, query = pancreas.query,
    refdata = list(celltype = "celltype"))
pancreas.query <- IntegrateEmbeddings(anchorset = pancreas.anchors, reference = pancreas.integrated,
    query = pancreas.query, new.reduction.name = "ref.pca")
pancreas.query <- ProjectUMAP(query = pancreas.query, query.reduction = "ref.pca", reference = pancreas.integrated,
    reference.reduction = "pca", reduction.model = "umap")

我们现在可以在参考旁边可视化结果。

代码语言:javascript复制
p1 <- DimPlot(pancreas.integrated, reduction = "umap", group.by = "celltype", label = TRUE, label.size = 3,
    repel = TRUE)   NoLegend()   ggtitle("Reference annotations")
p2 <- DimPlot(pancreas.query, reduction = "ref.umap", group.by = "predicted.celltype", label = TRUE,
    label.size = 3, repel = TRUE)   NoLegend()   ggtitle("Query transferred labels")
p1   p2
panc.refdimplots-1.pngpanc.refdimplots-1.png

0 人点赞