跳转至

KEGG通路分析详解

一句话概述:KEGG(Kyoto Encyclopedia of Genes and Genomes)是整合了基因组、通路、疾病、药物等信息的综合数据库,KEGG通路分析是将基因映射到代谢和信号通路图上,揭示基因功能的关键方法。

核心知识点速查表

概念说明
KEGG京都基因与基因组百科全书(白话:基因功能的"百度地图")
KEGG Pathway代谢/信号通路图(白话:细胞里的"流水线图")
KO(KEGG Orthology)KEGG直系同源编号,连接基因与通路的桥梁
Module通路中的功能模块(比pathway更精细的单位)
KEGG BRITE层级分类体系(酶、转录因子等)
KAASKEGG Automatic Annotation Server
hsa/mmu/ko物种前缀:hsa=人,mmu=小鼠,ko=通用

一、KEGG注释方法

1.1 在线KAAS注释

# === KAAS在线注释(推荐小数据集) ===
# 访问: https://www.genome.jp/tools/kaas/
# 上传蛋白质或核酸序列
# 选择物种参考集(推荐: representative set)
# 选择比对方式: BBH(双向最佳比对) 或 SBH(单向最佳比对)
# 结果包含KO编号分配

1.2 使用KofamScan本地注释

# === KofamScan:KEGG官方推荐的本地KO注释工具 ===
# 基于HMM profile,比BLAST更准确

# 安装
conda install -c bioconda kofamscan

# 下载KOfam数据库
wget https://www.genome.jp/ftp/db/kofam/ko_list.gz        # KO列表
wget https://www.genome.jp/ftp/db/kofam/profiles.tar.gz    # HMM profiles
gunzip ko_list.gz                                           # 解压
tar xzf profiles.tar.gz                                     # 解压

# 运行KofamScan
exec_annotation \
    -o kofam_results.txt \       # 输出文件
    -p profiles/ \               # HMM profile目录
    -k ko_list \                 # KO列表文件
    --cpu 16 \                   # CPU线程数
    -f mapper \                  # 输出格式(mapper格式便于后续分析)
    proteins.fasta                # 输入蛋白质序列

# 结果格式示例(mapper格式):
# gene001    K00001    # gene001被分配到K00001(酒精脱氢酶)
# gene002    K00002    # gene002被分配到K00002

1.3 使用eggNOG-mapper注释KEGG

# === eggNOG-mapper同时提供GO和KEGG注释 ===
emapper.py \
    -i proteins.fasta \          # 输入蛋白质
    --data_dir eggnog_db/ \      # 数据库
    --output eggnog_kegg \       # 输出前缀
    --cpu 16 \
    -m diamond

# 从结果中提取KEGG注释
# eggnog_kegg.emapper.annotations 文件中包含KEGG_ko和KEGG_Pathway列
awk -F'\t' 'NR>4 && $12!="-" {print $1, $12}' eggnog_kegg.emapper.annotations \
    > gene2ko.txt    # 提取基因到KO的映射

二、KEGG通路富集分析

2.1 R语言clusterProfiler

# === 模式生物KEGG富集 ===
library(clusterProfiler)

# 准备基因列表(需要ENTREZID)
gene_list <- c("7157", "675", "672", "5925", "4609")   # 示例基因

# KEGG富集分析
ekegg <- enrichKEGG(
  gene = gene_list,            # 差异基因(ENTREZID)
  organism = "hsa",             # 物种代码(人=hsa,鼠=mmu)
  keyType = "ncbi-geneid",      # ID类型
  pAdjustMethod = "BH",         # FDR校正
  pvalueCutoff = 0.05,          # p值阈值
  qvalueCutoff = 0.05           # q值阈值
)

# 查看结果
head(as.data.frame(ekegg))

# 可视化
dotplot(ekegg, showCategory=15)       # 点图
barplot(ekegg, showCategory=15)       # 柱状图
cnetplot(ekegg, showCategory=5)       # 网络图

2.2 KEGG GSEA

# === KEGG GSEA分析 ===
# 准备排序的基因列表
geneList <- sort(gene_rank$logFC, decreasing=TRUE)   # 按logFC排序
names(geneList) <- gene_rank$ENTREZID                  # 基因ID

# GSEA
gsea_kegg <- gseKEGG(
  geneList = geneList,           # 排序的基因列表
  organism = "hsa",               # 物种
  pAdjustMethod = "BH",           # FDR校正
  pvalueCutoff = 0.05             # 阈值
)

# 可视化
gseaplot2(gsea_kegg, geneSetID=1:3)   # GSEA曲线
ridgeplot(gsea_kegg)                    # 山脊图

2.3 非模式生物KEGG富集

# === 非模式生物:自定义KEGG富集 ===
# 第1步:准备KO到基因的映射(从KofamScan/eggNOG结果)
ko2gene <- read.table("gene2ko.txt",
                       col.names=c("gene", "KO"))
term2gene <- ko2gene[, c("KO", "gene")]    # KO在前,gene在后

# 第2步:准备KO到通路的映射
# 从KEGG API获取
library(KEGGREST)
pathways <- keggLink("pathway", "ko")       # 获取KO-pathway映射
ko2path <- data.frame(
  KO = gsub("ko:", "", names(pathways)),     # KO编号
  pathway = gsub("path:", "", pathways)       # 通路编号
)

# 第3步:构建pathway到gene的映射
path2gene <- merge(ko2path, ko2gene, by="KO")[, c("pathway", "gene")]

# 第4步:富集分析
ekegg_custom <- enricher(
  gene = diff_genes,              # 差异基因
  TERM2GENE = path2gene,          # 通路-基因映射
  pvalueCutoff = 0.05
)

dotplot(ekegg_custom, showCategory=20)

三、KEGG通路可视化

3.1 pathview绘制通路图

# === pathview:将差异基因标记到KEGG通路图上 ===
library(pathview)

# 准备数据:基因名 + logFC值
gene_data <- gene_rank$logFC                 # logFC值
names(gene_data) <- gene_rank$ENTREZID       # 基因ID

# 绘制特定通路图
pathview(
  gene.data = gene_data,          # 基因表达数据
  pathway.id = "hsa04110",         # 通路ID(细胞周期)
  species = "hsa",                 # 物种
  gene.idtype = "entrez",          # ID类型
  limit = list(gene=2),            # 颜色范围限制
  bins = list(gene=20),            # 颜色分档数
  out.suffix = "cell_cycle"        # 输出文件后缀
)
# 输出: hsa04110.cell_cycle.png(通路图上基因被着色标记)

3.2 ggkegg现代可视化

# === ggkegg:基于ggplot2的KEGG通路可视化 ===
# install.packages("ggkegg") 或 BiocManager::install("ggkegg")
library(ggkegg)

# 获取通路信息
pathway <- pathway("hsa04110")    # 获取细胞周期通路

# 可视化
ggraph(pathway) +                  # 用ggraph绘图
  geom_edge_link() +               # 边
  geom_node_rect() +               # 节点(矩形)
  theme_void()                      # 无背景

四、KEGG数据库实用操作

# === 用KEGGREST包查询KEGG数据库 ===
library(KEGGREST)

# 搜索通路
keggFind("pathway", "cancer")              # 搜索含"cancer"的通路
keggFind("pathway", "microbiome")          # 搜索微生物组相关通路

# 获取通路信息
keggGet("hsa04110")                         # 获取细胞周期通路详情

# 获取物种代码
keggList("organism")                        # 列出所有物种代码

# 获取KO信息
keggGet("K00001")                           # 查看K00001的详情
# === KEGG API命令行查询 ===
# 列出人类所有通路
curl "https://rest.kegg.jp/list/pathway/hsa"

# 获取通路中的基因
curl "https://rest.kegg.jp/link/hsa/hsa04110"

# 获取KO的定义
curl "https://rest.kegg.jp/get/ko:K00001"

# 下载通路图
curl "https://rest.kegg.jp/get/hsa04110/image" -o hsa04110.png

五、面试高频考点

Q1: KEGG和GO的区别?

GOKEGG
内容基因功能的标准化描述代谢/信号通路图
结构DAG(有向无环图)通路图(带反应关系)
侧重功能分类通路和反应网络
适用所有基因有KO注释的基因
白话给基因贴标签画基因参与的"流水线"

Q2: KO编号有什么用?

  • KO是连接基因和通路的桥梁
  • 一个KO代表一个功能等价的基因组(跨物种保守)
  • 基因→KO→通路,是KEGG注释的核心链路
  • 在宏基因组中,KO可以跨物种比较功能

Q3: 宏基因组中怎么做KEGG分析?

  1. 用HUMAnN3直接从reads获取通路丰度
  2. 或用eggNOG-mapper/KofamScan注释预测基因的KO
  3. 统计各通路的基因丰度
  4. 用LEfSe或MaAsLin2比较组间差异通路

常见报错与解决

报错原因解决方案
KEGG API timeout网络问题重试或使用本地数据库
No gene mappedID类型不对bitr_kegg()转换ID
organism not found物种代码错误keggList("organism")
pathview下载失败KEGG服务器限流Sys.sleep(2)延迟
KEGG收费了学术版仍可免费使用用学术网络或KofamScan本地

速查表

# === KEGG分析速查 ===
library(clusterProfiler)

# ORA富集
ekegg <- enrichKEGG(gene=gene_list, organism="hsa")
dotplot(ekegg)

# GSEA
gsea_kegg <- gseKEGG(geneList=sorted_genes, organism="hsa")
gseaplot2(gsea_kegg, geneSetID=1:3)

# 通路图
library(pathview)
pathview(gene.data=gene_data, pathway.id="hsa04110", species="hsa")

# 非模式生物
# KofamScan注释 → gene2ko → enricher()自定义富集

# 常用物种代码: hsa(人) mmu(鼠) ath(拟南芥) dme(果蝇) sce(酵母) eco(大肠杆菌)