Análise de similaridade semântica usando Gene Ontology (GO) - lmigueel/Bioinformatica GitHub Wiki

1. Sobre

A similaridade funcional dos produtos gênicos pode ser estimada por vocabulários biológicos controlados, como Gene Ontology (GO), Disease Ontology (DO) e Medical Subject Headings (MeSH).

Quatro métodos, incluindo Resnik (Philip 1999), Jiang (Jiang e Conrath 1997), Lin (Lin 1998) e Schlicker (Schlicker et al. 2006) foram apresentados para determinar a similaridade semântica de dois termos GO com base nas estatísticas de anotação de seus termos ancestrais comuns. Wang (Wang et al. 2007) propôs um método para medir a similaridade baseado na estrutura de grafos do GO. Cada um desses métodos tem suas próprias vantagens e fraquezas e pode ser aplicado a outras ontologias que têm estrutura semelhante (ou seja, gráfico acíclico direcionado).

2. Dados semânticos

Para medir a similaridade semântica, precisamos preparar anotações GO, incluindo estrutura GO (ou seja, relações de termos GO) e mapeamento gene para GO. Para métodos baseados em IC (information content), as informações do termo GO são específicas da espécie. Precisamos calcular o IC para todos os termos GO de uma espécie antes de medir a similaridade semântica.

O pacote GOSemSim fornece a função godata() para preparar dados semânticos para dar suporte à medição de GO e semelhança de genes. Ele usou internamente o pacote GO.db para obter a estrutura GO e o OrgDb para mapeamento de gene para GO. Vamos carregar o do Homo sapiens como exemplo,

library(GOSemSim)
hsGO <- godata('org.Hs.eg.db', ont="MF")

O usuário pode definir computeIC = FALSE se quiser apenas usar o método de Wang.

3. Organismos suportados

O GOSemSim oferece suporte a todos os organismos que possuem um objeto OrgDb disponível.

Bioconductor já forneceu OrgDb para cerca de 20 espécies.

Podemos consultar o OrgDb online por meio do pacote AnnotationHub. Por exemplo:

library(AnnotationHub)
hub <- AnnotationHub()
q <- query(hub, "Cricetulus")
id <- q$ah_id[length(q)]
Cgriseus <- hub[id](/lmigueel/Bioinformatica/wiki/id)

Se um organismo não é suportado pelo AnnotationHub, o usuário pode usar o pacote AnnotationForge para construir o OrgDb manualmente.

4. Medição de similaridade semântica GO

A função goSim() calcula a similaridade semântica entre dois termos GO, enquanto a função mgoSim() calcula a similaridade semântica entre dois conjuntos de termos GO.

goSim("GO:0004022", "GO:0005515", semData=hsGO, measure="Jiang")
## [1] 0.16
go1 = c("GO:0004022","GO:0004024","GO:0004174")
go2 = c("GO:0009055","GO:0005515")
mgoSim(go1, go2, semData=hsGO, measure="Wang", combine=NULL)
##            GO:0009055 GO:0005515
## GO:0004022      0.368      0.116
## GO:0004024      0.335      0.107
## GO:0004174      0.663      0.119

mgoSim(go1, go2, semData=hsGO, measure="Wang", combine="BMA")
## [1] 0.43

5. Medição de similaridade semântica de genes

Com base na semelhança semântica entre os termos GO, o GOSemSim também pode calcular a semelhança semântica entre conjuntos de termos GO, produtos gênicos e clusters de genes.

Suponha que temos o gene g1 anotado por conjuntos de termos GO igual a GO1 = {go11, go12 ⋯ go1m}, e g2 anotado por GO2 = {go21, go22 ⋯ go2n}, GOSemSim implementou quatro métodos de combinação, incluindo max, avg, rcmax e BMA, , para agregar pontuações de similaridade semântica de vários termos GO.

GOSemSim tem a função geneSim() para calcular a similaridade semântica entre dois produtos gênicos, e mgeneSim() para calcular a similaridade semântica entre vários produtos gênicos. Bora ver.

GOSemSim::geneSim("241", "251", semData = hsGO, measure = "Wang", combine = "BMA")

## $ geneSim
## [1] 0.149
##
## $ GO1
## [1] "GO: 0004364" "GO: 0004464" "GO: 0004602" "GO: 0005515" "GO: 0047485"
## [6] "GO: 0050544"
##
## $ GO2
## [1] "GO: 0004035"

mgeneSim(genes = c("835", "5261", "241", "994"),
         semData = hsGO, measure = "Wang", verbose = FALSE)

## 835 5261 241 994
## 835 1.000 0.478 0.451 0.578
## 5261 0.478 1.000 0.433 0.499
## 241 0.451 0.433 1.000 0.452
## 994 0.578 0.499 0.452 1.000

6. Dica de leitura

Saiu um novo método, há uns 4 anos, sobre o uso da similaridade semântica de GO, que pode ser usada para comparar as diferenças nos enriquecimento de clusters. Acesse o GOGO AQUI.