转录组分析(11) - GO/KEGG富集分析(3)

对于没有Org.Db的非模式生物,由于某些原因不制作Org.Db,然后利用clusterProfiler做富集

数据格式
## Annotation_GO.xlsx
Gene.ID  Biological.Pathway  BP.Description  Molecular.Function  MF.Description Cellular.Component      CC.Description
gene_1  GO:0007283 spermatogenesis  GO:0003677 DNA binding  GO:0000786//GO:0005634  nucleosome//nucleus

## Annotation_KO.xlsx
Gene.ID  1st-level(pathway)  2nd-level(pathway)  3rd-level(pathway) Pathway.id  KO.id  KO.Description  EC
gene_1  Cellular Processes  Cell growth and death  Cell cycle  ko04110  K02180  cell cycle arrest protein BUB3  -

## test_list.xlsx
gene_id  FC
gene_1  1.85
数据准备
#coding:utf-8

library(openxlsx)
library(tidyr)
library(stringr)
library(dplyr)

getwd()
dir()
rm(list=ls())

#定义GO数据结构化函数
data_clean <-function(x,ont){
  colnames(x) <- c("gene","GO_id","GO_name")
  gterms <- x %>%
    dplyr::select(gene, GO_id,GO_name) %>% na.omit()
  
  gene2go <- data.frame(gene = character(),
                           GO_id = character(),
                           GO_name = character(),
                           Ont = character()
  )
  for (row in 1:nrow(gterms)){
    gene_terms_id <- str_split(gterms[row,"GO_id"], "//", simplify = FALSE)[[1]] 
    gene_terms_name <- str_split(gterms[row,"GO_name"], "//", simplify = FALSE)[[1]]
    gene_id <- gterms[row, "gene"][[1]]
    
    tmp <- data.frame(gene = rep(gene_id, length(gene_terms_id)),
                      GO_id = gene_terms_id,
                      GO_name = gene_terms_name,
                      Ont = rep(ont, length(gene_terms_id))
    )
    gene2go <- rbind(gene2go, tmp)
  }
  return(gene2go)
}
# 载入数据
go_file <- read.xlsx("Annotation_GO.xlsx")
go_file[go_file=="--"]<-NA
go_bp <- go_file[,1:3]

# 按Ont类型格式化数据
## BP
go_bp <- go_file[,1:3]
gene2go_bp <- data_clean(go_bp,"BP")
go2gene_bp <- distinct(gene2go_bp[,c(2,1)])
go2name_bp <- distinct(gene2go_bp[,c(2,3)])
## MF
go_mf <- go_file[,c(1,4,5)]
gene2go_mf <- data_clean(go_mf,"MF")
go2gene_mf <- distinct(gene2go_mf[,c(2,1)])
go2name_mf <- distinct(gene2go_mf[,c(2,3)])
## CC
go_cc <- go_file[,c(1,6,7)]
gene2go_cc <- data_clean(go_cc,"CC")
go2gene_cc <- distinct(gene2go_cc[,c(2,1)])
go2name_cc <- distinct(gene2go_cc[,c(2,3)])

#保存关键数据
save(go2gene_bp,go2name_bp,go2gene_mf,go2name_mf,go2gene_cc,go2name_cc,file="XX.go.RData")

#富集时调用
#load(file = "XX.go.RData")

#Pathway数据格式化
rm(list=ls())
ko_file <- read.xlsx("Annotation_KO.xlsx")
ko_file[ko_file=="--"]<-NA
gene2ko <- ko_file[,c(1,5,4,3,2)]
colnames(gene2ko) <- c("gene","pathway_id","pathway_name_lv3","pathway_name_lv2","pathway_name_lv1")
ko2gene <- distinct(gene2ko[,c(2,1)])
ko2name <- distinct(gene2ko[,c(2,3)])
#保存关键数据
save(gene2ko,ko2gene,ko2name,file="XX.ko.RData")
#富集时调用
#load(file = "XX.ko.RData")

富集分析绘图
if (!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")
BiocManager::install(c("clusterProfiler"))

library(clusterProfiler)
library(openxlsx)

## __init__
rm(list = ls())
load(file = "XX.go.RData")
load(file = "AX.ko.RData")
## 导入数据
test_list <- read.xlsx("test_list.xlsx")
## 准备数据格式
test_gene <- test_list[,1]
fc_list <- test_list[,2]
names(fc_list)<- as.character(test_list[,1])
fc_list <- sort(fc_list,decreasing = T)
## GO/KO富集
enrich_go <- enricher(
  test_gene,              # 前景基因集
  pvalueCutoff = 0.05,    # p值阈值
  pAdjustMethod = "fdr",   # 调整p值校正方式。(one of "holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr", "none")
  qvalueCutoff = 0.05,       # q值阈值
  TERM2GENE = go2gene_bp, # 修改以确定富集的Ont类型(go2gene_bp, go2gene_mf, go2gene_cc,ko2gene)
  TERM2NAME = go2name_bp  # 跟随上一行一起修改 (go2name_bp, go2name_mf, go2name_cc, ko2name)
  #universe,              # 背景基因集
  #minGSSize = 10,
  #maxGSSize = 500,
)
## 保存富集结果
write.csv(enrich_go@result,file="XXX.go.csv")
## 绘制条形图
plot_data <- enrich_go@result[1:10,c(2,9,5)]
library(ggplot2)
pp1=ggplot(plot_data, aes(x=reorder(plot_data$Description,plot_data$Count ),y=Count,fill=-1*log10(plot_data$pvalue)))
pbar=pp1+geom_bar(stat="identity")+theme_minimal()+coord_flip()
output_bar_pdf <- paste("XXX",".bar",".pdf",sep = '')
ggsave(pbar,file=output_bar_pdf,width=10,height=6)
## 绘制气泡图
library(ggplot2)
pp= ggplot(plot_data, aes(x=plot_data$pvalue,y=reorder(plot_data$Description,plot_data$pvalue))) 
pbubble = pp + geom_point(aes(size=plot_data$Count,color=-1*log10(plot_data$pvalue))) + scale_colour_gradient(low="green",high = "red")+ theme_minimal()
output_bb_pdf <- paste("XXX",".bb",".pdf",sep = '')
ggsave(pbubble,file=output_bb_pdf,width=10,height=6)

## GSEA富集分析
gse_result <- GSEA(
  fc_list,
  exponent = 1,
  eps = 1e-10,
  pvalueCutoff = 1,
  pAdjustMethod = "fdr",
  TERM2GENE = go2gene_bp,    # 修改以确定富集的Ont类型(go2gene_bp, go2gene_mf, go2gene_cc,ko2gene)
  TERM2NAME = go2name_bp,    # 跟随上一行一起修改 (go2name_bp, go2name_mf, go2name_cc, ko2name)
  verbose = TRUE,
  by = "fgsea"
  #minGSSize = 10,
  #maxGSSize = 500,
)
## 保存结果
write.csv(gse_result@result,file = "XXX.csv")
## 批量绘制GSEA图
for(i in 1:length(gse_result@result$ID)) {
  id <- gse_result@result$ID[i]
  gsefig<- gseaplot(gse_result,geneSetID = id)
  output_gse_pdf <- paste("XXX",i,".",id,".gse",".pdf",sep = '')
  ggsave(gsefig,file=output_gse_pdf,width=10,height=6)
}

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

推荐阅读更多精彩内容