vissE--提供不同的基因集富集分析方法!

2022-03-29 11:16:43 浏览数 (5)

导语

GUIDE ╲

通常,基因集富集分析的结果(例如使用 limma::fry、singscore 或 GSEA)由一长串基因集组成。然后生物学家必须搜索这些列表,以确定新出现的主题来解释改变的生物过程。这项任务可能是劳动密集型的,因此需要解决方案来总结来自此类分析的大量结果

背景介绍

今天小编给大家介绍一款基于网络和文本挖掘方法对基因集富集分析的结果进行解释和分析的R包--vissE。该软件包利用基因集与通路数据库和基因本体中可能存在的固有层次结构之间的相关性来聚类结果。对于 vissE 识别的每个基因集集群,通过文本挖掘来表征生物功能和过程。

vissE 的另一个功能是基于基因集之间的相似性网络执行一种新型的基因集富集分析。给定一个基因列表(例如来自 DE 分析),vissE 可以通过首先识别与其相似的所有其他基因集来表征该列表,然后对生成的基因集进行聚类,最后通过文本挖掘来揭示新出现的基因集themes。

R包安装

代码语言:javascript复制
if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("vissE")

功能介绍

01

基因集富集分析的结果

通常,基因集富集分析的结果是一个基因集列表,并附有其统计数据和 p 值或错误发现率 (FDR)。生物学家会利用这些结果,提取与他们感兴趣的实验有关的相关功能。vissE包提供了自动化提取结果的功能。

下面的示例可用于任何富集分析的结果。

代码语言:javascript复制
library(msigdb)
library(GSEABase)

#加载MSigDB
msigdb_hs = msigdb.v7.2.hs.SYM()
#扩展KEGG基因集
msigdb_hs = appendKEGG(msigdb_hs)
#选择h, c2, and c5
msigdb_hs = subsetCollection(msigdb_hs, c('h', 'c2', 'c5'))
#随机采样基因集以模拟富集分析的结果
set.seed(360)
geneset_res = sample(sapply(msigdb_hs, setName), 2500)
#使用基因集分析结果创建一个 GeneSetCollection
geneset_gsc = msigdb_hs[geneset_res]
geneset_gsc
#GeneSetCollection
#>names: GO_CARBOHYDRATE_TRANSPORT, GO_NEURON_DEVELOPMENT, ..., KARLSSON_TGFB1_TARGETS_DN (2500 total)
#>unique identifiers: OCLN, SLC35B1, ..., TLCD3A (18844 total)
#>types in collection:
#>geneIdType: SymbolIdentifier (1 total)
#>collectionType: BroadCollection (1 total)

vissE 分析包括 3 个步骤:

1、计算基因集overlaps 和基因集overlaps 网络

2、根据overlaps 识别基因集cluster

3、使用文本挖掘表征cluster

可视化基因级统计数据(额外)

02

计算基因集overlaps

计算overlaps 的默认方法是使用 Jaccard 索引。overlap是基于基因集之间的基因overlap计算的。或者可以使用overlap系数(用于突出层次重叠)。

代码语言:javascript复制
library(vissE)
#计算基因集overlap
gs_ovlap = computeMsigOverlap(geneset_gsc, thresh = 0.25)
#创建overlap网络 
gs_ovnet = computeMsigNetwork(gs_ovlap, msigdb_hs)
#网络可视化
set.seed(36) #set seed for reproducible layout
plotMsigNetwork(gs_ovnet)

结合基因集统计数据

代码语言:javascript复制
#模拟基因集统计
geneset_stats = rnorm(2500)
names(geneset_stats) = geneset_res
head(geneset_stats)

#绘制网络并覆盖基因集统计数据
set.seed(36) #set seed for reproducible layout
plotMsigNetwork(gs_ovnet, genesetStat = geneset_stats)

03

识别基因集cluster

相关基因集可能代表相关过程。下一步是识别基因组cluster,以便评估它们的生物学themes。建议使用 igraph::cluster_walktrap() 算法,因为它适用于密集图。

代码语言:javascript复制
library(igraph)
#鉴定clusters
grps = cluster_walktrap(gs_ovnet)
#提取聚类结果
grps = groups(grps)
#按cluster大小排序
grps = grps[order(sapply(grps, length), decreasing = TRUE)]
#对前12个cluster进行可视化
set.seed(36) #set seed for reproducible layout
plotMsigNetwork(gs_ovnet, markGroups = grps[1:6], genesetStat = geneset_stats)

04

表征基因集cluster

可以使用文本挖掘方法评估已识别的基因集簇的生物学相似性。对基因集名称或其简短描述进行频率分析,以评估cluster中重复出现的生物学themes。然后将这些结果呈现为词云。

代码语言:javascript复制
#计算并绘制文本挖掘的结果
#用基因集名称
plotMsigWordcloud(msigdb_hs, grps[1:6], type = 'Name')
代码语言:javascript复制
#使用基因集简短描述 
plotMsigWordcloud(msigdb_hs, grps[1:6], type = 'Short')

05

可视化基因集cluster的基因水平统计数据

可视化每个基因集cluster的基因水平统计数据,以更好地了解对基因集有贡献的基因。

代码语言:javascript复制
library(ggplot2)

#模拟基因集统计
set.seed(36)
genes = unique(unlist(geneIds(geneset_gsc)))
gene_stats = rnorm(length(genes))
names(gene_stats) = genes
head(gene_stats)
#>       OCLN    SLC35B1    SLC35A1     SORBS1     ARPP19    SLC35D2 
#>  0.3117314  0.8498291  0.7055331  1.6999284 -1.3455710 -0.5698134
#可视化
plotGeneStats(gene_stats, msigdb_hs, grps[1:6])  
  geom_hline(yintercept = 0, colour = 2, lty = 2)

06

整合结果

代码语言:javascript复制
library(ggpubr)
#分别绘图
set.seed(36) 
p1 = plotMsigWordcloud(msigdb_hs, grps[1:6], type = 'Name')
p2 = plotMsigNetwork(gs_ovnet, markGroups = grps[1:6], genesetStat = geneset_stats)
p3 = plotGeneStats(gene_stats, msigdb_hs, grps[1:6])  
  geom_hline(yintercept = 0, colour = 2, lty = 2)
#合并图片
ggarrange(p1, p2, p3, ncol = 3, common.legend = TRUE, legend = 'bottom')

小编总结

vissE包利用基因集与通路数据库和基因本体中可能存在的固有层次结构之间的相关性来聚类结果。对于 vissE 识别的每个基因集集群,通过文本挖掘来表征生物功能和过程。为我们提供了不同的基因集功能富集分析的思路,大家可以多多动手尝试!

1 人点赞