首页 > 起名 > 好名字大全

在构建seurat对象之初,就要把基因名转换好

时间:2023-06-29 来源:m.86027.cn

看到单细胞转录组测序数据的文献:《Single-cell sequencing links multiregional immune landscapes and tissue-resident T cells in ccRCC to tumor topology and therapy efficacy》,是提供了配套数据, 所以,我下载了ccRCC_6pat_Seurat 文件,居然是26G,非常巨大! 其降维聚类分群和生物学命名后,如下所示:

可以看到,主要是T淋巴细胞,和髓系淋巴细胞,少部分b淋巴细胞,部分内皮细胞和成纤维细胞,以及上皮细胞。尤其是T淋巴细胞的各个亚群,非常清晰,值得学习!

我仔细看了看那个26G的ccRCC_6pat_Seurat 文件,,发现是旧版本的seurat对象,所以使用了下面的代码进行转换:

rm(list=ls())noptions(stringsAsFactors = F)nlibrary(Seurat) nsce=readRDS('ccRCC_6pat_Seurat')nscensce=UpdateSeuratObject(sce)nscenDimPlot(sce)nsave(sce,file = 'first_sce.Rdata')

关键就是 UpdateSeuratObject 函数啦!我看了看,存储后的文件,就1个G啦,非常棒!

看了看这个对象里面的元素应有尽有,可以直接绘图如下:

降维聚类分群都OK了,接下来就是根据背景知识对这些细胞亚群进行生物学命名啦!

但是使用基因名字去可视化各个亚群,全部报错,因为它的基因居然是ensemb 数据库的ID ,并不是我们常见的基因symbol :

> head(rownames(sce))n[1] "ENSG00000237683" "ENSG00000228463" "ENSG00000225880" "ENSG00000230368" "ENSG00000187634"n[6] "ENSG00000188976"

需要做一个转换,下面演示一下这个步骤:

首先拿到基因转换列表:

rm(list=ls())nlibrary(Seurat)nload(file = 'first_sce.Rdata')nsce # 16323 features nlibrary(org.Hs.eg.db)nhead(rownames(sce))nids=select(org.Hs.eg.db,keys = rownames(sce),n columns = c('ENSEMBL','SYMBOL'),n keytype = 'ENSEMBL')nhead(ids)ndim(ids) # [1] 16428 nids=na.omit(ids)ndim(ids) # [1] 15504 nlength(unique(ids$SYMBOL)) # [1] 15494 n# 这里的关系超级乱,互相之间都不是一对一 n# 凡是混乱的ID一律删除即可nids=ids[!duplicated(ids$SYMBOL),]nids=ids[!duplicated(ids$ENSEMBL),]npos=match(ids$ENSEMBL,rownames(sce) )nsce=sce[pos,]nsce # 15393 featuresn# rownames(sce) = ids$SYMBOL

本来是准备使用 rownames(sce) = ids$SYMBOL 搞定这个 seurat对象的基因名字转换,但是失败了。

略微搜索了一下,https://github.com/satijalab/seurat/issues/2617 提到了一个函数:

# https://github.com/satijalab/seurat/issues/2617n# RenameGenesSeurat ------------------------------------------------------------------------------------nRenameGenesSeurat <- function(obj , n newnames ) { n # Replace gene names in different slots of a Seurat object. Run this before integration. Run this before integration. n # It only changes obj@assays$RNA@counts, @data and @scale.data.n print("Run this before integration. It only changes obj@assays$RNA@counts, @data and @scale.data.")n RNA <- obj@assays$RNAnn if (nrow(RNA) == length(newnames)) {n if (length(RNA@counts)) RNA@counts@Dimnames[[1]] <- newnamesn if (length(RNA@data)) RNA@data@Dimnames[[1]] <- newnamesn if (length(RNA@scale.data)) RNA@scale.data@Dimnames[[1]] <- newnamesn } else {"Unequal gene sets: nrow(RNA) != nrow(newnames)"}n obj@assays$RNA <- RNAn return(obj)n}nobj=RenameGenesSeurat(obj = sce, n newnames = ids$SYMBOL)nsave(sce,file = 'first_sce.Rdata')

蛮简单的,接下来就可以继续可视化啦!

# T Cells (CD3D, CD3E, CD8A), n# B cells (CD19, CD79A, MS4A1 [CD20]), n# Plasma cells (IGHG1, MZB1, SDC1, CD79A), n# Monocytes and macrophages (CD68, CD163, CD14),n# NK Cells (FGFBP2, FCG3RA, CX3CR1), n# Photoreceptor cells (RCVRN), n# Fibroblasts (FGF7, MME), n# Endothelial cells (PECAM1, VWF). n# epi or tumor (EPCAM, KRT19, PROM1, ALDH1A1, CD24).n# immune (CD45+,PTPRC), epithelial/cancer (EpCAM+,EPCAM), n# stromal (CD10+,MME,fibo or CD31+,PECAM1,endo) nnlibrary(ggplot2) ngenes_to_check = c('PTPRC', 'CD3D', 'CD3E', 'CD4','CD8A','CD19', 'CD79A', 'MS4A1' ,n 'IGHG1', 'MZB1', 'SDC1',n 'CD68', 'CD163', 'CD14', n 'TPSAB1' , 'TPSB2', # mast cells,n 'RCVRN','FPR1' , 'ITGAM' ,n 'FGF7','MME', 'ACTA2',n 'PECAM1', 'VWF', n 'EPCAM' , 'KRT19', 'PROM1', 'ALDH1A1' )nlibrary(stringr) np_all_markers <- DotPlot(sce , features = genes_to_check,n assay='RNA' ) + coord_flip()nnp_all_markersnggsave(plot=p_all_markers, filename="check_all_marker_by_seurat_cluster.pdf")

可以很明显的看到:

我们做肿瘤研究的单细胞数据,一般来说会选择初步很粗狂的定义大的细胞亚群,比如我常用的 第一次分群是通用规则是:

  • immune (CD45+,PTPRC),
  • epithelial/cancer (EpCAM+,EPCAM),
  • stromal (CD10+,MME,fibo or CD31+,PECAM1,endo)

根据上面的标记基因列表,我给出来的亚群是:

# 需要自行看图,定细胞亚群: ncelltype=data.frame(ClusterID=0:34,n celltype='unkown')ncelltype[celltype$ClusterID %in% c( 0,2:4,6:8,10,15,17,17,19,31,32),2]='Tcells' ncelltype[celltype$ClusterID %in% c( 24 ),2]='plasma'ncelltype[celltype$ClusterID %in% c( 22 ),2]='naive-Bcells'ncelltype[celltype$ClusterID %in% c(21),2]='mast'nncelltype[celltype$ClusterID %in% c( 1,5,12:14,18,23,27,33,34),2]='myeloid'ncelltype[celltype$ClusterID %in% c( 9,16,26 ),2]='epithelial'nncelltype[celltype$ClusterID %in% c( 11),2]='endo' ncelltype[celltype$ClusterID %in% c(20),2]='fibo' ncelltype[celltype$ClusterID %in% c(25 ),2]='SMC' nnhead(celltype)ncelltype ntable(celltype$celltype)

出图如下:

之所以我们有一堆unknown,是因为我对这个ccRCC的肿瘤并不熟悉,我的背景认知就是3个大亚群!前面的例子:人人都能学会的单细胞聚类分群注释 ,我们演示了第一层次的分群。

如果你对单细胞数据分析还没有基础认知,可以看基础10讲:

  • 01. 上游分析流程
  • 02.课题多少个样品,测序数据量如何
  • 03. 过滤不合格细胞和基因(数据质控很重要)
  • 04. 过滤线粒体核糖体基因
  • 05. 去除细胞效应和基因效应
  • 06.单细胞转录组数据的降维聚类分群
  • 07.单细胞转录组数据处理之细胞亚群注释
  • 08.把拿到的亚群进行更细致的分群
  • 09.单细胞转录组数据处理之细胞亚群比例比较

上一篇:钟姓有哪些令人惊叹的好名字?如何命名姓钟?

下一篇:2023年兔年王姓男孩的名字来自楚辞寓意稀少的男孩名字推荐