RNA-seq学习:No.6富集分析--GESA

如前所说,过表达富集分析有不少缺点。因此以GSEA为代表的FCS方法也是人们所倾向的选择。接下来将简单了解下方法原理,并利用差异分析数据实操一遍~

1、基础知识

GSEA,gene set enrichment analysis 属于第二代富集分析方法--FCS(Functional Class Scoring)功能集打分的范畴。

(1) 原始分析数据

为差异分析所得到的所有有效结果(不需要过滤),取其中的的基因名(需要是ENTREZID格式)与log2FoldChange列,并按照log2FoldChange值进行从大到小的排序;所得到的基因列表即是GSEA分析所需要的。(顶部可以看做是上调的差异基因,而底部是下调的差异基因)

(2)GSEA的假设检验

  • 原假设为某个go term与 pathway通路基因集里的基因在排序后的基因列表中随机分布。
  • 如果某个基因集下的所有基因是否在这个排序列表的顶部或者底部富集,具有显著意义,就可拒绝原假设。
  • 如果在顶部富集,从总体上看,该基因集是上调趋势,反之,如果在底部富集,则是下调趋势。

(3)富集分数ES(Enrichment score)

  • 富集分数是判断显著性的重要指标。打分机制(如下图)简单来说就是:基于某一基因集(Gene set),重头到尾完整遍历一遍排序好的基因列表。如果遇见基因列表基因在基因集范围内就加分(hit),不在(missing)就减分。具体加减分的多少标准就不细究了。


    ES
  • 最终的得到的富集分数为遍历过程中绝对值最大的值,Leading Edge Subset为对ES值有贡献的基因。
  • 若ES为正值,则一般峰在左边,Leading Edge Subset则为最左边到出现峰值所在基因的基因集范围内的集合(结合下图进行理解)


    ES
  • 若ES为负值,则一般峰在右边(倒峰),Leading Edge Subset则为最右边到出现峰值所在基因的基因集范围内的集合。

2、R包分析

基因列表准备

如上所述,GSEA分析的基因名格式需要为ENTREZID格式,并且不知由于什么原因我之前得到得316个原始ENSEMBL差异基因仅转换成267个ENTREZID格式基因(之前做过表达基因也是的),这就给取数据带来一点麻烦。

mydata=read.table("results.csv",header=TRUE,
                  sep=",",stringsAsFactors=FALSE)
gene=data.frame(mydata$X,mydata$log2FoldChange,stringsAsFactors=FALSE)
names(gene)[1]="ENSEMBL"  #修改列名,后续合并表格需要
library(org.Hs.eg.db)  #使用select()函数转换ID
geneID=select(org.Hs.eg.db,keys=mydata$X,columns="ENTREZID",keytype="ENSEMBL")
geneID=na.omit(geneID)  #仅有267个了
library(dplyr)
tmp=left_join(geneID,gene,by="ENSEMBL")
genelist=tmp$mydata.log2FoldChange
names(genelist)=tmp$ENTREZID
head(genelist)
genelist_sort=sort(genelist,decreasing = T)
head(genelist_sort)

以上我们就取得了按照log2FoldChange降序排列的差异基因列表(267个)


head(genelist_sort)

2.1 GO 基因集

library(clusterProfiler)
go.BP <- gseGO(genelist_sort ,
                   ont = "BP", 
                   OrgDb = org.Hs.eg.db,
                   minGSSize    = 10,  #设置基因集范围
                   maxGSSize = 500,
                   pvalueCutoff = 1)
dim(go.BP)
go.BP.df=as.data.frame(go.BP)
  • setSize为go term基因集与基因列表交集的基因;

  • NES 为归一化的富集分数;

  • core_enrichment为Leading Edge Subset里的基因;

  • leading_edge列与rank列的含义暂时还未理解,存疑


    go.BP.df
  • 得到结果,可根据P值的筛选感兴趣的Go term,并将其可视化,如下--

gseaplot(go.BP,geneSetID = "GO:0007610")

如下图,可分为两个部分

  • 下图绿色折线图即为根据GO:0007610基因集对基因列表打分过程。纵轴0.0水平刻度即为对应二者交集基因,红色虚线即指明ES,而红线往后的7个基因就是Leading Edge Subset。总体来看就是差异基因在这个go term基因集中是低表达的。
  • 上图中表示对应交集基因的log2FoldChange值。


    GO:0007610

2.2 KEGG 基因集

kegg <- gseKEGG(genelist_sort ,
              organism     = 'hsa',
              nPerm        = 1000,
              minGSSize    = 10,
              maxGSSize = 500,
              pvalueCutoff = 1,
              verbose      = FALSE)
dim(kegg)
kegg.df=as.data.frame(kegg)

结果仅发现两个富集pathway结果,而且只有第一个的p值还有点可靠(0.12),画个图看看吧~


hsa01100

以上就是GSEA分析的一些认识与操作,当然也有一些在线工具可以可以使用。重在理解与过表达分析的区别,从上面过程来看基因表达值的属性信息(log2FoldChange), 而且以待测基因功能整体为对象来进行检验的, 也使得检验结果更加灵敏,但也存在一些不足,这里就不叙述啦,详见参考链接。


参考文章
1、功能富集分析概述 -
2、刘小泽学习GSEA -
3、GSEA分析结果详细解读 -

你可能感兴趣的:(RNA-seq学习:No.6富集分析--GESA)