Enriquecimento de vias KEGG com clusterProfiler - lmigueel/Bioinformatica GitHub Wiki
1. Sobre
O serviço KEGG FTP não está disponível gratuitamente para acadêmicos desde 2012, e há muitos pacotes de software usando dados de anotação KEGG desatualizados. O pacote clusterProfiler suporta o download da última versão online dos dados KEGG usando o site KEGG, que está disponível gratuitamente para usuários acadêmicos. O caminho e o módulo KEGG são suportados no clusterProfiler.
2. Instalação
Instalação e uso do pacote é feito no R.
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("clusterProfiler")
3. Uso geral
Nesta parte vou comentar coisas bem legais que podemos fazer com o clusterProfiler. Existem milhares de opções, mas vou destacar algumas, principalmente o enriquecimento KEGG.
3.1 Organismos suportados pelo clusterProfiler
O pacote clusterProfiler oferece suporte a todos os organismos que possuem dados de anotação KEGG disponíveis no banco de dados KEGG. O usuário deve passar a abreviatura do nome para o parâmetro organismo. A lista completa de organismos com suporte do KEGG pode ser acessada em http://www.genome.jp/kegg/catalog/org_list.html. O banco de dados de ortologia KEGG (KO) também é suportado especificando organism = "ko"
.
Quando você faz análises de metagonômica (até em metatranscriptômica) e identifica os KEGG ONTHOLOGY (KO) para seus genes, você pode usar qualquer função abaixo com a opção mencionada: organism = "ko"
.
O pacote clusterProfiler fornece a função search_kegg_organism()
para ajudar na busca de organismos suportados.
library(clusterProfiler)
search_kegg_organism('ece', by = 'kegg_code')
# kegg_code scientific_name common_name
#366 ece Escherichia coli O157:H7 EDL933 (EHEC) <NA>
Caso você busque pelo nome científico do organismo, ele pode voltar várias espécies que fazem parte da mesma família. Por exemplo em E. coli.
ecoli <- search_kegg_organism('Escherichia coli', by='scientific_name')
dim(ecoli)
## [1] 65 3
head(ecoli)
## kegg_code scientific_name PERGUNTA
## 606 eco Escherichia coli K-12 MG1655 Escherichia coli K-12 MG1655
## 607 ecj Escherichia coli K-12 W3110 Escherichia coli K-12 W3110
## 608 ecd Escherichia coli K-12 DH10B Escherichia coli K-12 DH10B
## 609 ebw Escherichia coli K-12 BW2952 Escherichia coli K-12 BW2952
## 610 ecok Escherichia coli K-12 MDS42 Escherichia coli K-12 MDS42
## 611 ece Escherichia coli O157: H7 EDL933 EHEC
3.2 Análise de enriquecimento KEGG
Para identificar as vias enriquecidas na sua lista de genes, o pacote faz uma análise de enriquecimento hipergeométrico ACESSE AQUI, e identifica quais as vias mais representadas. O comando é bem simples, basta ter o ID específico para o organismo que você desejar. O cluster profile suporta como tipo de IDS: kegg, ncbi-geneid, ncbi-proteinid ou uniprot.
O legal aqui é ter a lista de genes que deseja verificar e até alguma informação extra, como expressão diferencial. Nesse caso podemos pintar os genes das vias segundo uma escala de cor. Vou criar um dataset de genes de levedura (S. cerevisiae) com o valor em TPM de expressão. O ID utilizado é UNIPROT. Como default ele espera o ID KEGG de cada gene, que também terá uma coluna no dataset. Vamos usar a função enrichKEGG()
.
genes <- c('P32465', 'P11412','P46969','P22091','P23254','P14540',
'C7GTA0','P16861','P00924','P23250','P38858','P08417',
'P39533','P53598','P00950','P00360','Q00711','P28834',
'Q02455','P47116','P01119','P14693')
kegg_id <- c('YHR094C','YNL241C','YJL121C','YLR354C','YPR074C','YKL060C',
'YGR240C','YGR254W','YIL119C','YHR163W','YPL262W','YJL200C',
'YOR142W','YKL152C','YJL052W','YKL148C','YNL037C','YKR095W',
'YJR059W','YOR101W','YHR083W','YDH123C')
exp <- c(110,12,3,0,1.2,4,5,12,13,130,11,20,40,30,44,12,1,2,2,2,1,10)
df <- data.frame(genes = genes, kegg_id = kegg_id, expressao=exp)
kk <- enrichKEGG(gene = df$genes,
organism = 'sce',
keyType = 'uniprot',
pvalueCutoff = 0.05)
head(kk)
# ID Description GeneRatio BgRatio
#sce01200 sce01200 Carbon metabolism 13/17 112/2077
#sce01110 sce01110 Biosynthesis of secondary metabolites 14/17 348/2077
#sce00030 sce00030 Pentose phosphate pathway 6/17 28/2077
#sce01230 sce01230 Biosynthesis of amino acids 9/17 125/2077
#sce00680 sce00680 Methane metabolism 4/17 26/2077
#sce00010 sce00010 Glycolysis / Gluconeogenesis 5/17 55/2077
# pvalue p.adjust qvalue
#sce01200 3.254813e-14 7.160589e-13 4.453955e-13
#sce01110 4.583045e-09 5.041349e-08 3.135767e-08
#sce00030 3.808262e-08 2.792726e-07 1.737102e-07
#sce01230 1.260850e-07 6.934678e-07 4.313436e-07
#sce00680 4.118969e-05 1.812347e-04 1.127297e-04
#sce00010 5.263884e-05 1.930091e-04 1.200535e-04
# geneID
#sce01200 P11412/P46969/P23254/P14540/P16861/P00924/P38858/P08417/P53598/P00950/P00360/Q00711/P28834
#sce01110 P11412/P46969/P23254/P14540/P16861/P00924/P38858/P08417/P39533/P53598/P00950/P00360/Q00711/P28834
#sce00030 P11412/P46969/P23254/P14540/P16861/P38858
#sce01230 P46969/P23254/P14540/P16861/P00924/P39533/P00950/P00360/P28834
#sce00680 P14540/P16861/P00924/P00950
#sce00010 P14540/P16861/P00924/P00950/P00360
# Count
#sce01200 13
#sce01110 14
#sce00030 6
#sce01230 9
#sce00680 4
#sce00010 5
Observamos que identificamos as vias KEGG enriquecidas. É fornecido o número de genes identificados na sua lista e na via. Utilizem
de corte o valor de p.adjust <= 0.05
. Algumas das vias enriquecidas pra levedura são:
- sce01200 Carbon metabolismo
- sce01110 Biosynthesis of secondary metabolites
- sce00030 Pentose phosphate pathway
- sce00010 Glycolysis / Gluconeogenesis
3.3 Análise de enriquecimento de sub-módulos do KEGG
O Module KEGG é uma coleção de unidades de função definidas manualmente. Em algumas situações, os Módulos KEGG têm uma interpretação mais direta. São subunidades das vias principais.
mkk <- enrichMKEGG(gene = df$genes,
organism = 'sce',
keyType = 'uniprot',
pvalueCutoff = 1,
qvalueCutoff = 1)
head(mkk)
# ID
#M00001 M00001
#M00004 M00004
#M00003 M00003
#M00009 M00009
#M00002 M00002
#M00011 M00011
# Description
#M00001 Glycolysis (Embden-Meyerhof pathway), glucose => pyruvate
#M00004 Pentose phosphate pathway (Pentose phosphate cycle)
#M00003 Gluconeogenesis, oxaloacetate => fructose-6P
#M00009 Citrate cycle (TCA cycle, Krebs cycle)
#M00002 Glycolysis, core module involving three-carbon compounds
#M00011 Citrate cycle, second carbon oxidation, 2-oxoglutarate => oxaloacetate
# GeneRatio BgRatio pvalue p.adjust qvalue
#M00001 5/14 24/542 0.0001697465 0.0007272584 NA
#M00004 4/14 14/542 0.0002424195 0.0007272584 NA
#M00003 4/14 16/542 0.0004276291 0.0008552582 NA
#M00009 4/14 25/542 0.0025922727 0.0038884090 NA
#M00002 3/14 15/542 0.0052131654 0.0062557985 NA
#M00011 3/14 16/542 0.0063175200 0.0063175200 NA
# geneID Count
#M00001 P14540/P16861/P00924/P00950/P00360 5
#M00004 P11412/P46969/P23254/P38858 4
#M00003 P14540/P00924/P00950/P00360 4
#M00009 P08417/P53598/Q00711/P28834 4
#M00002 P00924/P00950/P00360 3
#M00011 P08417/P53598/Q00711 3
Nesse caso, vários sub-módulos específicos da Glicólise estão enriquecidos. Essas sub-unidades são bem legais pra pensar em vias menores.
3.4 Visualize vias KEGG enriquecidas
O pacote enrichplot
implementou vários métodos para visualizar termos enriquecidos. A maioria deles são métodos gerais que podem ser usados para GO, KEGG, MSigDb e outras anotações de conjuntos de genes. Aqui, apresentamos as funções clusterProfiler::browseKEGG() e pathview::pathview() para ajudar os usuários a explorar a via KEGG enriquecida com genes interessados.
Para visualizar o caminho KEGG, o usuário pode usar a função browseKEGG, que irá abrir o navegador da web e destacar genes enriquecidos.
Vamos ver a Pentose Fosfato:
browseKEGG(kk, 'sce00030')
Ele irá abrir a via KEGG no browser. Os retângulos (genes) em verde são os de levedura. Acesse o link aqui para vocês verem: PENTOSE FOSFATO - YEAST. Devo salientar uma coisa importante. Atualmente, o browserKEGG funciona apenas com o Kegg ID padrão (ENTREZID para humanos). Quando você usa o Kegg ID, os genes da sua lista ficam em vermelho.
3.5 Pathview
Podemos também podem usar a função pathview()
do pacote pathview (Luo e Brouwer 2013) para visualizar caminhos KEGG enriquecidos identificados pelo pacote clusterProfiler (Yu et al. 2012).
O exemplo a seguir ilustra como visualizar a via 'sce00030', que foi enriquecida em nossa análise anterior. Vamos colorir agora segundo a expressão de cada gene (por isso que disse que talvez agregue as análises).
Caso você precise converter para Kegg ID os seus genes em UNIPROT, use o mapping do próprio Uniprot. ACESSE AQUI.
#if (!requireNamespace("BiocManager", quietly = TRUE))
# install.packages("BiocManager")
#BiocManager::install("pathview")
library("pathview")
sce00030 <- pathview(gene.data = as.character(df$genes),
pathway.id = "sce00030",
species = "sce",
gene.idtype="UNIPROT",
limit = list(gene=max(abs(df$expressao)), cpd=1)
)
Ele irá salvar um arquivo sce00030.pathview.png no seu diretório atual no R. Caso queira um heatmap da sua via mais elaborado, aconselho você a extrair os genes somente deste pathway e achar o maximo da escala por ele.
# resultado da variavel kk na terceira posicao é a via sce00030.
# Eu pego e monto um dataset a partir da lista do resultado do enrichment
# Altero o nome da coluna pra ficar bonito
# Faço um left_join (PROCV do excel) que vai juntar os datasets em um unico
#install.packages("tidyverse")
library(tidyverse)
genes_ppp <- str_split(kk[3][8](/lmigueel/Bioinformatica/wiki/8), "/")
genes_ppp
df_ppp <- data.frame(ppp = genes_ppp)
colnames(df_ppp) <- c("ppp")
df_ppp
df_final_ppp <- left_join(df_ppp,df,
by=c("ppp" = "genes"))
sce00030 <- pathview(gene.data = as.character(df_final_ppp$ppp),
pathway.id = "sce00030",
species = "sce",
gene.idtype="UNIPROT",
limit = list(gene=max(abs(df_final_ppp$expressao)), cpd=1)
)
Espero que tenham gostado pessoal!
Deve ajudar bem vocês!
Bibliografia
Para mais informações, acesse o manual e capítulo do clusterProfile AQUI.