Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >单细胞各个亚群基因按照平均表达量排序后gsea分析

单细胞各个亚群基因按照平均表达量排序后gsea分析

作者头像
生信技能树
发布于 2023-02-28 03:32:31
发布于 2023-02-28 03:32:31
1.3K00
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:0
代码可运行

理论上gsea或者gsva这样的给基因集合打分的算法需要的仅仅是全部的基因的排序,这个排序指标可以是差异分析后的变化倍数,也可以仅仅是每个样品的全部基因的表达量排序。但是在单细胞表达量矩阵里面有一个问题,就是每个细胞里面的全部基因90%都是0,所以它排序就很麻烦,表达量都是0的那些基因理论上是同一个顺序是并列的倒数第一名。所以,我们不是很建议在单细胞表达量矩阵的层面做gsea或者gsva这样的给基因集合打分,有其它更好的算法推荐,比如 addmodulescore,ucell,aucell等等。

如果一定要做gsea或者gsva这样的给基因集合打分,也有几个补救措施,比如把单细胞表达量矩阵进行缺失值插补,或者把单细胞表达量矩阵构建成为metacell矩阵。不过,最简单的方法是把单细胞表达量矩阵按照各个亚群来进行表达量平均,我们以大家熟知的pbmc3k数据集为例,大家先安装这个数据集对应的包 SeuratData,并且对它进行降维聚类分群,参考前面的例子:人人都能学会的单细胞聚类分群注释 ,而且每个亚群找高表达量基因,都存储为Rdata文件。标准代码是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(SeuratData) #加载seurat数据集  
getOption('timeout')
options(timeout=10000)
#InstallData("pbmc3k")  
data("pbmc3k")  
sce <- pbmc3k.final  
library(Seurat)
table(Idents(sce))
DimPlot(sce,label = T)
av <-AverageExpression(sce , 
                       assays = "RNA")
av=av[[1]] 
cg=names(tail(sort(apply(av, 1, sd)),1000)) 
pheatmap::pheatmap(cor(av[cg,])) 

可以得到如下所示的各个单细胞亚群的表达量相关性:

各个单细胞亚群的表达量相关性

可以很清晰看到血小板和淋巴系免疫细胞,髓系免疫细胞的区分是非常明显的。

我们拿到了全部的基因在全部的单细胞亚群的表达量矩阵后,就可以在每个细胞亚群内部进行基因排序后的gsea分析啦。

全部的基因在全部的单细胞亚群的表达量矩阵

全部的基因在全部的单细胞亚群的表达量矩阵,如下所示,可以类比成bulk表达量矩阵, 一般来说做的是ssGSEA分析,我们同样的使用msigdbr 包里面的基因列表吧。然后做GSEA分析我使用了clusterProfiler包的GSEA函数,全部的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(GSVA) 
library(GSEABase)
library(msigdbr)
library(clusterProfiler)

all_gene_sets = msigdbr(species = "Homo sapiens",
                        category='H') 
msigdbr_collections()
all_gene_sets = msigdbr(species = "Homo sapiens",
                        category = "C2", subcategory =   "CP:REACTOME"  ) 
# geneList = av[,1] 
gl = apply(av, 2, function(geneList){
  geneList=sort(geneList,decreasing = T)
   print(head(geneList))
  print(tail(geneList))
  geneList=geneList[geneList>0.1]
  egmt <- GSEA(geneList, TERM2GENE= all_gene_sets[,c('gs_name','gene_symbol')] , 
               minGSSize = 20, 
               pvalueCutoff = 1,
               verbose=FALSE)
  head(egmt)
  egmt@result 
  gsea_results_df <- egmt@result 
  return(gsea_results_df) 
  
})
path = unique(all_gene_sets$gs_name)
es.max <- do.call(cbind,
        lapply(gl, function(x){
          x[path,'enrichmentScore']
        }))
rownames(es.max) = path
head(es.max)  
es.max=na.omit(es.max)
pheatmap::pheatmap(es.max,show_colnames =T,show_rownames = F) 

但是结果有点诡异,首先就是全部的gsea结果都是正值,没有负值,其次就是除了血小板其它单细胞亚群过于类似,如下所示:

其它单细胞亚群过于类似

我简单挑选了一下各个单细胞亚群特异性的结果,代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

#每个单细胞亚群的特异性top5基因集的 富集分析结果
library(dplyr)
df = do.call(rbind,
             lapply(1:ncol(es.max), function(i){
               dat= data.frame(
                 path  = rownames(es.max),
                 cluster =   colnames(es.max)[i],
                 sd.1 = es.max[,i], #每一列原值
                 sd.2 = apply(es.max[,-i], 1, median)  #除当列以外每行的中位值
               )
             })) 
df$fc = df$sd.1 - df$sd.2#两值相减,变化越大说明越有意义(从中挑出top5)
top5 <- df %>% group_by(cluster) %>% top_n(5, fc)#找出每个细胞类型的前五个通路
n=es.max[unique(top5$path),]
rownames(n)
rownames(n)[grepl('FGFR',rownames(n))]
rownames(n)=gsub('REACTOME_','',rownames(n))
rownames(n)=substring(rownames(n),1,30)
pheatmap::pheatmap(n,show_rownames = T) 

也是很诡异,如下所示:

B细胞和DC都富集到了抗原提呈通路

可以看到,B细胞和DC都富集到了抗原提呈通路,符合。然后两个单核细胞不知道为什么富集到了高尔基体,可能是我生物学不达标无法理解。总体来说,就是很难理解为什么这个GSEA分析结果都是正值,没有负值。

实际上我给大家写的GEO数据库挖掘的标准代码教程里面是有根据MSIGDB数据库的gmt文件来做 GSEA分析的,那个结果就每次都是比较合情理 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ggplot2)
library(clusterProfiler)
library(org.Hs.eg.db)

### 对 MigDB中的全部基因集 做GSEA分析。
# http://www.bio-info-trainee.com/2105.html
# http://www.bio-info-trainee.com/2102.html 
{
  load(file = 'anno_DEG.Rdata')
  geneList=DEG$logFC
  names(geneList)=DEG$symbol
  geneList=sort(geneList,decreasing = T)
  # 选择gmt文件(MigDB中的全部基因集)
  d='../MsigDB/symbols'
  # 需要自己下载 gmt文件 哦 
  gmts <- list.files(d,pattern = 'all')
  gmts
  #GSEA分析
  library(GSEABase) # BiocManager::install('GSEABase')
  ## 下面使用lapply循环读取每个gmt文件,并且进行GSEA分析
  ## 如果存在之前分析后保存的结果文件,就不需要重复进行GSEA分析。
  f='gsea_results.Rdata'
  if(!file.exists(f)){
    gsea_results <- lapply(gmts, function(gmtfile){
      # gmtfile=gmts[2]
      geneset <- read.gmt(file.path(d,gmtfile)) 
      print(paste0('Now process the ',gmtfile))
      egmt <- GSEA(geneList, TERM2GENE=geneset, verbose=FALSE)
      head(egmt)
      # gseaplot(egmt, geneSetID = rownames(egmt[1,]))

      return(egmt)
    })
    # 上面的代码耗时,所以保存结果到本地文件
    save(gsea_results,file = f)
  }
  load(file = f)
  #提取gsea结果,熟悉这个对象
  gsea_results_list<- lapply(gsea_results, function(x){
    cat(paste(dim(x@result)),'\n')
    x@result
  })
  gsea_results_df <- do.call(rbind, gsea_results_list)
  gseaplot(gsea_results[[2]],'KEGG_CELL_CYCLE') 
  gseaplot(gsea_results[[2]],'FARMER_BREAST_CANCER_CLUSTER_6') 
  gseaplot(gsea_results[[5]],'GO_CONDENSED_CHROMOSOME_OUTER_KINETOCHORE') 

}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
gsea或者gsva所需要的gmt文件
不得不说,数据资源真心丰富啊:The 32880 gene sets in the Molecular Signatures Database (MSigDB) are divided into 9 major collections, and several sub-collections.
生信技能树
2022/04/15
3.3K0
gsea或者gsva所需要的gmt文件
分析GSEA通路中的上下调基因
传统KEGG(通路富集分析)和GO(功能富集)分析时,如果富集到的同一通路下,既有上调差异基因,也有下调差异基因,那么这条通路总体的表现形式究竟是怎样?是被抑制还是激活?或者更直观点说,这条通路下的基因表达水平在实验处理后是上升了呢,还是下降了呢?由于没有采用有效的统计学手段去分析某条通路下的差异基因的总体变化趋势,这使得传统的富集分析结果无法回答这些问题。
生信菜鸟团
2023/11/07
1.8K0
分析GSEA通路中的上下调基因
GSVA或者GSEA各种算法都是可以自定义基因集的
GSVA分析的文章发表于2013年,GSVA: gene set variation analysis for microarray and RNA-Seq data 同样是broad 研究生出品,其在2005年PNAS发表的gsea已经高达1.4万的引用了,不过这个GSVA才不到300。去年我就介绍过一波它的分析流程,在:使用GSVA方法计算某基因集在各个样本的表现 非常简单的代码,所以各个培训机构,公司人员都开始学习和二次创作进而分享。
生信技能树
2019/12/23
4K0
GSVA或者GSEA各种算法都是可以自定义基因集的
单细胞测序—标准分析流程(4)—GSEA与GSVA
https://github.com/rcastelo/GSVA/issues/172
sheldor没耳朵
2024/09/05
1.1K0
单细胞测序—标准分析流程(4)—GSEA与GSVA
”基因集打分“GSEA算法详解
前两天介绍了一个开发中的单细胞数据分析相关R包,内置了,4(热图,气泡图,upset图,堆叠条形图)+4(密度散点图,半小提琴,山峦图,密度热图)美图,见 8种方法可视化你的单细胞基因集打分 ,蛮多小伙伴留言想问一下到底什么是基因集打分,正好学徒投稿了她自己的理解,借花献佛分享给大家。
生信技能树
2021/10/21
4.6K0
”基因集打分“GSEA算法详解
把MsigDB数据库的全部通路转为gsva分析要求的输入格式
无论是超几何分布检验和GSEA富集分析,都离不开生物学功能数据库,数据库不仅仅是GO/KEGG哦,目前最齐全的应该是属于 MSigDB(Molecular Signatures Database)数据库中定义了已知的基因集合:http://software.broadinstitute.org/gsea/msigdb 包括H和C1-C7八个系列(Collection),每个系列分别是:
生信技能树
2022/12/16
1.4K0
单细胞GSVA分析专用R包
之前我们介绍过irGSEA:基于秩次的单细胞基因集富集分析整合框架,针对17种常见的Functional Class Scoring (FCS)方法进行了benchmark,感兴趣的可以仔细读一下。最近恰好看到了密西根大学的Research Assistant Professor Neurology的Kai Guo的github也有一个打分工具:https://github.com/guokai8/scGSVA ,也值得介绍一下:
生信技能树
2024/11/21
2610
单细胞GSVA分析专用R包
GSEA确实搭配热图后更直观易懂
其中生物学功能数据库注释目前最稳妥的是GSEA方法,但是文章在标准的gsea图下面加上了一个热图,蛮有意思的:
生信技能树
2022/12/16
1.5K0
GSEA确实搭配热图后更直观易懂
单细胞实战之pseudobulks分析,GSVA富集分析——入门到进阶(初级篇3)
我们在上一讲内容中学习了“矫正”数据的三个工具~ 分别为细胞周期矫正,去除双胞体和RNA污染。接下来我们再来学习一下pseudobulks分析、GSVA富集分析。初级篇2最后得到的工程文件通过网盘分享:初级篇2 链接: https://pan.baidu.com/s/1ETVEkJNCJSe9NU7_aLEPVA 提取码: znmb
凑齐六个字吧
2025/02/14
1880
单细胞实战之pseudobulks分析,GSVA富集分析——入门到进阶(初级篇3)
scRNA分析|单细胞GSVA + limma差异分析-celltype分组?样本分组?
单细胞数据完成差异分析后,可以根据结果进行后续的GO ,KEGG,GSEA富集分析,推荐使用clusterProfiler-R包,可参考 R|clusterProfiler-富集分析 clusterProfiler|GSEA富集分析及可视化 。
生信补给站
2023/08/25
2.1K0
scRNA分析|单细胞GSVA + limma差异分析-celltype分组?样本分组?
使用cytoTRACE评估不同单细胞亚群的分化潜能
感兴趣的可以自己去阅读该文章:《Dynamic transcriptional reprogramming leads to immunotherapeutic vulnerabilities in myeloma》
生信技能树
2022/07/26
4.6K0
使用cytoTRACE评估不同单细胞亚群的分化潜能
GSEA富集分析
Gene Set Enrichment Analysis (基因集富集分析)用来评估一个预先定义的基因集的基因在与表型相关度排序的基因表中的分布趋势,从而判断其对表型的贡献。其输入数据包含两部分,一是已知功能的基因集 (可以是 GO 注释、MsigDB 的注释或其它符合格式的基因集定义),一是表达矩阵,软件会对基因根据其于表型的关联度(可以理解为表达值的变化)从大到小排序,然后判断基因集内每条注释下的基因是否富集于表型相关度排序后基因表的上部或下部,从而判断此基因集内基因的协同变化对表型变化的影响。
生信喵实验柴
2023/02/24
1.3K0
GSEA富集分析
生物学功能注释三板斧
上面的案例里面的背景基因不到1万个,而差异基因是555个,有20倍的差距,理论上每个通路都是100左右数量级的基因理论上它们每个通路应该是就有5个左右的基因在差异基因列表里面。但是上面的通路的富集分析结果表格里面可以看到,绝大部分通路都是有十几个甚至二十多个基因在我们的差异基因列表里面,所以上面的通路都是被富集了。
生信技能树
2023/12/01
5510
生物学功能注释三板斧
百万级单细胞GSVA如何提速?
尽管可以使用parallel.sz进行加速,但是数据量大的依然非常耗费计算机资源,耗费时间:
生信技能树
2025/01/01
2830
百万级单细胞GSVA如何提速?
GEO数据挖掘6
使用SigDB(Molecular Signatures Database)基因集进行富集分析,包含8个系列
火星娃统计
2020/09/15
7430
GEO数据挖掘6
GEO数据挖掘7
GSVA分析,gene Set Variation Analysis,被称为基因集变异分析,是一种非参数的无监督分析方法,用来评估芯片核转录组的基因集富集结果。 思路
火星娃统计
2020/09/15
1.5K0
GEO数据挖掘7
单细胞数据分析之缺氧评分
评分的算法很多,gsea,gsva等等,单细胞领域比较出名的是Seurat包的AddModuleScore函数,以及UCell和AUCell等包,从代码的角度来看,都是一个函数即可。
生信技能树
2022/06/08
2.3K0
单细胞数据分析之缺氧评分
差异基因没办法富集到通路你就放弃了吗
如果你的差异基因集(500个左右的基因)本身确实没有一些生物学功能的偏好性,非常有可能是在统计学显著阈值条件限定下,就是拿不到富集的kegg通路。这个时候,大家可以修改代码,比如:
生信菜鸟团
2020/06/10
3.1K0
差异基因没办法富集到通路你就放弃了吗
单细胞功能注释和富集分析(GO、KEGG、GSEA)(2021公开课配套笔记)
在前面几节我们已经知道各个细胞亚群的maerker基因,接下来我们对这些marker基因进行功能注释和富集分析。
生信技能树
2021/07/06
18.8K1
获取KEGG通路的基因列表 做单细胞GSEA、GSVA分析
使用KEGG通路的基因列表进行单细胞GSEA GSVA分析的过程,我们需要遵循以下步骤:
生信小博士
2024/03/22
9270
获取KEGG通路的基因列表   做单细胞GSEA、GSVA分析
相关推荐
gsea或者gsva所需要的gmt文件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验