ixxmu / mp_duty

抓取网络文章到github issues保存

Home Page:https://archives.duty-machine.now.sh/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

单细胞转录组数据的批量GSVA代码

ixxmu opened this issue · comments

单细胞转录组数据的批量GSVA代码 by 生信技能树

我在:借鉴escape包的一些可视化GSVA或者ssGSEA结果矩阵的方法 这个教程里面剧透过, 对单细胞表达矩阵做gsea分析的代码实现环节大同小异。最重要的反而是如何筛选特定的通路去进行展示,有点类似于做完了转录因子分析后的:各个单细胞亚群特异性的转录因子热图,同样的道理我们对单细胞转录组数据的批量GSVA分析很容易,但是对它们进行各个单细胞亚群特异性的富集通路的热图展现才是考验功底。

而且,单细胞转录组数据的批量GSVA分析并且进行各个单细胞亚群特异性的富集通路的热图展现,以及是各个单细胞亚群的标准3大分析了,跟转录因子分析,拟时序分析并列。

仍然是以大家熟知的pbmc3k数据集为例

大家先安装这个数据集对应的包,并且对它进行降维聚类分群,参考前面的例子:人人都能学会的单细胞聚类分群注释  ,而且每个亚群找高表达量基因,都存储为Rdata文件。

# 0.安装R包 ----
# devtools::install_github('caleblareau/BuenColors')
# utils::install.packages(pkgs = "ggstatsplot")
# InstallData("pbmc3k") 

library(SeuratData) #加载seurat数据集  
getOption('timeout')
options(timeout=10000)
#InstallData("pbmc3k")  
data("pbmc3k")  
sce <- pbmc3k.final   
library(Seurat)
table(Idents(sce))
p1=DimPlot(sce,label = T)

因为这个数据集已经进行了不同单细胞亚群的标记,我们接下来可以简单的对各个单细胞亚群取表达量矩阵。借助于seurat的AverageExpression函数,代码如下所示:

sce$celltype = Idents(sce)
av <-AverageExpression(sce ,
                       group.by = "celltype",
                       assays = "RNA"
av=av[[1]]
head(av)
write.csv(av,file = 'AverageExpression-0.8.csv')
cg=names(tail(sort(apply(av, 1, sd)),1000))
pheatmap::pheatmap(cor(av[cg,]))
pheatmap::pheatmap(cor(av[cg,]),
                   file = 'AverageExpression-0.8.pdf')
dev.off()

可以看到不同单细胞亚群的全局表达量相关性是符合我们的生物学常识的:

单细胞亚群的全局表达量相关性

就是不知道为什么这个B单细胞混在了各种T细胞里面,可能是因为它们都是淋巴细胞吧。

接下来进行gsva分析

因为去broad官网下载msigdb数据库文件很麻烦,MSigDB(Molecular Signatures Database)数据库中定义了已知的基因集合:http://software.broadinstitute.org/gsea/msigdb  需要注册才能下载。但是 msigdbr 包,它内置了MSigDB(Molecular Signatures Database)数据库的全部基因集合。安装方法非常简单:

install.packages("msigdbr")

包括H和C1-C7八个系列(Collection),每个系列分别是:

  • H: hallmark gene sets (癌症)特征基因集合,共50组,最常用;
  • C1: positional gene sets 位置基因集合,根据染色体位置,共326个,用的很少;
  • C2: curated gene sets:(专家)校验基因集合,基于通路、文献等:
  • C3: motif gene sets:模式基因集合,主要包括microRNA和转录因子靶基因两部分
  • C4: computational gene sets:计算基因集合,通过挖掘癌症相关芯片数据定义的基因集合;
  • C5: GO gene sets:Gene Ontology 基因本体论,包括BP(生物学过程biological process,细胞原件cellular component和分子功能molecular function三部分)
  • C6: oncogenic signatures:癌症特征基因集合,大部分来源于NCBI GEO  发表芯片数据
  • C7: immunologic signatures: 免疫相关基因集合。

因为我们这里针对的是大家熟知的pbmc3k数据集,所以这里选择C7: immunologic signatures: 免疫相关基因集合。如果你是肿瘤相关数据,建议选择H: hallmark gene sets (癌症)特征基因集合,共50组,最常用。

代码如下所示:

library(msigdbr)
all_gene_sets = msigdbr(species = "Homo sapiens",
                        category='C7')
length(unique(table(all_gene_sets$gs_name)))
tail(table(all_gene_sets$gs_name))

可以看到总共是300个基因集:

> tail(sort(table(all_gene_sets$gs_name)))

                                    ZAK_PBMC_MRKAD5_HIV_1_GAG_POL_NEF_AGE_20_50YO_1DY_UP 
                                                                                    1280 
                           NAKAYA_PLASMACYTOID_DENDRITIC_CELL_FLUMIST_AGE_18_50YO_7DY_UP 
                                                                                    1332 
HARALAMBIEVA_PBMC_FLUARIX_AGE_50_74YO_CORR_WITH_28D_MEM_B_CELL_RESPONSE_AT_28DY_POSITIVE 
                                                                                    1389 
                                                  NAKAYA_PBMC_FLUMIST_AGE_18_50YO_7DY_UP 
                                                                                    1705 
                            OSMAN_BLOOD_CHAD63_KH_AGE_18_50YO_HIGH_DOSE_SUBJECTS_24HR_DN 
                                                                                    2040 
                            OSMAN_BLOOD_CHAD63_KH_AGE_18_50YO_HIGH_DOSE_SUBJECTS_24HR_UP 
                                                                                    2354 

而且这些基因集合的名字都好长啊!!!

使用这个基因集对前面的矩阵进行gsva,如下所示:


library(gplots)
library(ggplot2) 
library(clusterProfiler)
library(org.Hs.eg.db)
library(GSVA) # BiocManager::install('GSVA')
library(GSEABase)
gs=split(all_gene_sets$gene_symbol,all_gene_sets$gs_name)
gs = lapply(gs, unique)
gsc <- GeneSetCollection(mapply(function(geneIds, keggId) {
  GeneSet(geneIds, geneIdType=EntrezIdentifier(),
          collectionType=KEGGCollection(keggId),
          setName=keggId)
}, gs, names(gs)))
gsc
geneset <- gsc
X= av 
es.max <- gsva(X, geneset, 
               mx.diff=FALSE, verbose=FALSE
               parallel.sz=8)
library(pheatmap)
pheatmap(es.max)

可以看到, 这300个通路,在9种不同的单细胞亚群的富集情况是有差异的,如下所示:

9种不同的单细胞亚群的富集情况是有差异的

接下来需要挑选单细胞亚群特异性富集的通路

有很多方法,比如借鉴做完了转录因子分析后的:各个单细胞亚群特异性的转录因子热图

我首先进行了 普通的sd筛选,发现并不是各个单细胞亚群特异性,而是淋巴细胞和髓系的大类特异性,如下所示:

load('es.max.Rdata')
cg = names(tail(sort(apply(es.max, 1, sd) ),10))
pheatmap(es.max[cg,])
pheatmap(es.max[cg,],show_rownames = F)

淋巴细胞和髓系的大类特异性

然后,我做了一个巧妙的计算,挑选了每个单细胞亚群特异性的top 5 的基因集,效果如下所示:

 

可以看到,基本上每个单细胞亚群,都或多或少有一些特异性的免疫通路激活哦。如果你感兴趣我的巧妙变换,欢迎付费一块钱获取我的代码。

代码如下所示: