SingleR如何使用自定义的参考集
在我之前的帖子单细胞分析实录(7): 差异表达分析/细胞类型注释
里面,我已经介绍了如何使用SingleR给单细胞数据做注释,当时只讲了SingleR配套的参考集。这次就讲讲如何使用自己定义/找到的基因集做注释,使用场景还是比较多的,比如想根据某篇论文里面的注释结果,给自己的数据做注释。本文配套的视频讲解已上传到B站,新手UP: TOP菌。gongzhong号后台回复20211023
可获取本文所用到的示例数据和代码。
本次演示用到的数据集来自2020年发表在Nature Genetics的一篇结直肠癌研究。文中用到了韩国患者(SMC)和比利时患者(KUL3)两套数据集,两套数据平行分析,相互印证。
我以里面的髓系细胞为例,用KUL3数据集中的髓系细胞为参考,来注释SMC里面的髓系细胞
两套数据集中髓系细胞部分的数据,已经跑完Seurat标准流程并整理成rds文件:SMC_mye.rds
和KUL3_mye.rds
。代码存放在0.R
中,这里就不展示了,很简单。代码中fread()
用于快速读取4G矩阵文件是可以学习的地方。
mat=fread("GSE132465_GEO_processed_CRC_10X_raw_UMI_count_matrix.txt",select = c("Index",SMC.mye.anno$Index))
之后就是创建参考集,被存储为SummarizedExperiment对象
library(Seurat)
library(tidyverse)
library(SummarizedExperiment)
library(scuttle)
KUL3_mye=readRDS("KUL3_mye.rds")
属性数据框中主要用到cell index和cell annotation这两个信息,此外还需导入表达矩阵
KUL3_mye_count=KUL3_mye[["RNA"]]@counts
pdata=KUL3_mye@meta.data[,c("Index","Cell_subtype")]
rownames(pdata)=pdata$Index
pdata$Index=NULL
colnames(pdata)="ref_label"
KUL3_mye_SE <- SummarizedExperiment(assays=list(counts=KUL3_mye_count),colData = pdata)
#创建SummarizedExperiment对象
KUL3_mye_SE <- logNormCounts(KUL3_mye_SE)
#Compute log-transformed normalized expression values,要有这一行,对于单细胞数据normalize之后会再算一个log
saveRDS(KUL3_mye_SE,"KUL3_mye_SE.ref.rds")
log normalize之后就多了一个logcounts的assay,singleR的官网示例都是基于logcounts这种数据
将这个参考对象保存为rds文件,方便以后多次调用
现在导入我们的待注释数据集和参考数据集
library(tidyverse)
library(Seurat)
library(SingleR)
library(scuttle)
library(SummarizedExperiment)
KUL3_mye_SE=readRDS("KUL3_mye_SE.ref.rds")
SMC_mye=readRDS("SMC_mye.rds")
SMC_mye_count=SMC_mye[["RNA"]]@counts
#需要取不同数据集的基因交集
common_gene <- intersect(rownames(SMC_mye_count), rownames(KUL3_mye_SE))
KUL3_mye_SE <- KUL3_mye_SE[common_gene,]
SMC_mye_count <- SMC_mye_count[common_gene,]
#也要创建SummarizedExperiment对象,以及log normalize
SMC_mye_SE <- SummarizedExperiment(assays=list(counts=SMC_mye_count))
SMC_mye_SE <- logNormCounts(SMC_mye_SE)
#注释代码
singleR_res <- SingleR(test = SMC_mye_SE, ref = KUL3_mye_SE, labels = KUL3_mye_SE$ref_label)
#导出注释结果
anno_df <- as.data.frame(singleR_res$labels)
anno_df$Index <- rownames(singleR_res)
colnames(anno_df)[1] <- 'ref_label_from_KUL3'
#将注释信息添加到Seurat对象
SMC_mye@meta.data=SMC_mye@meta.data%>%inner_join(anno_df,by="Index")
rownames(SMC_mye@meta.data)=SMC_mye@meta.data$Index
DimPlot(SMC_mye, reduction = "tsne", group.by = "Cell_subtype", pt.size=2)+
DimPlot(SMC_mye, reduction = "tsne", group.by = "ref_label_from_KUL3", pt.size=2)
左图是原文给的注释,右图是依据KUL3来注释SMC数据集,可以看出还是有一些不一致的。
像这种依据某个参考集来做注释,对参考集质量要求很高,原文KUL3只有两千髓系细胞,考虑到10X单细胞数据的稀疏性,这个数量是不够的。也可能是软件的限制,在做小类注释时,类与类之间的表达特征其实是比较相似的,软件不一定能精确给出合适的label,相比之下,软件做大类注释一般比较准。
因水平有限,有错误的地方,欢迎批评指正!
SingleR如何使用自定义的参考集的更多相关文章
- Android 自定义View合集
自定义控件学习 https://github.com/GcsSloop/AndroidNote/tree/master/CustomView 小良自定义控件合集 https://github.com/ ...
- MyBatis 多表联合查询及优化 以及自定义返回结果集
下面就来说一下 mybatis 是通过什么来实现多表联合查询的.首先看一下表关系,如图: 这 里,我已经搭好了开发的环境,用到的是 SpringMVC + Spring + MyBatis,当然,为了 ...
- VB6文件操作自定义函数合集之一
'--与文件及文件夹操作相关的函数 '--必须引用FSO的ACTIVE OBJECT Dim strList As String '--列表串,返回文件列表 '================ '-- ...
- Sublime Text3学习参考集
1.如何优雅地使用Sublime Text: http://jeffjade.com/2015/12/15/2015-04-17-toss-sublime-text/#three 持续更新中..... ...
- Struts学习之自定义结果集
转自:http://blog.csdn.net/hanxuemin12345/article/details/38763057 项目中我们经常遇到这样的需求——页面部分刷新,例如:添加用户,转到添加用 ...
- 制作ACK集群自定义节点镜像的正确姿势
随着云原生时代的到来,用户应用.业务上云的需求也越来越多,不同的业务场景对容器平台的需求也不尽相同,其中一个非常重要的需求就是使用自定义镜像创建ACK集群. ACK支持用户使用自定义镜像创建Kuber ...
- Linq to Sql:N层应用中的查询(上) : 返回自定义实体
原文:Linq to Sql:N层应用中的查询(上) : 返回自定义实体 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候,我们使 ...
- mongodb副本集原理及部署记录
工作原理 1.副本集之间的复制是通过oplog日志现实的.备份节点通过查询这个集合就可以知道需要进行复制的操作 2.oplog是节点中local库中的一个固定的集合,在默认情况下oplog初始化大小为 ...
- CentOS7.5搭建ELK6.2.4集群及插件安装
一 简介 Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎.它允许您快速,近实时地存储,搜索和分析大量数据.它通常用作支持具有复杂搜索功能和需求的应用程序的底层引擎/技术. 下载地址 ...
随机推荐
- 并发编程之:CountDownLatch
大家好,我是小黑,一个在互联网苟且偷生的农民工. 先问大家一个问题,在主线程中创建多个线程,在这多个线程被启动之后,主线程需要等子线程执行完之后才能接着执行自己的代码,应该怎么实现呢? Thread. ...
- Python习题集(十)
每天一习题,提升Python不是问题!!有更简洁的写法请评论告知我! https://www.cnblogs.com/poloyy/category/1676599.html 题目 使用列表生成式语法 ...
- 给dubbo贡献源码,做梦都在修bug
本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 一 在之前的文章<redis在微服务领域的贡献>中,从一次面试经历中了解了redi ...
- ElasticSearch集成SpringData史上最全查询教程
1.简单介绍 springboot 使用springdata操作es,ElasticsearchRepository使用QueryBuilder构造查询条件 2.集成es //maven集成 < ...
- Spring Boot学习(一)——Spring Boot介绍
Spring Boot介绍 Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式 ...
- MAC地址知识
1. 全球唯一无法保障. 软件工具可以修改网卡的MAC地址 2.不需要全球唯一. 只要保障局域网内不重复就行. 路由器 保证 数据在不同局域网内跳转. 如果局域网内使用集线器,那么可以设置相 ...
- 谈谈如何进阶Java高级工程师
从入门到瓶颈(++文末附学习脑图++) 首先,先自我介绍一下,楼主94年的,四川人,普通大专毕业. 第一阶段 实习阶段 2015年,实习阶段去浙江温州(没错,就是皮革厂的那个地方)找了份软件实施的工作 ...
- Maven项目之间关系介绍
Maven项目之间的关系 依赖关系 单纯的项目A中需要项目B中的资源,将项目B打成Jar包被A依赖,此时项目A直接调用项目B中资源即可. 项目A和项目B此时形成最基本的依赖关系. 继承关系 需要场景: ...
- Roslyn(CSharpScript).Net脚本编译引擎使用过程内存增涨与稳定的方式
目 录 1. 引用程序集... 1 2. 内存增涨的情况... 2 3. 内存稳定的情况... 4 1. 引用程序集 Roslyn 是微软公司开源的 .N ...
- MySQL修改root密码的多种方法, mysql 导出数据库(包含视图)
方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass ...