差异基因富集分析(R语言——GO&KEGG&GSEA)

接着上次的内容,上篇内容给大家分享了基因表达量怎么做分组差异分析,从而获得差异基因集,想了解的可以去看一下,这篇主要给大家分享一下得到显著差异基因集后怎么做一下通路富集。#### 1.准备差异基因集我就直接把上次分享的拿到这边了。我们一般都把差异基因分为上调基因和下调基因分别做通路富集分析。下面上代码,可能包含我的一些个人习惯,勿怪。显著差异基因的筛选条件根据个人需求设置哈。 ##载入所需R包 library(readxl) library(DOSE) library(org.Hs.eg.db) library(topGO) library(pathview) library(ggplot2) library(GSEABase) library(limma) library(clusterProfiler) library(enrichplot) ##edger edger_diff <- diff_gene_Group edger_diff_up <- rownames(edger_diffwhich(edger_difflogFC\>0.584962501),)edgerdiffdown<−rownames(edgerdiffwhich(edgerdifflogFC \> 0.584962501),) edger_diff_down <- rownames(edger_diffwhich(edger_difflogFC\>0.584962501),)edgerdiffdown<−rownames(edgerdiffwhich(edgerdifflogFC \< -0.584962501),) ##deseq2 deseq2_diff <- diff_gene_Group2 deseq2_diff_up <- rownames(deseq2_diffwhich(deseq2_difflog2FoldChange\>0.584962501),)deseq2diffdown<−rownames(deseq2diffwhich(deseq2difflog2FoldChange \> 0.584962501),) deseq2_diff_down <- rownames(deseq2_diffwhich(deseq2_difflog2FoldChange\>0.584962501),)deseq2diffdown<−rownames(deseq2diffwhich(deseq2difflog2FoldChange \< -0.584962501),) ##将差异基因集保存为一个list gene_diff_edger_deseq2 <- list() gene_diff_edger_deseq2\["edger_diff_up"] <- edger_diff_up gene_diff_edger_deseq2\["edger_diff_down"] <- edger_diff_down gene_diff_edger_deseq2\["deseq2_diff_up"] <- deseq2_diff_up gene_diff_edger_deseq2\["deseq2_diff_down"] <- deseq2_diff_down #### 2.进行通路富集分析这里主要介绍普通的GO&KEGG&GSEA的简单富集。筛选显著富集通路的筛选条件也是根据自己的需求决定,一般是矫正后P值小于0.05。我这里是省事,写了各list循环。 for (i in 1:length(gene_diff_edger_deseq2)){ keytypes(org.Hs.eg.db) entrezid_all = mapIds(x = org.Hs.eg.db, keys = gene_diff_edger_deseq2\[i], keytype = "SYMBOL", #输入数据的类型 column = "ENTREZID")#输出数据的类型 entrezid_all = na.omit(entrezid_all) #na省略entrezid_all中不是一一对应的数据情况 entrezid_all = data.frame(entrezid_all) ##GO富集## GO_enrich = enrichGO(gene = entrezid_all,1, OrgDb = org.Hs.eg.db, keyType = "ENTREZID", #输入数据的类型 ont = "ALL", #可以输入CC/MF/BP/ALL #universe = 背景数据集我没用到它。 pvalueCutoff = 1,qvalueCutoff = 1, #表示筛选的阈值,阈值设置太严格可导致筛选不到基因。可指定 1 以输出全部 readable = T) #是否将基因ID映射到基因名称。 GO_enrich_data = data.frame(GO_enrich) write.csv(GO_enrich_data,paste('GO_enrich_',names(gene_diff_edger_deseq2)i, '.csv', sep = "")) GO_enrich_data <- GO_enrich_datawhich(GO_enrich_dataKaTeX parse error: Expected group after '_' at position 66: ...aste('GO_enrich_̲',names(gene_di...p.adjust \< 0.05), write.csv(KEGG_enrich_data, paste('KEGG_enrich_',names(gene_diff_edger_deseq2)i, 'filter.csv', sep = "")) } #### 3.通路富集情况可视化这里只介绍一种简单的气泡图,当然还有其他的自己去了解吧。 ##GO&KEGG富集BPCCMFKEGG分面绘图需要分开处理一下,富集结果里的ONTOLOGYL列修改 GO_enrich_data_BP <- subset(GO_enrich_data, subset = GO_enrich_dataONTOLOGY=="BP")GOenrichdataCC<−subset(GOenrichdata,subset=GOenrichdataONTOLOGY == "BP") GO_enrich_data_CC <- subset(GO_enrich_data, subset = GO_enrich_dataONTOLOGY=="BP")GOenrichdataCC<−subset(GOenrichdata,subset=GOenrichdataONTOLOGY == "CC") GO_enrich_data_MF <- subset(GO_enrich_data, subset = GO_enrich_dataKaTeX parse error: Expected 'EOF', got '#' at position 26: ...= "MF") #̲#提取GO富集BPCCMF的t...ONTOLOGY <- "KEGG" KEGG_enrich@result <- KEGG_enrich@result,c(10,1:9) ##整合GO KEGG富集结果 ego_GO_KEGG <- GO_enrich ego_GO_KEGG@result <- rbind(ego_GO_KEGG@result, KEGG_enrich@result1:5,) ego_GO_KEGG@resultONTOLOGY<−factor(egoGOKEGG@resultONTOLOGY <- factor(ego_GO_KEGG@resultONTOLOGY<−factor(egoGOKEGG@resultONTOLOGY, levels = c("BP", "CC", "MF","KEGG"))##规定分组顺序 ##简单画图 pdf("edger_diff_up_dotplot.pdf", width = 7, height = 7) dotplot(ego_GO_KEGG, split = "ONTOLOGY", title="UP-GO&KEGG", label_format = 60, color = "pvalue") + facet_grid(ONTOLOGY~., scale = "free_y")+ theme(plot.title = element_text(hjust = 0.5, size = 13, face = "bold"), axis.text.x = element_text(angle = 90, hjust = 1)) dev.off() #### 4.气泡图如图所示做了些处理,真实图片,左侧pathway是跟后面气泡一一对应的,当然还有其他可视化方式那就需要各位自己去探索了,谢谢!5.GSEA富集分析这里也是做一下简单的GSEA ##GSEA官方网站下载背景gmt文件并读入 geneset <- list() geneset\["c2_cp"] <- read.gmt("c2.cp.v2023.2.Hs.symbols.gmt") geneset\["c2_cp_kegg_legacy"] <- read.gmt("c2.cp.kegg_legacy.v2023.2.Hs.symbols.gmt") geneset\["c2_cp_kegg_medicus"] <- read.gmt("c2.cp.kegg_medicus.v2023.2.Hs.symbols.gmt") geneset\["c2_cp_reactome"] <- read.gmt("c2.cp.reactome.v2023.2.Hs.symbols.gmt") geneset\["c3_tft"] <- read.gmt("c3.tft.v2023.2.Hs.symbols.gmt") geneset\["c4_cm"] <- read.gmt("c4.cm.v2023.2.Hs.symbols.gmt") geneset\["c5_go_bp"] <- read.gmt("c5.go.bp.v2023.2.Hs.symbols.gmt") geneset\["c5_go_cc"] <- read.gmt("c5.go.cc.v2023.2.Hs.symbols.gmt") geneset\["c5_go_mf"] <- read.gmt("c5.go.mf.v2023.2.Hs.symbols.gmt") geneset\["c6"] <- read.gmt("c6.all.v2023.2.Hs.symbols.gmt") geneset\["c7"] <- read.gmt("c7.all.v2023.2.Hs.symbols.gmt") ##进行GSEA富集分析,这里也是写了个循环 gsea_results <- list() for (i in names(gene_diff)){ geneList <- gene_diff\[i]KaTeX parse error: Expected 'EOF', got '}' at position 487: ...s=0) } }̲ ##批量绘图,...IDj, title = gsea_results\[i]@resultIDj)pdf(paste(paste(names(gsearesults)i,gsearesults\[i]@resultIDj) pdf(paste(paste(names(gsea_results)i, gsea_results\[i]@resultIDj)pdf(paste(paste(names(gsearesults)i,gsearesults\[i]@resultIDj, sep = " "),".pdf",sep = "")) print§ dev.off() } 6.GSEA富集最简单图形如下分享到此结束了,希望对大家有所帮助。

相关推荐
布莱克60514 分钟前
栈(Stack)详解:定义、作用、应用场景及与队列的区别(附 C/C++ 代码)
c语言·开发语言·c++·
zmzb010314 分钟前
C++课后习题训练记录Day203
开发语言·c++
zzzll111135 分钟前
LangChain4j:Java 生态的 AI 应用开发利器
java·开发语言·人工智能
JAI科研1 小时前
Deepseek Agent Harness教程(七) | Deepseek Harness不是一个内核加一堆插件
开发语言·人工智能·深度学习·算法·自然语言处理·transformer·vllm
「、皓子~1 小时前
海狸IM 2.1 正式发布
flutter·微服务·golang·electron·开源软件·im·海狸im
孙克旭_1 小时前
单链表进阶实操:5 道常考面试题详细解析【Java 实现】
java·开发语言·数据结构·单链表
斑马1391 小时前
Linux软件编程学习笔记(五)——线程
开发语言·php
吴声子夜歌2 小时前
Java——数组和集合(一)
java·开发语言
呆呆敲代码的小Y2 小时前
Lua 上值(UpValue)
开发语言·junit·lua·lua上值·upvalue