M2BBS Integration de Donnes Heterogenes - Projets
From silico.biotoul.fr
m (→Projets 2015-16) |
m (→Projets 2015-16) |
||
Line 8: | Line 8: | ||
Le projet est à réaliser par groupe de 4. Le rapport au format électronique est à rendre avant les vacances de fin d'année. | 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 <math>\chi^2</math> 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 : | ||
+ | {| border='1' cellspacing='0' cellpadding='10' | ||
+ | |- | ||
+ | | || T || G \ T || <math>\Sigma</math> | ||
+ | |- | ||
+ | | Q || c || q - c || q | ||
+ | |- | ||
+ | | G \ Q || t-c || g - c || g - q | ||
+ | |- | ||
+ | | <math>\Sigma</math> || t || g - t || g | ||
+ | |} | ||
= Projets 2014-15 = | = Projets 2014-15 = |
Revision as of 10:00, 2 October 2015
Contents |
Projets 2015-16
Le projet consiste à :
- ajouter des fonctionnalités au script Search_enriched_sets.py vu en TP
- sélectionner un organisme pour ensuite constituer des banques d'ensembles de référence (GO, mots-clés, ...)
- développer une méthode pour calculer le contenu en information associé à une annotation
- 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 |
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 :
- 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)
- 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.
- choix des méthodes pour l'obtention de matrices de dissimilarité
- mise en oeuvre et évaluation sur un jeu de données tests
- mise en commun des matrices pour la fusion des résultats
- comparaison des performances avec les matrices fournies (E. coli K12)
- 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
- 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
- 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.