2 Modélisation de la croissance des micro-organismes
La notion de croissance bactérienne recouvre deux aspects : (1) la croissance de la cellule bactérienne elle-même (taille, poids, volume) ; (2) le phénomène de division cellulaire (croissance de la population bactérienne) auquel nous nous intéresserons exclusivement ici.
2.1 Commençons en images
2.1.1 La croissance bactérienne
- La fission binaire
Les bactéries sont des êtres vivants unicellulaires qui se reproduisent par fission binaire (ou scissiparité) : une cellule mère donne deux cellules filles. Ces deux cellules filles donnent ensuite quatre cellules petite-filles…
Pour en savoir plus…(consulté le 2021-05-01)
- La croissance bactérienne
La croissance de la population bactérienne correspond à la répétition du processus de reproduction bactérienne décrit ci-dessus.
- Mesure de la croissance bactérienne
La croissance bactérienne peut se mesurer par deux méthodes :
soit par une mesure de Densité Optique (DO) ; au laboratoire, cette mesure de turbidimétrie est la plus pratique et rapide. On choisit en général une longueur d’onde dans le visible, soit 600 nm. La densité optique de la solution croît linéairement avec le nombre de bactéries.
soit par un dénombrement cellulaire sur boîte de Pétri (voir figure ci-dessous).
D’après ce document (consulté le 2021-05-01).
Lors d’un dénombrement sur boîte de Petri, on prend en considération les boites de 30 à 300 colonies. Le calcul se fait comme suit : si pour la dilution 1/10000, on obtient 125 colonies, alors on dira que l’on a 125 x 10000= 1,25 million de bactéries par ml. On suppose dans ce cas que chaque colonie est issue d’une bactérie, mais en réalité c’est faux. On parle plutôt d’Unités Formant Colonies (UFC), chaque colonie provenant de plusieurs bactéries en chainettes ou en amas.
2.1.2 Les différentes phases de la croissance bactérienne
C’est Buchanan, en 1918, qui identifie le premier que la croissance bactérienne se décompose en plusieurs phases. Monod, en 1949, caractérisera les six phases en fonction du taux de croissance, comme le montre la figure ci-dessous (Fig. 2bis) :
La phase de latence, pendant laquelle le taux de croissance est nul ;
La phase d’accélération, pendant laquelle le taux de croissance augmente ;
La phase exponentielle, pendant laquelle le taux de croissance est constant et maximum ;
La phase de ralentissement, pendant laquelle le taux de croissance diminue ;
La phase stationnaire, pendant laquelle le taux de croissance est redevenu nul ;
La phase de déclin, pendant laquelle le taux de croissance est négatif.
Fig. 2bis : les différentes phase de la croissance bactérienne (Monod, 1949)
Dans ce cours nous nous focaliserons uniquement sur les phase 2 à 5.
2.1.3 La dynamique des populations
Images mathématiques de la Lutte pour la Vie est un film de Jean Painlevé (1937) qui évoque les lois de la croissance et de l’hérédité des populations (visionnage optionnel, durée 13 min 30).2.2 Le modèle de croissance exponentielle (Malthus, 1798)
2.2.1 Modélisation de la dynamique d’une population
L’accroissement d’une population isolée est en première approximation fonction des naissances, des morts et des processus de migration des individus de la population vers ou depuis un autre environnement. Bien que suggéré très tôt par Euler (\(\simeq1760\)), on attribue cependant à Sir Thomas Robert Malthus (1798) le modèle le plus simple proposé pour décrire l’évolution dans le temps d’une population isolée.
Les hypothèses sous-jacentes au modèle de Malthus sont les suivantes :
- Le processus de migration est négligé (système fermé) ;
- L’accroissement absolu de la population en termes d’effectif (resp. densité ou biomasse) est supposé proportionnel à l’effectif (resp. densité ou biomasse), et à la longueur de l’intervalle de temps, selon une échelle continue, pendant lequel on mesure cet accroissement ;
- Les individus de la population sont supposés isolés ou équivalents, i.e., qu’on ne prend pas en compte ni d’interaction entre individus, ni de structure d’âge, ni d’auto-régulation de la croissance ;
- La taille de la population (en termes d’effectif, de densité ou de biomasse) est correctement représentée par sa moyenne.
La traduction directe de ces hypothèses conduit à écrire : \[ \Delta N(t) = r N(t) \Delta t \]
où \(N(t)\) représente l’effectif (resp. la densité ou la biomasse) de la population au temps \(t\), \(\Delta N(t)\) l’accroissement absolu de la population, \(\Delta t\) l’intervalle de temps pendent lequel on mesure l’accroissement, et \(r\) le coefficient de proportionnalité.
On considérera que \(N(t) > 0\).
En supposant que le raisonnement reste valable pour de petites variations de \(t\) (\(\Delta t \rightarrow 0\)), il vient : \[ \frac{dN(t)}{dt} = r N(t) \]
Ainsi, le coefficient \(r = \frac{1}{N(t)}\frac{dN(t)}{dt}\) représente le taux de croissance relatif (ou intrinsèque) de la population, que l’on appelle encore taux de croissance malthusien. Ce paramètre \(r\) intègre donc à la fois les naissances et les morts qui influencent la dynamique de la population : \[ r = b - d \] avec \(b > 0\) le taux de natalité naturelle de la population et \(d > 0\) le taux de mortalité naturelle.
En première intention le modèle de Malthus fût proposé pour décrire l’évolution de la population mondiale (Fig. 3) :
Fig. 3 : Evolution de la population mondiale (exprimée en milliards d’habitants) de 1750 à nos jours (données manquantes entre 1750 et 1900).
2.2.2 Retour à la croissance bactérienne
2.2.3 Analyse du modèle de Malthus
Le modèle de Malthus est une équation différentielle ordinaire, d’ordre 1 et à variables séparables (ici \(t\) et \(N(t)\)), qui peut donc s’intégrer facilement : \[\begin{array}{l} \frac{{dN\left( t \right)}}{{dt}} = rN\left( t \right)\\ \Leftrightarrow \frac{{dN\left( t \right)}}{{N\left( t \right)}} = rdt\\ \Leftrightarrow \int {\frac{{dN\left( t \right)}}{{N\left( t \right)}}} = \int {rdt} \\ \Leftrightarrow \ln N\left( t \right) = rt + cste\\ \Leftrightarrow N\left( t \right) = C{e^{rt}} \end{array}\] Finalement \(N\left( t \right) = N_0{e^{rt}}\) avec \(N_0\) l’inocculum bactérien initial. La solution du modèle de Malthus est une fonction exponentielle, d’où son nom de modèle exponentiel. De plus :
Si \(r > 0\) (i.e., \(b > d\)), alors \(\lim\limits_{t \to + \infty } N\left( t \right) = + \infty\) ; le taux de natalité est plus élevé que le taux de mortalité, la population croît à l’infini.
Si \(r = 0\) (i.e., \(b = d\)), alors \(\forall t \, N\left( t \right) = N_0\) ; le taux de natalité est égal au taux de mortalité, la population reste stable.
Si \(r < 0\) (i.e., \(b < d\)), alors \(\lim\limits_{t \to + \infty } N\left( t \right) = 0\) ; le taux de natalité est moins élevé que le taux de mortalité, la population s’éteint.
D’après vous, quels sont les limitations de ce modèle ? Revenir sur les hypothèses de départ.
2.3 Le modèle de Verhulst (1845)
2.3.1 L’équation logistique
Même si le modèle de Malthus est encore utilisé pour décrire certains phénomènes biologiques, il n’en reste pas moins biologiquement irréaliste par le fait qu’il repose sur l’hypothèse d’une croissance sans aucune limitation ni par l’espace, ni par la ressource, ni par la densité d’individus dans l’environnement considéré. Des modèles alternatifs ont donc été proposés, introduisant en particulier la notion d’autorégulation de la population, en tenant compte des phénomènes de densité-dépendance ; on parle aussi de compétition intra-spécifique.
C’est ainsi que Pierre-François Verhulst, mathématicien belge, proposa en 1845 son fameux modèle logistique. Les hypothèses sous-jacentes à ce modèle sont les suivantes :
Le taux de natalité dépend de la taille de la population selon une relation linéaire décroissante : \(b(N) = b_0 - \beta N(t)\), avec \(b_0\) le taux de natalité naturelle et \(\beta\) un coefficient de densité-dépendance ; \(b_0,\beta>0\).
Le taux de mortalité dépend de la taille de la population selon une relation linéaire croissante : \(d(N) = d_0 + \delta N(t)\), avec \(d_0\) le taux de mortalité naturelle et \(\delta\) un coefficient de densité-dépendance ; \(d_0,\delta>0\).
Le modèle de Verhulst suppose de plus que \(b_0 > d_0\), i.e. lorsque \(N\) est petit, il y a effectivement croissance de la population.
Si on repart du modèle de Malthus, il vient : \[\begin{array}{l} \frac{{dN\left( t \right)}}{{dt}} = \left( {b\left( N(t) \right) - d\left( N(t) \right)} \right)N\left( t \right)\\ \Leftrightarrow \frac{{dN\left( t \right)}}{{dt}} = \left( {{b_0} - \beta N\left( t \right) - ({d_0} + \delta N\left( t \right)}) \right)N\left( t \right)\\ \Leftrightarrow \frac{{dN\left( t \right)}}{{dt}} = \left( {{b_0} - {d_0}} \right)N\left( t \right) - \left( {\beta + \delta } \right){N^2}\left( t \right)\\ \Leftrightarrow \frac{{dN\left( t \right)}}{{dt}} = \left( {{b_0} - {d_0}} \right)N\left( t \right)\left( {1 - \frac{{\beta + \delta }}{{{b_0} - {d_0}}}N\left( t \right)} \right)\\ \Leftrightarrow \frac{{dN\left( t \right)}}{{dt}} = {r_0}N\left( t \right)\left( {1 - \frac{{N\left( t \right)}}{K}} \right) \end{array}\] où \(r_0 = b_0 - d_0\) est le taux de croissance malthusien de la population (\(r_0 > 0\)) et \(K = \frac{b_0-d_0}{\beta+\delta}\) désigne la capacité limite de la population (\(K>0\)). Nous reviendrons plus tard sur cette notion.
Cette équation est le fondement du modèle évolutif \(r/K\), c’est-à-dire la classification des espèces en fonction de leur stratégie de reproduction : stratégie \(r\) pour les espèces qui produisent beaucoup de jeunes avec une forte mortalité juvénile (\(r\) grand, \(K\) petit); stratégie \(K\) pour les espèces qui produisent peu de jeunes avec une faible mortalité juvénile (\(r\) faible, \(K\) grand). Cette équation sera étendue au cas de deux populations en compétition un siècle plus tard par le mathématicien italien Vito Volterra.
2.3.2 Retour à la croissance bactérienne
Reprenons les expériences virtuelles de croissance bactérienne mais sur une période de temps cette fois beaucoup plus longue.
2.3.3 Analyse du modèle de Verhulst
2.3.3.1 Analyse qualitative
Pour analyser le modèle de Verhulst, il est commode de décomposer la variation dans le temps de la manière suivante : \[ \frac{dN(t)}{dt} = r_0 N(t) - r_0 \frac{N^2(t)}{K} \] On comprend ainsi que la croissance naturelle de la population, représentée par le terme \(r_0 N(t)\), est régulée négativement par le terme de compétition intra-spécifique \(-r_0 \frac{N^2(t)}{K}\) (cf. film de J. Painlevé), qui prévaut d’autant plus que \(N(t)\) est grand.
Le terme de compétition intra-spécifique (ou compétition de Verhulst) influence d’autant plus négativement la croissance naturelle de la population que le paramètre \(K\) est petit :
Si \(K \rightarrow +\infty\), alors le phénomène de densité-dépendance est négligeable ;
Si \(K \rightarrow 0\), alors le phénomène de densité-dépendance est prépondérant et contraint fortement la croissance de la population.
C’est pourquoi on appelle le paramètre \(K\) la capacité limite de la population, qui correspond en fait à une capacité limité d’accueil du milieu dans lequel évolue la population.
Du point de vue dynamique, on imagine alors ce qu’il peut se passer :
Si \(N(t)\) est petit devant \(K\), alors \(\frac{dN(t)}{dt} \simeq r_0 N(t)\). Comme \(r_0 > 0\), la population va croître de manière exponentielle ;
Lorsque \(N(t) \simeq K\) (c’est-à-dire \(N(t)\) proche de \(K\)), il peut se passer deux choses :
- Si \(N(t) < K\), alors on peut écrire : \[\begin{array}{l} \frac{{d\left( {K - N\left( t \right)} \right)}}{{dt}} = - \frac{{dN\left( t \right)}}{{dt}}\\ \Leftrightarrow \frac{{d\left( {K - N\left( t \right)} \right)}}{{dt}} = - {r_0}N\left( t \right)\left( {1 - \frac{{N\left( t \right)}}{K}} \right)\\ \Leftrightarrow \frac{{d\left( {K - N\left( t \right)} \right)}}{{dt}} = - {r_0}\frac{{N\left( t \right)}}{K}\left( {K - N\left( t \right)} \right) \end{array}\] avec \(\frac{N(t)}{K} \simeq 1\).
On retrouve ainsi un modèle de type exponentiel pour la variable \(K - N\left( t \right)\) avec un taux \(\simeq -r_0\) puisque \(N(t) \simeq K\) (i.e., \(\frac{{N\left( t \right)}}{K} \simeq 1\)). Ce taux est négatif ce qui veut dire que la limite de la variable \(K - N\left( t \right)\) lorsque \(t\) tend vers \(+\infty\) est \(0\), c’est-à-dire \(N(t) \rightarrow K\).
- Si \(N(t) > K\), alors on peut écrire : \[\begin{array}{l} \frac{{d\left( {N\left( t \right) - K} \right)}}{{dt}} = \frac{{dN\left( t \right)}}{{dt}}\\ \Leftrightarrow \frac{{d\left( {N\left( t \right) - K} \right)}}{{dt}} = {r_0}N\left( t \right)\left( {1 - \frac{{N\left( t \right)}}{K}} \right)\\ \Leftrightarrow \frac{{d\left( {N\left( t \right) - K} \right)}}{{dt}} = - {r_0}\frac{{N\left( t \right)}}{K}\left( {N\left( t \right) - K} \right) \end{array}\] avec \(\frac{N(t)}{K} \simeq 1\).
On retrouve comme précédemment un modèle de type exponentiel, mais cette fois-ci pour la variable \(N(t) - K\) dont le taux \(\simeq -r_0\) est \(<0\), ce qui conduit de nouveau à \(N(t) \rightarrow K\).
En conséquence, quelque soit la condition initiale \(N(0) > 0\), on aura toujours \(\lim\limits_{t \to + \infty } N\left( t \right) = K\). Il y a donc bien auto-régulation de la dynamique de la population, dont l’effectif (respectivement la densité ou la biomasse) ne peut pas dépasser la capacité limite \(K\).
2.3.3.2 Résolution exacte
De nouveau, le modèle de Verhulst est une équation différentielle ordinaire d’ordre 1 à variables séparables que l’on sait résoudre explicitement : \[\begin{array}{l} \frac{{dN\left( t \right)}}{{dt}} = {r_0}N\left( t \right)\left( {1 - \frac{{N\left( t \right)}}{K}} \right)\\ \Leftrightarrow \frac{{dN\left( t \right)}}{{dt}} = \frac{{{r_0}}}{K}N\left( t \right)\left( {K - N\left( t \right)} \right)\\ \Leftrightarrow \frac{{dN\left( t \right)}}{{N\left( t \right)\left( {K - N\left( t \right)} \right)}} = \frac{{{r_0}}}{K}dt\\ \Leftrightarrow \int {\frac{{dN\left( t \right)}}{{N\left( t \right)\left( {K - N\left( t \right)} \right)}}} = \int {\frac{{{r_0}}}{K}dt} \\ \Leftrightarrow \int {\frac{{dN\left( t \right)}}{{N\left( t \right)\left( {K - N\left( t \right)} \right)}}} = \frac{{{r_0}}}{K}t + cste \end{array}\] Pour continuer et intégrer le terme de gauche de cette équation, il faut d’abord faire une décomposition en éléments simples : \[\begin{array}{l} \frac{1}{{N\left( t \right)\left( {K - N\left( t \right)} \right)}} = \frac{A}{{N\left( t \right)}} + \frac{B}{{K - N\left( t \right)}}\\ \Leftrightarrow \frac{1}{{N\left( t \right)\left( {K - N\left( t \right)} \right)}} = \frac{{A\left( {K - N\left( t \right)} \right) + BN\left( t \right)}}{{N\left( t \right)\left( {K - N\left( t \right)} \right)}}\\ \Leftrightarrow \frac{1}{{N\left( t \right)\left( {K - N\left( t \right)} \right)}} = \frac{{AK + \left( {B - A} \right)N\left( t \right)}}{{N\left( t \right)\left( {K - N\left( t \right)} \right)}} \end{array}\]
ce qui implique : \[\begin{array}{l} \left\{ \begin{array}{l} AK = 1\\ B - A = 0 \end{array} \right.\\ \Leftrightarrow \left\{ \begin{array}{l} A = 1/K\\ B = A \end{array} \right. \end{array}\]
et donc : \[\frac{1}{{N\left( t \right)\left( {K - N\left( t \right)} \right)}} = \frac{1}{K}\left( {\frac{1}{{N\left( t \right)}} + \frac{1}{{K - N\left( t \right)}}} \right)\]
Ainsi : \[\begin{array}{l} \int {\frac{{dN\left( t \right)}}{{N\left( t \right)\left( {K - N\left( t \right)} \right)}}} = \frac{1}{K}\left( {\int {\frac{{dN\left( t \right)}}{{N\left( t \right)}}} + \int {\frac{{dN\left( t \right)}}{{K - N\left( t \right)}}} } \right)\\ = \frac{1}{K}\left( {\ln \left( {N\left( t \right)} \right) - \ln \left( {K - N\left( t \right)} \right)} \right)\\ = \frac{1}{K}\ln \left( {\frac{{N\left( t \right)}}{{K - N\left( t \right)}}} \right) \end{array}\]
Finalement, on obtient : \[\begin{array}{l} \frac{1}{K}\ln \left( {\frac{{N\left( t \right)}}{{K - N\left( t \right)}}} \right) = \frac{{{r_0}}}{K}t + cste\\ \Leftrightarrow \ln \left( {\frac{{N\left( t \right)}}{{K - N\left( t \right)}}} \right) = {r_0}t + cste\\ \Leftrightarrow \frac{{N\left( t \right)}}{{K - N\left( t \right)}} = C{e^{{r_0}t}}\\ \Leftrightarrow N\left( t \right) = C{e^{{r_0}t}}\left( {K - N\left( t \right)} \right)\\ \Leftrightarrow N\left( t \right)\left( {1 + C{e^{{r_0}t}}} \right) = CK{e^{{r_0}t}}\\ \Leftrightarrow N\left( t \right) = \frac{{CK{e^{{r_0}t}}}}{{1 + C{e^{{r_0}t}}}} \end{array}\]
Il reste à déterminer la constante d’intégration \(C\) à partir de la condition initiale \(N(0) = N_0\), ce qui conduit à : \[{N_0} = \frac{{CK}}{{1 + C}} \Leftrightarrow CK = {N_0}\left( {1 + C} \right) \Leftrightarrow C = \frac{{{N_0}}}{{K - {N_0}}}\]
La solution exacte du modèle de Verhulst s’écrit donc finalement : \[\begin{array}{l} N\left( t \right) = \frac{{\left( {\frac{{{N_0}}}{{K - {N_0}}}} \right)K{e^{{r_0}t}}}}{{1 + \left( {\frac{{{N_0}}}{{K - {N_0}}}} \right){e^{{r_0}t}}}}\\ \Leftrightarrow N\left( t \right) = \frac{{{N_0}K{e^{{r_0}t}}}}{{\left( {K - {N_0}} \right) + {N_0}{e^{{r_0}t}}}}\\ \Leftrightarrow N\left( t \right) = \frac{{{N_0}K}}{{\left( {K - {N_0}} \right){e^{ - {r_0}t}} + {N_0}}}\\ \Leftrightarrow N\left( t \right) = \frac{K}{{1 + \left( {\frac{K}{{{N_0}}} - 1} \right){e^{ - {r_0}t}}}} \end{array}\]
On retrouve le résultat établi précédemment, à savoir que \(\lim\limits_{t \to + \infty } N\left( t \right) = K\) puisque \(\lim\limits_{t \to + \infty } e^{-r_0 t} = 0\).
On peut par ailleurs démontrer que lorsque \(N(t)\) est petit et \(N_0 << K\), alors \(N\left( t \right) \simeq {N_0}{e^{{r_0}t}}\) (*), c’est-à-dire que lorsque \(N(t)\) est petit, la croissance est exponentielle avec un taux de croissance malthusien égale à \(r_0\).
(*) Si \(N_0 << K\), alors \(K/N_0 >> 1\) et \((K/N_0 - 1)e^{-r_0 t} \sim (K/N_0)e^{-r_0 t}\)
2.3.3.3 Résumer l’information : le portrait de phase
Nous avons démontré analytiquement à partir de la solution du modèle logistique et vérifié par les simulations que \(\lim\limits_{t \to + \infty } N\left( t \right) = K\).
Revenons à l’équation différentielle ordinaire du modèle : \[\frac{{dN\left( t \right)}}{{dt}} = {r_0}N\left( t \right)\left( {1 - \frac{{N\left( t \right)}}{K}} \right)\]
Si l’on cherche les solutions constantes de cette équation, qu’on appelle des points d’équilibre, c’est-à-dire les solutions \(N(t)\) telles que \(\frac{{dN\left( t \right)}}{{dt}} = 0\), il vient \(N_1^* = 0\) et \(N_2^* = K\).
En dehors de ces points d’équilibre, les solutions \(N(t)\) sont soient croissantes (\(\frac{{dN\left( t \right)}}{{dt}} > 0\)) soit décroissantes (\(\frac{{dN\left( t \right)}}{{dt}} < 0\)).
On peut donc résumer entièrement la dynamique du modèle logistique sur ce que l’on appelle un portrait de phase :
2.4 Introduction générale à R
via RStudio
- Ouvrir le logiciel
RStudio
.
RStudio (consulté le 2021-05-01) est un environnement de développement dédié au logiciel libre de statistiques R (consulté le 2021-05-01). RStudio
permet de voir l’ensemble des objets créés dans son espace de travail. Il simplifie l’accès à l’historique des commandes. Il facilite l’installation de nouveaux paquets (consulté le 2021-05-01) et le chargement de ceux-ci dans l’espace de travail. Il permet aussi de naviguer à travers tous les graphiques créés au cours de la session de travail et de zoomer sur chacun de ces graphiques par un simple clic. L’éditeur de programmes gère la coloration syntaxique, la complétion de commandes et même la complétion de noms de fichiers (exactement comme dans un terminal). Enfin, avec RStudio
, chacun peut avoir accès à un tableur permettant de parcourir ses données facilement (d’après framasoft (consulté le 2021-05-01)).
2.4.1 Quelques commandes de base avec R
getwd() # renvoie le chemin d'accès complet au dossier
# dans lequel vous vous trouvez
Vérifiez que c’est bien votre dossier de travail.
ls() # renvoie la liste des objets crés dans l'espace de travail
-fonction # : renvoie la documentation concernant
?nom# la fonction 'nom-fonction'
# Elle peut s'obtenir aussi avec la commande :
help("nom-fonction") # N'hésitez pas à en abuser
library() # renvoie la liste des librairies installées
# et donc disponibles.
library(nom-library) # charge la librairie spéficiée par 'nom-library'
library(help="nom-library")} # liste les fonctions disponibles
# au sein de la libraire 'nom-library'
'#' # permet d'insérer un commentaire
Voici quelques autres commandes utiles (pensez à visiter l’aide avec ?) :
# types d'objets
mode, str, is.numeric, as.numeric # dimensions d'objets
length, dim, names # fonctions graphiques de niveau 1
plot, curve # fonctions graphiques de niveau 2 curve, lines, points
2.4.2 Les objets R
== # comparaison entre les termes à droite et à gauche =, <- ou -< # affectation d'une valeur à un objet
# Par exemple
<- 7 # affecte la valeur 7 à l'objet x
x # De même : 7 -> x ou encore x = 7
Les valeurs manquantes sont représentées par ‘NA.’ L’indétermination se propage systématiquement dans les calculs.
Les vecteurs sont des objets au contenu homogène alors que les listes sont des objets au contenu hétérogène. Les dataframe sont des listes dont tous les éléments ont la même longueur (tableau).
<- 1:5 # génère une série d'entiers de 1 à 5
x <- c("a","b","c") # génère une combinaison (i.e., un vecteur)
y # des valeurs a, b et c
2] # renvoie le deuxième élément de y
y[<- rep(1:5,2) # répète 2 fois la série d'entiers de 1 à 5
s1 <- seq(from=1, to=5.5, by=0.5) # génère une série de nombres
s2 # allant de 1 à 5 avec un pas de 0.5
<- list(s1,s2) # renvoie une liste à deux éléments s1 et s2
l # On accède à un élément d'une liste par son nom à l'aide de
1]]
l[[<- data.frame(s1,s2) # renvoie un tableau à deux colonnes et 10 lignes
d
d# On accède à un élément d'un tableau à l'aide des crochets :
1, 2]
d[$s1 # ou d[,1] renvoie la première colonne du tableau d
d1,] # renvoie la première ligne du tableau d d[
2.4.3 Pour aller plus loin
2.5 Retour au modèle de Verhulst
2.5.1 Simulation d’une chronique
Considérons le cas de la bactérie à 20°C.
- Copier-coller les lignes de code ci-dessous et observez ce qui se passe.
NB : Avec RStudio
, créez un nouveau fichier de type ‘R script’ que vous enregistrerez dans votre espace de travail (‘script_nom.R’). Incrémenterez ce fichier au fur et à mesure de votre exploration des commandes R
.
<- 100
N0 <- 9000
K <- 0.85
r0 # courbe représentative d'une fonction
# x représente ici le temps
par(mar=c(4, 4, 0.2, 0.2))
curve(K/(1+(K/N0-1)*exp(-r0*x)), from=0, to=15, las=1,
main="Le modèle logistique", xlab="Temps (h)",
ylab="Taille de la population bactérienne (UFC)")
A quoi correspondent les options
from
etto
?Que fait l’option
las=1
?Utilisez l’aide de la fonction
curve
pour explorer le comportement du modèle logistique :- En gardant \(N_0\) et \(r_0\) à leur valeur par défaut, faites varier les valeurs de \(K\) et superposer les différentes courbes en leur attribuant des couleurs différentes.
Que remarquez-vous ?
- En gardant \(N_0\) et \(K\) à leur valeur par défaut, faites varier les valeurs de \(r_0\) et superposer les différentes courbes en leur attribuant des couleurs différentes.
Que remarquez-vous ?
- En gardant \(r_0\) et \(K\) à leur valeur par défaut, faites varier les valeurs de \(N_0\) (vous essaierez en particulier des valeurs \(N_0 > K\)) et superposer les différentes courbes en leur attribuant des couleurs différentes.
Que remarquez-vous ?
2.5.2 Comparaison avec les données observées
- En vous s’inspirant des instructions ci-dessous, représentez graphiquement vos données sauvegardées
(Utilisez vos fichiers “exponentiel.txt” et/ou “logistique.txt”).
<- read.table("exponentiel.txt", header=TRUE, sep="\t")
data par(mar=c(4, 4, 0.2, 0.2)) # réglage des marges
plot(data$Temps, data$Nbcol, xlim=c(0,5), ylim=c(0,max(data$N)),
pch=19, las=1)
- Peaufiner l’esthétique de votre graphique :
- Changez le type de point
- Labellisez les axes
- Mettez un titre au graphique
- Changez la couleur des points
- Ajoutez une légende
- Superposer un modèle à vos données expérimentales.
Vous choisirez le modèle exponentiel ou le modèle logistique selon les données que vous avez représentées.
Vous choisirez un jeu de paramètres qui convient, en justifiant de votre choix.
2.5.3 Portrait de phase
Comme évoqué plus haut, on peut donc résumer entièrement la dynamique du modèle logistique avec le portrait de phase, qui peut être construit avec R :
par(mar=c(0, 0, 0, 0))
plot(0,0, xlim=c(-1,1), ylim=c(-0.25,0.25), xaxt="n", yaxt="n",
xlab="", ylab="", bty="n")
text(1,0.1, labels=expression(N(t)))
arrows(-1,0,1,0)
points(c(-1,0), c(0,0), pch=19)
text(c(-1,0), c(-0.1,-0.1), labels=c("0","K"))
arrows(-0.6,0,-0.5,0, length=0.1, col="red", lwd=2)
arrows(0.6,0,0.5,0, length=0.1, col="red", lwd=2)
par(mar=c(5,4,4,2)) # retour aux valeurs par défaut
Générez la figure correspondant au code R
ci-dessus.
Revenons à la courbe représentative du modèle logistique. On remarque un changement de courbure : pour des temps petits, la courbe est convexe, pour les temps plus grands, la courbe est concave. Autrement dit, il existe un point d’inflexion que l’on peut caractériser et qui vérifie \(\frac{{{d^2}N\left( t \right)}}{{d{t^2}}} = 0\).
Posons \(\frac{{dN\left( t \right)}}{{dt}} = f\left( {N\left( t \right)} \right)\) avec \(f(N) = {r_0}N\left( t \right)\left( {1 - \frac{{N\left( t \right)}}{K}} \right)\).
Ainsi \(\frac{{{d^2}N\left( t \right)}}{{d{t^2}}} = \frac{d}{dt}\left(f\left( {N\left( t \right)} \right)\right) = \frac{{df\left( {N\left( t \right)} \right)}}{{dN}} \times \frac{{dN\left( t \right)}}{{dt}}\).
Par conséquent, le point d’inflexion n’étant pas un point d’équilibre (ce qui impose \(\frac{{dN\left( t \right)}}{{dt}} \ne 0\)), il est solution de : \[\begin{array}{l} \frac{{df\left( {N\left( t \right)} \right)}}{{dN}} = 0\\ \Leftrightarrow {r_0}\left( {1 - \frac{{2N\left( t \right)}}{K}} \right) = 0\\ \Leftrightarrow N_{\inf} = \frac{K}{2} \end{array}\]
En reprenant votre code R
précédent, symbolisez sur la courbe représentative du modèle logistique, le point d’inflexion par une droite horizontale en pointillés. Pour cela, vous utiliserez la fonction abline
.
2.6 Vers d’autres modèles
Il existe bien d’autres modèles concurrents du modèle logistique pour décrire la croissance d’une population bactérienne (voir Pavé (2012), p126-127). Nous vous proposons d’en explorer deux en particulier, un troisième est évoqué pour information. Pour les étudier, vous suivrez, pour chacun des deux premiers, les étapes suivantes :
Résolution exacte pour la condition initiale \(N(0)=N_0\) avec \(0 < N_0 < K\) ;
Simulations pour différentes valeurs de \(r_0\) et \(K\). On prendra \(N_0=100\) ;
Recherche des points d’équilibre et de leur stabilité ;
Détermination du point d’inflexion.
2.6.1 Le modèle de Gompertz
Dans l’équation proposée par Verhulst, le terme \(1-N(t)/K\) correspond au freinage logistique évoqué dans le film de Jean Painlevé. C’est en effet ce terme qui, multiplié au terme de croissance exponentiel, permet d’obtenir la stabilisation de la croissance à la limite asymptotique \(K\).
Benjamin Gompertz, en 1825, proposa un terme de freinage un peu différent pour aboutir au modèle suivant : \[\frac{{dN\left( t \right)}}{{dt}} = r_0 N\left( t \right)\ln \left( {\frac{K}{{N\left( t \right)}}} \right)\] Ce modèle repose sur l’hypothèse sous-jacente que la force de mortalité augmente de façon exponentielle avec l’âge (Pletcher, 1999).
A vous de jouer !
Résolution exacte
Simulation
Points d’équilibre et stabilité
Point d’inflexion
Qu’est-ce qui distingue le modèle de Gompertz du modèle logistique ? Argumentez votre réponse.
2.6.2 Le modèle de von Bertalanffy
En 1934, Karl Ludwig von Bertalanffy a proposé un nouveau modèle de croissance, dont il existe aujourd’hui plusieurs variantes ainsi qu’une version généralisée livrée en 1959 par F.J. Richards.
Le modèle de von Bertalanffy s’écrit de la manière suivante : \[\frac{{dN\left( t \right)}}{{dt}} = {r_0}\left( {K - N\left( t \right)} \right)\]
A vous de jouer !
Résolution exacte
Simulation
Points d’équilibre et stabilité
Point d’inflexion
Pour le modèle de von Bertalanffy, posez-vous la question de sa pertinence pour décrire des données de croissance bactérienne. Argumentez votre réponse.
2.6.3 Le modèle de Baranyi
Un modèle très utilisé en microbiologie prédictive parce qu’il permet de décrire finement la phase de latence de la croissance bactérienne est celui de József Baranyi, qui publia, avec son collaborateur Terry A. Roberts en 1993, un modèle de la forme :
\[ \frac{dN(t)}{dt} = \mu \alpha(t) f(N(t)) N(t) \]
dont il donne la solution en \(y(t) = \ln(N(t))\) (voir ci-dessous). Si complexe soit-il, ce modèle décrit très bien les différentes phases de la croissance microbienne – toujours avec une courbe sigmoïde, y compris la phase de latence grâce à la fonction \(\alpha(t)\), dont la courbe représentative est elle-même en forme de « S ».
<- 10^9
xmax <- 10^3
x0 <- 1.5
mumax <- 6
lag <- mumax*lag
h0 <- function(x, mumax, h0){
A return(x + log(exp(-mumax*x) + exp(-h0) - exp(-mumax*x-h0))/mumax)
}<- function(x, xmax, x0, mumax, lag){
Baranyi <- log(xmax)
ymax <- log(x0)
y0 return(y0 + mumax*A(x, mumax, lag) - log(1+(exp(mumax*A(x, mumax, lag))-1)/exp(ymax-y0)))
}par(mar = c(4, 4, 0.2, 0.2))
curve(Baranyi(x, xmax, x0, mumax, lag)/log(2),
from = 0, to = 22, las = 1, lwd = 2,
xlab = "", ylab = "", xaxt = "n", yaxt = "n",
xlim = c(-1, 22))
mtext("Temps", side = 1, line = 0.75)
mtext(expression(Log[2](densité)), side = 2, line = 0.5)
segments(-1, log2(x0), 0, log2(x0), lwd = 2)
L’’’équation différentielle correspondant au modèle de Baranyi et Roberts est la suivante : \[ \frac{dN(t)}{dt} = \mu \alpha(t) f(N(t)) N(t) \] La solution exprimée en \(y(t) = \ln(N(t))\) s’écrit en fait : \[ y(t) = y_0 + \mu A(t) - \ln\left(1 + \frac{e^{\mu A(t)}-1}{e^{y_max-y_0}}\right) \] où la fonction \(A(t)\) s’écrit elle-même comme suit : \[ A(t) = t + \frac{1}{\mu} \ln\left(e^{-\mu t} \left(1-e^{-h_0} \right) + e^{-h_0}\right) \] Enfin, on a \(h_0 = \mu \times lag\), où \(lag\) est le quatrième paramètre introduit par Baranyi et Roberts pour inclure la phase de latence dans la modélisation de la croissance microbienne.
2.7 Comparaison des modèles de croissance bactérienne
2.7.1 Comparaison en termes d’accroissement
Pour les trois modèles dont il a été question précédemment (Verhulst, Gompertz, von Bertalanffy), représentez sur un même graphe les courbes \(\frac{dN(t)}{dt}\) en fonction de la variable \(N(t)\).
Que remarquez-vous ?
2.7.2 Comparaison des courbes représentatives
Complétez la légende sur le graphe ci-dessous et discutez.
<- 100
N0 <- 9000
K <- 0.85
r0 par(mar=c(4, 4, 0.2, 0.2))
curve(K/(1+(K/N0-1)*exp(-r0*x)), from=0, to=15, las=1, col="black",
lwd=2, xlab="Temps (h)",
ylab="Taille de la population bactérienne (UFC)")
# x représente le temps
abline(h=K/2, lwd=2, lty=2)
curve(K*exp(log(N0/K)*exp(-r0*x)), from=0, to=15, lwd=2,
col="blue", add=TRUE)
abline(h=K/exp(1), lwd=2, lty=2, col="blue")
curve(K-(K-N0)*exp(-r0*x), from=0, to=15, lwd=2,
col="green", add=TRUE)
legend(10,2000, legend=c("....................",
"....................",
"...................."),
lty=1, col=c("black","blue","green"), bty="n",
text.col="gray", lwd=2)
2.8 Calcul du temps de doublement
Sous l’hypothèse du modèle exponentiel, le taux de croissance est constant (\(r\)). On peut alors calculer un temps de doublement de la population bactérienne, c’est-à-dire un temps \(\tau_d\) tel que \(N(t + \tau_d) = 2 N(t)\). Sachant que \(N(t) = N_0 e^{ r t}\), il vient : \[\begin{array}{l} N\left( {t + {\tau _d}} \right) = 2N\left( t \right)\\ \Leftrightarrow {N_0}{e^{r\left( {t + {\tau _d}} \right)}} = 2{N_0}{e^{rt}}\\ \Leftrightarrow {e^{r\left( {t + {\tau _d}} \right)}} = 2{e^{rt}}\\ \Leftrightarrow {e^{rt}}{e^{r{\tau _d}}} = 2{e^{rt}}\\ \Leftrightarrow {e^{r{\tau _d}}} = 2\\ \Leftrightarrow r{\tau _d} = \ln 2\\ \Leftrightarrow {\tau _d} = \frac{{\ln 2}}{r} \end{array}\] Le temps de doublement est donc inversement proportionnel au taux de croissance.