基因集合打分不考虑基因高低表达 基因集合评分不考虑高低表达 绝对值 基因集合里面的正负表达影响addmodulescore的结果 构建的基因集进行评分时 基因的高低正负表达基因集合评分不考虑高低表达

本文主要是介绍基因集合打分不考虑基因高低表达 基因集合评分不考虑高低表达 绝对值 基因集合里面的正负表达影响addmodulescore的结果 构建的基因集进行评分时 基因的高低正负表达基因集合评分不考虑高低表达,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GSEA分析一文就够(单机版+R语言版)

8种方法可视化你的单细胞基因集打分 - 腾讯云开发者社区-腾讯云 (tencent.com)

GSEA的统计学原理试讲

一、开发背景

该算法最初开发是受microarray RNA数据驱动,旨在解释基因组数据,获得相较于单个基因更加深入的生物学见解。

基于差异基因分析存在的缺陷:

  1. 多重假设检验校正后,只有少量基因甚至没有基因的差异达到统计学显著性。【生物学差异被技术噪音,如microarray,所掩盖】
  2. 得到大量的统计上显著的差异表达基因,但由于缺乏或未按统一生物学主题对基因进行组织,对结果的解释相当困难,依赖于生物学家强大的生物学背景。
  3. 聚焦于单基因差异,会忽略一些真正有生物学意义的生物通路。如,(基因协同发挥作用)编码代谢途径的成员的所有基因增加20%可能会显著改变细胞的代谢过程,这可能比单个基因增加20倍更重要。
  4. 同一生物学系统,不同研究团队获得差异基因列表可能差别巨大,甚至很少重叠。

GSEA vs. DEGs

  1. DEGs多聚焦于单个基因;GSEA是在基因集水平上比较不同生物学系统(不同样本)间的转录组差异。
  2. 结果稳健性更好,在不同团队研究结果中的生物学意义的可重复性和解释性更好。
  3. 高度灵活性,主要体现在基因集的来源。可以使用公共数据库如MsigDb,还可以根据研究目的自己构建。

二、数学原理:

总的来说,GSEA富集分析有以下三个要点:

  1. input data1 :样本的全基因组RNA测序数据及样本的表型标签信息【样本数尽量多一些,否则假阳性高】
  2. input data 2:基于某个合适的指标(如差异倍数FC)对所有基因排序,获得排序基因列表L = {g1, g2, g3, g4, …… gN};【可根据研究需要,制定个性化排序方案,如基于与兴趣TF的相关性。】
  3. input data 3:基因集S【具有充分个性化空间。可自己定义,也可以人工筛选和矫正。】
  4. input data 4:指定计算过程中权重值p。

ES的数学计算过程如下:

总的原则:看某个基因集S的基因在L上随机分布 or 分布在顶部 or 分布在尾部。【为GSEA算法的核心,数学原理见下】

  1. 计算富集分数(Enrichment Score, ES)
    1. 解读:绝对值越大,代表基因集S在排名列表L的顶部(正值)或底部(负值)被过度代表(overrepresented);
    2. 计算过程:给定初始统计量x, 沿着排序列表从top→bottom遍历每个基因,遇到属于基因集S的基因,则x = x+ai;若遇到不属于基因S的基因j,则x = x - aj…… 直到遍历所有基因。【注意:a的值取决于基因i或基因j与分组性状的关联程度,关联越大,则a越大;反之,则越小】。ES即为该过程中的x的最大取值,对应加权的Kolmogorov-Smirnov样的统计量(ref7)。

图例:①Phit= 基因集S中的加权和,Pmiss = 非基因集S中的加权和。②ES = Phit - Pmiss。②

对应ai部分。p代表加权,若p=0,则公式简化为标准的Kolmogorov-Smirnov统计量;若p=1,则Phit的分母为基因集S中所有基因与性状的关联强度之和,基因集S中每个基因与该性状的关联都对该和进行标准化处理。【r代表基因与兴趣性状之间的关联强度,可以由FC等来评估】

  1. ES的统计显著性评估
    1. 统计学检验方法:基于经验表型的置换检验方法(empirical phenotype-based permutation test);
    2. 构建零分布:对每个样本重新分配表型标签、重新排序所有基因、重新计算基因集S的ES值;以上过程重复1000次,该1000个ES值构成零分布(null distribution);
    3. 计算P值:绘制直方图,p值即为ESnull distribution中≥或≤ESobserved的比例。该p值为经验名义p值。
    4. 结果解读:小于α值(如0.05),则拒绝零假设,认为基因集S在排序列表L的top端或bottom端富集;若≥α值,则接受零假设,认为兴趣基因集S内基因在排序列表L中随机分布。
  2. p值的多重假设检验校正
    1. 适用场景:当对多个基因集S(S1,S2, S3, S4……)进行GSEA分析时;
    2. 计算过程:①基于基因集S大小,对ES进行标准化处理,获得NES值;②对每个NES计算FDR值。
    3. 结果解读:FDR值代表,给定NES值对应的基因集为假阳性(富集)的估计概率;值越大,则假阳性的概率越大。

三、生物学意义的挖掘

  1. 富集通路的分析(略)。

S1:基因集S1主要分布在排序列表的top端,ES分值较高,p值显著;

S2:基因集S2在排序列表中随机分布,ES值低,p值不显著;

S3:基因集S3非随机分布,但也并不在top or bottom呈现集中分布模式,ES值较高,但p值不显著。

因此,富集分析的结果结果,要综合考虑p值及ES值两个指标。

  1. leading-edge subset
    1. 背景:可以通过多种方法定义基因集;需要注意的是,并不是基因集内的每个基因成员都会参与到兴趣的生物学通路中。
    2. 定义:基因集S中位于x最大值(偏离0值最大的位置)之前的基因(包含最大值位置对应的基因)。
    3. 结果解读:①代表基因集S中对ES值贡献最大的一小簇基因(核心基因);②代表基因集中在兴趣生物学通路中发挥关键作用的核心成员。
    4. 应用示例:
    5. 如下图,作者通过对p53突变和p53野生型的转录组数据进行GSEA富集分析,发现to3富集的信号通路(按p排序)为Ras信号通路、Ngf信号通路、Igf1信号哦通路。进而分析对三个通路富集贡献最大的基因,发现有四个MAPK信号通路相关的基因对该三个通路的富集均产生较大贡献。从而可以预测,MAPK信号通路中存在亚通路在p53-肿瘤组织中发挥重要作用。

四、实现方式

R包:clusterProfiler,需要自己做完差异分析,得到deg这个数据库,它有一列是logFC,有一列是基因的名字(这里举例是symbols),然后就可以无缝运行下面的代码啦

我的示例的deg来源于单细胞分析的FindMarkers函数,代码如下;

Idents(sce)='singleR'
deg=FindMarkers(object = sce, ident.1 = 'Fibroblasts',ident.2 = 'Fibroblasts activated',min.pct = 0.01,   logfc.threshold = 0.01,thresh.use = 0.99)
head(deg)

复制

在msigdb数据库网页可以下载全部的基因集,我这里方便起见,仅仅是下载 h.all.v7.2.symbols.gmt文件:

### 对 MsigDB中的全部基因集 做GSEA分析。
# http://www.bio-info-trainee.com/2105.html
# http://www.bio-info-trainee.com/2102.html 
# https://www.gsea-msigdb.org/gsea/msigdb
# https://www.gsea-msigdb.org/gsea/msigdb/collections.jsp
{ geneList= deg$avg_logFC names(geneList)= toupper(rownames(deg))geneList=sort(geneList,decreasing = T)head(geneList)library(ggplot2)library(clusterProfiler)library(org.Hs.eg.db)#选择gmt文件(MigDB中的全部基因集)gmtfile ='MSigDB/symbols/h.all.v7.2.symbols.gmt'# 31120 个基因集#GSEA分析library(GSEABase) # BiocManager::install('GSEABase')geneset <- read.gmt( gmtfile )  length(unique(geneset$term))egmt <- GSEA(geneList, TERM2GENE=geneset, minGSSize = 1,pvalueCutoff = 0.99,verbose=FALSE)head(egmt)egmt@result gsea_results_df <- egmt@result rownames(gsea_results_df)write.csv(gsea_results_df,file = 'gsea_results_df.csv')library(enrichplot)gseaplot2(egmt,geneSetID = 'HALLMARK_EPITHELIAL_MESENCHYMAL_TRANSITION',pvalue_table=T)gseaplot2(egmt,geneSetID = 'HALLMARK_MTORC1_SIGNALING',pvalue_table=T) 
}

复制

参考文献:

Gene set enrichment analysis: A knowledge-based approach for interpreting genome-wide expression profiles

Aravind Subramanian, Pablo Tamayo, Vamsi K. Mootha, Sayan Mukherjee, Benjamin L. Ebert, Michael A. Gillette, Amanda Paulovich, Scott L. Pomeroy, Todd R. Golub, Eric S. Lander, Jill P. Mesirov Proceedings of the National Academy of Sciences Oct 2005, 102 (43) 15545-15550; DOI: 10.1073/pnas.0506580102

这篇关于基因集合打分不考虑基因高低表达 基因集合评分不考虑高低表达 绝对值 基因集合里面的正负表达影响addmodulescore的结果 构建的基因集进行评分时 基因的高低正负表达基因集合评分不考虑高低表达的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/179957

相关文章

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage