前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GEO数据挖掘 富集分析

GEO数据挖掘 富集分析

原创
作者头像
Labetaloliiixxx
发布2023-02-22 12:09:53
5040
发布2023-02-22 12:09:53
举报
文章被收录于专栏:生信技能树学习笔记

以下是富集分析需要用到的R包

代码语言:txt
复制
rm(list = ls())  
load(file = 'step4output.Rdata')
library(clusterProfiler)
library(ggthemes)
library(org.Hs.eg.db)
library(dplyr)
library(ggplot2)
library(stringr)
library(enrichplot) #南方医某个大佬写的R包 

富集分析需要很长的时间跑代码,以下代码可以“存在即跳过,不存在即运行”,可以节省时间,不重复运行

代码语言:txt
复制
# 初阶版本:手动修改if后面的F,需要运行的时候改成T
if(F){
  a = 1 #假装是限速步骤
  save(a,file = "a.Rdata")  #保存运行结果,下次运行到这里时直接加载结果
}
load("a.Rdata")

# 高阶版本
f = "a.Rdata"
if(!file.exists(f)){
  #只有f文件(a.Rdata)在工作目录下不存在时才运行,否则跳过这段代码
  a = 1 #假装是限速步骤
  print("bye") #如果运行了这个代码,就输出一个“bye”,起到提示作用
  save(a,file = f)
}
load(f)

# 完美版本:只修改q的内容就可,不同的数据对应不同的q
q = "124"
f = paste0(q,"a.Rdata")
if(!file.exists(f)){
  #只有f文件(a.Rdata)在工作目录下不存在时才运行,否则跳过这段代码
  a = 1 #假装是限速步骤
  print("bye")
  #保存运行结果,下次运行到这里时直接加载结果
  save(a,file = f)
}
load(f)
  • GO富集分析步骤:
代码语言:txt
复制
#1.输入数据
gene_up = deg$ENTREZID[deg$change == 'up'] 
gene_down = deg$ENTREZID[deg$change == 'down'] 
gene_diff = c(gene_up,gene_down)
#2.富集分析
f = paste0(gse_number,"_GO.Rdata")
if(!file.exists(f)){
  ego <- enrichGO(gene = gene_diff,
                  OrgDb= org.Hs.eg.db, #这里是人类物种的数据,如果是别的物种 需要修改
                  ont = "ALL",
                  readable = TRUE) #输出结果里含有gene symbol
  ego_BP <- enrichGO(gene = gene_diff,
                  OrgDb= org.Hs.eg.db,
                  ont = "BP",
                  readable = TRUE)
  #ont参数:One of "BP", "MF", and "CC" subontologies, or "ALL" for all three.
  save(ego,ego_BP,file = f)
}
load(f) 
#3.画图
#条带图
barplot(ego)
barplot(ego, split = "ONTOLOGY", font.size = 10, 
        showCategory = 5) + 
  facet_grid(ONTOLOGY ~ ., space = "free_y",scales = "free_y") 
#气泡图
dotplot(ego)
dotplot(ego, split = "ONTOLOGY", font.size = 10, 
        showCategory = 5) + 
  facet_grid(ONTOLOGY ~ ., space = "free_y",scales = "free_y") 
#4.展示top通路的共同基因
dotplot(ego)
dotplot(ego, split = "ONTOLOGY", font.size = 10, 
        showCategory = 5) + 
  facet_grid(ONTOLOGY ~ ., space = "free_y",scales = "free_y") 
  • KEGG富集分析
代码语言:txt
复制
#1.输入数据
gene_up = deg[deg$change == 'up','ENTREZID'] 
gene_down = deg[deg$change == 'down','ENTREZID'] 
gene_diff = c(gene_up,gene_down)

#2.对上调/下调/所有差异基因进行富集分析
f2 = paste0(gse_number,"_KEGG.Rdata")
if(!file.exists(f2)){
  kk.up <- enrichKEGG(gene         = gene_up,
                      organism     = 'hsa')
  kk.down <- enrichKEGG(gene         =  gene_down,
                        organism     = 'hsa')
  kk.diff <- enrichKEGG(gene         = gene_diff,
                        organism     = 'hsa')
  save(kk.diff,kk.down,kk.up,file = f2)
}
load(f2)

#3.看看富集到了吗?因为KEGG数据框包含的基因不多,所以是有可能没有很多差异基因的
table(kk.diff@result$p.adjust<0.05)
table(kk.up@result$p.adjust<0.05)
table(kk.down@result$p.adjust<0.05)

#4.双向图
# 富集分析所有图表默认都是用p.adjust,富集不到可以退而求其次用p值,在文中说明即可

source("kegg_plot_function.R") #在不打开脚本时,运行该脚本下的全部代码。
g_kegg <- kegg_plot(kk.up,kk.down) #这个函数可以调节FC、p值的界限
g_kegg
#g_kegg +scale_y_continuous(labels = c(4,2,0,2,4,6)) #修改坐标数字使其不带有负号,c里面的内容要根据富集的结果修改
富集分析遇到的问题
富集分析遇到的问题

复杂数据:

多分组数据

多个数据联合分析(发文章一般都是很多数据)

策略1.各自差异分析再取两个的交集

策略2.先合并再分析

原则上应该选择同一个芯片平台的GSE

需要处理批次效应(Batch effect)

不要选择一个全是处理组,一个全是对照组的数据合并

批次效应:

由于【不同时间、不同人、试剂量不同、芯片不同、实验仪器不同、自己测的数据与网上的数据混合使用】导致的,并不是由于组间差异导致表达量的不同!!所以我们要消除批次效应

代码语言:txt
复制
limma::removeBatchEffect() 
sva::ConBat() 
消除批次效应
消除批次效应

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档