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富集分析結果:

玉米轉錄組的KEGG和GO富集分析_51CTO博客_標識符

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富集分析結果

玉米轉錄組的KEGG和GO富集分析_51CTO博客_數據庫_02

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編號,這是一個正常現象

玉米轉錄組的KEGG和GO富集分析_51CTO博客_標識符_03

執行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)