GEO数据挖掘(三)— 基因通路富集全套代码分享

前几次教程GEO数据挖掘(一)简单快速下载GEO数据”、“GEO数据挖掘(一)下载SRA库原始测序数据”、 “GEO数据挖掘(二)--基因差异表达分析及可视化全套代码分享已经分享过下载数据、基因差异分析等步骤。本次将分享如何将提取出来的差异基因进行基因富集分析,并进行可视化展示。

通过前面的教程我们已经筛选出来了差异基因,但是基因的所属分类很多,那怎么才能知道这些基因所代表的生物学意义呢,这就需要利用基因富集分析来为这些基因注释功能,分析它究竟富集到哪个基因集上,参与了哪些调控,从而影响了疾病的发生。富集分析的原理简单来说就是分析一组基因在某个功能节点上是否相比于随机水平更显著,是由单个基因的简单注释扩展到多个基因集合的成组性分析。目前最常用的富集方法就是基于GO和KEGG的富集分析,来揭示一类基因所代表的生物学背景。

GO term功能富集分析

基因本体(gene ontology, GO)数据库是目前应用最广泛的基因通路注释体系之一。其原理简单理解就是计算参与调控过程的差异基因是否显著聚集在以下三个层面中:细胞成分(Cellular component,CC) 、分子功能(Molecular function,MF)、生物学过程 (Biological process,BP)。

细胞成分CC描述基因产物执行功能的具体细胞结构位置,例如某个产物蛋白可能定位在细胞核中或者核糖体中。

分子功能MF描述基因产物在分子水平上的活动,例如催化或运输。

生物学过程BP描述基因产物所关联的某个生物功能,或者多个分子活动完成的一个大的生物活动。例如有丝分裂或嘌呤代谢。

##导入数据

rm(list = ls()) 

load("step4_output.Rdata")

library(clusterProfiler)

library(dplyr)

library(ggplot2)

source("kegg_plot_function.R")

#(1)输入数据

gene_up = deg[deg$change == 'up','ENTREZID']

gene_down = deg[deg$change == 'down','ENTREZID']

gene_diff = c(gene_up,gene_down)

gene_all = deg[,'ENTREZID']

#(2)GO分析,分三部分

#以下步骤耗时很长,实际运行时注意把if后面的括号里F改成T

library(org.Hs.eg.db)

if(T){

  #细胞组分

  ego_CC <- enrichGO(gene = gene_diff,

                    OrgDb= org.Hs.eg.db,

                    ont = "CC",

                    pAdjustMethod = "BH",

                    minGSSize = 1,

                    pvalueCutoff = 0.01,

                    qvalueCutoff = 0.01,

                    readable = TRUE)

  #生物过程

  ego_BP <- enrichGO(gene = gene_diff,

                    OrgDb= org.Hs.eg.db,

                    ont = "BP",

                    pAdjustMethod = "BH",

                    minGSSize = 1,

                    pvalueCutoff = 0.01,

                    qvalueCutoff = 0.01,

                    readable = TRUE)

  #分子功能:

  ego_MF <- enrichGO(gene = gene_diff,

                    OrgDb= org.Hs.eg.db,

                    ont = "MF",

                    pAdjustMethod = "BH",

                    minGSSize = 1,

                    pvalueCutoff = 0.01,

                    qvalueCutoff = 0.01,

                    readable = TRUE)

  save(ego_CC,ego_BP,ego_MF,file = "ego_GSE42872.Rdata")

}

load(file = "ego_GSE42872.Rdata")

#(3)可视化

#条带图

barplot(ego_CC,showCategory=20)

#气泡图

dotplot(ego_CC)

geneList = deg$logFC

names(geneList)=deg$ENTREZID

geneList = sort(geneList,decreasing = T)

#(3)展示top5通路的共同基因。

#Gene-Concept Network

cnetplot(ego_CC, categorySize="pvalue", foldChange=geneList,colorEdge = TRUE)

cnetplot(ego_CC, foldChange=geneList, circular = TRUE, colorEdge = TRUE)

#Enrichment Map

emapplot(ego_CC)

#(4)展示通路关系

goplot(ego_CC)

#(5)Heatmap-like functional classification

heatplot(ego_CC,foldChange = geneList)

pdf("heatplot.pdf",width = 14,height = 5)

heatplot(ego_CC,foldChange = geneList)

dev.off()




KEGG 富集分析

KEGG pathway通路富集(Kyoto encyclopedia of genes and genomes, KEGG)是系统分析基因功能、基因组信息的数据库,整合了基因组学、生物化学及系统功能组学的信息,有助于我们把基因及表达信息作为一个整体进行研究。KEGG的每个通路图都包含一个分子相互作用和反应网络,会将基因组中的基因与通路中的基因产物联系起来,解释细胞和生物体的新陈代谢和各种其他功能的生物学背景。

#上调、下调、差异、所有基因

#(1)输入数据

gene_up = deg[deg$change == 'up','ENTREZID']

gene_down = deg[deg$change == 'down','ENTREZID']

gene_diff = c(gene_up,gene_down)

gene_all = deg[,'ENTREZID']

#(2)对上调/下调/所有差异基因进行富集分析

if(T){

  kk.up <- enrichKEGG(gene        = gene_up,

                      organism    = 'hsa',

                      universe    = gene_all,

                      pvalueCutoff = 0.9,

                      qvalueCutoff = 0.9)

  kk.down <- enrichKEGG(gene        =  gene_down,

                        organism    = 'hsa',

                        universe    = gene_all,

                        pvalueCutoff = 0.9,

                        qvalueCutoff =0.9)

  kk.diff <- enrichKEGG(gene        = gene_diff,

                        organism    = 'hsa',

                        pvalueCutoff = 0.9)

  save(kk.diff,kk.down,kk.up,file = "GSE21933kegg.Rdata")

}

load("GSE21933kegg.Rdata")

#(3)从富集结果中提取出结果数据框

kegg_diff_dt <- kk.diff@result

#(4)按照pvalue筛选通路

#在enrichkegg时没有设置pvaluecutoff,在此处筛选

down_kegg <- kk.down@result %>%

  filter(pvalue<0.05) %>% #筛选行

  mutate(group=-1) #新增列

up_kegg <- kk.up@result %>%

  filter(pvalue<0.05) %>%

  mutate(group=1)

#(5)可视化

g_kegg <- kegg_plot(up_kegg,down_kegg)

#g_kegg +scale_y_continuous(labels = c(20,15,10,5,0,5))

ggsave(g_kegg,filename = 'kegg_up_down.png')

目前我们已经走完“GEO数据挖掘”的基本流程,感谢大家的持续关注,但是目前只是简单分析教程,要想掌握GEO数据挖掘的精髓,还需要了解每一步分析背后所解决的生物学问题和运用算法,后续还会继续为大家分享相关知识。

请持续关注“GEO数据挖掘”系列文章,每周一个实用干货带您上手生信分析。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容