分享

clusterProfiler.dplyr:用dplyr操作富集分析结果

 生物_医药_科研 2019-11-01

出错的原因在于,我根本就没给GSEA分析的结果写barplot方法,所以默认去调用graphics::barplot.default了,于是出错。

但这样的图,对于我们来说,简直简单的不要不要的。

首先跑一下GSEA的分析

这里用ReactomePA来跑一下通路的GSEA分析:

library(ReactomePA)
data(geneList)
x <- gsePathway(geneList)

结果中有308个通路是显著性的。

> x
#
# Gene Set Enrichment Analysis
#
#...@organism      human 
#...@setType      Reactome 
#...@keytype      ENTREZID 
#...@geneList      Named num [1:12495] 4.57 4.51 4.42 4.14 3.88 ...
 - attr(*, 'names')= chr [1:12495'4312' '8318' '10874' '55143' ...
#...nPerm      10000 
#...pvalues adjusted by 'BH' with cutoff <0.05 
#...308 enriched terms found
'data.frame':    308 obs. of  11 variables:
 $ ID             : chr  'R-HSA-1474244' 'R-HSA-216083' 'R-HSA-3000178' 'R-HSA-3000171' ...
 $ Description    : chr  'Extracellular matrix organization' 'Integrin cell surface interactions' 'ECM proteoglycans' 'Non-integrin membrane-ECM interactions' ...
 $ setSize        : int  266 80 74 56 53 41 38 36 35 33 ...
 $ enrichmentScore: num  -0.458 -0.512 -0.626 -0.586 -0.592 ...
 $ NES            : num  -1.94 -1.86 -2.24 -1.99 -1.99 ...
 $ pvalue         : num  0.000133 0.000152 0.000154 0.000150.000159 ...
 $ p.adjust       : num  0.00295 0.00295 0.00295 0.00295 0.00295 ...
 $ qvalues        : num  0.00215 0.00215 0.00215 0.00215 0.00215 ...
 $ rank           : num  1943 1890 1890 2538 1890 ...
 $ leading_edge   : chr  'tags=33%, list=16%, signal=29%' 'tags=39%, list=15%, signal=33%' 'tags=46%, list=15%, signal=39%' 'tags=45%, list=20%, signal=36%' ...
 $ core_enrichment: chr  '8038/11132/4017/1288/4811/3910/3371/1291/3791/831/1301/4238/7450/3685/80781/1280/1306/4314/3675/8425/977/4054/7'| __truncated__ '3371/1291/3791/7450/3685/80781/1280/3675/1278/4060/1277/1293/1295/58494/1281/83700/50509/1290/3693/1294/3339/12'| __truncated__ '3910/3371/1291/3685/1280/7042/3912/1278/4060/1277/1293/1281/50509/1290/3693/3339/1462/1289/1292/3908/3909/6678/'| __truncated__ '3915/6385/4921/1288/3910/3371/1301/3685/1280/3912/1278/1277/2247/1281/50509/1290/3693/3339/1289/3908/3909/3913/1300/1287' ...
#...Citation
  Guangchuang Yu, Qing-Yu He. ReactomePA: an R/Bioconductor package for
  reactome pathway analysis and visualization. Molecular BioSystems
  2016, 12(2):477-479 

clusterProfiler.dplyr神器

用这个包,你可以对输出像data frame一样使用dplyr的函数去操作。

于是这里使用arrange去给NES的绝对值从大到小排序,NES是我们用于计算p值的统计量,正数越大则通路越有可能是激活的,而负数越小则通路越有可能是被抑制的,所以我们也经常看到使用这一统计量进行画图。

然后我们使用group_by把数据分组了,按照NES正负数来分,最后我们把每一组切出来前5个。也就是说分别取激活或抑制最大的5个通路。

library(clusterProfiler.dplyr)
y <- arrange(xabs(NES)) %>% 
        group_by(sign(NES)) %>% 
        slice(1:5)

最后如我们所愿,取出10个通路。

> y
#
# Gene Set Enrichment Analysis
#
#...@organism      human 
#...@setType      Reactome 
#...@keytype      ENTREZID 
#...@geneList      Named num [1:12495] 4.57 4.51 4.42 4.14 3.88 ...
 - attr(*, 'names')= chr [1:12495'4312' '8318' '10874' '55143' ...
#...nPerm      10000 
#...pvalues adjusted by 'BH' with cutoff <0.05 
#...10 enriched terms found
Classes ‘grouped_df’, ‘tbl_df’, ‘tbl’ and 'data.frame':    10 obs. of  12 variables:
 $ ID             : chr  'R-HSA-397014' 'R-HSA-8978868' 'R-HSA-9006934' 'R-HSA-211859' ...
 $ Description    : chr  'Muscle contraction' 'Fatty acid metabolism' 'Signaling by Receptor Tyrosine Kinases' 'Biological oxidations' ...
 $ setSize        : int  183 141 418 165 117 308 282 169 162 155
 $ enrichmentScore: num  -0.357 -0.37 -0.338 -0.373 -0.402 ...
 $ NES            : num  -1.45 -1.46 -1.49 -1.5 -1.54 ...
 $ pvalue         : num  0.004193 0.006929 0.000503 0.001696 0.003381 ...
 $ p.adjust       : num  0.0216 0.03289 0.00381 0.01030.01827 ...
 $ qvalues        : num  0.01572 0.02394 0.00277 0.00756 0.0133 ...
 $ rank           : num  2990 1951 2788 2129 2829 ...
 $ leading_edge   : chr  'tags=34%, list=24%, signal=26%' 'tags=26%, list=16%, signal=22%' 'tags=27%, list=22%, signal=21%' 'tags=25%, list=17%, signal=21%' ...
 $ core_enrichment: chr  '59/9992/800/6543/4638/3750/2982/11280/3709/2977/6546/3672/7169/6335/783/10174/4604/6588/7139/27091/3784/1760/72'| __truncated__ '5563/284541/37/224/3248/1543/79966/2181/8644/5095/27306/80724/11001/33/6785/7923/6584/57834/1384/2166/60481/831'| __truncated__ '26052/534/2065/3709/7423/1215/2263/83464/26469/7057/4670/7072/1298/3915/5921/5441/200734/9846/9611/3315/466/111'| __truncated__ '4837/6799/1553/8459/284541/7366/8648/1543/2098/29104/1548/54996/27306/196/2232/2954/57834/6817/22977/1581/7358/'| __truncated__ ...
 $ sign(NES)      : num  -1 -1 -1 -1 -1 1 1 1 1 1
 - attr(*, 'groups')=Classes ‘tbl_df’, ‘tbl’ and 'data.frame':    2 obs. of  2 variables:
  ..$ sign(NES): num  -1 1
  ..$ .rows    :List of 2
  .. ..$ : int  1 2 3 4 5
  .. ..$ : int  6 7 8 9 10
  ..- attr(*, '.drop')= logi FALSE
#...Citation
  Guangchuang Yu, Qing-Yu He. ReactomePA: an R/Bioconductor package for
  reactome pathway analysis and visualization. Molecular BioSystems
  201612(2):477-479 

画图

然后你直接就可以对上面这样的对象使用ggplot进行画图,你没看错,你不需要转为data frame,而是直接对这个S4对象进行ggplot,魔法就在enrichplot包。然后一切都是ggplot语法了。

library(forcats)
library(ggplot2)
library(ggstance)
library(enrichplot)

ggplot(y, aes(NES, fct_reorder(Description, NES), fill=qvalues), showCategory=10) + 
    geom_barh(stat='identity') + 
    scale_fill_continuous(low='red', high='blue') + 
    theme_minimal() + ylab(NULL)


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多