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

嚴華  论坛元老 | 2025-1-19 12:14:45 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1049|帖子 1049|积分 3147

接着前次的内容,上篇内容给大家分享了基因表达量怎么做分组差异分析,从而得到差异基因集,想了解的可以去看一下,这篇主要给大家分享一下得到明显差异基因集后怎么做一下通路富集。
1.准备差异基因集

我就直接把前次分享的拿到这边了。我们一样平常都把差异基因分为上调基因和下调基因分别做通路富集分析。下面上代码,可能包含我的一些个人习惯,勿怪。明显差异基因的筛选条件根据个人需求设置哈。
  1. ##载入所需R包
  2. library(readxl)
  3. library(DOSE)
  4. library(org.Hs.eg.db)
  5. library(topGO)
  6. library(pathview)
  7. library(ggplot2)
  8. library(GSEABase)
  9. library(limma)
  10. library(clusterProfiler)
  11. library(enrichplot)
  12. ##edger
  13. edger_diff <- diff_gene_Group
  14. edger_diff_up <- rownames(edger_diff[which(edger_diff$logFC > 0.584962501),])
  15. edger_diff_down <- rownames(edger_diff[which(edger_diff$logFC < -0.584962501),])
  16. ##deseq2
  17. deseq2_diff <- diff_gene_Group2
  18. deseq2_diff_up <- rownames(deseq2_diff[which(deseq2_diff$log2FoldChange > 0.584962501),])
  19. deseq2_diff_down <- rownames(deseq2_diff[which(deseq2_diff$log2FoldChange < -0.584962501),])
  20. ##将差异基因集保存为一个list
  21. gene_diff_edger_deseq2 <- list()
  22. gene_diff_edger_deseq2[["edger_diff_up"]] <- edger_diff_up
  23. gene_diff_edger_deseq2[["edger_diff_down"]] <- edger_diff_down
  24. gene_diff_edger_deseq2[["deseq2_diff_up"]] <- deseq2_diff_up
  25. gene_diff_edger_deseq2[["deseq2_diff_down"]] <- deseq2_diff_down
复制代码
2.进行通路富集分析

这里主要先容平凡的GO&KEGG&GSEA的简单富集。筛选明显富集通路的筛选条件也是根据自己的需求决定,一样平常是改正后P值小于0.05。我这里是省事,写了各list循环。
  1. for (i in 1:length(gene_diff_edger_deseq2)){
  2.   keytypes(org.Hs.eg.db)
  3.   
  4.   entrezid_all = mapIds(x = org.Hs.eg.db,  
  5.                         keys = gene_diff_edger_deseq2[[i]],
  6.                         keytype = "SYMBOL", #输入数据的类型
  7.                         column = "ENTREZID")#输出数据的类型
  8.   entrezid_all  = na.omit(entrezid_all)  #na省略entrezid_all中不是一一对应的数据情况
  9.   entrezid_all = data.frame(entrezid_all)
  10.   
  11.   ##GO富集##
  12.   GO_enrich = enrichGO(gene = entrezid_all[,1],
  13.                        OrgDb = org.Hs.eg.db,
  14.                        keyType = "ENTREZID", #输入数据的类型
  15.                        ont = "ALL", #可以输入CC/MF/BP/ALL
  16.                        #universe = 背景数据集我没用到它。
  17.                        pvalueCutoff = 1,qvalueCutoff = 1, #表示筛选的阈值,阈值设置太严格可导致筛选不到基因。可指定 1 以输出全部
  18.                        readable = T) #是否将基因ID映射到基因名称。
  19.   
  20.   GO_enrich_data  = data.frame(GO_enrich)
  21.   write.csv(GO_enrich_data,paste('GO_enrich_',names(gene_diff_edger_deseq2)[i], '.csv', sep = ""))
  22.   GO_enrich_data <- GO_enrich_data[which(GO_enrich_data$p.adjust < 0.05),]
  23.   write.csv(GO_enrich_data,paste('GO_enrich_',names(gene_diff_edger_deseq2)[i], '_filter.csv', sep = ""))
  24.   
  25.   
  26.   ###KEGG富集分析###
  27.   KEGG_enrich = enrichKEGG(gene = entrezid_all[,1], #即待富集的基因列表
  28.                            keyType = "kegg",
  29.                            pAdjustMethod = 'fdr',  #指定p值校正方法
  30.                            organism= "human",  #hsa,可根据你自己要研究的物种更改,可在https://www.kegg.jp/brite/br08611中寻找
  31.                            qvalueCutoff = 1, #指定 p 值阈值(可指定 1 以输出全部)
  32.                            pvalueCutoff=1) #指定 q 值阈值(可指定 1 以输出全部)
  33.   KEGG_enrich_data  = data.frame(KEGG_enrich)
  34.   write.csv(KEGG_enrich_data, paste('KEGG_enrich_',names(gene_diff_edger_deseq2)[i], '.csv', sep = ""))
  35.   KEGG_enrich_data <- KEGG_enrich_data[which(KEGG_enrich_data$p.adjust < 0.05),]
  36.   write.csv(KEGG_enrich_data, paste('KEGG_enrich_',names(gene_diff_edger_deseq2)[i], '_filter.csv', sep = ""))
  37. }
复制代码
3.通路富集情况可视化

这里只先容一种简单的气泡图,当然另有其他的自己去了解吧。
  1. ##GO&KEGG富集BPCCMFKEGG分面绘图需要分开处理一下,富集结果里的ONTOLOGYL列修改
  2. GO_enrich_data_BP <- subset(GO_enrich_data, subset = GO_enrich_data$ONTOLOGY == "BP")
  3. GO_enrich_data_CC <- subset(GO_enrich_data, subset = GO_enrich_data$ONTOLOGY == "CC")
  4. GO_enrich_data_MF <- subset(GO_enrich_data, subset = GO_enrich_data$ONTOLOGY == "MF")
  5. ##提取GO富集BPCCMF的top5
  6. GO_enrich_data_filter <- rbind(GO_enrich_data_BP[1:5,], GO_enrich_data_CC[1:5,], GO_enrich_data_MF[1:5,])
  7. ##重新整合进富集结果
  8. GO_enrich@result <- GO_enrich_data_filter
  9. ##处理KEGG富集结果
  10. KEGG_enrich@result <- KEGG_enrich_data
  11. ncol(KEGG_enrich@result)
  12. KEGG_enrich@result$ONTOLOGY <- "KEGG"
  13. KEGG_enrich@result <- KEGG_enrich@result[,c(10,1:9)]
  14. ##整合GO KEGG富集结果
  15. ego_GO_KEGG <- GO_enrich
  16. ego_GO_KEGG@result <- rbind(ego_GO_KEGG@result, KEGG_enrich@result[1:5,])
  17. ego_GO_KEGG@result$ONTOLOGY <- factor(ego_GO_KEGG@result$ONTOLOGY, levels = c("BP", "CC", "MF","KEGG"))##规定分组顺序
  18. ##简单画图
  19. pdf("edger_diff_up_dotplot.pdf", width = 7, height = 7)
  20. dotplot(ego_GO_KEGG, split = "ONTOLOGY", title="UP-GO&KEGG", label_format = 60, color = "pvalue") +
  21.   facet_grid(ONTOLOGY~., scale = "free_y")+
  22.   theme(plot.title = element_text(hjust = 0.5, size = 13, face = "bold"), axis.text.x = element_text(angle = 90, hjust = 1))
  23. dev.off()
复制代码
4.气泡图如图所示


做了些处理,真实图片,左侧pathway是跟背面气泡一一对应的,当然另有其他可视化方式那就需要各位自己去探索了,谢谢!
5.GSEA富集分析
这里也是做一下简单的GSEA
  1. ##GSEA官方网站下载背景gmt文件并读入
  2. geneset <- list()
  3. geneset[["c2_cp"]] <- read.gmt("c2.cp.v2023.2.Hs.symbols.gmt")
  4. geneset[["c2_cp_kegg_legacy"]] <- read.gmt("c2.cp.kegg_legacy.v2023.2.Hs.symbols.gmt")
  5. geneset[["c2_cp_kegg_medicus"]] <- read.gmt("c2.cp.kegg_medicus.v2023.2.Hs.symbols.gmt")
  6. geneset[["c2_cp_reactome"]] <- read.gmt("c2.cp.reactome.v2023.2.Hs.symbols.gmt")
  7. geneset[["c3_tft"]] <- read.gmt("c3.tft.v2023.2.Hs.symbols.gmt")
  8. geneset[["c4_cm"]] <- read.gmt("c4.cm.v2023.2.Hs.symbols.gmt")
  9. geneset[["c5_go_bp"]] <- read.gmt("c5.go.bp.v2023.2.Hs.symbols.gmt")
  10. geneset[["c5_go_cc"]] <- read.gmt("c5.go.cc.v2023.2.Hs.symbols.gmt")
  11. geneset[["c5_go_mf"]] <- read.gmt("c5.go.mf.v2023.2.Hs.symbols.gmt")
  12. geneset[["c6"]] <- read.gmt("c6.all.v2023.2.Hs.symbols.gmt")
  13. geneset[["c7"]] <- read.gmt("c7.all.v2023.2.Hs.symbols.gmt")
  14. ##进行GSEA富集分析,这里也是写了个循环
  15. gsea_results <- list()
  16. for (i in names(gene_diff)){
  17.   geneList <- gene_diff[[i]]$logFC
  18.   names(geneList) <- toupper(rownames(gene_diff[[i]]))
  19.   geneList <- sort(geneList,decreasing = T)
  20.   for (j in names(geneset)){
  21.     listnames <- paste(i,j,sep = "_")
  22.     gsea_results[[listnames]] <- GSEA(geneList = geneList,
  23.                          TERM2GENE = geneset[[j]],
  24.                          verbose = F,
  25.                          pvalueCutoff = 0.1,
  26.                          pAdjustMethod = "none",
  27.                          eps=0)
  28.   }
  29. }
  30. ##批量绘图,注意这里如果有空富集通路,会报错!
  31. for (j in 1:nrow(gsea_results[[i]]@result)) {
  32.     p <- gseaplot2(x=gsea_results[[i]],geneSetID=gsea_results[[i]]@result$ID[j], title =
  33.     gsea_results[[i]]@result$ID[j])
  34.    
  35.     pdf(paste(paste(names(gsea_results)[i], gsea_results[[i]]@result$ID[j], sep =
  36.     "_"),".pdf",sep = ""))
  37.     print(p)
  38.     dev.off()
  39.   }
复制代码
6.GSEA富集最简单图形如下

分享到此竣事了,盼望对大家有所帮助。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

嚴華

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表