复现Nature图表:GSEA分析及可视化包装函数

这篇帖子主要的目的是写一个转录组GSEA分析和可视化通用的函数。起因是我们想要复现一篇文章的GSEA可视化图片,这个Nature文章GSEA可视化挺好的:

image.png

image.png

(reference:B-cell-specific checkpoint molecules that regulate anti-tumour immunity)后来干脆一不做二不休,写一个函数吧,有差异分析结果即可,可视化也是一键出结果。算是懒人福音吧。我们此部分一共有两个函数,一个是KS_GSEA,作用是进行转录组数据GSEA分析,提供clusterProfiler和fgsea两种R包分析方式,KS_GSEA适用于human和mouse两个物种,支持KEGG、GO(BP)的GSEA分析。KS_GSEA_plot作用是进行GSEA结果的可视化,可选择需要的通路进行展示。

image.png

image.png

image.png

image.png

这里我们以一个单细胞的数据为例,首先做一下差异分析。Bulk RNA的差异分析不再多说。GSEA分析是基于已经完成差异分析结果,且纳入所有基因。目前R做GSEA用的比较多的是clusterProfiler和fgsea包,所以这两种包的分析方式我们都包含进去了。使用的时候选择自己需要的即可。


library(Seurat)
library(msigdbr)
library(fgsea)
library(clusterProfiler)
library(ggplot2)
#加载函数
source('./KS_GSEA.R')
source('./KS_GSEA_plot.R')

#差异基因-----------------------------------------------------------------------
load("D:/KS项目/公众号文章/GSEA分析及可视化函数/sce_mar.RData")
df <- FindMarkers(Macrophage, min.pct = 0, logfc.threshold = 0,
                    group.by = "group",ident.1 ="BM",ident.2="GM")
df$gene = rownames(df)

得到的差异分析结果是一个数据框,包含gene symbol这一列,还有logFC这一列。我们知道GSEA分析需要对基因按照FC进行排序,我们这里的分析不需要事先进行排序,只要提供gene和logFC即可。两种R包的结果我们都做一下。

#GSEA分析-----------------------------------------------------------------------
GSEA_CP <- KS_GSEA(gene = df$gene,
                   LogFC = df$avg_log2FC,
                   analysis = "KEGG",
                   package = 'clusterProfiler',
                   OrgDb = 'org.Hs.eg.db')
class(GSEA_CP)
# [1] "gseaResult"
# attr(,"package")
# [1] "DOSE"


GSEA_F <- KS_GSEA(gene = df$gene,
                  LogFC = df$avg_log2FC,
                  analysis = "KEGG",
                  package = 'fgsea',
                  OrgDb = 'org.Hs.eg.db')
class(GSEA_F)
# [1] "data.table" "data.frame"

可以看到,clusterProfiler包返回的是一个gseaResult,fgsea包返回的是一个"data.table","data.frame"。这些结果就是我们下一步可视化的输入文件。运行结束后,分析结果已txt或者csv的形式直接保存到当前环境路径下!

image.png

image.png

我们对可视化函数进行了设置,NES>0的结果点用红色显示。NES<0的结果用蓝色点显示。这里我们挑选自己感兴趣的通路进行可视化。

#NES>0
p1=KS_GSEA_plot(inputType = "clusterProfiler",
             analysis = "KEGG",
             data = GSEA_CP,
             term = 'Oxidative phosphorylation',
             gene = df$gene,
             LogFC  = df$avg_log2FC,
             OrgDb = 'org.Hs.eg.db')


p2=KS_GSEA_plot(inputType = "fgsea",
             analysis = "KEGG",
             data = GSEA_F,
             term = 'Huntingtons disease',
             gene = df$gene,
             LogFC = df$avg_log2FC,
             OrgDb = 'org.Hs.eg.db')
p1+p2

image.png

image.png

NES<0,这里需要注意一个问题,clusterProfiler和fgsea虽然都是GSEA分析,但是两者得到的结果并不是一摸一样完全相同的,总是有一些出入,这是因为数据库,分析方式不一样。选择需要的包使用一个即可。


#NES<0
p3=KS_GSEA_plot(inputType = "clusterProfiler",
             analysis = "KEGG",
             data = GSEA_CP,
             term = 'JAK-STAT signaling pathway',
             gene = df$gene,
             LogFC  = df$avg_log2FC,
             OrgDb = 'org.Hs.eg.db')


p4=KS_GSEA_plot(inputType = "fgsea",
             analysis = "KEGG",
             data = GSEA_F,
             term = 'Jak stat signaling pathway',
             gene = df$gene,
             LogFC = df$avg_log2FC,
             OrgDb = 'org.Hs.eg.db')
p3+p4


image.png

image.png

当然了,我们可以利用循环一次性可视化通路。

#批量循环
#NES>0
pathway <- c('Oxidative phosphorylation',
             "Parkinson disease",
             "Biosynthesis of amino acids",
             "Cardiac muscle contraction")

pathway_list <- list()
for (i in 1:length(pathway)) {
  p = KS_GSEA_plot(inputType = "clusterProfiler",
                   analysis = "KEGG",
                   data = GSEA_CP,
                   term = pathway[i],
                   gene = df$gene,
                   LogFC  = df$avg_log2FC,
                   OrgDb = 'org.Hs.eg.db')
  pathway_list[[i]] <- p
  
}
#组合图
CombinePlots(pathway_list, ncol = 2)

image.png

image.png

用另一个数据批量做一下下调的。

#NES<0
pathway1 <- c('Melanoma',
              'Prostate cancer',
              'Ecm receptor interaction',
              'Tgf beta signaling pathway')

pathway_list1 <- list()
for (i in 1:length(pathway)) {
  p = KS_GSEA_plot(inputType = "fgsea",
                   analysis = "KEGG",
                   data = GSEA_F,
                   term = pathway1[i],
                   gene = df$gene,
                   LogFC  = df$avg_log2FC,
                   OrgDb = 'org.Hs.eg.db')
  pathway_list1[[i]] <- p
  
}
#组合图
CombinePlots(pathway_list1, ncol = 2)

image.png

image.png

这就是所有内容了,希望对你有所启发。这个函数其实并不是很完美,首先是物种只支持小鼠和人,其次是分析参数我没有再设置,用的是我常用的。当然了,这个函数框架我提供了,需要更加个性化的可以自行修改。更多精彩请至我们的公众号---KS科研分享与服务

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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分析的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值