R绘图实战|GSEA富集分析图

在这里插入图片描述

写在前面

后台难得有读者私信,请教了下图中文章的GSEA图能不能用R来画,今天就来简单写个教学。

title figure_gsea

GSEA(Gene Set EnrichmentAnalysis),即基因集富集分析,它的基本思想是使用预定义的基因,将基因按照在两类样本中的差异表达程度排序,然后检验预先设定的基因集合是否在这个排序表的顶端或者底端富集。

GSEAGOKEGG pathway不同的地方在于,后两者会提前设定一个阈值,只关注差异变化大的基因(相当于重点班)。这样子容易遗漏部分差异表达不显著却有重要生物学意义的基因(成绩一般,但是很有天赋)。所以GSEA分析比较适用于,传统分析方法筛选后样本过少的数据集。

数据准备

直接用之前的转录组差异分析后的数据来演示,数据格式如下:

gene_diff

至于基因差异分析怎么l做,有好多种办法,常用的有DESeq2EdgeRlimma,有问题的话可以私信~因为GSEA只需要SYMBOL(基因名)和foldchange (或logFC)两列,所以可以把不需要的删掉。(以上操作在EXCEL,或者用R的tidyverse(数据框处理可以参考文章: )进行操作都可以,怎么方便怎么来)

gene_arrage

开始分析

安装并导入要用到的R包

BiocManager::install("clusterProfiler") #感谢Y叔的clusterprofiler包
BiocManager::install("enrichplot")  #画图需要
BiocManager::install("org.Hs.eg.db") #基因注释需要
library(org.Hs.eg.db)
library(clusterProfiler)
library(enrichplot)

导入数据

setwd("D:/Note/MZBJ/Q_A") #设置文件所在位置
df = read.table("gene_diff.txt",header = T) #读入txt
# df = read.csv("gene_diff.csv",header = T) #读入csv
head(df)#查看前面几行
dim(df)#数据总共几行几列

> head(df)#查看前面几行
        SYMBOL    logFC
1         CD74 41.99218
2      MAB21L3 35.00852
3     KCNQ1OT1 22.78417
4 RP3-323A16.1 22.25173
5    LINC00504 16.82801
6       MALAT1 16.64222
> dim(df)#数据总共几行几列
[1] 5057    2

转换基因ID

如基因名是symbol,需要将基因ID转换为Entrez ID格式。Entrez ID实际上是指的Entrez gene ID,是对应于染色体上一个gene location的。每一个发现的基因都会被编制一个统一的编号,而Entrez ID是指的来自于NCBI旗下的Entrez gene数据库所使用的编号。因为Entrez ID具有特异性,所以后续分析更适合用Entrez ID

df_id<-bitr(df$SYMBOL, #转换的列是df数据框中的SYMBOL列
            fromType = "SYMBOL",#需要转换ID类型
            toType = "ENTREZID",#转换成的ID类型
            OrgDb = "org.Hs.eg.db")#对应的物种,小鼠的是org.Mm.eg.db
>'select()' returned 1:many mapping between keys and columns
Warning message:
In bitr(df$SYMBOL, fromType = "SYMBOL", toType = "ENTREZID", OrgDb = "org.Hs.eg.db") :
  7.87% of input gene IDs are fail to map...  #7.87%没有比对到就是没有转换成功

把两个数据框dfdf_id根据SYMBOL列合并。

df_all<-merge(df,df_id,by="SYMBOL",all=F)#使用merge合并
head(df_all) #再看看数据
dim(df_all) #因为有一部分没转换成功,所以数量就少了。

> head(df_all)
    SYMBOL        logFC ENTREZID
1      A2M -0.713519723        2
2     AAK1 -0.089497971    22848
3     AAMP -0.014536797       14
4    AARS2  0.077105219    57505
5 AASDHPPT -0.000560858    60496
6    ABCA1  0.436678052       19
> dim(df_all)
[1] 4660    3

GAEA

df_all_sort <- df_all[order(df_all$logFC, decreasing = T),]#先按照logFC降序排序
gene_fc = df_all_sort$logFC #把foldchange按照从大到小提取出来
head(gene_fc)
names(gene_fc) <- df_all_sort$ENTREZID #给上面提取的foldchange加上对应上ENTREZID
head(gene_fc)

> head(gene_fc)
[1] 41.99218 35.00852 22.78417 16.82801 16.64222 15.33221
> head(gene_fc)
     972   126868    10984   201853   378938     3514 
41.99218 35.00852 22.78417 16.82801 16.64222 15.33221 

准备以上的东西,接下来一行代码解决。

#以KEGG Pathway示例
KEGG <- gseKEGG(gene_fc, organism = "hsa") #具体参数在下面

> KEGG <- gseKEGG(gene_fc, organism = "hsa")
Reading KEGG annotation online:

Reading KEGG annotation online:

preparing geneSet collections...
GSEA analysis...
leading edge analysis...
done...
Warning messages:
1: In preparePathwaysAndStats(pathways, stats, minSize, maxSize, gseaParam,  :
  There are ties in the preranked stats (0.13% of the list).
The order of those tied genes will be arbitrary, which may produce unexpected results.
2: In serialize(data, node$con) : 载入时'package:stats'可能无用
3: In serialize(data, node$con) : 载入时'package:stats'可能无用
4: In serialize(data, node$con) : 载入时'package:stats'可能无用
5: In serialize(data, node$con) : 载入时'package:stats'可能无用
6: In serialize(data, node$con) : 载入时'package:stats'可能无用
7: In serialize(data, node$con) : 载入时'package:stats'可能无用
8: In fgseaMultilevel(...) :
  For some pathways, in reality P-values are less than 1e-10. You can set the `eps` argument to zero for better estimation.

如果要做GO富集呢?

#GO富集
GO <- gseGO(
  gene_fc, #gene_fc
  ont = "BP",# "BP"、"MF"和"CC"或"ALL"
  OrgDb = org.Hs.eg.db,#人类注释基因
  keyType = "ENTREZID",
  pvalueCutoff = 0.05,
  pAdjustMethod = "BH",#p值校正方法
)
#KEGG富集
gseKEGG(
  geneList,
  organism = "hsa",
  keyType = "kegg",
  exponent = 1,
  minGSSize = 10,
  maxGSSize = 500,
  eps = 1e-10,
  pvalueCutoff = 0.05,
  pAdjustMethod = "BH",
  verbose = TRUE,
  use_internal_data = FALSE,
  seed = FALSE,
  by = "fgsea",
  ...
)
head(KEGG)#看一下这个文件
> head(KEGG)
               ID                    Description setSize enrichmentScore       NES
hsa03010 hsa03010                       Ribosome      99      -0.8707285 -2.370839
hsa05152 hsa05152                   Tuberculosis      87       0.8678558  1.786981
hsa05171 hsa05171 Coronavirus disease - COVID-19     142      -0.5976011 -1.704522
hsa04512 hsa04512       ECM-receptor interaction      19      -0.8866402 -1.913989
               pvalue     p.adjust      qvalues rank                  leading_edge
hsa03010 0.0000000001 0.0000000257 2.431579e-08  289 tags=65%, list=6%, signal=62%
hsa05152 0.0002124294 0.0272971804 2.582695e-02  279 tags=30%, list=6%, signal=29%
hsa05171 0.0004376904 0.0290749106 2.750893e-02  289 tags=46%, list=6%, signal=45%
hsa04512 0.0004525278 0.0290749106 2.750893e-02  250 tags=58%, list=5%, signal=55%
                                                                                                                                                                                                                                                                                                                                        core_enrichment
hsa03010           6231/6193/4736/6235/2197/6218/6166/6167/6157/3921/6129/140801/6152/6125/6169/6124/9349/6141/6138/6187/6228/6144/6135/6202/6155/6154/6132/6160/6159/6147/6156/6210/6230/6175/6122/6128/11224/23521/9045/25873/6161/6201/6208/6189/6181/6188/6133/6165/6194/6139/6168/6224/6143/6142/6222/6164/6176/6232/6206/6223/6171/6233/6134/6137
hsa05152                                                        

简单解释一下结果的意思:

  • ID 代表KEGG中的信号通路
  • Description 对信号通路的描述
  • setSize 该信号通路的基因个数
  • enrichmentScore 富集分数,也就是ES
  • NES 标准化以后的ES,全称normalized enrichment score、
  • qvalues ,或者说FDR q-val(false discovery rate)错误发现率
  • rank 排名
  • core_enrichment,富集该目的通路的基因列表。
sortKEGG<-KEGG[order(KEGG$enrichmentScore, decreasing = T),]#按照enrichment score从高到低排序
head(sortKEGG)
dim(sortKEGG)
write.table(sortKEGG,"gsea_sortKEGG.txt") #保存结果

结果可视化

#gseaplot2用法
gseaplot2(
  x, #gseaResult object,即GSEA结果
  geneSetID,#富集的ID编号
  title = "", #标题
  color = "green",#GSEA线条颜色
  base_size = 11,#基础字体大小
  rel_heights = c(1.5, 0.5, 1),#副图的相对高度
  subplots = 1:3, #要显示哪些副图 如subplots=c(1,3) #只要第一和第三个图,subplots=1#只要第一个图
  pvalue_table = FALSE, #是否添加 pvalue table
  ES_geom = "line" #running enrichment score用先还是用点ES_geom = "dot"
)

先来个常规的

gseaplot2(KEGG, "hsa05152", color = "firebrick", rel_heights=c(1, .2, .6))
hsa05152

再来个文章里的:

paths <- c("hsa03010", "hsa05152", "hsa05171", "hsa04512")#选取你需要展示的通路ID
gseaplot2(KEGG,paths, pvalue_table = TRUE)
pathsGSEA
gseaplot2(KEGG,paths,color = colorspace::rainbow_hcl(4),subplots=c(1,2), pvalue_table = TRUE)
#换个颜色,只显示上面两个副图
pathsGSEA_rainbow

剩下的一点细节用AI处理一下就可以~

以上教程为本人的粗浅记录,如有错误还请各位读者指正如果觉得有用,希望大家多多点赞分享

代码领取:公众号后台私信“GSEA"即可领取全部代码。


往期内容:

《R数据科学》学习笔记|Note14:向量

《R数据科学》学习笔记|Note13:函数

《R数据科学》学习笔记|Note12:使用magrittr进行管道操作

### 回答1: GSEA(基因集富集分析)是一种常用的生物信息学分析方法,用于研究基因集在基因表达谱中的富集情况。下面是使用R语言进行GSEA生信分析的代码示例: 1. 首先,需要安装和加载必要的R包,例如GSEA包和其他必要的依赖包。 ```R install.packages("GSEA") library(GSEA) ``` 2. 加载基因表达数据集,通常是一个包含基因表达矩阵的数据文件。假设文件名为"expression_data.txt",其中包含基因表达矩阵和对应的样本信息。 ```R expression_matrix <- read.table("expression_data.txt", header = TRUE) ``` 3. 定义基因集,可以是预定义的基因集数据库(例如MSigDB)中的基因集,也可以是自定义的基因集。 ```R gene_sets <- c("GO_Biological_Process", "KEGG_Pathways", "Custom_Gene_Set") ``` 4. 进行GSEA分析,使用`gsea()`函数。其中,`gene_expr_matrix`参数为基因表达矩阵,`gene_sets`参数为基因集,`class_vector`参数为样本类别信息向量。 ```R gsea_results <- gsea(gene_expr_matrix = expression_matrix, gene_sets = gene_sets, class_vector = sample_classes) ``` 5. 分析结果包括富集分数(Enrichment Score)、正负富集基因集和富集谱等。可以通过可视化方法进一步探索和解释这些结果。 ```R enrichment_score <- gsea_results$es positive_sets <- gsea_results$pos_sets negative_sets <- gsea_results$neg_sets gene_set_plot <- plot(gsea_results) ``` 以上是使用R语言进行GSEA生信分析的基本代码示例。根据具体的研究问题和分析目标,还可以进行更多的数据预处理和可视化分析。 ### 回答2: GSEA(Gene Set Enrichment Analysis)是一种生物信息学分析工具,可用于确定基因集在给定基因表达数据中的富集程度。下面是R语言中实现GSEA分析的示例代码。 首先,需要安装并加载GSEABase、clusterProfiler和enrichplot等相关的R包。 ```R install.packages("GSEABase") install.packages("clusterProfiler") install.packages("enrichplot") library(GSEABase) library(clusterProfiler) library(enrichplot) ``` 接下来,准备基因表达数据和基因集数据。假设基因表达数据保存在一个矩阵中,行表示基因,列表示样本;基因集数据保存在GMT格式文件中,每行包含一个基因集的名称、描述和基因列表。 ```R expression_data <- read.table("expression_data.txt", header = TRUE, row.names = 1) gmt_file <- system.file("extdata", "c2.cp.kegg.v7.4.symbols.gmt", package = "DOSE") gene_sets <- readGMT(gmt_file) ``` 然后,进行GSEA分析。可以选择使用差异表达基因列表作为输入,或者将基因表达数据与基因集数据一起传递。以下是基于基因表达数据进行GSEA分析的示例。 ```R gene_rank <- computeGeneRank(expression_data, method = "t.test") result <- enrichGSEA(gene_sets, gene_rank) ``` 最后,可以使用enrichplot包中的函数绘制GSEA结果的可视化,例如绘制富集和基因集热。 ```R dotplot(result, showCategory = 20) gene_heatmap(result, top = 10) ``` 通过这些代码,我们可以使用R语言实现GSEA生信分析,从而确定基因集在给定基因表达数据中的富集程度,并可视化展示分析结果。 ### 回答3: GSEA (基因集富集分析) 是一种用于分析生物学实验数据的生物信息学工具,它可以确定在给定条件下,特定基因集中的基因与实验结果相关性的显著性。下面是一个用R语言进行GSEA生信分析的代码示例: 1. 导入所需的R包。 ```R library(clusterProfiler) ``` 2. 导入基因表达数据。 ```R expression_data <- read.table("expression_data.txt", header = TRUE, sep = "\t") ``` 3. 根据实验分组信息创建一个分组向量。 ```R group <- c(rep("Group A", 3), rep("Group B", 3)) ``` 4. 根据基因的符号名称创建一个基因符号向量。 ```R gene_symbols <- c("Gene1", "Gene2", "Gene3", "Gene4", "Gene5", "Gene6") ``` 5. 创建一个基因集对象。 ```R gene_set <- list( GroupA_genes = c("Gene1", "Gene2", "Gene3"), GroupB_genes = c("Gene4", "Gene5", "Gene6") ) ``` 6. 运行GSEA分析。 ```R gsea_result <- gseGO(expression_data, geneSet = gene_set, nPerm = 1000, minGSSize = 3, maxGSSize = 500, pvalueCutoff = 0.05) ``` 7. 查看GSEA结果。 ```R print(gsea_result) ``` 这段代码中,首先导入了clusterProfiler包,它包含了进行GSEA分析所需的函数。然后,基因表达数据被读入到一个名为expression_data的数据框中。接下来创建了一个分组向量,它指定了每个样品所属的实验组。然后,基因符号向量被创建,其中包含了基因的符号名称。根据实验组信息和基因符号,一个基因集对象被创建。最后,调用gseGO函数运行GSEA分析,其中包括参数,如基因集、置换次数、最小/最大基因集大小和显著性阈值。最后,打印GSEA分析的结果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值