GSEA -- 学习记录

文章目录

  • brief
  • 统计学原理部分
  • 其他注意事项
  • 转录组部分
  • 单细胞部分

brief

上一篇学习记录写了ORA,其中ORA方法只关心差异表达基因而不关心其上调、下调的方向,也许同一条通路里既有显著高表达的基因,也有显著低表达的基因,因此最后得到的通路结果对表型的解释力度也不大。还有一些基因表达量的变化程度很小,但是其生物学功能可能很重要,那么该如何体现?

GSEA方法让通路的上下调分析成为可能,简单来说,先计算基因在不同组间表达量的log2FC,并以此从大到小进行排序,这样就得到了一个基因从上调到不变到下调的基因列表。然后,对于我们感兴趣的基因集,我们只需考察它们的成员是否富集在这个基因列表的上方(上调部分)或者下方(下调部分)即可判断这些基因集的上下调情况。
在这里插入图片描述
or like this:
在这里插入图片描述

优点:1.相比起GSA,GSEA 可以实现不再仅关注于差异基因,可以不受p-value以及log2FC阈值的影响,可以获得更多生物学功能变化的信息。
2.富集分数ES,实际上是k-s like test的统计量,所以ES主要表示基因集S的基因的log2FC的分布与不在基因集S的其他基因的log2FC的分布是否一致,当ES大于0并且具有统计学意义时,那我们可以说基因集S内基因相比其他基因表达上调。

统计学原理部分

需要补充的基础知识:
https://blog.csdn.net/jiangshandaiyou/article/details/136545010

其他注意事项

  • GSEA中为了强调表型的变化,也就是表型间基因表达量的log2FC,算法调整了eCDF每个阶梯的上升高度。
    在标准k-s的eCDF中,阶梯上升高度是1/n,而在GSEA中,考虑到log2FC的权重,基因集S的eCDF的上升高
    度随着S内不同基因的log2FC变化

    在这里插入图片描述
    在这里插入图片描述

因此,在eCDF中,基因集S中的基因越是有着较大|log2FC|,其上升的阶梯就越大。

  • 上面描述了在基因集S中的基因的上升阶梯高度,而不在基因集S中的其他基因的上升阶梯并不受log2FC的权重影响,并且与标准k-s检验的eCDF一致:
    在这里插入图片描述
    N表示所有基因的数量,NH表示感兴趣的基因集(基因集S)中包含的基因个数。所以,简单表示其上升阶梯高度即为:
    在这里插入图片描述
  • 随着x轴(ranked gene list)的位置不断变化,enrichment scores也在发生变化。ES的数学表达方式为,对基因集S的每个gene的eCDF求和。当ES为正时表示基因集S的基因富集在ranked gene list 的顶部,ES为负时表示基因集S的基因富集在ranked gene list 的底部。

转录组部分

library(clusterProfiler)
library(org.Hs.eg.db)
library(AnnotationDbi)# step1
# get ranked gene list 
df <- read.table("../out.tpm.csv",header = T,sep = ",",row.names = 1)
names <- rownames(df)[order(df$PBMC,decreasing = T)]
DEG_ranked <- sort(df$PBMC,decreasing = T)
names(DEG_ranked) <-  names
head(DEG_ranked)# MT-CO1   MT-ND4   MT-CO3   MT-CO2   MT-ND1   MT-ND2 
# 35393.65 23674.00 22698.25 18457.70 17377.82 15141.74# 所以最重要的输入ranked gene list 是一个整数型的向量,而且以gene symbol 作为 name # step2
# get KEGG pathway informations
library(msigdbr)
hs_msigdb_df <- msigdbr(species = "Homo sapiens")
# Filter the human data frame to the KEGG pathways that are included in the curated gene sets
hs_kegg_df <- hs_msigdb_df %>%dplyr::filter(gs_cat == "C2", # This is to filter only to the C2 curated gene setsgs_subcat == "CP:KEGG" # This is because we only want KEGG pathways
)# step3
# Run gsva
gsea_results <- GSEA(geneList = DEG_ranked, # Ordered ranked gene listminGSSize = 10, # Minimum gene set sizemaxGSSize = 500, # Maximum gene set setpvalueCutoff = 0.05, # p-value cutoffeps = 0, # Boundary for calculating the p valuepAdjustMethod = "BH", # Benjamini-Hochberg correctionTERM2GENE = dplyr::select(hs_msigdb_df,gs_name,gene_symbol)
)head(gsea_results@result)# gsea_result_df <- data.frame(gsea_results@result)# Visualizing results
most_positive_nes_plot <- enrichplot::gseaplot(gsea_results,geneSetID = "HALLMARK_MYC_TARGETS_V2",title = "HALLMARK_MYC_TARGETS_V2",color.line = "#0d76ff"
)
most_positive_nes_plot

在这里插入图片描述

单细胞部分

#BiocManager::install("clusterProfiler",force = TRUE)
library(clusterProfiler)
library(Seurat) # 这里面有一个小的数据集 pbmc_small ,一会儿用它试手
library(tidyverse)
library(reshape2)# getwd()
setwd("D:/")
data("pbmc_small")Idents(pbmc_small)
Idents(pbmc_small) <- pbmc_small@meta.data$groupsdeg <- FindMarkers(pbmc_small,ident.1 = "g1",ident.2 = "g2",min.pct = 0.01, logfc.threshold = 0.01,thresh.use = 0.99, assay="RNA")# 排序:根据log2FC rank高表达和地表达的基因
geneList <- deg$avg_log2FC 
names(geneList) <- toupper(rownames(deg))
geneList <- sort(geneList,decreasing = T)
head(geneList)# 获取gene set 
# gmt 文件在MsigDB下载的
geneset <- read.gmt("h.all.v2023.2.Hs.symbols.gmt") 
# head(geneset)
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')# BiocManager::install("enrichplot",force = TRUE)     <- 这里可视化
library(enrichplot)
gseaplot2(egmt,geneSetID = 'HALLMARK_EPITHELIAL_MESENCHYMAL_TRANSITION',pvalue_table=T)
gseaplot2(egmt,geneSetID = 'HALLMARK_MTORC1_SIGNALING',pvalue_table=T) 

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

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

相关文章

3.7号freeRtoS

1. 串口通信 配置串口为异步通信 设置波特率&#xff0c;数据位&#xff0c;校验位&#xff0c;停止位&#xff0c;数据的方向 同步通信 在同步通信中&#xff0c;数据的传输是在发送端和接收端之间通过一个共享的时钟信号进行同步的。这意味着发送端和接收端的时钟需要保持…

视频编解码技术介绍 - 基本概念篇

第一章 视频编解码技术介绍 - 基本概念篇 文章目录 前言1. 我的疑问1.1 什么是视频编解码技术1.2 为什么会有视频编解码技术1.3 视频编解码中有哪些核心技术1.4 作为开发者需要重点了解视频编解码中的哪些技术 2. 视频编解码的历史3. 基本概念3.1 像素3.2 分辨率3.3 ppi(像素密…

CorelDRAW下载2024最新版专业的平面设计软件,专注于矢量图形编辑与排版

CorelDRAW是一款功能强大的矢量图形设计软件&#xff0c;广泛应用于标志设计、插画绘制、排版印刷、VI设计、包装设计、网页制作等众多领域。它提供了丰富的绘图工具和特效&#xff0c;使用户能够轻松地创建和编辑复杂的矢量图形。CorelDRAW还支持导入和导出多种文件格式&#…

RabbitMQ 安装使用

文章目录 RabbitMQ 安装使用安装下载 Erlang下载 RabbitMQ 的服务安装好后看是否有 RabbitMQ 的服务开启管理 UIRabbitMQ 端口使用一览图 使用输出最简单的 Hello World&#xff01;生产者定义消费者消费消息小拓展 RabbitMQ 安装使用 安装 下载 Erlang RabbitMQ 是用这个语…

【机器学习300问】30、准确率的局限性在哪里?

一、什么是准确率&#xff1f; 在解答这个问题之前&#xff0c;我们首先得先回顾一下准确率的定义&#xff0c;准确率是机器学习分类问题中一个很直观的指标&#xff0c;它告诉我们模型正确预测的比例&#xff0c;即 还是用我最喜欢的方式&#xff0c;举例子来解释一下&#xf…

倒计时35天

dp预备(来源&#xff1a;b站acm刘春英老师) 1. 2. 3. 4. 5. 6. 7.

13:大数据与Hadoop|分布式文件系统|分布式Hadoop集群

大数据与Hadoop&#xff5c;分布式文件系统&#xff5c;分布式Hadoop集群 Hadoop部署Hadoop HDFS分布式文件系统HDFS部署步骤一&#xff1a;环境准备HDFS配置文件 查官方手册配置Hadoop集群 日志与排错 mapreduce 分布式离线计算框架YARN集群资源管理系统步骤一&#xff1a;安装…

spring boot 集成 mysql ,mybatisplus多数据源

1、需要的依赖&#xff0c;版本自行控制 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId> </dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java<…

初阶数据结构之---二叉树的顺序结构-堆

引言 今天要讲的堆&#xff0c;不是操作系统虚拟进程地址空间中&#xff08;malloc&#xff0c;realloc等开空间的位置&#xff09;的那个堆&#xff0c;而是数据结构中的堆&#xff0c;它们虽然名字相同&#xff0c;却是截然不同的两个概念。堆的底层其实是完全二叉树&#x…

【spark operator】spark operator动态分配executor

背景&#xff1a; 之前在使用spark operator的时候必须指定executor的个数&#xff0c;在将任务发布到spark operator后&#xff0c;k8s会根据指定的个数启动executor&#xff0c;但是对于某些spark sql可能并不需要用到那么多executor&#xff0c;在此时executor的数量就不好…

Python快速入门系列-1

Python快速入门系列 第一章: Python简介1.1 Python的历史与发展1.2 Python的优势与特点1.2.1 易学易用1.2.2 动态类型1.2.3 丰富的标准库与第三方库1.2.4 面向对象与函数式编程1.2.5 广泛应用领域 1.3 Python的应用领域 第一章: Python简介 1.1 Python的历史与发展 Python是一…

sizeof和strlen的详细万字解读

sizeof和strlen的对比 sizeof不是函数 侧面证明sizeof不是函数 如果是函数 应该需要有括号 不能落下来 strlen 只针对字符串 包含头文件 string.h 并且这个是个函数 随机数值 sizeof里面有表达式的话 表达式里面是不参与计算的 下面的s求出的是4 就是因为是不参与计算的 不…

AI绘画StableDiffusion实操教程:冰霜旗袍美女

前几天分享了StableDiffusion的入门到精通教程&#xff1a;AI绘画&#xff1a;Stable Diffusion 终极炼丹宝典&#xff1a;从入门到精通 但是还有人就问&#xff1a;安装是安装好了&#xff0c;可是为什么生成的图片和你生成的图片差距那么远呢&#xff1f; 怎么真实感和质感…

pytorch CV入门3-预训练模型与迁移学习

专栏链接&#xff1a;https://blog.csdn.net/qq_33345365/category_12578430.html 初次编辑&#xff1a;2024/3/7&#xff1b;最后编辑&#xff1a;2024/3/8 参考网站-微软教程&#xff1a;https://learn.microsoft.com/en-us/training/modules/intro-computer-vision-pytorc…

GitHub会员充值

GitHub是一个基于Web的代码托管平台&#xff0c;为开发者提供了协作、版本控制和代码管理的工具。它允许个人和团队共同协作开发软件项目&#xff0c;并提供了许多功能&#xff0c;使得代码的管理和维护更加容易 版本控制系统&#xff1a; GitHub使用Git作为其版本控制系统。Gi…

基于Springboot的高校宣讲会管理系统。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的高校宣讲会管理系统。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Spri…

基于Java的开放实验室管理系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实验管理模块2.4 实验设备模块2.5 实验订单模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示五、样例代码5.1 查询实验室设备5.2 实验放号5.3 实验预定 六、免责说明 一、摘…

Charles抓包工具使用

Charles简介 Charles是一款基于HTTP协议的代理服务器和HTTP监视器&#xff0c;通过将自己设置为电脑或浏览器的网络访问代理&#xff0c;能够截取请求和请求结果&#xff0c;从而达到分析抓包的目的。它允许开发者查看所有连接互联网的HTTP通信&#xff0c;包括请求、响应和HTT…

人工智能|机器学习——Canopy聚类算法(密度聚类)

1.简介 Canopy聚类算法是一个将对象分组到类的简单、快速、精确地方法。每个对象用多维特征空间里的一个点来表示。这个算法使用一个快速近似距离度量和两个距离阈值T1 > T2 处理。 Canopy聚类很少单独使用&#xff0c; 一般是作为k-means前不知道要指定k为何值的时候&#…

专题一 - 双指针 - leetcode 202. 快乐数 | 简单难度

leetcode 202. 快乐数 leetcode 202. 快乐数 | 简单难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 leetcode 202. 快乐数 | 简单难度 1. 题目详情 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」…