silico.biotoul.fr
 

M2BBS Integration de Donnes Heterogenes - Projets

From silico.biotoul.fr

Revision as of 14:11, 2 October 2015 by Barriot (Talk | contribs)
Jump to: navigation, search

Contents

Projets 2015-16

Le projet consiste à :

  1. ajouter des fonctionnalités au script Search_enriched_sets.py vu en TP
  2. sélectionner un organisme pour ensuite constituer des banques d'ensembles de référence (GO, mots-clés, ...)
  3. développer une méthode pour calculer le contenu en information associé à une annotation
  4. est-ce que, d'une manière générale, les protéines annotées avec un même mot clé sont connectées dans le graphe de STRINGdb ?

à compléter

Le projet est à réaliser par groupe de 4. Le rapport au format électronique est à rendre avant les vacances de fin d'année.

1. Ajout de fonctionnalités à Search_enriched_sets.py

Notation : On considère un ensemble requête Q (query) et un ensemble cible T (target, appartenant à un jeu de données de référence). Les deux ensembles sont inclus dans l'ensemble des gènes de l'organisme G (génome). Ils ont respectivement des cardinalités q, t, g.

Il s'agit de proposer d'autres mesures de similarités. La première est naïve (pas statistique) que l'on nommera overlap ou coverage consiste à considérer quelles fractions des 2 ensembles se correspondent (0 pour aucun élément en commun, 1 pour 2 ensembles identiques). Il s'agit donc de multiplier c/q par c/t avec c le nombre d'éléments communs aux ensembles Q et T respectivement de cardinalités q et t.

La deuxième mesure à ajouter est un χ2 d'indépendance en considérant les ensembles Q et T comme 2 variables qualitatives. Le test est donc à effectuer sur la table de contingence :

T G \ T Σ
Q c q - c q
G \ Q t-c g - c g - q
Σ t g - t g


2. Constitution d'ensembles de références

Sélectionnez tout d'abord un organisme (sur la base de vos intérêts par exemple). Il sera néanmoins plus aisé de constituer des jeux de données concernant un organisme bien étudié (homme, souris, levure, arabette, colibacille, ...) car davantage de données devraient être disponibles. Chaque groupe doit travailler sur un organisme différent.

Ensuite, générez différentes banques d'ensembles à partir de différents critères de regroupement. Il faudra notamment générer les ensembles formés par

  • les mots-clés présents sur les fiches UniProt,
  • les termes de la Gene Ontology. Il faudra inclure uniquement les termes pertinents, c'est-à-dire non redondant. Par exemple, si on obtient le même ensemble pour un terme T22 et un terme T2 moins spécifique que T22, alors seulement l'ensemble correspondant au terme T22 sera généré (le plus spécifique).
  • les voies métaboliques provenant au choix de KEGG, BioCyc,
  • les identifiants PubMed : pour chaque publication portant sur l'organisme choisi, il s'agit d'extraire l'ensemble de gènes ou protéines concernés.
  • plus une source de données de votre choix, c'est-à-dire que vous trouvez pertinente, et qui sera spécifique de l'organisme choisi.

Projets 2014-15

Le projet consiste à sélectionner une source de données pour effectuer la priorisation de gènes candidats. Les principales étapes seront donc les suivantes :

  1. sélection d'un organisme et définition d'un jeu de données pour l'évaluation des performances. Concertation entre vous afin de pouvoir réaliser le point 5 (mise en commun des données)
  2. sélection d'une source de données (expression, interaction, annotation ...). A faire également en concertation pour que chacun travaille sur une source de données différente pour le même organisme.
  3. choix des méthodes pour l'obtention de matrices de dissimilarité
  4. mise en oeuvre et évaluation sur un jeu de données tests
  5. mise en commun des matrices pour la fusion des résultats
  6. comparaison des performances avec les matrices fournies (E. coli K12)
  7. bilan et perspectives

Données fournies

  • PaerA.geo.h5: gene-gene dissimilarity matrix based on GEO expression profiles for P. aeruginosa PAO1
  • PaerA.string.h5: gene-gene dissimilarity matrix based on STRING network for P. aeruginosa PAO1
  • PaerA.ncleandb12.abc: P. aeruginosa validation sets extracted from ABCdb. The format is for each line:
  • SaurH.geo.h5: gene-gene dissimilarity matrix based on GEO expression profiles for S. aureus NCTC 8325
  • SaurH.string.h5: gene-gene dissimilarity matrix based on STRING network for s. aureau NCTC 8325
  • SaurH.ncleandb12.abc: S. aureus NCTC 8325 validation sets extracted from ABCdb. The format is for each line: set_id<tab>gene_id<tab>gene_id<tab>gene_id...

Projets 2013-14

Le projet consiste en la mise en oeuvre d'un algorithme de recherche de caractéristiques sur-représentées au sein d'un ensemble de gènes par confrontation avec d'autres ensembles de gènes (relation de voisinage). Les caractéristiques/voisinages à rechercher sont constitué(e)s d'ensembles de gènes imbriqués les uns dans les autres selon 3 structures (posets) : (i) arbre, (ii) graphe acyclique orienté ou encore (iii) treillis. Des algorithmes efficaces sont présentés dans [1], et aussi [2] pour la structure en treillis. Vous aurez donc à choisir une des méthodes pour sa mise en oeuvre. Le travail à réaliser se décompose en :

  • sélection d'une des méthodes (Projet 1, 2 ou 3 ci-desssous)
  • implémentation sous forme de script(s) Perl
  • constitution de jeux de données (et éventuellement de scripts pour convertir les données)
  • utilisation du/des script(s)
  • remise d'un rapport (conception et réalisation du script, conversion des données, constitution du jeu de test, évaluation, bilan et perspectives)


Projet 1 : Relation de voisinage représenté par un graphe acyclique orienté (DAG)

La représentation sous forme de DAG est la plus générique. Il s'agit de l'algorithme 2 présenté dans [1]. Pour ce projet, il est conseillé d'utiliser la relation de voisinage induite par les annotations de la Gene Ontology. Le site http://www.geneontology.org met à disposition l'ontologie (Downloads->Ontologies) et les associations (Downloads->Annotations).

Une recherche s'effectue comme vue pendant les enseignements (avec le script search_enriched_sets.pl) mais la représentation des ensembles et l'algorithme de recherche seront adaptés.

Pour la génération de jeu de données, il faudra donc intégrer la structure de la Gene Ontology avec des gènes associés. Pour cela, vous pourrez utiliser la librairie goperl. Cette librairie permet de charger la structure puis d'y ajouter des associations à des gènes. Une des partie de ce projet consistera donc à convertir ces informations en un ficher de format simple de la forme suivante : chaque ligne représente un noeud du graphe selon la syntaxe : node_id node_name nb_genes child_node_id?[,child_node_id]* gene_id?[,gene_id]* ROOT?

Exemple extrait de Media:EcolA.go.closure.2012.dag :

# format: dag
# version: 1.0
GO:2001001      biological_process: negative regulation of xylan catabolic process      0       GO:2000916,GO:2000922           
GO:0006285      biological_process: base-excision repair, AP site formation     2       GO:0045007,GO:0045008   MUG,MUTM        
GO:0006284      biological_process: base-excision repair        8       GO:0006285,GO:0006286,GO:0006287,GO:0006288     ALKA,MUG,MUTM,MUTY,NEI,NTH,TAG,UNG      
GO:0015777      biological_process: teichoic acid transport     0                       
ROOT    Gene Ontology   3646    GO:0003674,GO:0005575,GO:0008150                ROOT
GO:0008750      molecular_function: NAD(P)+ transhydrogenase (AB-specific) activity     2               PNTA,PNTB       

Commentaires :

  • ROOT indique la racine
  • GO:0006285 sert à annoter MUG et MUTM, c'est un descendant de GO:0006284 ; par conséquent ce dernier sert également à annoter MUG et MUTM

Remarque : Lors de la génération du fichier ci-dessus, il sera certainement judicieux d'avoir au préalable supprimé les noeuds qui n'apportent pas d'information : par exemple, un noeud situé entre GO:0006285 et GO:0006284 mais dont les gènes associés seraient les mêmes que GO:0006285 (en l'occurrence MUG et MUTM).


Pour la confrontation des ensembles, il s'agit de produire un script qui charge le fichier ci-dessus dans une représentation interne, puis parcourt cette structure pour ne comparer que les ensembles pertinents et identifier les termes significativement enrichis.



Projet 2 : Voisinage représenté par un arbre (tree)

La représentation sous forme d'arbre s'applique à des données telles que des clustering hiérarchiques (de profils d'expression de gènes par exemple) ou bien la nomenclature des enzymes et permet de définir un algorithme encore plus efficace que pour la représentation générique sous forme de DAG. Le format de fichier pour stocker cette information sera donc le format newick (exemple sur un clustering de profils d'expression des gènes Escherichia coli). Le jeu de tests pourra consister à chercher quel(s) cluster(s), s'il y en a, correspond(ent) à quel(s) pathway(s).

L'algorithme est donné en page 8 de [1] et est le suivant :

open newick_file
tok = next_token
stacks = new stack
current_stack = null
do
   if tok == ( # new node/subtree root
      push stacks, new stack
   elsif tok == gene # gene/sibling in the current subtree
      if gene in query
         triplet(nb_common_elements, nb_differing_elements, potentally_pertinent) = (1,0,true)
      else
         triplet(nb_common_elements, nb_differing_elements, potentially_pertinent) = (0,1,false)
      push top_stack, triplet
   elsif tok == ) # all siblings seen for this subtree
      # compute #common #differing
      common = max_common = differing = 0
      foreach triplet in top_stack
         common += triplet.nb_common_elements
         max_common = triplet.nb_common_elements if triplet.nb_common_elements > max_common
         differing += triplet.nb_differing_elements
      # test rule 2
      potentially_pertinent = common > max_common
      # test rule 3
      foreach triplet in top_stack
         compare triplet if triplet.potentially_pertinent and triplet.nb_differing_elements < differing
      # replace top stack by current triplet
      pop stacks # remove top_stack
      push top_stack, triplet(common, differing, potentially_pertinent)
 
   tok = next_token
until nb_common_elements == |query| or nb_common_elements+nb_differing_elements > threshold or EOF


Projet 3 : Voisinage représenté par un treillis (lattice)

Pour une relation de voisinage de type gènes voisins sur le chromosome, le treillis d'ensembles de gènes imbriqué peut être vu comme implicite et il est encore possible d'améliorer l'efficacité de la recherche. En effet, pour appliquer les règles 2 et 3 de [1] et [2], il suffit de considérer les intervalles définis par les paires de gènes de l'ensemble à caractériser.

L'algorithme est alors le suivant :

load genome info # circular or linear chromosome(s) then each gene chromosome and position
sort query genes by chromosome then by position
foreach chromosome with query genes
   for i in first to last-1 query gene on that chromosome
      for j in the next query gene after i to last query gene
          check what is more pertinent if i and i+1 are adjacent or j and j+1 are adjacent, maybe jump to next iteration
          compare query set and the set defined by interval i/i+1 .. j/j+1 (or j/j+1 .. i/i+1 if chromosome is circular)

Format de fichier pour ce type de structure : 1 chromosome par ligne : chr_id circular|linear [gene_id+]

# format: chromosomes
# version: 1.0
EcolA01 circular THRL THRA THRB THRC ...

Références

  1. Barriot, R., Sherman, D., Dutour, I., How to decide which are the most pertinent overly-represented features during gene set enrichment analysis (2007) BMC Bioinformatics, 8:332
  2. De Preter, K., Barriot, R., Speleman, F., Vandesompele, J., Moreau, Y., Positional gene enrichment analysis of gene sets for high resolution identification of overrepresented chromosomal regions (2008) Nucleic Acids Research

Calendrier

  • 11 novembre 2013 : envoi d'un mail indiquant le projet sélectionné (ou avant le 11 novembre si le choix a déjà été fait)
  • 24 novembre : envoi d'un mail avec l'état d'avancement et les éventuelles difficultés rencontrées
  • 21 décembre : envoi du rapport (format électronique type PDF + scripts et jeux de données)

Projets 2012-13

Calendrier :

  • 1 octobre : proposition de projets
  • 2 octobre : sélection d'un projet : envoyer un mail indiquant
    • le projet choisi
    • pour la confrontation ensembliste, l'hypothèse biologique testée et quelles sources de données (et sur quel organisme) vont être confrontées pour tester cette hypothèse.
  • 19 octobre : remise des projets par voie électronique sous la forme :
    • un rapport
    • les scripts réalisés

Une démo de biomart sera à prévoir pour ceux qui auront choisi le projet n°1.

Contenu du rapport : Le contenu est à adapter un fonction du projet. Dans tous les cas, il faudra

  • motiver et documenter les choix effectués
  • décrire les difficultés rencontrées, quelles solutions ont été envisagées, testées, fructueuses ou infructueuses (quoi, pourquoi, comment ?)


Projet 1 : ajout d'une source de données (BioCyc)

Récupérer les données BioCyc prétraitées (lin sur cette page en bas) et :

  • ajouter à l'instance de serveur BioMart
  • faire un script python pour récupérer, en fonction de l'espèce spécifiée, un fichier d'entrée pour sookoos pour les données BioCyc à partir des services Web du serveur biomart.
  • analyser les pathways biocyc en les confrontant avec sookoos à différents autres critères de regroupement (par exemple les données d'expression).
  • synthétiser et interpréter les résultats de sookoos.

Projet 2 : implémentation d'un module Perl pour sookoos

Implémentation du module

Le module Perl Neighborhood fourni permet actuellement de rechercher des ensembles similaires au sein d'ordres partiels sur les ensembles représentés par soit de simples ensembles (sets), soit une hiérarchie sous forme d'arbre (newick), soit une hiérarchie sous forme de graphe (dag). Il s'agit donc de développer un module Perl Neighborhood::Lattice qui permette de rechercher des ensembles similaires sur un ou des chromosomes.

L'algorithme pour rechercher les ensembles similaires est le suivant :

foreach chromosome
  for i=0..query_length-1
    left_bound = query[i] # position of gene[i] on the chromosome
    next if left_bound == query[i-1]+1 # previous iteration was more pertinent
    for j=i+1..query_length
      right_bound = query[j]
      next if right_bound +1 == query[j+1] # next iteration will be more pertinent
 
      # compute pvalue or dissimilarity
      ...
      # add to results if significant
      ...

Remarque : Attention, dans le cas de chromosome circulaire, il faut adapter la définition de pertinence et la prise en compte de l'intervalle. En effet, deux gènes de l'ensemble requête définissent un intervalle sur le chromosome et en cas de chromosome circulaire il faut prendre le plus petit des 2 intervalles possibles (Qi..Qj ou Qj..Qi).

Les autres méthodes à développer sont les suivantes :

  • load(filename): pour charger les données.
  • searchSingleSet(id1, id2, ...): recherche d'ensembles similaires.

Utilisation du module

Confronter différents critères de regroupement avec la localisation des gènes sur le(s) chromsome(s) (String, GO, ...).

Analyser et interpréter les résultats de sookoos.