Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
Le blog des Bactéries et de l'Evolution

Combien de mutants de transposition pour recouvrir tout le génome d'une bactérie? Simulation!

3 Juillet 2007 , Rédigé par Benjamin Publié dans #Microbiologie

Aujourd'hui, un petit billet de méthode pour microbiologiste qui me semblent nombreux ici, mais qui ne sera d'aucun secours pour les familiers des probabilités.

Il arrive très souvent qu'en Biologie  Moléculaire on ait recours à la mutagénèse aléatoire pour identifier des gènes potentiellement impliqués dans  le phénotype auquel on s'intéresse. Elle consiste en général à introduire un transposon dans une bactérie via la conjugaison d'un plasmide; le transposon "saute" alors du plasmide dans le génome et atterrit dans un gène qu'il inactive. Le transposon contient également un gène de résistance à un antibiotique, ce qui permet de sélectionner les bactéries chez lesquelles la transposition a bien eu lieu. On obtient ainsi des milliers de bactéries ayant reçu un transposon, inséré de manière aléatoire dans le génome de chaque clone; on appelle cette collection une banque. Tous ces clones sont ensuite étalés sur des boîtes de culture, ou chacun fondera une colonie bactérienne. L'étape du crible (ou screening) de ces clones est bien sûr cruciale: dans l'idéal, le phénotype recherché est lié à un caractère particulier de la colonie sur boîte, aspect, couleur, croissance sur milieu sélectif, etc. Un exemple classique est le milieu gélosé additionné de X-gal qui révèle l'activité de la beta-galactosidase, encodée par un gène de l'opéron lactose. Les colonies possédant une beta-galactosidase fonctionnelle prennent une couleur blueue caractéristique, ce qui permet de cribler les mutants atteints dans l'opéron lactose ou dans ses régulateurs (raffinement: mettez le gène de la beta-galactosidase derrière un promoteur que vous étudiez et criblez ainsi les gènes qui le régulent). Enfin, grâce à des amorces de PCR dont la séquence est en partie aléatoire, il est possible de savoir où le transposon est inséré et donc de connaître le gène inactivé.

La mutagénèse aléatoire est fréquemment utilisée chez Pseudomonas, bactérie intensivement étudiée mais pour laquelle les outils de génétique sont assez peu précis (il y est difficile de faire un mutant où l'on veut, de même que pour les Spirochètes et la grande majorité des bactéries), ou lorsque l'on a aucune idée a priori du gène recherché. La puissance du crible dépend évidemment de la bonne couverture du génome, donc du nombre de clones testés. En effet, si l'on suppose la transposition aléatoire (ce qui est faux mais raisonnable), plus on a de transpositions indépendantes, moins de gènes nous echapperont dans la banque. Oui, mais combien? Dans mon jeune temps, j'ai souvent entendu 10 000, car ce nombre recouvre plusieurs fois le génome d'Escherichia coli (4290 gènes selon les recensements). Je vous propose de vous en convaincre (ou pas) avec une simulation sur ce bon vieux R.

Admettons que le génome d’Escherichia coli soit composé de 4290 gènes pouvant être inactivés par transposition. Deux transpositions peuvent être distinguées uniquement si elles surviennent dans deux gènes différents, ou, si vous préférez, chaque gène n'est qu'une case indivisible qui peut recevoir un transposon.

N=matrix(data=c(0, 0, 0, 4290, 0, 0, 10000, 0, 0, 15000,0, 0, 20000, 0, 0, 25000, 0, 0, 30000, 0, 0, 40000, 0, 0, 50000, 0, 0), ncol=9, nrow=3)
j=1

for (j in 1 :ncol(N))
 {n=N[1,j]
 f<-length(levels(as.factor((trunc(runif(n, min=1, max=4291))))))
 N[2,j]=f/4290
 N[3,j]=4290-f}
plot(N[1,], N[2,], type= "b", xlab= "Nombre de mutants ", ylab= "Fréquence de gènes mutés ")
plot(N[1,], (1-N[2,])*4290, type= "o", col="red", xlab= "Nombre de mutants ", ylab= "Nombre de gènes ratés")
N


Ce petit programme réalise une mutagénèse virtuelle de 0, 4290, 10000, 15000, 20000, 25000, 30000, 40000 et 50000 clones. Le nombre de clones testés, ou encore de transpositions indépendantes, est attribué temporairement à la variable n. Alors, la fonction trunc(runif(n, min=1, max=4291)) donne n nombres entiers pris au hasard entre 1 et 4290, les numéros des gènes touchés par les n transpositions. Le reste de la ligne ne sert qu’à compter le nombre de gènes ayant été touchés au moins une fois, nombre stocké dans la variable f. A partir de ce résultat, la fréquence de mutation d’un gène et le nombre de gènes ratés sont stockés dans le tableau N, puis un nouveau calcul est réalisé pour un nouveau nombre de clones, etc. A la fin de la simulation, des graphes sont tracés (plot…) et les résultats affichés par la ligne N. Je résume ci -dessous les résultats de 6 simulations indépendantes, à l'ancienne car le générateur de tableaux d'over-blog est pour le moins rétif:

Nombre de clones:
        0  4290  10000  15000  20000  25000  30000  40000  50000
Nombre de gènes ratés:
1    4290  1556    402    127     33     14      2      0      0
2    4290  1542    420    143     35     14      5      1      0
3    4290  1590    401    132     35     19      5      0      0
4    4290  1630    417    122     32      9      2      0      0
5    4290  1572    412    150     38      6      2      0      0
6    4290  1546    418    123     40     13      3      0      0

On remarque une certaine variance d’une “mutagénèse” à l’autre, spécialement dans les petits nombres de gènes ratés (de 6 à 14 pour 25 000 clones par exemple). On peut s’en affranchir en modifiant un peu le programme pour qu’il réalise une moyenne de 100 mutagénèses. Les résultats sont représentés dans les figures  A et B (echelle logarithmique).

N=matrix(data=c(0, 0, 0, 4290, 0, 0, 10000, 0, 0, 15000,0, 0, 20000, 0, 0, 25000, 0, 0, 30000, 0, 0, 40000, 0, 0, 50000, 0, 0), ncol=9, nrow=3)
j=1
i=1

for (j in 1 :ncol(N))
 {n=N[1,j]
 m=0
 for (i in 1 : 100)
  {f<-length(levels(as.factor((trunc(runif(n, min=1, max=4291))))))
  m=c(m, f/4290)}
 N[2,j]=mean(m[2:101])
 N[3,j]=sd(m[2:101])}
plot(N[1,], N[2,], type= "b", xlab= "Nombre de mutants ", ylab= "Fréquence de gènes mutés ")
plot(N[1,], (1-N[2,])*4290, type= "o", col="red", xlab= "Nombre de mutants ", ylab= "Nombre de gènes ratés")
(1-N[2,])*4290
N

mutagenese-copie-1.jpg
Il ressort donc qu'avec 10 000 clones, on raterait 400 gènes chez E. coli. Pour n'en rater aucun de manière quasi-certaine, il faudrait étaler 40 000 clones, ce qui commence à faire des boîtes, sans être inhabituel au laboratoire. Il est vrai que je n'ai pas considéré les gènes essentiels, que l'on ne peut retrouver dans la banque, ni la structure en opérons, qui peut permettre à un seul transposon d'inactivé plusieurs gènes. De même, la probabilité de transposition est uniforme pour tous les gènes, ce qui ne peut être le cas; il suffit de prendre en compte leurs différences de taille! Bref, ce petit modèle fait beaucoup d'approximations que vous pourrez vous amuser à corriger une par une.

J'en conviens, cette simulation n'est pas foudroyante, et ne nécessite qu'un peu de probabilités pour être généralisée à toutes les tailles de génomes (cf prochain billet) ; néanmoins, l'expérience m'a montré que ces calculs n'étaient pas courant dans nos chers labos, bien qu'ils rendent quelques services. De plus, les réserves exprimées plus haut peuvent être prises en compte par une approche de type simulation plutôt que par des lois de probabilités. Alors, si jamais ces quelques lignes de R ou leur résultat peuvent vous être utiles...

Partager cet article

Repost 0

Commenter cet article

Enro 04/07/2007 20:46

Quand tu écris que ce n'est pas inhabituel d'avoir 40 000 clones au laboratoire, je me demande : on peut voir une photo pour une idée de ce que ça représente en volume ?

zmb 03/07/2007 22:05

petit bémol: pour réaliser des fusions transcriptionelles, il faut 6 fois pus de clones que n'en donne ce calcul...Pseudomonas? mais ça pue ça! malheureux ;-)plus sérieusement: est-ce qu'il ya des gènes redondants chez Pseudomonas?pour les gènes essentiels, n'est-il pas possible d'imaginer isoler des insertions conférant un phénotype thermosensible?

Benjamin 03/07/2007 20:32

Ce type de courbe va te rappeler beaucoup de choses, c'est une loi géométrique ^^. je suis d'accord, 10 000 clones couvrent déjà assez bien un génome, mais savoir-faire ou pas, les personnes qui utilisent ce nombre sont persuadées de faire un crible exhaustif (on ne saurait leur en vouloir car ce calcul ne se fait pas de tête).Cependant, à trop vouloir optimiser, on s'aperçois que le meilleur rapport nombre de gènes touchés / nombre de clones, c'est quand on crible un seul clone... Le vrai problème en microbio, ce n'est pas le coût de mettre deux fois plus de boîtes ou la main d'oeuvre que représente un thésard, c'est l'assurance que le crible est aussi exhaustif que possible pour fournir du travail au labo pour les 5 prochaines années; dans cette perspective, 10000 c'est prendre un petit risque.

Enro 03/07/2007 20:09

Le chiffre de 10 000 n'est pas parfait, il ne recouvre certainement pas plusieurs fois le génome d'Escherichia coli contrairement à ce qu'on a pu t'expliquer mais à bien regarder le graphique de gauche, c'est quand même celui qui offre le meilleur rapport coût-bénéfice. Alors, qu'il ait été obtenu empiriquement ou par ce genre de calcul, on ne peut que saluer le savoir-faire de générations de généticiens... ;-)A part ça, ce type de courbe me rappelle les distributions de type 80/20, courantes en économie (loi de Pareto) comme en bibliométrie. Car de la même façon, il te coûtera autant de récupérer les 80% premiers articles sur le sujet qui t'intéresse que 10%, puis 5% etc.