GSEA富集分析流程及解释(R代码)【待完善】

GSEA简介

数据准备

GSEA只需要gene id和log2FoldChange两列

library(clusterProfiler)
library(enrichplot)
library(org.Mm.eg.db) # mouse全基因组注释包,用于不同版本基因名的转换
# 这个是属于注释包,每个基因集可能对应的注释包不一样,要从基因集所在的平台找到对应的注释包,然后从bioconductor获取安装。
library(dplyr)
library(stringr)
library(msigdbr) # 提供多个物种的MSigDB数据

dif_genes <- read.csv("dif_genes.csv")
# 得到差异分析结果:all_different_genes
geneList <- dif_genes$avg_logFC
# 如果是Ensemble ID,并且如果还带着版本号,需要去除版本号,再进行基因ID转换,得到Entrez ID
names(geneList) <- dif_genes$gene_id
# 最后从大到小排序,得到一个字符串
geneList <- sort(geneList, decreasing = T) 

# 检查是否有重复基因名
genelist <- dif_genes$gene_id
genelist[duplicated(genelist)]

数据集准备

MSigDB数据库是GSEA的官方数据库

官网

misgdbr包

msigdbr包可提供多个物种的MSigDB数据

# GSEA #mdigbd dataset
msigdbr_df <- msigdbr(species = "Mus musculus",category = "C2")
# msigdbr_df$gene_symbol:"SYMBOL";$entrez_gene:"ENTREZID"
# msigdbr_list <- split(x = msigdbr_df$entrez_gene, f = msigdbr_df$gs_name)
# msigdbr_t2g <- msigdbr_df %>% dplyr::distinct(gs_name, entrez_gene) %>% as.data.frame()
# msigdbr_t2g <- msigdbr_df %>% dplyr::distinct(gs_name, ensembl_gene) %>% as.data.frame()
msigdbr_t2g <- msigdbr_df %>% dplyr::distinct(gs_name, gene_symbol) %>% as.data.frame()

用clusterProfiler实现GSEA

gsea_result <- GSEA(geneList = geneList,
                    minGSSize = 1,
                    maxGSSize = 1000,
                    pvalueCutoff = 1,
                    TERM2GENE = msigdbr_t2g)
# 将其中的基因名变成symbol ID
#gsea_result <- setReadable(gsea_result, OrgDb = org.Mm.eg.db)
# 还可以直接点击查看,只需要转成数据框
#gsea_result_df <- as.data.frame(gsea_result)
# 导出结果
write.csv(gsea_result@result, file = "gsea_result.csv")
# 对感兴趣的通路可视化
gseaplot2(gsea_result, geneSetID = c("PATHWAY_NAME"))

或进行GO分析

## gseGO
# 想看biological process(BP),可以先不过滤p值
go_result <- gseGO(geneList = geneList,
                   ont = "BP", 
                   OrgDb = org.Mm.eg.db,
                   minGSSize = 10,
                   maxGSSize = 500,
                   pvalueCutoff = 1)
# 将其中的基因名变成symbol ID
go_result <- setReadable(go_result, OrgDb = org.Mm.eg.db)
# 还可以直接点击查看,只需要转成数据框
go_result_df <- as.data.frame(go_result)
# 导出结果
write.csv(go_result@result, file = "gseGO_result.csv")
# 对感兴趣的通路可视化
gseaplot2(go_result, geneSetID = c("GO:0032981"))

KEGG分析

##gseKEGG
kk <- gseKEGG(geneList = geneList,
              organism = 'hsa',
              nPerm = 1000,
              minGSSize = 10,
              maxGSSize = 500,
              pvalueCutoff = 1,
              verbose = FALSE)
gseaplot(kk, geneSetID = "hsa04110")

结果注释,可视化解读

enrichmentscore 或 NES 大于0表示上调,小于0表示下调
GSEA详细解释及结果解读

===================================================

完整代码

rm(list=ls())
setwd("C:\\Users\\DELL\\Desktop\\gsea")
memory.limit(102400)

library(clusterProfiler)
library(enrichplot)
library(org.Mm.eg.db) # mouse全基因组注释包,用于不同版本基因名的转换
library(dplyr)
library(stringr)
library(msigdbr) 
 
# GSEA #mdigbd dataset
msigdbr_df <- msigdbr(species = "Mus musculus", category = "C2")
# msigdbr_df$gene_symbol:"SYMBOL";$entrez_gene:"ENTREZID"
# msigdbr_list <- split(x = msigdbr_df$entrez_gene, f = msigdbr_df$gs_name)
# msigdbr_t2g <- msigdbr_df %>% dplyr::distinct(gs_name, entrez_gene) %>% as.data.frame()
# msigdbr_t2g <- msigdbr_df %>% dplyr::distinct(gs_name, ensembl_gene) %>% as.data.frame()
msigdbr_t2g <- msigdbr_df %>% dplyr::distinct(gs_name, gene_symbol) %>% as.data.frame()

files <- list.files(getwd(), pattern = "*.csv") 

# 多组数据,用for循环
for (i in 1:length(files)){
  file <- files[i]
  print(file)
  dif_genes <- read.csv(file)
  # 得到差异分析结果:all_different_genes
  geneList <- dif_genes$avg_logFC
  # 如果是Ensemble ID,并且如果还带着版本号,需要去除版本号,再进行基因ID转换,得到Entrez ID
  names(geneList) <- dif_genes$gene_id
  # 最后从大到小排序,得到一个字符串
  geneList <- sort(geneList, decreasing = T) 

  # 检查是否有重复基因名
  genelist <- dif_genes$gene_id
  genelist <- genelist[duplicated(genelist)]
  
  gsea_result <- GSEA(geneList = geneList,
                      minGSSize = 1,
                      maxGSSize = 1000,
                      pvalueCutoff = 1,
                      TERM2GENE = msigdbr_t2g)
  # 将其中的基因名变成symbol ID
  #gsea_result <- setReadable(gsea_result, OrgDb = org.Mm.eg.db)
  # 还可以直接点击查看,只需要转成数据框
  #gsea_result_df <- as.data.frame(gsea_result)
  # 导出结果
  write.csv(gsea_result@result, file = "gsea_result.csv")
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,042评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,996评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,674评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,340评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,404评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,749评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,902评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,662评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,110评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,577评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,258评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,848评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,726评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,952评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,271评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,452评论 2 348

推荐阅读更多精彩内容