前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >单细胞转录组|单细胞数据分析中细胞类型的智能识别与注释

单细胞转录组|单细胞数据分析中细胞类型的智能识别与注释

作者头像
天意生信云
发布2025-03-06 21:53:06
发布2025-03-06 21:53:06
10900
代码可运行
举报
运行总次数:0
代码可运行

前面的文章我们介绍过单细胞基于python手动注释的方法,本篇基于Seurat学习自动注释和手动注释。

自动注释

不同于手工注释的标注方法,自动注释通过算法和已有标注的基因表达谱进行推断,能够快速、系统的识别出数据中的细胞群体。

SingleR

SingleR是一种基于参考数据集的自动注释方法,常用于单细胞RNA测序数据的细胞类型注释。

代码语言:javascript
代码运行次数:0
复制
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(天意改版)

GPTcelltype通过OpenAI GPT模型在Seurat管道中或使用自定义基因列表对细胞类型进行注释。

代码语言:javascript
代码运行次数:0
复制
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()

TransferData

Seurat V5 中的 TransferData 用于在单细胞 RNA-seq 数据集之间进行细胞类型注释、数据整合、交叉数据集分析,以及其他多模态数据集之间的信息转移。它的核心原理是通过找到参考数据集和目标数据集之间的共同特征或结构(锚点,anchors),将参考数据集中的信息(如细胞类型、基因表达等)转移到目标数据集中。

TransferData 通常与 FindTransferAnchors 配合使用。FindTransferAnchors 负责识别两个数据集之间的锚点,TransferData 则负责通过这些锚点将参考数据中的信息传递到目标数据集。选择参考数据集:首先,你需要一个带有已知注释(例如细胞类型)的参考数据集。目标数据集:这是你希望注释或整合的目标数据集。找到锚点:使用 FindTransferAnchors 函数找到两个数据集之间的共同结构。转移注释:使用 TransferData 函数将参考数据中的注释信息(如细胞类型或其他特征)传递到目标数据集中。

代码语言:javascript
代码运行次数:0
复制
# 准备待注释数据,确保数据只有一个 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(免疫细胞标记基因集)等。
  • Seurat 中的 Differential Expression:使用 Seurat 自带的功能来识别每个簇的标记基因。

2.从 Seurat 对象中识别标记基因

可以使用 Seurat 来对不同群体进行差异表达分析,并找到每个群体的标记基因。

代码语言:javascript
代码运行次数:0
复制
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.通过已知标记基因手动注释

一旦得到每个簇的标记基因,就可以通过以下步骤手动注释:

  • 获取每个簇的 top marker genes:找到每个聚类的 top markers 基因。
  • 根据文献或者数据库:通过文献或数据库对这些 marker genes 进行分类,判断该簇对应的细胞类型。
  • 在 Seurat 中添加注释:将注释添加到 Seurat 对象的元数据中。

例如:

代码语言:javascript
代码运行次数:0
复制
# 假设已经找到了相关的细胞类型标记
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.可视化注释结果

在聚类的图上显示手动注释的结果:

代码语言:javascript
代码运行次数:0
复制
# 可视化手动注释结果
DimPlot(seurat_object, group.by = "cell_type")

5.注释细胞群体

根据标记基因分析结果和文献查找,你可以对细胞簇进行具体的细胞类型注释。例如,如果某些簇的标记基因对应的是小鼠的特定免疫细胞类型或其他细胞类型,可以将这些群体命名为“T细胞”,“B细胞”,“巨噬细胞”等。

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

本文分享自 BioOmics 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自动注释
    • SingleR
    • GPTcelltype(天意改版)
    • TransferData
  • 手动注释
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档