Gene Set Enrichment Analysis(GSEA),Subramanian et al. 20051年发表在Proc Natl Acad Sci USA.提出来的一个基因功能富集方法。
fgsea能够快速对预选基因集进行富集分析,预选基因集可以是自己设定,一般使用MSigdb(Molecular Signatures Database)数据库,同样由提出GSEA方法团队提供。该数据库包含了以下9种不同基因的基因,可供下载以及R软件包载入。
- H:癌症特征基因集合,共50 gene sets,最常用。
- C1:染色体位置基因集合,共299 gene sets,用的很少。
- C2:包含了已知数据库,文献和专家支持的基因集信息,包含5529 gene sets。
- C3:调控靶基因集合,包括miRNA-target以及转录因子-target调控模式,3735 gene sets。
- C4:计算机软件预测出来的基因集合,主要是和癌症相关的基因,858 gene sets。
- C5:Gene Ontology对应的基因集合,10192 gene sets。
- C6:致癌基因集合,大部分来源于NCBI GEO发表芯片数据,189 gene sets。
- C7:免疫相关基因集,4872 gene sets。
- C8:single cell identitiy gene sets, 302 gene sets
载入相关R包;
载入数据库基因集;
载入单细胞转录组Seurat对象,获取marker基因,以0群为例,相当于0群与其余各群的差异分析,非单细胞测序数据直接做差异分析。
library(msigdbr) #提供MSigdb数据库基因集
library(fgsea)
library(Seurat)
class(PBMC)
[1] "Seurat"
## 预定义基因集
mdb_c2 <- msigdbr(species = "Homo sapiens", category = "C2")
mdb_kegg = mdb_c2 [grep("^KEGG",mdb_c2 $gs_name),]
fgsea_sets<- mdb_kegg %>% split(x = .$gene_symbol, f = .$gs_name)
## Seurat获取0群marker基因
cmarkers <- FindMarkers(PBMC,ident.1 = 0, only.pos = TRUE,
min.pct = 0.1, logfc.threshold = 0)
head(cmarkers)
p_val avg_logFC pct.1 pct.2 p_val_adj
NR4A1 0.000000e+00 1.1942463 0.977 0.599 0.000000e+00
SERPINF1 0.000000e+00 1.1067154 0.939 0.385 0.000000e+00
FOSB 5.600685e-304 0.8970092 0.999 0.893 1.734196e-299
GEM 2.809004e-301 1.1730836 0.739 0.230 8.697800e-297
ANTXR1 2.237076e-300 1.0842559 0.825 0.303 6.926881e-296
C1R 2.444552e-282 0.9066228 0.988 0.496 7.569310e-278
GSEA富集分析(fgsea),使用预定义的基因集(通常来自功能注释或先前实验的结果),将基因按照在两类样本中的差异表达程度排序,然后检验预先设定的基因集合是否在这个排序表的顶端或者底端富集。
#基因按logFC排序
cmarkers$genes = rownames(cmarkers)
cluster0.genes<- cmarkers %>% arrange(desc(avg_logFC)) %>% dplyr::select(genes,avg_logFC)
ranks<- deframe(cluster0.genes)
#fgsea
fgseaRes<- fgsea(fgsea_sets, stats = ranks, nperm = 1000)
画感兴趣的通路
plotEnrichment(fgsea_sets[["KEGG_P53_SIGNALING_PATHWAY"]],
ranks) + labs(title="KEGG_P53_SIGNALING_PATHWAY")
如下图1,展示了其中KEGG_P53_SIGNALING_PATHWAY通路结果,横坐标从大到小排序好的所有基因,靠近0的基因代表表达量与表型呈现正相关,远离0的为负相关基因。纵坐标纵坐标是富集打分ES,这个富集打分是一个动态的值,通常用偏离0最远的值作为富集打分。 中间的竖线为感兴趣基因集所处的位置。
以P值小于0.05筛选有显著统计学意义的通路,以富集分数NES排序筛选前20个通路,绘制条形图。
ggplot(fgseaRes %>% as_tibble() %>% arrange(desc(NES)) %>% filter(pval < 0.05) %>%
head(n= 20), aes(reorder(pathway, NES), NES)) +
geom_col(aes(fill= NES)) +
coord_flip() +
labs(x="KEGG", y="Normalized Enrichment Score",title="KEGG gene sets NES from GSEA")
如图2所示,NES为每个基因子集ES根据基因集大小标准化的富集分数,ES反应基因集在排序列表两端的富集程度。
关于GSEA结果解读见另一篇笔记https://www.jianshu.com/p/f7f89d7f1cb7。