一文掌握单基因GSEA富集分析
本期教程

本期教程深入解析单基因GSEA富集分析 | gseaGO和gseaKEGG
写在前面
关于GSEA分析的内容,在之前的教程单基因GSEA富集分析 | 20220404有过类似的分享。今天我们也利用相关的资源整理出了关于GSEA的一篇教程以及作图指南。每个方法相关的资源都比较丰富,请根据自己的需求选择合适的内容进行学习。另外值得一提的是,在当前众多的知识分享博主中只要你通过自行搜索就能满足自己的学习需求
更新!…
对于GSEA的教程原计划将在2月2日发布, 但由于有预约占用, 因此该教程已被推迟. 我于2月1日在社群中发布了本次教程, 同时也有人提出了疑问: 单基因数据是否适合进行GSEA分析?

正是因为同学提出了疑问, 才使得今天后面的内容得以呈现. 这实际上也意味着我们能够更深入地了解GSEA分析的基本原理以及单基因在其中的作用.
对于社群而言,
我坚信这是一种值得提倡的做法,
旨在解决个人存在的疑惑。
与此同时,
在社群中应当展开深入的讨论,
这才是社群应有的状态,
也是我心中的理想状态。
许多读者在这里观看了这篇推文。也加入了许多群组后发现真正有效的群组或许也不过如此(注:包括你自己在内)。小杜所珍视的社群:**一个仅仅局限于分享资源与技术知识的社会。而是一个可以'交流'的社会。维护这个群体不在于创造者而是在于每一个成员
然而,在维持这种状态的社群中又有多少人能够持续下去呢?还有吗?然而只有少数人才能做到。但我们始终在路上……
OK!说的“废话太多”了。
对于GSEA这一原理自己之前掌握的知识也有一定局限性。因此,在进一步深入学习后又持续进行知识梳理与系统整合工作,并对众多知识点进行了系统梳理与深入分析
期待您能在第一时间关注 + 转发 + 评论 ,这对我们来说意义重大。
GSEA原理
GSEA提出
GSEA(基因集丰富性分析)最初是由2003年发表于《Nature Genetics》的一篇文章提出的,《PGC-1α响应基因参与氧化磷酸化的过程在人类糖尿病中的协调下调》一文中首次提出了这一方法,并获得了DOI编号:10.1038/ng1180。

此外,在2005年发表在Proc Natl Acad Sci USA,题目为:Gene set enrichment analysis: a knowledge-based approach for interpreting genome-wide expression profiles,DOI: 10.1073/pnas.0506580102。

GSEA网址
https://www.gsea-msigdb.org/gsea/index.jsp

分析原理
GSEA分析的基本原理是怎样的呢?我们这里采用了'生信宝典'陈同老师讲解的课程内容,《一文掌握GSEA:超详细教程》(https://mp.weixin.qq.com/s?__biz=MzI5MTcwNjA4NQ==&mid=2247488358&idx=1&sn=4c1c15b6467ff7f8bd7fe95400bbc1df&scene=21#wechat_redirect)作为学习素材。
1. GSEA定义
GSEA用于评估一个预先确定的生物分子集合在经过排序后的基因表达数据中的分布情况,从而推断该集合对研究对象特征的影响程度。该方法接受两个主要输入数据部分:一是具有已知功能的生物分子集合(例如基于Gene Ontology(GO)注解、MsigDB数据库或其他符合标准格式的标准生物分子集合定义),二是反映实验条件下各基因表达水平的数据矩阵(即expression matrix)。软件将首先将所有标记按照与研究对象特征相关的程度(即表达值的变化幅度)从高到低排列顺序;随后,在这一排序结果的基础上分析该生物分子集合中的所有标记(即每条注释下的相关基因)是否在经过排序后位于上端或下端区域中;最后进而分析该生物分子集合中的所有标记(即每条注释下的相关基因)是否在经过排序后位于上端或下端区域中。
2. GSEA原理
为了便于分析, 我们通常选择一个有序排列的基因列表L以及一个预先定义好的基因集合S(例如:编码特定代谢通路产物的关键基因;位于同一染色体区域且具有相似功能定位的相关基因;或是具有相同功能注释的一组相关基因)。GSEA方法的主要目的是判定该特定集合S中的每一个成员s在其对应的有序列表L中是均匀分布还是集中在表型特征极端的位置上。这种排序的基础是基于各研究对象在不同实验条件下的相对表达水平差异大小这一指标。如果经过分析后发现研究对象所关注的重点集合S中的成员s确实倾向于集中在极端的位置上,那么这表明该集合中的成员与所研究的现象之间存在密切关联,也即是说这是我们需要重点关注的对象

3. GSEA计算的关键概念
评估基因集的富集程度(Enrichment Score, ES)。Enrichment Score (ES)衡量基因集成员s在排序列表L中两端富集的程度。从排序列表L的第一个基因开始分析,在此过程中对属于集合s的基因进行累计统计,在遇到不属于集合s的个体时则进行相应调整。具体而言,在每个步骤上如果遇到属于集合s的个体,则增加累积统计值;反之,则减少累积统计值。这种调整幅度与该个体与研究表型的相关性直接相关。最终确定的最大峰值值即为我们所求的Enrichment Score (ES)。

确定富集得分(ES)具有显著性。通过以表型为依据但不破坏基因间的关系进行排列检验 (permutation test),估算其出现的概率。当样本数量较小时,则采用基于基因集的排列检验 (permutation test),求取对应的p值

- 多重假设检验矫正过程如下:首先对每个基因子集s计算其标准化效应量ES,并将其按基因集大小进行调整以获得标准化效应量Normalized Enrichment Score (NES);随后基于 NES 计算假阳性率;此外还有一种不同的方法用于计算 NES

- Leading-edge subset,对富集得分贡献最大的基因成员。
4. 与GO或KEGG富集分析的区别
GO富集分析旨在首先筛选出差异基因,并进一步确定这些差异基因所属的关键功能通路;这一过程受到阈值设置的影响较大,并且仅适用于度量显著变化的基因,即我们定义的显著差异基因。
GSEA并非仅限于分析差异基因;它从基因集合的角度进行富集分析,在理论层面上,则能够更全面地涵盖那些微小而协调的变化对生物通路的作用机制。
以上是基于陈同老师的总结,对于GSEA概念与原理有初步的了解。
那么对于本教程的单基因GSEA分析如何做呢?
单基因GSEA分析
疑问
- 单基因GSEA是使用单个基因进行富集吗?
- 单基因GSEA的可靠性高吗?
…
可能人们有很多疑问。同样每个人也许多问题。这正是如此,在分析中有问题才会有思考。有思考可能会提高你的分析效果。
在今天的教程中, 我们首先解答了学员们的疑问; 然后进行了深入思考; 共同给出了答案; 最后对本次课程进行了总结和回顾.
单基因GSEA原理
- 来源自己的愚见
单基因GSEA不仅仅只是仅使用一个特定的目标基因来进行富集分析的研究方法;而是通过将该特定的目标基因与整个数据分析集合中的所有其他基因展开关联研究,并筛选出与该特定目标基因高度相关的数据集合;进而利用该筛选出的数据集合来进行后续的富集分析工作。
对于单基因GSEA分析而言,在这种情况下我们主要关注那些功能尚不明确的基因(PS:个人意见)。通过单基因GSEA分析的方法预测其目标基因可能具有的功能特征,并且我们还可以通过后续实验来进一步验证这一可能性。
- 如何做??
在我们的前期课程中,《单基因GSEA富集分析》主要围绕着构建表达量矩阵展开教学,并通过计算目标基因与其他所有基因之间的相关性来获得相应的GSEA富集结果。本次课程也沿用这一方法对单基因GSEA进行分析。
GSEA数据集和软件下载
GSEA软件下载
提供不同平台的版本,并且我们仍然推荐使用R语言来进行数据分析。为什么不呢?操作简便,并且代码可以直接获取无需额外处理即可粘贴和复制使用。
https://www.gsea-msigdb.org/gsea/downloads.jsp

MsigDB数据集下载
网址:
https://www.gsea-msigdb.org/gsea/downloads.jsp

Human MSigDB Collections
https://www.gsea-msigdb.org/gsea/msigdb/human/collections.jsp'

参考:
- 访问该数据库进行GOES-Seq分析的界面:https://www.gsea-msigdb.org/gsea/index.jsp
- 查看第一篇文章的相关内容,请访问以下网页:https://mp.weixin.qq.com/s?__biz=MzI5MTcwNjA4NQ==&mid=2247484582&idx=1&sn=1e01276e1216c91bd6e1e08db15bd905&scene=21#wechat_redirect
- 查看该作者关于基因组学研究的文章,请访问以下网页:https://zhuanlan.zhihu.com/p/76160770
- 深入了解相关知识,请访问以下网页:https://zhuanlan.zhihu.com/p/625123340
单基因GSEA分析
输入数据类型
对于输入数据,基本是我们的基因数据集或是DEGs数据集。

绘图代码
导入所需的R包
###'@导入所需的R包
library(org.Hs.eg.db)
library(stringr)
library(BiocGenerics)
library(clusterProfiler)
library(enrichplot)
library(future)
library(future.apply)
导入数据
exprSet <- read.csv("Input_ExpData.csv",row.names = 1)
exprSet[1:10,1:5]
> exprSet[1:10,1:5]
sample01 sample02 sample03 sample04 sample05
VWA1 2.26049224 4.08491679 3.4792744 1.99819783 2.36426617
ATAD3C 0.17494291 0.23927633 0.1331588 0.26317521 0.11831695
ATAD3B 0.45914335 0.62300446 0.7261913 0.23297821 0.33270716
ATAD3A 1.21857160 1.53510784 1.3646565 1.50753047 1.03695410
TMEM240 0.08058546 0.27554979 0.0000000 0.00000000 0.05109502
SSU72 6.95506819 7.85755571 8.3072225 10.27444893 11.24621189
C1orf233 0.08617899 0.07366901 0.1341729 0.02700902 0.00000000
MIB2 0.96564412 0.91907833 1.0022802 0.56159762 0.63120040
MMP23B 0.00000000 0.00000000 0.0000000 0.00000000 0.00000000
CDK11B 0.70893552 0.92686092 1.3526327 1.18934155 1.29561449
计算相关性
GSEA分析的核心逻辑在于依据目标基因与其他基因的相关性进行筛选。具体而言,在针对单个目标基因的情况下(即单一的研究焦点),我们能够识别出与该研究焦点高度相关的特定基因为基础构建相关联的基因为基础构建集合,并基于此筛选出具有显著功能特性的通路或代谢途径等生物信息学特征。
##'@计算相关性
##'@定义函数:获得目标基因与其他基因之间的P值和Cor值
batch_cor <- function(gene){
y <- as.numeric(exprSet[gene,])
rownames <- rownames(exprSet)
do.call(rbind,future_lapply(rownames, function(x){
dd <- cor.test(as.numeric(exprSet[x,]),y,type="spearman")
data.frame(gene=gene,mRNAs=x,cor=dd$estimate,p.value=dd$p.value )
}))
}
计算P值和Cor值
dd <- batch_cor("HES5")
提取基因集
gene <- dd$mRNAs

转化symbol格式
gene = bitr(gene, fromType="SYMBOL", toType="ENTREZID", OrgDb="org.Hs.eg.db")
gene_df <- data.frame(cor=dd$cor,SYMBOL = dd$mRNAs)
去重复
gene <- dplyr::distinct(gene,SYMBOL,.keep_all=TRUE)
geneList <- gene_df$cor
names(geneList)=gene_df$SYMBOL
geneList=sort(geneList,decreasing = T)
dotplot_internal <- function(object, x = "GeneRatio", color = "pvalue",
showCategory=10, size=NULL, split = NULL,
font.size=12, title = "", orderBy="x", decreasing=TRUE) {
colorBy <- match.arg(color, c("pvalue", "p.adjust", "qvalue"))
if (x == "geneRatio" || x == "GeneRatio") {
x <- "GeneRatio"
if (is.null(size))
size <- "Count"
} else if (x == "count" || x == "Count") {
x <- "Count"
if (is.null(size))
size <- "GeneRatio"
} else if (is(x, "formula")) {
x <- as.character(x)[2]
if (is.null(size))
size <- "Count"
} else {
## message("invalid x, setting to 'GeneRatio' by default")
## x <- "GeneRatio"
## size <- "Count"
if (is.null(size))
size <- "Count"
}
df <- fortify(object, showCategory = showCategory, split=split)
## already parsed in fortify
## df$GeneRatio <- parse_ratio(df$GeneRatio)
if (orderBy != 'x' && !orderBy %in% colnames(df)) {
message('wrong orderBy parameter; set to default `orderBy = "x"`')
orderBy <- "x"
}
if (orderBy == "x") {
df <- dplyr::mutate(df, x = eval(parse(text=x)))
}
idx <- order(df[[orderBy]], decreasing = decreasing)
df$Description <- factor(df$Description, levels=rev(unique(df$Description[idx])))
ggplot(df, aes_string(x=x, y="Description", size=size, color=colorBy)) +
geom_point() +
scale_color_continuous(low="red", high="blue", name = color, guide=guide_colorbar(reverse=TRUE)) +
## scale_color_gradientn(name = color, colors=sig_palette, guide=guide_colorbar(reverse=TRUE)) +
ylab(NULL) + ggtitle(title) + DOSE::theme_dose(font.size) + scale_size(range=c(3, 8))
}
GSEA GO富集分析
##'@GSEA GO 富集
##'读取go.gmt文件
GOgmt<-read.gmt("c5.go.v7.2.symbols.gmt")
##'@富集分析
GO <-GSEA(geneList,TERM2GENE = GOgmt)
气泡图
dotplot_internal(GO)

根据P值设置颜色
dotplot(GO,color="pvalue")

分类气泡图
dotplot(GO,split=".sign")+facet_grid(~.sign)

GSEA常规富集图
gseaplot2(GO,1:10,color="red",pvalue_table = F)

GSEA KEGG富集分析
导入kegg.gmt文件
KEGGgmt<-read.gmt("c2.cp.kegg.v7.2.symbols.gmt")
KEGG富集分析
KEGG <-GSEA(geneList,TERM2GENE = KEGGgmt)
GSEA_KEGG气泡图
dotplot_internal(KEGG)

KEGG 气泡图(根据P值设置颜色)
dotplot(KEGG,color="pvalue")

KEGG 分类气泡图
dotplot(KEGG,split=".sign")+facet_grid(~.sign)

常规GSEA KEGG富集图
gseaplot2(KEGG,1:10,color="red",pvalue_table = F)

如果您的分享对我们有帮助,请期待您进行点赞、收藏并转发的行为。这也是对我们最大的支持。
本期学习重点:深入探索单基因GSEA富集分析方法及其应用案例解析
往期文章:
2.《生信知识库订阅须知》,同步更新,易于搜索与管理。
3. 最全WGCNA教程(替换数据即可出全部结果与图形)
包括以下内容:WGCNA分析、全流程代码解析以及辅助工具的应用
4. 精美图形绘制教程
5. 转录组分析教程
从零开始学转录组上游通路分析教程
一个转录组上游分析流程 | Hisat2-Stringtie
小杜的生信笔记 主要发表或收录生物信息学相关的教程内容,并提供基于R语言的数据分析与可视化服务(涵盖数据分析与图形绘制等内容),同时也会分享个人感兴趣的文献及学习资源吗?
