GSEA相关笔记整理

网页上关于GSEA富集分析的教程很多,对自己这个生信小白来说比较简单通俗易懂的当数生信宝典和生信技能树的教程了。感谢大佬们的付出。下面是自己整理的个人学习笔记,可能有理解不对或者断章取义的地方,有问题还是参考大佬们的教程。

什么是GSEA?

GSEA:gene set enrichment analysis即基因集富集分析,是常见富集分析之一,类似GO/KEGG.


先给定一个排序的基因表L和一个预先定义的基因集S (比如编码某个代谢通路的产物的基因, 基因组上物理位置相近的基因,或同一GO注释下的基因),GSEA的目的是判断S里面的成员s在L里面是随机分布还是主要聚集在L的顶部或底部。这些基因排序的依据是其在不同表型状态下的表达差异,若研究的基因集S的成员显著聚集在L的顶部或底部,则说明此基因集成员对表型的差异有贡献,也是我们关注的基因集。

来自:生信宝典富集分析 - 界面操作



原理:

测序或者芯片分析一般是根据研究目的设置两个组,然后通过统计学检验方法(t-test、或者方差分析等)寻找差异表达的基因,然后根据差异表达基因推断相关的生物学机制。

差异表达基因需满足以下条件:

•统计学上有意义:, p ≤0.01

•控制假阳性率:FDR,一般采用BH法进行校正,FDR ≤ 0.1 or 0.2

•FoldChange足够大: |FC|  ≥  1.5或者2         

•探针平均表达水平较高组大部分表达值都高于背景:>80%但如果组内样本仅为3个时必须3个都满足;如不满足这些条件,不宜进行统计学检验分析

•另外,根据研究目的和测序平台等,筛选差异表达基因的条件可以调整。

但是进行差异表达分析,可能遇到的问题是:找到了一堆DEGs,却无法得到统一的生物学推论,因为DEG的标准是人为设置较为随意,又或者很少DEG满足人为设置的标准。

关于在DEG的列表中进行GSEA需注意以下几点:

1.检验DEGs的成员是否在给定pathway和其他基因集中显著高表达?

基因满足组间比较中显著上调的标准;

基因与某一临床变量高度正(负)相关

基因在组间比较中有较大的差异倍数

2.进行分析的工具:DAVID/GoMinor/GenMAPP/Onto-Express/Gostat/ GATHER等

3.分开提交上调和下调的基因列表

4.基因集富集分析只能得到验证过的在数据库中的基因集相关的结果。

举个例子:如果基因芯片共检测10,000个基因,而其中200个待测基因在已知基因集S中,测到了50个差异表达基因。

那么一般来说随机至少有1个基因落在基因集S上(200/10000*50);但最后结果得到了6个差异表达基因落在基因集S中,根据超几何分布推测,该事件发生的p值为0.00045,即随机抽取50个基因,有相同或者更多基因落在基因集S的概率。

基因集富集方法:

•这些方法为利用选定的度量标准计算基因集中每个基因提供了统计学公式,增加了统计学效力如

1.组A和组B比较的T-评分

2.组Avs组B的FC值

3.基因表达与某一临床变量的pearson相关系数

•数据集中所有的基因都被运用到富集分析中

•可被运用到多个基因集中

•值得注意的是,结果取决于选取的geneset;另外存在多次检验导致的错误;建议分开进行不同种类的基因集分析。




GSEA分析流程

GSEA步骤分为三步:

1.计算富集分数(ES): ES反映基因集成员s在排序列表L的两端富集的程度。计算方式是,从基因集L的第一个基因开始,计算一个累计统计值。当遇到一个落在s里面的基因,则增加统计值。遇到一个不在s里面的基因,则降低统计值。每一步统计值增加或减少的幅度与基因的表达变化程度(更严格的是与基因和表型的关联度)是相关的。富集得分ES最后定义为最大的峰值。正值ES表示基因集在列表的顶部富集,负值ES表示基因集在列表的底部富集。

2.估计富集分数的显著性水平:通过基于表型而不改变基因之间关系的排列检验 (permutation test)计算观察到的富集得分(ES)出现的可能性。若样品量少,也可基于基因集做排列检验 (permutation test),计算p-value。

3.矫正多重假设检验:首先对每个基因子集s计算得到的ES根据基因集的大小进行标准化得到Normalized Enrichment Score (NES)。随后针对NES计算假阳性率。(计算NES也有另外一种方法,是计算出的ES除以排列检验得到的所有ES的平均值)

经过GSEA富集分析后可以得到对genesets贡献最大的部分基因,这部分基因被称为:Leading-edge subset:对富集得分贡献最大的基因成员。根据这些基因,后续进行Leading-edge analysis


GSEA和GO/KEGG富集分析的差异:

1.GO/KEGG分析强调差异基因,是针对统计学存在显著差异的一部分基因的分析 ,容易遗漏一些统计学上无显著差异但具有生物学意义的基因;而GSEA是从全体基因的表达矩阵中找出具有协同差异 (concordant differences)的基因集,故能兼顾差异较小的基因。

2.GO富集是定性的分析,GSEA考虑到了表达或其它度量水平的值的影响。

3.对于时间序列数据或样品有定量属性时,GSEA的优势会更明显,不需要每个分组分别进行富集,直接对整体进行处理。GO/KEGG更适合两组间的分析。



GSEA软件

软件安装:教程:http://software.broadinstitute.org/gsea/doc/desktop_tutorial.jsp ,需要java环境

输入数据一般格式:http://www.broadinstitute.org/cancer/software/gsea/wiki/index.php/Data_formats

差异表达数据: *.gct

表型、分组 :*.cls

基因集: *.gmt

芯片注释:*.chip

输出格式:点击success就能进入报告主页,里面的链接可以进入任意一个分报告。一般是基于MSigDB数据库的富集结果解读参照网页::http://www.broadinstitute.org/cancer/software/gsea/wiki/index.php/Main_Page

具体操作:GSEA富集分析 - 界面操作




R语言进行GSEA分析

用到的R包依旧是是做富集分析的神器-Y叔的clusterProfiler

同样需要排序基因表L和预先定义的基因集S这两个东西。

先看排序的基因表L:这里需要构建一个genelist,可以是来自自己测序数据差异分析的结果或者是GEO数据集,anyway,这个genelist由两列构成,第一列表示差异表达的基因ID(基因ID不能重复的,形式同样为entrezID),第二列为基因对应的表达量或者是FC等数值型向量,注意按照数值从高到低排列(为什么要由高到低因为要制作排序 的基因表L)


gene <- names(geneList)  ##提取排序后基因名


接下来需要基因集S,可以直接读取自己提前准备好的gmt文件或者clusterProfiler的自带基因集文件或者从R包msigdf中提取

  ##gmtfile <- system.file("extdata", "c5.cc.v5.0.entrez.gmt", package="clusterProfiler")

S<-read.gmt(gmtfile) ##读取gmt文件得到基因集S 


好了,准备好了排序基因集L----gene,和基因集S ------S,就可以进行超几何分布检验和GSEA富集分析

egmt <- enricher(gene, TERM2GENE=S)##超几何分布检验

head(egmt)   ##查看GSEA分析结果                     

write.csv(egmt,file ="egmt.csv")  ##保存超几何分布检验

egmt2 <-GSEA(geneList,TERM2GENE=S,pvalueCutoff=0.5,#verbose=FALSE)

head(egmt2)

gseaplot2(egmt2,geneSetID=1,title=egmt2$Description[1],pvalue_table=T)

barplot(egmt)##可视化,展示富集的基因集


另外,也对于GO和KEGG的GSEA富集分析,可以直接用gseGO()、gseKEGG()等。

还可以对leading-edge subset进行可视化分析:  dotplot() cnetplot()

具体操作参考Y叔的dotplot for GSEA以及enrichplot: 让你们对clusterProfiler系列包无法自拔


同时前面提到,可以通过安装R包msigdf可以免去从MSigDB下载gmt文件的步骤。但需注意msigdf的更新情况并不和数据库一致。参考Y叔的msigdf + clusterProfiler全方位支持MSigDb一文。

devtools::install_github("ToledoEM/msigdf")

library(msigdf)

library(dplyr)

c2 <- msigdf.human %>%  filter(category_code == "c2") %>% select(geneset, symbol) %>% as.data.frame

这里得到基因集c2,注意这个包中的基因ID都是SYMBOLID,需要转换为ID,再用clusterProfiler进行GSEA分析。


再次感到clusterProfiler的强大!!!



如何自己制作geneset做GSEA分析


如果用GSEA软件进行GSEA分析,需要GCT,CLS和GMT文件。其中GMT文件可以在数据库MSigDB中找到相应的geneset。但是不是所有想要的geneset都能在MSigDB找到,这时就需要我们自己制作geneset的GMT格式文件。

首先来看看一般GSEA用到的GMT格式文件长什么样子?


可以看到,表格每一行代表一个geneset,第一列是geneset的名称,不能重复命名;第二列是geneset的描述,没有是可以用“na”填充;之后每一列是该geneset包含的基因名,在Excel编辑时应当注意基因名是否正确。每个geneset包含的基因数可以不同。

制作前要准备好感兴趣的geneset的genelist,可以通过查阅文献和相关数据库如KEGG等等得到,基因名必须是以hugo规定的标准symbolID。

生信技能树给出的示范:

##R语言中将kegg的文件kegg2gene.txt读入path2gene_file文件中

tmp=read.table(path2gene_file,sep="\t",colClasses=c('character'))

#tmp=toTable(org.Hs.egPATH)

## 读入的文件,第一列是kegg的编号,第2列是基因的entrezID

GeneID2kegg_list<<- tapply(tmp[,1],as.factor(tmp[,2]),function(x)x)

kegg2GeneID_list<<-tapply(tmp[,2],as.factor(tmp[,1]),function(x)x)

##最后需要将基因的entrezID转换为symbolID,得到kegg2symbol_list

具体操作可以参照gene的各种ID转换终结者-bioconductor系列包(来自生信技能树)

最后将genelist保存为GMT格式文件

write.gmt <- function(geneSet=kegg2symbol_list,gmt_file='kegg2symbol.gmt'){

sink( gmt_file ) 

for (i in 1:length(geneSet)){

cat(names(geneSet)[i])

cat('\tNA\t')

cat(paste(geneSet[[i]],collapse = '\t'))

cat('\n')

}

sink()}

这样就可以把想要的geneset转换为GSEA分析的GMT文件了。制作重点还是在于弄清输入的GMT文件的格式。

参考:GSEA的分析汇总

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容