一文掌握单基因GSEA富集分析 | gseaGO and gseaKEGG

本期教程

本期教程

本期教程原文:一文掌握单基因GSEA富集分析 | gseaGO and gseaKEGG

写在前面

关于GSEA分析,我们在前期的教程单基因GSEA富集分析 | 20220404有出过类似的分享。今天,我们也结合相关的资源整理出一篇关于GSEA的教程及出图教程。每个方法的教程很多,我们大家结合自己的需求进行分析即可。以及,对于目前知识分享博主很多,只要你自己动手搜索,基本可以找到你的需求。

更新!…

对于GSEA的教程原计划是在2月2日发表,但是由于有预约被占用了,因此这个教程也就是往后推迟。我在2月1日将我们的教程发在社群中,**也有同学提出疑问:**单基因也可以做GSEA分析,以及给出自己的疑问?

社群提出疑问

也正是有了同学的疑问,才有今天后面更新的内容。也算进一步的了解GSEA分析原理以及单基因如何做GSEA?

对于社群,我认为这是一个值得鼓励的事情,针对自己的疑问提出疑问。以及在社群可以进行“激烈”讨论,这才是社群该有的“样子”,以及是我心中理想的社群该有的状态。

我们来这里看到这篇推文的很多同学,也许自己加了很多个社群,但是有用的社群也许也就那么几个而已(PS:包括自己)。小杜心中一直坚持的社群:不止是一个提供代码和数据的社群,而是一个可以“交流”的社群。社群的维护不在于建立社群的人,而是在于每一个人。

但是,又有多少社群可以一直保持这样的状态呢?有?但是很少。 但我们一直在路上…

OK!说的“废话太多”了。

对于GSEA的原理自己前面了解的也是比较局限。因此,自己也在进行学习,重新整理一下自己的知识结构。很多的知识总结,很多大佬都有总结。

若我们的分享对你有用,希望您可以点赞+收藏+转发,这是对小杜最大的支持。


GSEA原理

GSEA提出

GSEA(Gene set enrichment analysis)最先是2003年发表在Nature Genetics,题目为"PGC-1α-responsive genes involved in oxidative phosphorylation are coordinately downregulated in human diabetes",DOI: 10.1038/ng1180。

2003年发表在Nature Genetics

此外,在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。

2003年发表在PNAS

GSEA网址

https://www.gsea-msigdb.org/gsea/index.jsp

GSEA网站

分析原理

GSEA的分析原理,我们这里使用“生信宝典”陈同老师分享的教程,一文掌握GSEA,超详细教程。

1. GSEA定义

GSEA用来评估一个预先定义的基因集的基因在与表型相关度排序的基因表中的分布趋势,从而判断其对表型的贡献。其输入数据包含两部分,一是已知功能的基因集 (可以是GO注释、MsigDB的注释或其它符合格式的基因集定义),二是表达矩阵,软件会对基因根据其于表型的关联度(可以理解为表达值的变化)从大到小排序,然后判断基因集内每条注释下的基因是否富集于表型相关度排序后基因表的上部或下部,从而判断此基因集内基因的协同变化对表型变化的影响。

2. GSEA原理

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

3. GSEA计算的关键概念

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

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

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

  1. Leading-edge subset,对富集得分贡献最大的基因成员。

4. 与GO或KEGG富集分析的区别

GO富集分析是先筛选差异基因,再判断差异基因在哪些注释的通路存在富集;这涉及到阈值的设定,存在一定主观性并且只能用于表达变化较大的基因,即我们定义的显著差异基因。

GSEA则不局限于差异基因,从基因集的富集角度出发,理论上更容易囊括细微但协调性的变化对生物通路的影响。


以上是基于陈同老师的总结,对于GSEA概念与原理有初步的了解。

那么对于本教程的单基因GSEA分析如何做呢?


单基因GSEA分析

疑问

  1. 单基因GSEA是使用单个基因进行富集吗?
  2. 单基因GSEA的可靠性高吗?

也许我们大家有很多的疑问,同样自己也有很多的疑问。这就对了,我们在分析中,有疑问才有思考,有思考,可能对你的分析更有帮助。

在今天的教程中,我们一是给出(解答)大家的疑问;二是给大家对此有思考;三是,我们一起进行回答;四是,大家一起进行总结。

单基因GSEA原理

  1. 来源自己的愚见

单基因GSEA并不是说只是使用一个基因(目标基因)进行富集分析,而是通过目标基因与数据集基因进行关联分析,获得与目标基因高相关的数据集,进而使用此数据集进行富集分析。

对于单基因GSEA分析,主要针对的基因是未知功能的基因(PS:个人见解)。我们通过单基因GSEA分析,预测其目标基因的可能具有的功能,进而可以通过实验进一步验证。

  1. 如何做??

在我们前期的教程单基因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'

Human MSigDB Collections

参考:

  1. https://www.gsea-msigdb.org/gsea/index.jsp
  2. https://mp.weixin.qq.com/s?__biz=MzI5MTcwNjA4NQ==&mid=2247484582&idx=1&sn=1e01276e1216c91bd6e1e08db15bd905&scene=21#wechat_redirect
  3. https://zhuanlan.zhihu.com/p/76160770
  4. 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分析简单逻辑就是:根据目标基因(单个基因)与其他基因之间的相关性,获得与目标基因具有高相关的基因集,再根据基因集进行GO和KEGG富集分析。(PS:这是个人的理解,若有错误,请根据自己的理解分析即可)

##'@计算相关性
##'@定义函数:获得目标基因与其他基因之间的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)

split气泡图

GSEA常规富集图

gseaplot2(GO,1:10,color="red",pvalue_table = F)

GSEA常规富集图


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)

GSEA KEGG

KEGG 气泡图(根据P值设置颜色)

dotplot(KEGG,color="pvalue")

根据pvalue绘制气泡图

KEGG 分类气泡图

dotplot(KEGG,split=".sign")+facet_grid(~.sign)

KEGG split气泡图

常规GSEA KEGG富集图

gseaplot2(KEGG,1:10,color="red",pvalue_table = F)

常规GSEA_KEGG富集图

若我们的分享对你有用,希望您可以点赞+收藏+转发,这是对小杜最大的支持。

本期教程原文:一文掌握单基因GSEA富集分析 | gseaGO and gseaKEGG

往期文章:

1. 复现SCI文章系列专栏

2. 《生信知识库订阅须知》,同步更新,易于搜索与管理。

3. 最全WGCNA教程(替换数据即可出全部结果与图形)

  • WGCNA分析 | 全流程分析代码 | 代码一

  • WGCNA分析 | 全流程分析代码 | 代码二

  • WGCNA分析 | 全流程代码分享 | 代码三

  • WGCNA分析 | 全流程分析代码 | 代码四

  • WGCNA分析 | 全流程分析代码 | 代码五(最新版本)


4. 精美图形绘制教程

  • 精美图形绘制教程

5. 转录组分析教程

转录组上游分析教程[零基础]

一个转录组上游分析流程 | Hisat2-Stringtie

小杜的生信筆記 ,主要发表或收录生物信息学的教程,以及基于R的分析和可视化(包括数据分析,图形绘制等);分享感兴趣的文献和学习资料!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/449604.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot整合rabbitmq,及各类型交换机详解

RabbitMQ交换机&#xff1a; 一.交换机的作用 如果直接发送信息给一条队列&#xff0c;而这一消息需要多个队列的的多个消费者共同执行&#xff0c;可此时只会有一个队列的一个消费者接收该消息并处理&#xff0c;其他队列的消费者无法获取消息并执行。所以此时就需要交换机接…

只用一台服务器部署上线(宝塔面板) 前后端+数据库

所需材料 工具&#xff1a;安装宝塔面板服务器至少一台、域名一个 前端&#xff1a;生成dist文件&#xff08;前端运行build命令&#xff09; 后端&#xff1a;生成jar包&#xff08;maven运行package命令&#xff09; 准备&#xff1a; 打开宝塔面板&#xff0c;点击进入软…

基于springboot篮球论坛系统源码和论文

首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计。本项…

Linux|Grep 命令的 12 个实用示例

您是否曾经遇到过在文件中查找特定字符串或模式的任务&#xff0c;但不知道从哪里开始查找&#xff1f;那么&#xff0c;grep 命令可以拯救你&#xff01; grep 是一个功能强大的文件模式搜索器&#xff0c;每个 Linux 发行版都配备了它。如果出于某种原因&#xff0c;它没有安…

一文速学-selenium高阶操作连接已存在浏览器

前言 不得不说selenium不仅在自动化测试作为不可或缺的工具&#xff0c;在数据获取方面也是十分好用&#xff0c;能够十分快速的见到效果&#xff0c;这都取决于selenium框架的足够的灵活性&#xff0c;甚至在一些基于web端的自动化办公都十分有效。 通过selenium连接已经存在…

SQL注入:sqli-labs靶场通关(1-37关)

SQL注入系列文章&#xff1a; 初识SQL注入-CSDN博客 SQL注入&#xff1a;联合查询的三个绕过技巧-CSDN博客 SQL注入&#xff1a;报错注入-CSDN博客 SQL注入&#xff1a;盲注-CSDN博客 SQL注入&#xff1a;二次注入-CSDN博客 ​SQL注入&#xff1a;order by注入-CSDN博客 …

大坑!react+thress.js

2. UI交互界面与Canvas画布叠加 | Three.js中文网 (webgl3d.cn) // canvas画布绝对定位 renderer.domElement.style.position absolute; renderer.domElement.style.top 0px; renderer.domElement.style.left 0px; renderer.domElement.style.zIndex -1; 我按照教程设置了…

vscode实时预览markdown效果

安装插件 Markdown Preview Enhanced 上面是搜索框 启动预览 右键->Open Preview On the Side 效果如下&#xff1a; 目录功能 目录功能还是使用gitee吧 push后使用gitee&#xff0c;gitee上markdown支持侧边生成目录

【数模百科】一文快速讲清楚层次分析法AHP(附python代码和参考美赛论文)

本文摘录自 层次分析法原理 - 数模百科&#xff0c;如果你想了解更多关于层次分析法的知识&#xff0c;请移步数模百科。 层次分析法&#xff08;Analytic Hierarchy Process&#xff0c;简称AHP&#xff09;是一种解决复杂决策问题的方法。这个方法是由美国运筹学家托马斯萨蒂…

12.scala下划线使用总结

目录 概述实践变量初始化导包引入方法转变为函数用户访问Tuple元素简化函数参数传递定义偏函数变长参数 结束 概述 实践 变量初始化 在Scala中&#xff0c;变量在声明时需要显式指定初始值。可以使用下划线为变量提供初始值&#xff0c;但这种语法仅限于成员变量&#xff0c;…

kubernetes基本概念和操作

基本概念和操作 1.Namespace1.1概述1.2应用示例 2.Pod2.1概述2.2语法及应用示例 3.Label3.1概述3.2语法及应用示例 4.Deployment4.1概述4.2语法及应用示例 5.Service5.1概述5.2语法及应用示例5.2.1创建集群内部可访问的Service5.2.2创建集群外部可访问的Service5.2.3删除服务5.…

XML详解

XML 简介 概述&#xff1a;Extensible Markup Language 可扩展标记语言 可扩展&#xff1a;标签都是自定义的。 功能 数据存储&#xff1a;XML 可以用来存储结构化数据&#xff0c;包括文本、数字、日期等各种类型的数据数据交换&#xff1a;XML 可以作为一种通用的数据交换格…