1. 富集分析基础知识
1.1 什么是富集分析?为什么要做富集分析?
富集分析(Enrichment Analysis)是生物信息学中一种重要的分析方法,主要用于识别在特定生物样本(如基因集、代谢物集或其他分子集合)中是否存在某种功能类别或通路的显著性聚集现象。该方法广泛应用于基因表达分析、蛋白质组学、代谢组学等领域,有助于解析复杂的生物学过程、疾病发生机制以及基因功能注释等问题。
富集分析的核心目的是评估一组预先定义的生物分子(如差异表达基因)是否在某个功能集或通路中显著聚集。例如,在分析某种疾病状态下的转录组数据时,富集分析能够揭示哪些生物学通路或功能模块在差异表达基因中显著富集,从而提示其潜在生物学意义或与疾病相关的调控机制。
1.2 富集分析有几种类型?
目前常用的富集分析方法主要包括以下几种:
(1)GO富集分析
GO(Gene Ontology)富集分析从三个维度系统描述基因的潜在功能,分别为:
分子功能(Molecular Function, MF):描述基因在分子层面的活性,如结合活性或催化作用;
细胞组分(Cellular Component, CC):反映基因产物在细胞中的定位;
生物过程(Biological Process, BP):揭示基因参与的生物学过程或通路。
例如,若差异基因显著富集于GO:0006954(炎症反应,Inflammatory Response),则提示所研究基因可能参与机体免疫与炎症相关的生物学过程。
(2)KEGG富集分析
KEGG(Kyoto Encyclopedia of Genes and Genomes)是一个系统性地整合基因功能及通路信息的数据库。KEGG富集分析基于该数据库,对目标基因集中所涉及的主要代谢通路、信号转导途径等进行注释和统计评估,从而识别出显著影响的生物学通路。
(3)GSEA富集分析
(4)GSVA富集分析
在本节中,我们将重点介绍GO富集分析与KEGG富集分析的基本原理与应用。GSEA和GSVA等方法将在后续分析点中详细展开。
1. 3 富集分析结果解读
(1)GO富集分析结果:
ONTOLOGY:指示该通路所属的GO类别,即生物过程(Biological Process, BP)、分子功能(Molecular Function, MF)还是细胞组分(Cellular Component, CC)。
ID:GO通路的唯一标识符,用于在GO数据库中唯一地标识一个通路,类似于"身份证号码"。
Description:对通路的简单描述,通常通过这一列可以快速了解该通路的主要功能和作用。
GeneRatio:富集到该通路上的基因数量与所有输入到富集分析中的基因数量的比值。它反映了在特定基因集合中,与该通路相关的基因所占的比例。
BgRatio:在整个背景数据集(通常是整个基因组或某个参考数据集)中,与该通路相关的基因数量与背景数据集中所有基因数量的比值。它反映了在整个基因组中,与该通路相关的基因所占的比例。
Pvalue:常规p值,用于衡量富集的显著性。p值越小,富集越显著。通常p值<0.05被认为是显著的。
p.adjust:校正后的p值,通常使用Benjamini-Hochberg方法进行多重比较校正,以控制假阳性率。校正后的p值更严格地衡量富集的显著性。
Qvalue:q值,表示校正后的p值,用于控制假发现率(False Discovery Rate, FDR)。q值越小,富集越显著。
geneID:富集到该通路上的基因ID列表,以斜杠分隔。这些基因ID可以用于进一步的分析和验证。
Count:富集到该通路上的基因数目,表示有多少个基因参与了该通路。(2)KEGG富集分析结果
Category:通路所属的大类,例如"Human Diseases"(人类疾病)、"Metabolism"(代谢)等,用于对通路进行宏观分类。
Subcategory:通路所属的子类别,进一步细化通路的分类,例如在"Human Diseases"下有"Neurodegenerative disease"(神经退行性疾病)等。
ID:KEGG 通路的唯一标识符,用于在 KEGG 数据库中唯一地标识一个通路,类似于"身份证号码"。
Description:对通路的简单描述,通常通过这一列可以快速了解该通路的主要功能和作用。
GeneRatio:富集到该通路上的基因数量与所有输入到富集分析中的基因数量的比值。它反映了在特定基因集合中,与该通路相关的基因所占的比例。
BgRatio:在整个背景数据集(通常是整个基因组或某个参考数据集)中,与该通路相关的基因数量与背景数据集中所有基因数量的比值。它反映了在整个基因组中,与该通路相关的基因所占的比例。
Pvalue:常规 p 值,用于衡量富集的显著性。p 值越小,富集越显著。通常 p 值 < 0.05 被认为是显著的。
p.adjust:校正后的 p 值,通常使用 Benjamini-Hochberg 方法进行多重比较校正,以控制假阳性率。校正后的 p 值更严格地衡量富集的显著性。
Qvalue:q 值,表示校正后的 p 值,用于控制假发现率(False Discovery Rate, FDR)。q 值越小,富集越显著。
geneID:富集到该通路上的基因 ID 列表,以斜杠分隔。这些基因 ID 可以用于进一步的分析和验证。
Count:富集到该通路上的基因数目,表示有多少个基因参与了该通路。
2. GO+KEGG富集 分析
2.1. GO富集分析
我们将使用《转录组基因表达差异分析全流程:以GSE65682为例》一文中得到的差异分析结果进行演示。
library(clusterProfiler)
library(org.Hs.eg.db)
导入要富集分析的基因
# 读取基因数据文件,文件中包含基因符号(gene symbols)
gene_data <- read.csv("D:\\Users\\Desktop\\转录组\\DEGhc_Sepsis.csv")
# 提取基因符号列,并将其转换为字符向量
gene_vector <- as.character(gene_data[[1]]) # 将第一列基因符号列转换为字符向量
将基因符号转换为Entrez ID
# 使用bitr函数将基因符号转换为Entrez ID
# fromType = "SYMBOL" 表示输入的基因标识符是基因符号
# toType = "ENTREZID" 表示目标标识符是Entrez ID
# OrgDb = "org.Hs.eg.db" 指定使用人类基因注释数据库
entrez_ids <- bitr(gene_vector, fromType = "SYMBOL", toType = "ENTREZID", OrgDb = "org.Hs.eg.db")
entrez_ids如下图所示,第一列就是基因名(symbol),而第二列就是ENTREZID
注:用bitr做转换的时候,很有可能会出现基因没有对应的ENTREZID编号,这是一个正常现象
执行GO富集分析
# 使用enrichGO函数进行基因本体(GO)富集分析
# gene = entrez_ids$ENTREZID:指定输入的基因列表,这里使用之前转换得到的Entrez ID
# OrgDb = "org.Hs.eg.db":指定使用人类基因注释数据库
# keyType = "ENTREZID":指定输入基因标识符的类型为Entrez ID
# ont = "ALL":指定分析所有三种GO本体(生物过程BP、细胞组分CC、分子功能MF)
# pAdjustMethod = "BH":指定使用Benjamini-Hochberg方法进行多重比较校正
# qvalueCutoff = 0.05:指定校正后的p值(q值)的阈值为0.05,只有q值小于该阈值的GO项才会被保留
# readable = TRUE:将输出结果中的ENTREZID转换为基因符号(SYMBOL)
go_enrichment <- enrichGO(gene = entrez_ids$ENTREZID,
OrgDb = "org.Hs.eg.db",
keyType = "ENTREZID",
ont = "ALL",
pAdjustMethod = "BH",
qvalueCutoff = 0.05,
readable = TRUE)
# 查看富集分析结果
# 使用print函数和summary方法打印GO富集分析的摘要结果
print(summary(go_enrichment))
# 将富集分析结果保存为CSV文件
# 使用write.csv函数将富集分析结果保存到指定路径的CSV文件中
write.csv(go_enrichment, file = "go_enrichment_results.csv", row.names = FALSE)
# 可视化 GO 富集分析结果
# 使用 dotplot 函数生成 GO 富集分析的点图
p <- dotplot(go_enrichment) # 生成点图对象
# 生成按本体(ONTOLOGY)分类的点图,并使用 facet_grid 分面显示
dotplot(go_enrichment, split = "ONTOLOGY") + facet_grid(ONTOLOGY ~ ., scale = "free")
# 使用 barplot 函数生成 GO 富集分析的柱状图
barplot(go_enrichment)
KEGG 富集分析
# 使用 enrichKEGG 函数进行 KEGG 通路富集分析
# gene = entrez_ids$ENTREZID:指定输入的基因列表(Entrez ID)
# organism = "hsa":指定分析的生物物种为人类(hsa)
# keyType = "kegg":指定输入基因标识符的类型为 KEGG ID
# pAdjustMethod = "BH":指定使用 Benjamini-Hochberg 方法进行多重比较校正
# qvalueCutoff = 0.05:指定校正后的 p 值(q 值)的阈值为 0.05
kegg_enrichment <- enrichKEGG(gene = entrez_ids$ENTREZID,
organism = "hsa",
keyType = "kegg",
pAdjustMethod = "BH",
qvalueCutoff = 0.05)
# 将输出结果中的ENTREZID转换为基因符号(SYMBOL)
kegg_enrichment=DOSE::setReadable(kegg_enrichment, OrgDb='org.Hs.eg.db',keyType='ENTREZID')
# 查看 KEGG 富集分析结果
print(summary(kegg_enrichment))
# 将 KEGG 富集分析结果保存为 CSV 文件
write.csv(kegg_enrichment, file = "D:\\Users\\Desktop\\call-task_KEGG_enrichment\\kegg_enrichment_results.csv", row.names = FALSE)
# 可视化 KEGG 富集分析结果
p1 <- dotplot(kegg_enrichment)
# 使用 barplot 函数生成 KEGG 富集分析的柱状图
barplot(kegg_enrichment)