交流群看到粉丝提问,他使用seurat包的FindAllMarkers对他自己的单细胞降维聚类分群后不同单细胞亚群各自的特征基因进行热图可视化,结果报错了因为发现不同单细胞亚群各自的特征基因也是会有重合的。‘
其实非常容易理解,下面我们以如下所示的基于pbmc3k 这个单细胞数据集作为例子展示给大家 的 :
代码语言:javascript复制library(SeuratData) #加载seurat数据集
getOption('timeout')
options(timeout=10000)
#InstallData("pbmc3k")
data("pbmc3k")
sce <- pbmc3k.final
library(Seurat)
table(Idents(sce))
library(future)
# check the current active plan
plan()
plan("multiprocess", workers = 4)
plan()
sce.markers <- FindAllMarkers(object = sce, only.pos = TRUE,
min.pct = 0.25,
thresh.use = 0.25)
DT::datatable(sce.markers)
pro='markers'
write.csv(sce.markers,file=paste0(pro,'_sce.markers.csv'))
save(sce.markers,file = paste0(pro, 'sce.markers.Rdata'))
library(dplyr)
top10 <- sce.markers %>% group_by(cluster) %>% top_n(10, avg_log2FC)
DoHeatmap(sce,top10$gene,size=3)
ggplot2::ggsave(filename=paste0(pro,'_sce.markers_heatmap.pdf'),height = 15)
每个单细胞亚群各自的高表达量基于都计算得到,并且存储好了!
代码语言:javascript复制> as.data.frame(table(sce.markers$cluster))
Var1 Freq
1 Naive CD4 T 162
2 Memory CD4 T 176
3 CD14 Mono 391
4 B 147
5 CD8 T 162
6 FCGR3A Mono 608
7 NK 364
8 DC 633
9 Platelet 242
其实这个时候,很容易看到每个单细胞亚群各自的特征基因,也是会有重合的哦。热图就很明显看到Memory CD4 T 和Naive CD4 T 共享了大量的基因:
热图
我们使用如下所示的展示方式:
代码语言:javascript复制as.data.frame(table(sce.markers$cluster))
deg_list=split(sce.markers$gene,
sce.markers$cluster)
library(UpSetR)
data <- fromList(deg_list)
upset(data,nsets = 9)
不仅仅是Memory CD4 T 和Naive CD4 T 共享了大量的基因,还有FCGR3A Mono和CD14 Mono , CD8 T 和NK,都是共享了不少的基因。
交集
其实逻辑上也很容易推理,因为seurat包的FindAllMarkers默认找到的是某一个单细胞亚群相当于所有的其它亚群的统计学显著的特异性基因,如果某两个亚群过于类似,它们就会共享大量特异性基因哦,也就是说所谓的计算得到的特异性基因在在这两个过于类似的单细胞亚群里面不特异了。
如果你确实觉得我的教程对你的科研课题有帮助,让你茅塞顿开,或者说你的课题大量使用我的技能,烦请日后在发表自己的成果的时候,加上一个简短的致谢,如下所示:
代码语言:javascript复制We thank Dr.Jianming Zeng(University of Macau), and all the members of his bioinformatics team, biotrainee, for generously sharing their experience and codes.
十年后我环游世界各地的高校以及科研院所(当然包括中国大陆)的时候,如果有这样的情谊,我会优先见你。