KSimPop permet aussi de saisir des modèles stochastiques, mais c'est un peu plus compliqué. Tout commence comme d'habitude : on choisit p, la fréquence de l'allèle A que l'on modélise, comme variable. On définit N, le nombre d'individus dans la population comme un paramètre. On définit en plus un paramètre x qui correspond au nombre d'individus porteurs de l'allèle A (on verra plus loin à quoi ça sert). Le temps est discret.
Jusqu'ici, le paramètre x semble n'avoir aucune utilité : dans le modèle définit précédemment, il est constant et nul. On va maintenant définir sa distribution. x a une distribution binomiale de paramètres p et 2N. Pour saisir cette distribution, dans l'onglet Fichier modèle, on clique sur <distribution>.
Au temps t, x sera tiré de façon aléatoire dans la distribution binomiale spécifiée et servira à définir la nouvelle valeur de p. Au temps t+1 la valeur de p à t sera utilisée pour calculer l'espérance et la variance de la distribution de x. Ainsi les fluctuations de fréquences alléliques vont se propager de génération en génération.
Haut Index
<modele>
<nom>Modèle de dérive génétique</nom>
<temps>discret</temps>
<variable>p=0.5</variable>
<parametre>N=100 x=0</parametre>
<equation>x/(2*N)</equation>
<distribution par=x>
<famille>binomiale</famille>
<parametre> p , 2*N </parametre>
</distribution>
</modele>
On peut coder le même modèle de dérive en définissant la distribution des x par ses moments, c'est-à-dire sa moyenne et sa variance. Cette possibilité ne présente ici que peu d'intérêt, mais elle peut s'avérer utile dans d'autres modèles.
<modele>
<nom>Modèle de dérive génétique</nom>
<temps>discret</temps>
<variable>p=0.5</variable>
<parametre>N=100 x=0</parametre>
<equation>x/(2*N)</equation>
<distribution par=x>
<famille>binomiale</famille>
<moment> 2*N*p , 2*N*p*(1-p) </moment>
</distribution>
</modele>
Enfin, plutôt que d'utiliser un paramètre stochastique pour calculer la dynamique de p, on peut faire appel directement aux fonctions de génération de nombre aléatoires. La fonction rbinomiale tire au hasard des nombres dans une loi binomiale.
<modele>
<nom>Modèle de dérive génétique</nom>
<temps>discret</temps>
<variable>p=0.5</variable>
<parametre>N=100</parametre>
<equation>rbinomiale(p,2*N)/(2*N)</equation>
</modele>
Le modèle ainsi codé est beaucoup plus concis. Dans certains cas, cependant, l'emploi des fonctions de génération de nombres aléatoires n'est pas possible et il faut impérativement avoir recours aux balises <distribution>. C'est le cas par exemple si un paramètre d'un modèle est stochastique et intervient dans plusieurs équations : à chaque génération le paramètre en question va prendre une nouvelle valeur et l'on veut que ce soit cette la même valeur qui intervienne dans toutes les équations. Il faut donc que cette valeur soit déterminée avant que les calculs des équations aient lieu.
L'ensemble des distributions probabilistes et des fonctions qui permettent de les utiliser est décrit ici.
Vous pouvez exprimer un paramètre en fonction d'autres paramètres. Dans le cas où plusieurs paramètres sont associés à une distribution par la balise <distribution>, les paramètres sont actualisés dans l'ordre de leur introduction dans la balise <paramètre>. Ainsi si deux paramètres X et Y ont une distribution et que dans la définition des paramètres de la distribution de Y intervient la valeur de X, deux situations peuvent se présenter :
On peut tirer parti de cette possibilité pour composer des distributions de façon complexe et simuler des évènements stochastiques qui s'enchaînent dans le temps, et ne sont donc pas simultanés. Cette possibilité est illustrée par l'exemple n°5. Les variables stochastiques sont elles mises à jour de façon indépendante. Leur ordre d'introduction n'a donc pas d'influence sur leur mise à jour.
Haut IndexLorsqu'on étudie le comportement d'un modèle stochastique, on veut souvent répéter une simulation de nombreuses fois et travailler ensuite sur le résultat de ces simulations. Pour lancer des calculs multiples, dans le menu Calculs, cliquez sur Ajouter des trajectoires.... Une interface apparait qui vous permet de préciser un nombre de simulations à effectuer pour une combinaison de valeurs initiales des variables et de valeurs des paramètres. Vous pouvez aussi, dans la même interface, faire varier ces valeurs en précisant la valeur de départ, la valeur de fin et l'intervale entre deux valeurs utilisées.
Ici on demande 100 répétitions d'une simulation qui utilise les valeurs courantes des variables et paramètres. L'affichage des trajectoires n'étant pas désactivé, on obtient au terme du calcul le graphique présenté dans la figure suivante.
Une fois les calculs effectués, il est possible d'enregistrer les trajectoires dans un fichier texte que vous pouvez exploiter avec d'autres logiciels (R, par exemple, ou OpenOffice). Pour effectuer cette opération, dans le menu Calculs, cliquez sur Exporter les trajectoires. Vous aurez sans doute noté qu'il est possible de demander à enregistrer les calculs dans un fichier texte dans la fenêtre Ajouter des trajectoires....
Si vous choisissez d'exporter la totalité des trajectoires, chaque variable est enregistrée dans une colone et ceci pour chaque trajectoire. Vous pouvez choisir d'enregistrer aussi le temps pour chaque trajectoire (utile dans le cas de modèle en temps continu où la routine d'intégration n'utilise pas un pas de temps fixe), de ne l'enregistrer qu'une seule fois pour toutes les trajectoires ou bien encore de ne pas l'enregistrer du tout.
Si vous choisissez la seconde option, pour chaque trajectoire seront enregistrés sur une ligne les valeurs finales des variables. Si vous avez lancé des calculs où un paramètre ou bien l'état initial d'une variable varie, ces valeurs peuvent être enregistrées dans le fichier de résultat. Pour ce faire il faut demander à enregistrer dès la fenêtre Ajouter des trajectoires.... La commande Exporter les trajectoires ne permet pas de faire cela puisque les états de paramètres de toutes les simulations effectuées ne sont pas gardés en mémoire.