Accessibility Tools

- Le blog participatif de bioinformatique francophone depuis 2012 -

Transformer une carte de contact chromosomique en une structure 3D

Après vous avoir mon­tré tout un tas de choses sur com­ment visua­li­ser et extraire une carte, je vais vous mon­trer aujourd'hui com­ment une carte de contact chro­mo­so­mique peut être obser­vée sous la forme d'une struc­ture 3D à par­tir de VMD. Pour cela nous allons par­tir de la méthode déve­lop­pée dans mon labo­ra­toire : Shrec3D.

Cet article étant rela­ti­ve­ment tech­nique, il se repose sur de nom­breux concepts déjà expli­qués dans d'autres articles du blog que je vous recom­mande for­te­ment de lire : com­prendre ce qu'on visua­lise, com­ment on traite les don­nées en amont. On pré­sen­te­ra aujourd'hui un tuto­riel détaillant la métho­do­lo­gie de réa­li­sa­tion d'un type de visua­li­sa­tion. Un autre article vien­dra ensuite prendre du recul et com­pa­rer ce type de résul­tat à d'autres méthodes.

De nom­breux exemples de code seront glis­sés un peu par­tout dans l'article. Ces mor­ceaux de code sont écrits en MATLAB mais res­tent facile à lire pour toutes per­sonnes connais­sant Python ou équi­valent.

Explication (simplifiée) de l'algorithme

Transformation de la carte de contact en carte de distance

Pour cette par­tie, je vais direc­te­ment par­tir d'un mor­ceau de code de Shrec3D, dont l'implémentation la plus récente se trouve sur le dépôt github épo­nyme. J'utiliserai le chro­mo­some 19 entier de la dro­so­phile, sur les don­nées de cel­lules embryon­naires issues de bonev à une réso­lu­tion de 10kb. Une fois cette carte de contact char­gée dans MATLAB la trans­for­ma­tion peut com­men­cer. À cette étape, nos don­nées res­semblent à ça :

Chro­mo­some 19, en log10. Carte de contact.

Ce que nous obser­vons actuel­le­ment, c'est une carte de contact (rap­pel : chaque point lumi­neux dans l'image pré­cé­dente repré­sente la fré­quence où deux régions ont été retrou­vées en proxi­mi­té spatiale/​contact). Notre but c'est d'obtenir une repré­sen­ta­tion en 3D de notre chro­mo­some, il nous faut donc la dis­tance entre chaque région de notre carte. La pre­mière étape va donc être de réa­li­ser une trans­for­ma­tion de notre matrice de contact en matrice de dis­tance. L'opération mathé­ma­tique pour effec­tuer cette opé­ra­tion est de prendre l'inverse de chaque élé­ment éle­vé à une puis­sance arbi­traire alpha.

Matrice de dis­tance.

À quoi sert l'alpha mit dans le code ?

Ce fac­teur est là pour modu­ler la pro­por­tion de contacts ini­tiale uti­li­sés pour réa­li­ser la trans­for­ma­tion. Cette valeur est géné­ra­le­ment com­prise entre 0,1 et 1. Plus alpha est grand, moins de valeurs seront uti­li­sées (ne lais­sant que des infor­ma­tions de courtes proxi­mi­tés entre chaque région). Je recom­mande de mettre un alpha autour de 0,2. L'impact du alpha sur la struc­ture 3D est trou­vable ici.

Quand on regarde les deux images pré­cé­dentes, on remarque tout de suite un pro­blème. La matrice de dis­tance est très… incom­plète. La carte ini­tiale conte­nait beau­coup de zéros (que je colo­rie en jaune sur l image sui­vante), ce sont des points dont la valeur après trans­for­ma­tion en matrice de dis­tance est "inf" (1/0^0.1 ça donne rien!).  Pour tous ces points man­quants, on va devoir infé­rer ce qui se passe. Pour cela on va faire de l'impu­ta­tion en uti­li­sant un algo­rithme du plus court che­min entre tous les points. L'idée der­rière est assez simple, ima­gi­nez une carte de la France avec seule­ment la moi­tié des dis­tances entre les villes des­sus. Ici, on va sim­ple­ment com­plé­ter l'information sur la carte en infé­rant les dis­tances qui manquent à par­tir de celles qu'on a.

Toutes les régions vides (conte­nant des zéros) sont ici en jaune et sont la rai­son pour laquelle on fait de l'imputation !
Matrice de dis­tance après algo­rithme du plus court che­min.

Transformation de la carte de distance en coordonnée 3D

Main­te­nant, on a la dis­tance entre tous les points de notre carte. Le pro­blème ici c'est le nombre de dimen­sion de cette matrice qui est, basi­que­ment, son nombre de ligne/​colonne. Pour avoir une struc­ture 3D, on va donc devoir effec­tuer une réduc­tion de dimen­sion de la carte à l'aide de la fonc­tion mdscale.

À cette étape, le plus dur est fait ! Nous avons en effet trans­for­mé notre carte de contact en matrice de dis­tance, puis en un sys­tème 3D ou XYZ nous don­nant la posi­tion rela­tive de chaque point dans un espace.

La struc­ture 3D du chro­mo­some 19 !

Le paramètre sur lesquels il est possible de jouer : le choix du critère de réduction de dimension.

Ce que fait cette fonc­tion, c'est cher­cher à réduire le nombre de dimen­sions dans la matrice de dis­tance au nombre indi­qué, ici 3. Pour cela, cette fonc­tion va cher­cher à mini­mi­ser l'erreur entre les vec­teurs à 3 dimen­sions qu'elle aura trou­vé et ceux à N dimen­sions don­nés en entrée. Le cri­tère par défaut est 'strain' et donne des résul­tats convain­cants. 'Sam­mon' aura ten­dance à mini­mi­ser les écarts rela­tifs entre dis­tances cal­cu­lées dans les espaces ND et 3D. Donc dans le doute, si vous ne savez pas ce que vous mani­pu­lez avec cette fonc­tion, uti­li­sez le cri­tère 'strain'.

Préparer à la visualisation :

Pour regar­der le résul­tat voi­ci deux option : res­tez en MATLAB comme vue à l'étape pré­cé­dente ou allez dans VMD pour plus de pra­tique. Voyons com­ment faire pour sau­ve­gar­der le résul­tat en for­mat pdb pour aller dans VMD :

Et là.. TADAAAA, on peut regar­der ! Quel est l'intérêt ? Cette trans­for­ma­tion est une bonne méthode de visua­li­sa­tion des don­nées pour com­prendre ce qui se passe, et com­pa­rer deux cartes de contact entre elles. Avoir un autre angle sur ces don­nées, c'est tou­jours utile.

Le chro­mo­some 19 vu sous VMD !

Dans cet article, j'ai beau­coup par­lé de maths com­plexes sans les évo­quer, en les mon­trant sim­ple­ment comme des outils. Si vous sou­hai­tez com­prendre un peu plus le fond der­rière, je ne peux que vous recom­man­der de lire les articles asso­ciés évo­qués plus haut (sur­tout les maté­riels sup­plé­men­taires en fait). Si l'article et le sujet vous inté­ressent, n'hésitez pas à me sol­li­ci­ter en com­men­taire, je me ferai une joie de par­ta­ger d'autres articles sur ce thème !

 

Mer­ci aux relec­teurs et admin de la semaine : Yoann M., Guillaume Devailly, Julien Moz­zi­co­nac­ci

 

Vous avez aimé ? Dites-le nous !

Moyenne : 0 /​ 5. Nb de votes : 0

Pas encore de vote pour cet article.

Partagez cet article




Commentaires

Laisser un commentaire

Pour insérer du code dans vos commentaires, utilisez les balises <code> et <\code>.