【TOP生物信息】使用SingleR注释细胞类型

news2025/1/23 15:11:09

扫码关注下方公粽号,回复推文合集,获取400页单细胞学习资源!

在这里插入图片描述

本文共计1887字,阅读大约需要6分钟,目录如下:

  • SingleR基本介绍

  • SingleR包安装

  • SingleR包使用

    • 1.使用已有的参考数据集进行细胞定义
    • 2.使用自定义数据集进行细胞定义
  • 小结

  • 获取代码

  • 代码参考

  • 往期单细胞系统教程


SingleR基本介绍

SingleR最早发表在2019年Nature Immunology杂志的一篇文章上,文章题目为"Reference-based analysis of lung single-cell sequencing reveals a transitional profibrotic macrophage"。截止至2023年3月10日,引用量已经达到了947。SingleR的基本原理是利用已知类型细胞的基因表达谱和单个细胞的基因表达谱的相关性进行细胞类型鉴定。

SingleR的具体流程是(图1):

图片

图1:SingleR工作示意图(来源:Nat Immunol. 2019 Feb;20(2):163-172.)

1.计算参考数据集中各个细胞类型基因表达谱的可变基因,对于每一个需要鉴定的细胞,计算单个细胞与参考数据集中各个细胞类型基因在可变基因上的Spearman相关性;

2.根据参考基因集的命名注释聚合每个细胞类型的多重相关系数,每种细胞类型的评分默认选择相关系数值的80%,此时可以筛选得到每个细胞最可能的细胞定义类型;

3.计算来自参考数据集中最可能的细胞类型基因表达谱的可变基因,并计算单个细胞与最可能细胞类型在可变基因上的Spearman相关性,去除最低值的细胞(或是比最高值低于0.05的细胞),重复此步骤,直到只保留两种细胞类型。最后一次运行后,相关系数值最高的细胞类型则作为需要鉴定的细胞的定义。

此外,SingleR还提供了网页版工具(图2)用于在线注释细胞类型(https://comphealth.ucsf.edu/app/singler)。

图片

图2:SingleR网页版


SingleR包安装

使用devtools包或者BiocManager进行安装。

devtools::install_github('dviraran/SingleR')
#BiocManager::install("SingleR")

SingleR包使用

1.使用已有的参考数据集进行细胞定义

celldex(http://bioconductor.org/packages/release/data/experiment/vignettes/celldex/inst/doc/userguide.html)提供了来自bulk RNA-seq或者是芯片测序的7个常用的参考数据库:

①General-purpose references:

Human primary cell atlas (HPCA);

Blueprint/ENCODE;

Mouse RNA-seq。

②Immune references:

Immunological Genome Project (ImmGen);

Database of Immune Cell Expression/eQTLs/Epigenomics (DICE);

Novershtern hematopoietic data;

Monaco immune data。

可用HumanPrimaryCellAtlasData()函数从Human Primary Cell Atlas中获取参考数据,建议将参考数据本地保存,便于每次分析时加载。

library(celldex)
hpca.se <- HumanPrimaryCellAtlasData()
hpca.se
save(hpca.se,file="hpca.se.RData")

加载SingleR和待注释单细胞数据集(待注释数据集来自10X官网的PBMC数据,已经按照官方流程整理成pbmc3k.rds),保证两个数据集的基因相同。由于参考集里面是logcounts矩阵,后面对于单细胞数据集也要做类似的处理。

library(SingleR)
library(scater)
library(SummarizedExperiment)
library(cowplot)

test.seu<-readRDS('pbmc3k.rds')
test.count=as.data.frame(test.seu[["RNA"]]@counts)
load(file="hpca.se.RData")

common_hpca <- intersect(rownames(test.count), rownames(hpca.se))
hpca.se <- hpca.se[common_hpca,]
test.count_forhpca <- test.count[common_hpca,]
test.count_forhpca.se <- SummarizedExperiment(assays=list(counts=test.count_forhpca))
test.count_forhpca.se <- logNormCounts(test.count_forhpca.se)

定义主要的细胞类型,这里使用的是label.main参数进行细胞大类注释。

pred.main.hpca <- SingleR(test = test.count_forhpca.se, ref = hpca.se, labels = hpca.se$label.main)
result_main_hpca <- as.data.frame(pred.main.hpca$labels)
result_main_hpca$CB <- rownames(pred.main.hpca)
colnames(result_main_hpca) <- c('HPCA_Main', 'CB')
head(result_main_hpca)

图片

图3:result_main_hpca数据结构

整合到meta.data中,利用UMAP展示结果(图4)。

test.seu@meta.data$CB=rownames(test.seu@meta.data)
test.seu@meta.data=inner_join(test.seu@meta.data,result_main_hpca,by="CB")
rownames(test.seu@meta.data)=test.seu@meta.data$CB

DimPlot(test.seu, reduction = "umap", group.by = "HPCA_Main",label = TRUE,repel = TRUE,ncol=1)+
          DimPlot(test.seu, reduction = "umap", group.by = "ident",label = TRUE,repel = TRUE,ncol=1)&
  theme(axis.line = element_blank(), axis.ticks= element_blank(),axis.text = element_blank())

图片

图4:SingleR鉴定结果

SingleR细胞注释结果与典型的marker基因表达结果对比,可见在单核细胞(LYZ、CD14)、B细胞(MS4A1)、T细胞(CD3E、CD8A)、NK细胞(GNLY)、血小板(PPBP)大群上注释比较准确(图5)。

FeaturePlot(test.seu, features = c("MS4A1", "GNLY", "CD3E", "CD14", "FCER1A", "FCGR3A", "LYZ", "PPBP", "CD8A"))

图片

图5:细胞典型标记物的表达情况

我们也可以将参数修改为label.fine进行再次分析,与典型标记物结果对比可见,比如表达FCER1A的树突状细胞并没有区分出来,但是也根据FCGR3A的表达区分出来两群单核细胞(图6)。

pred.detail.hpca <- SingleR(test = test.count_forhpca.se, ref = hpca.se, labels = hpca.se$label.fine)

图片

图6:SingleR鉴定结果2

2.使用自定义数据集进行细胞定义

使用自己定义/找到的单细胞数据集做注释,演示用到的数据集来自10X官网的PBMC数据。用PBMC5k数据集作为参考(已根据典型细胞标记物定义好细胞类型)来注释PBMC3k的细胞。两套数据集,已经跑完Seurat标准流程并整理成rds文件:pbmc3k.rdspbmc5k.rds。首先进行参考数据集的构建。

library(Seurat)
library(tidyverse)
library(SummarizedExperiment)
library(scuttle)

pbmc5k=readRDS("pbmc5k.rds")
pbmc5k_count=pbmc5k[["RNA"]]@counts

pbmc5k@meta.data$Index =rownames(pbmc5k@meta.data) #给metadata增加一列Index,代表每个细胞名字
pdata=pbmc5k@meta.data[,c("Index","celltype")]
rownames(pdata)=pdata$Index
pdata$Index=NULL
colnames(pdata)="ref_label"

pbmc5k_SE <- SummarizedExperiment(assays=list(counts=pbmc5k_count),colData = pdata)
pbmc5k_SE <- logNormCounts(pbmc5k_SE) 

saveRDS(pbmc5k_SE,"pbmc5k_SE.ref2.rds")

数据整理完毕后就可以导入待注释数据集和参考数据集进行细胞注释(图7),和前面用已有的参考数据集鉴定的结果是还是有点差异的。

library(tidyverse)
library(Seurat)
library(SingleR)
library(scuttle)
library(SummarizedExperiment)

pbmc5k_SE=readRDS("pbmc5k_SE.ref2.rds")
pbmc3k=readRDS("pbmc3k.rds")
pbmc3k_count=pbmc3k[["RNA"]]@counts

common_gene <- intersect(rownames(pbmc3k_count), rownames(pbmc5k_SE))
pbmc5k_SE <- pbmc5k_SE[common_gene,]
pbmc3k_count <- pbmc3k_count[common_gene,]

pbmc3k_SE <- SummarizedExperiment(assays=list(counts=pbmc3k_count))
pbmc3k_SE <- logNormCounts(pbmc3k_SE)

singleR_res <- SingleR(test = pbmc3k_SE, ref = pbmc5k_SE, labels = pbmc5k_SE$ref_label)
anno_df <- as.data.frame(singleR_res$labels)
anno_df$Index <- rownames(singleR_res)
colnames(anno_df)[1] <- 'ref_label_from_pbmc5k'

pbmc3k@meta.data=pbmc3k@meta.data%>%inner_join(anno_df,by="Index")
rownames(pbmc3k@meta.data)=pbmc3k@meta.data$Index
DimPlot(pbmc3k, reduction = "umap", group.by = "HPCA_Main",label = TRUE,repel = TRUE,ncol=1)+
  DimPlot(pbmc3k, reduction = "umap", group.by = "ref_label_from_pbmc5k",label = TRUE,repel = TRUE,ncol=1)&
  theme(axis.line = element_blank(), axis.ticks= element_blank(),axis.text = element_blank())

图片

图7:自定义数据集鉴定结果


小结

使用SingleR自带的数据集在进行细胞的大类定义时还是比较准确的,但在更细致的亚群区分中往往表现不佳,后续我们也将介绍其他一些在单细胞转录组测序中常用细胞注释软件。

获取代码

代码和测试数据请关注公粽号获取

在这里插入图片描述


代码参考

GitHub - dviraran/SingleR: SingleR: Single-cell RNA-seq cell types Recognition (legacy version)

https://satijalab.org/seurat/articles/pbmc3k_tutorial.html


往期单细胞系统教程

单细胞分析实录(1): 认识Cell Hashing

单细胞分析实录(2): 使用Cell Ranger得到表达矩阵

单细胞分析实录(3): Cell Hashing数据拆分

单细胞分析实录(4): doublet检测

单细胞分析实录(5): Seurat标准流程

单细胞分析实录(6): 去除批次效应/整合数据

单细胞分析实录(7): 差异表达分析/细胞类型注释

推荐几个细胞注释网站

如何批量查询marker基因(对应的蛋白)会不会在膜上表达?

单细胞分析实录(8): 展示marker基因的4种图形(一)

单细胞分析实录(9): 展示marker基因的4种图形(二)

单细胞分析实录(10): 消除细胞周期的影响

单细胞分析实录(11): inferCNV的基本用法

单细胞分析实录(12): 如何推断肿瘤细胞

单细胞分析实录(13): inferCNV结合UPhyloplot2分析肿瘤进化

单细胞分析实录(14): 细胞类型注释的另一种思路 — CellID

单细胞分析实录(15): 基于monocle2的拟时序分析

单细胞分析实录(16): 非负矩阵分解(NMF)检测细胞异质性

单细胞分析实录(17): 非负矩阵分解(NMF)代码演示

单细胞分析实录(18): 基于CellPhoneDB的细胞通讯分析及可视化 (上篇)

单细胞分析实录(19): 基于CellPhoneDB的细胞通讯分析及可视化 (下篇)

一个对接CellPhoneDB的R包

【代码更新】单细胞分析实录(20): 将多个样本的CNV定位到染色体臂,并画热图

【代码更新】单细胞分析实录(21): 非负矩阵分解(NMF)的R代码实现,只需两步,啥图都有

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/521795.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NAS内网穿透

3)可用方法1&#xff1a;Tailscale&#xff08;免费&#xff09; Tailscale 是一种基于 WireGuard 的虚拟组网工具 下面教大家安装&#xff1a; 镜像仓库搜索&#xff1a;tailscale&#xff0c;就是第一个 下载之后安装配置注意&#xff1a; 1&#xff09;要把权限全部打开…

C++游戏服务器框架笔记(四)_封装Select

C游戏服务器框架笔记(一)_封装数据包类 C游戏服务器框架笔记(二)_封装Socket类 C游戏服务器框架笔记(三)_封装ByteBuffer类 C游戏服务器框架笔记(四)_封装Select 因为设想的次系列服务器主要应用场景是linux系统下&#xff0c;支持Windows系统是为了更好的调试和开发&#x…

【sqlite】联查Join更新

系列文章 C#底层库–MySQLBuilder脚本构建类&#xff08;select、insert、update、in、带条件的SQL自动生成&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129179216 C#底层库–MySQL数据库操作辅助类&#xff08;推荐阅读&#xff0…

虚拟化技术 — 虚拟机迁移

目录 文章目录 目录Libvirt 的 Live Migration(热迁移)网络数据传输层控制层Pre-Copy Live MigrationLibvirt 的 Live Migration(热迁移) Libvirt 的 Live Migration 主要分为 “数据“ 和 “控制“ 这两个层面的内容。 网络数据传输层 基于 Hypervisor 的传输:两个 Hyp…

MiniGPT-4 笔记

目录 简介 实现方法 效果及局限 参考资料 简介 MiniGPT-4 是前段时间由KAUST&#xff08;沙特阿卜杜拉国王科技大学&#xff09;开源的多模态大模型&#xff0c;去网站上体验了一下功能&#xff0c;把论文粗略的看了一遍&#xff0c;也做个记录。 论文摘要翻译&#xff1…

【图】DFS、BFS遍历

图有两种遍历方式&#xff1a;DFS深度优先&#xff0c;BFS广度优先。 把所有顶点访问一遍&#xff0c;且每个顶点只访问一次&#xff0c;把走过的顶点标记一下。 标记&#xff1a;为图设置一个访问标志数组visited[n&#xff3d;&#xff0c;用于标示图中每个顶点是否被访问过…

C++引用()笔记

C引用(&)笔记 1.寄存器一般只有4/8个字节&#xff0c;所以返回时候的中间变量(下图的临时变量)不一定是储存在寄存器当中 2.传引用返回可以减少拷贝&#xff0c;增加效率 但运行打印会出错的&#xff0c;因为当栈帧销毁的时候&#xff0c;清理栈帧就会得到随机值 正确表达…

西宾蜻蜓FM语音下载(qingtingdown)

一、介绍 西宾蜻蜓FM语音下载&#xff08;qingtingdown&#xff09;&#xff0c;能够帮助你下载蜻蜓FM音频节目。如果你是蜻蜓FM会员&#xff0c;它还能帮你下载会员节目。 二、下载地址 本站下载&#xff1a;西宾蜻蜓FM语音下载&#xff08;qingtingdown&#xff09; 百度…

PSP - AlphaFold2 适配不同来源搜索的 MSA 接口

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130594303 MSA (Multiple Sequence Alignment) 在 AlphaFold2 中的工作方式如下: 使用搜索工具 (hhblits/hhsearch/jackhmmer),从大型数据库中,搜索与目标…

从零开始学习JVM(二)--类加载子系统

1. 类加载子系统介绍 JVM内存结构如下图所示&#xff1a; 程序计数器&#xff08;PC寄存器&#xff09;&#xff1a;程序计数器是⼀块⼩的内存空间&#xff0c;可以看作是当前线程所执⾏的字节码的⾏号指示器。字节码解释器⼯作时通过改变这个计数器的值来选取下⼀条需要执⾏…

PyTorch读取数据集全部进内存,使网络的训练速度提高10倍以上!!!

正常情况下&#xff0c;torch读取数据的时候是Batch Size小批量读取。首先找到所有数据集的路径保持到一个变量中&#xff0c;之后需要读取哪个数据的时候&#xff0c;就根据这个变量中的路径索引去读取。因为硬件的限制&#xff0c;从硬盘中读取数据到显存中所花的时间要远远大…

计算机体系结构实验一

计算机体系结构实验一 一.实验目的 ​理解RISC-V的指令执行的数据流和控制信号&#xff0c;熟悉指令流水线的工作过程。 二.实验过程 1.RISC-V的相关指令 实验的模拟器使用RISC-V指令集&#xff0c;为了便于后续分析&#xff0c;首先学习实验中使用的RISC-V指令。 基本RIS…

Cesium最新版使用天地图地形及注记服务

天地图三维地名服务和地形服务需要利用 cesium 开源三维地球API与天地图扩展插件共同使用&#xff0c;目前支持cesuim1.52、1.58、1.63.1。 天地图调用demo: http://lbs.tianditu.gov.cn/docs/#/sanwei/ 注意&#xff1a; demo里的地形服务地址不对&#xff0c;需要自己更换成…

MCU通用移植方案

MCU通用移植方案 目录 MCU通用移植方案前言1 硬件移植2 软件移植2.1 底层移植方法2.1.1 移植原理2.1.2 移植方法 2.2 中间层移植方法2.2.1 移植原理2.2.2 移植方法 2.3 两种移植方法比对 3 结束语 前言 因为项目的需求或者成本控制等因素&#xff0c;我们经常会遇到更换MCU的情…

华硕 PRIME H610M-A D4 i5-12490F 1060电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板华硕 PRIME H610M-A D4&#xff08;LPC Controller/eSPI Controller H610芯片组&#xff09; 处理器12th Gen Intel Core i5-12490F 六核已驱动 内…

Mysql的重要知识点以及问题

查看索引的命令 show index from mytable 索引的原理 索引用来快速地寻找那些具有特定值的记录。如果没有索引&#xff0c;⼀般来说执行查询时遍历整张表。 索引的原理&#xff1a;就是把无序的数据变成有序的查询 把创建了索引的列的内容进行排序 对排序结果生成倒排表…

货运物流小程序开发功能有哪些?

移动互联网的深入发展让网购等线上交易更加盛行&#xff0c;货运快递物流也随之增多&#xff0c;成为我们日常生活的重要组成部分。传统的货运物流管理主要依赖人工&#xff0c;不仅效率慢还容易出错。随着市场的发展以及人们对服务质量要求的提高&#xff0c;现在很多中大型货…

Oracle 12c安装

前言 版本&#xff1a;12c第二版 检查弹出窗口程序&#xff0c;需要安装xmanager,并执行以下命令&#xff1a; xhost 192.168.194.91 安装步骤如下 安装必须的安装包&#xff1a; rpm -q bc binutils compat-libcap1 compat-libstdc-33 glibc glibc-devel ksh libaio libaio…

c++ 多态与虚函数

c中多态分为静态多态和动态多态&#xff0c;静态多态是函数重载&#xff0c;在编译阶段就能确定调用哪个函数。动态多态是由继承产生的&#xff0c;指不同的对象根据所接收的消息(成员函数)做出不同的反应。例如&#xff0c;动物都能发出叫声&#xff0c;但不同的动物能发出不同…

esp32之解析json

文章目录 前言一、json的作用二、json结构三、esp32 json解析安装库解析StaticJsonDocumentDynamicJsonDocument 四、解析今天的北京天气总结 前言 在现代Web开发中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;已成为常用的数据传输格式。ESP32是一款…