前面的文章我们介绍过单细胞基于python手动注释的方法,本篇基于Seurat学习自动注释和手动注释。
不同于手工注释的标注方法,自动注释通过算法和已有标注的基因表达谱进行推断,能够快速、系统的识别出数据中的细胞群体。
SingleR是一种基于参考数据集的自动注释方法,常用于单细胞RNA测序数据的细胞类型注释。
library(Seurat)
library(SingleR)
library(celldex)
# 提取Seurat对象的归一化表达矩阵
expression_matrix <- GetAssayData(seurat_object, slot="data")
# 使用celldex包提供的小鼠参考数据集,我使用的数据集下载自10x官网小鼠脑。
reference_data <- celldex::MouseRNAseqData()
#celldex包也提供人的参考数据集
# 运行 SingleR 注释
labels <- colData(reference_data)$label.main
singleR_results <- SingleR(test = expression_matrix, ref = reference_data, labels = labels)
#singleR_results <- SingleR(test = expression_matrix, ref = reference_data)
# 查看SingleR的注释结果
head(singleR_results)
# 将注释结果添加到Seurat对象中
seurat_object$SingleR_labels <- singleR_results$labels
# 可视化结果(例如使用UMAP)
pdf("result/Dimplot_celltype_singelR.pdf", width = 50, height = 10)
DimPlot(seurat_object, group.by = "SingleR_labels", label = TRUE)
dev.off()
GPTcelltype通过OpenAI GPT模型在Seurat管道中或使用自定义基因列表对细胞类型进行注释。
library(dplyr)
library(Seurat)
library(patchwork)
library(ggplot2)
# 读取 Seurat 对象,这里是去除双胞,整合处理之后的rds文件
seurat_object <- readRDS("integration_Normal_Harmony.rds")
# 进行差异表达分析,找出每个聚类的标记基因
markers <- FindAllMarkers(seurat_object, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)
# 查看前几行标记基因
head(markers)
#填写API
Sys.setenv(OPENAI_API_KEY = 'bb56b20d26cb6292d86e676')
Sys.setenv(OPENAI_API_BASE_URL = "https://gpt-apeeoai.cv1")
#加载包#Load packages
library(GPTCelltype)
library(openai)
# Run gptcelltype function
res <- gptcelltype(markers, tissuename = 'mouse__cluster_celltype', model = 'gpt-4')
# 添加到原来的对象中
seurat_object@meta.data$celltype <- as.factor(res[as.character(Idents(seurat_object))])
# Visualize the result using DimPlot
pdf("result/Dimplot_celltype.pdf", width = 50, height = 10)
DimPlot(seurat_object, pt.size = 1,group.by = 'celltype')
dev.off()
Seurat V5 中的 TransferData 用于在单细胞 RNA-seq 数据集之间进行细胞类型注释、数据整合、交叉数据集分析,以及其他多模态数据集之间的信息转移。它的核心原理是通过找到参考数据集和目标数据集之间的共同特征或结构(锚点,anchors),将参考数据集中的信息(如细胞类型、基因表达等)转移到目标数据集中。
TransferData 通常与 FindTransferAnchors 配合使用。FindTransferAnchors 负责识别两个数据集之间的锚点,TransferData 则负责通过这些锚点将参考数据中的信息传递到目标数据集。选择参考数据集:首先,你需要一个带有已知注释(例如细胞类型)的参考数据集。目标数据集:这是你希望注释或整合的目标数据集。找到锚点:使用 FindTransferAnchors 函数找到两个数据集之间的共同结构。转移注释:使用 TransferData 函数将参考数据中的注释信息(如细胞类型或其他特征)传递到目标数据集中。
# 准备待注释数据,确保数据只有一个 layers。
seob <- JoinLayers(seob, assay = "RNA")
# 准备参考数据集
## 1. 查看可用数据集
library(SeuratData)
AvailableData() -> temp
## 2. 安装数据集
## InstallData("pbmc3k")
## install.packages("pbmc3k.SeuratData_3.1.4.tar.gz", repos = NULL, type = "source")
## 3. 加载数据集
pbmc3k <- LoadData("pbmc3k")
## 4. 更新到 V5 格式
pbmc3k <- UpdateSeuratObject(pbmc3k)
# 处理参考数据集
library(tidyverse)
pbmc3k <- SCTransform(object = pbmc3k) %>%
RunPCA(verbose = FALSE) %>%
RunUMAP(dims = 1:30, verbose = FALSE)
# 自动注释
## 找到锚点:是在两个数据集中找到相似的细胞,计算它们的相似性锚点。
anchors <- FindTransferAnchors(
reference = pbmc3k, # 参考数据集
query = seob, # 目标数据集
normalization.method = "SCT", # SCTransform 标准化
reference.reduction = "pca",
dims = 1:30 # 使用 PCA 的前 30 个主成分
)
## 传递注释:将参考数据集中的细胞类型注释转移到目标数据集中
transfer <- TransferData(
anchorset = anchors,
refdata = pbmc3k$seurat_annotations, # 参考数据集中的细胞类型注释
dims = 1:30)
## 添加注释
seob <- AddMetaData(
seob,
metadata = transfer,
col.name = "predicted.id")
# 可视化
DimPlot(seob,
reduction = "umap",
group.by = c("seurat_clusters", "predicted.id"),
label = T)
要手动注释细胞群体,首先需要根据已知的标记基因(marker genes)来确定不同群体的类型。通常来说,手动注释方法需要依据以下步骤:
1.查找候选标记基因(marker genes)
在进行细胞群体注释时,标记基因的选择非常重要。可以通过几种方式找到相关的候选基因:
Mouse Genome Informatics (MGI)
,Human Protein Atlas
,以及一些特定的基因集如 ImmGen
(免疫细胞标记基因集)等。2.从 Seurat 对象中识别标记基因
可以使用 Seurat 来对不同群体进行差异表达分析,并找到每个群体的标记基因。
library(Seurat)
# 读取 Seurat 对象
#我用的已经处理好的数据
seurat_object <- readRDS("result/integration_Normal_Harmony.rds")
# 进行差异表达分析,找出每个聚类的标记基因
markers <- FindAllMarkers(seurat_object, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)
# 查看前几行标记基因
head(markers)
#每个簇中选择前10差异表达基因表达量最高的
top2 <- markers %>% group_by(cluster) %>% top_n(n=2,wt=avg_log2FC)
g=unique(top2$gene)
DoHeatmap(seurat_object, features = g) + NoLegend()+
scale_fill_gradientn(colors = c("#2fa1dd", "white", "#f87669"))
DotPlot(seurat_object,features=g,cols="RdYlBu")+
RotatedAxis()
此代码将输出每个聚类的标记基因。可以根据这些标记基因,结合已有的文献或数据库知识,来手动注释这些细胞群。
3.通过已知标记基因手动注释
一旦得到每个簇的标记基因,就可以通过以下步骤手动注释:
Seurat
对象的元数据中。例如:
# 假设已经找到了相关的细胞类型标记
seurat_object$cell_type <- ifelse(seurat_object$seurat_clusters == 0, "T cells",
ifelse(seurat_object$seurat_clusters == 1, "B cells", "Other"))
# 可以为每个群体命名
table(seurat_object$cell_type)
4.可视化注释结果
在聚类的图上显示手动注释的结果:
# 可视化手动注释结果
DimPlot(seurat_object, group.by = "cell_type")
5.注释细胞群体
根据标记基因分析结果和文献查找,你可以对细胞簇进行具体的细胞类型注释。例如,如果某些簇的标记基因对应的是小鼠的特定免疫细胞类型或其他细胞类型,可以将这些群体命名为“T细胞”,“B细胞”,“巨噬细胞”等。