Les éléments essentiels d'une session BioBrowser

Les éléments de Modgen

Avant de commencer à utiliser BioBrowser, il est important de comprendre certains éléments de base du logiciel Modgen.

base de données (.mdb)
Ces fichiers sont créés par le système Modgen pendant l’étape de simulation du modèle.  Ils contiennent les données brutes nécessaires à la constitution de la représentation graphique créée par BioBrowser.  BioBrowser peut lire les fichiers de données, mais ne peut modifier leur contenu.  Toutes les sessions du navigateur débutent par l’ouverture d’un fichier de base de données existant.

acteurs dominants
Ces éléments sont le centre nerveux de toute simulation Modgen.  En général, les acteurs dominants sont des personnes ou des ménages qui sont créés au début du processus de simulation et dont les caractéristiques subissent des modifications tout au cours de leur vie.  Les acteurs dominants sont définis par leurs caractéristiques (états) ainsi que par les événements dont ils subissent l’influence.

acteurs non dominants
Le système Modgen simule un cas à la fois dans lequel les états d’un ensemble d’acteurs dominants subissent des changements.  Par exemple, l’état d’un acteur personne change lorsque celui-ci se marie ou déclare vivre en union de fait.  Lorsque cet événement survient, le système Modgen génère la conjointe ou le conjoint correspondant.  Ce conjoint devient alors un acteur personne non dominant.  Une fois qu’ils sont créés, les acteurs non dominants sont soumis aux mêmes événements éventuels que les acteurs dominants du même type.  Les acteurs non dominants sont liés aux acteurs dominants.

acteurs provisoires
La génération d’un acteur non dominant sous Modgen exige la production d’un ensemble de candidats éventuels.  Les candidats qui ne sont pas retenus comme conjoints ou conjointes sont des acteurs provisoires, car ils ne sont liés à aucun des acteurs dominants du modèle.

états
Ces éléments servent à définir les caractéristiques des acteurs pendant la durée de la vie de ceux-ci.  L’âge, les caractéristiques de l’emploi, et le niveau d’éducation atteint sont des exemples d’états.  Il peut s’agir de variables scalaires ou de variables tableau.

Avant d’utiliser BioBrowser, il est nécessaire qu’une base de données Modgen soit créée.  Si vous voulez examiner des états qui ne sont pas dans la base de données, un modèle de microsimulation Modgen doit être exécuté et une nouvelle base de données créée.  Un exemple d’une  base de données demo(trk).mdb est fournie avec le logiciel BioBrowser.  Pour plus de détails sur la façon de créer une base de données, reportez-vous au Guide de concepteur Modgen ou à la section « Annexe : Création d'une nouvelle base de données » pour un aperçu rapide.

Les éléments du BioBrowser

En se servant de la base de données, le navigateur BioBrowser crée des graphiques qui présentent certaines caractéristiques des acteurs.  En plus des éléments de Modgen qui précèdent, il y a des éléments propres au BioBrowser, qu’il importe de connaître.

fichiers de biographie (.bbr)
Ces fichiers renferment les représentations graphiques que l’analyste a créées pendant une session du BioBrowser.  Au cours d’une session, l’analyste peut créer, enregistrer et modifier des fichiers de biographie.

bande d’affichage
L’affichage graphique d’une état ou d’un acteur lié.

bande de navigation
Un genre de bande d’affichage qui comprend aussi un ensemble de boutons qui permettent aux utilisateurs de naviguer entre les bandes d’affichage d’un acteur à un autre, ainsi que d’ajouter de nouvelles états à la biographie.  Ces boutons sont semblables aux boutons de commande d’un lecteur de disque compact.

filtre                               
Le critère utilisé pour réduire ou préciser l’ensemble d’acteurs utilisé dans la biographie.

Date de modification :

Commandes de menu et la barre d'outils

Commandes de menu

La barre de menus du navigateur de biographie offre un ensemble de menus standards semblables aux logiciels Microsoft Office, ainsi que des commandes propres au logiciel.  Dans certains cas, ces fonctions peuvent aussi être lancées à l’aide de boutons de la barre d’outils ou d’équivalents clavier.

Commande de menu

Menus incrustés : On ne peut accéder à certaines commandes propres aux états qu’à l’aide des menus incrustés ou en cliquant deux fois sur la zone du graphique lorsque le curseur se trouve sur l’état voulu.  Cliquez le bouton droit de la souris pour afficher les menus incrustés.  Ces menus diffèrent selon qu’il s’agit d’un état simple ou lié.  Pour les états simples, comme l’état “travail” ci-dessous, les commandes suivantes sont offertes.

Menu avec les options disponibles pour un �tat simple

Quant aux bandes d’affichage du suivi de filtre et des états liés, on peut de plus accéder aux commandes de la bande de navigation à travers les menus incrustés.

Menu avec les options disponibles pour bandes d'affichage et �tats li�s

Barre d'outils

La barre d’outils permet un accès rapide aux options et aux commandes les plus courantes du logiciel de navigation BioBrowser.  Chaque bouton est accompagné d’une description apparaissant sous la barre d’outils ou à la barre d’état.  Si vous disposez d’un petit écran à basse résolution, vous pouvez escamoter la barre d’outils.  Choisissez Outils/Options, puis cliquez sur l’option Afficher options de barre d’outils

Barre d'outils
Outil Description Équivalent menu
Icône pour créer une nouvelle biographie Créer une nouvelle biographie Fichier / Nouveau
Icône pour ouvrir une biographie enregistrée Ouvrir une biographie enregistrée Fichier / Ouvrir
Icône pour enregistrer une biographie Enregistrer une biographie Fichier / Enregistrer
Imprimer Imprimer la biographie active Fichier / Imprimer
Icône pour copier la biographie active dans le presse-papiers Copier la biographie active dans le presse-papiers Édition / Copier
Icône pour annuler le dernier ajout Annuler le dernier ajout Édition / Annuler le dernier ajout
Icône pour afficher ou masquer la grille Afficher ou masquer la grille Format / Grille
Icône pour afficher ou masquer les lignes guides Afficher ou masquer les lignes guides Format / Lignes guides
Icône pour afficher ou masquer les bandes de navigation Afficher ou masquer les bandes de navigation Format / Bandes de navigation
Icône pour changer la couleur d'arrière-plan Changer la couleur d'arrière-plan Format / Couleur d'arrière-plan
Icône pour changer la couleur du graphique Changer la couleur du graphique Format / Couleur du graphique
Icône pour exécuter l'Aide du navigateur Exécuter l'Aide du navigateur Aide / Sommaire
Date de modification :

Options de présentation et d'affichage

Format de la zone du graphique

Lorsqu’on ajoute un état, le système utilise plusieurs valeurs implicites pour la présentation du graphique, selon le type de l’état Modgen.  Pour le moment, cinq types de graphiques sont pris en charge.

Table of four different chart types
Linéaire Escalier Barre horizontale Nuage de points
Illustration d'un exemple graphique lineaire Illustration d'un exemple graphique escalier Illustration d'un exemple graphique barre horizontale Illustration d'un exemple graphique nuage de points
Evenement
Illustration d'un exemple graphique evenement
 

Le navigateur prend en charge les types d’état Modgen suivants et trace le graphique implicite correspondant.

Barre d'outils
Type d'état Type de graphique implicite
Entier ou entier long Escalier
Virugle flottante Linéaire
Double Linéaire
Temps Linéaire
Logique Barre horizontale
Classification Événement
Étendue Escalier
Lien Barre horizontale

Le graphique linéaire consiste en une ligne tracée entre deux points adjacents, tandis que le graphique en escalier comporte deux lignes (une ligne verticale et une ligne horizontale) figurant entre deux points.  La barre horizontale, même si elle convient le mieux aux types Modgen état logique, classification et intervalle, peut être utilisée pour tous les états.  Les états liés Modgen ne peuvent être affichés qu’à l’aide d’un graphique à barre horizontale.  Pour des états continus comme les types virgule flottante et double, le système utilise l’interpolation de couleur, en se fondant sur les couleurs de début et de fin précisées par l’utilisateur, pour l’affichage du graphique à barre horizontale.  Aucune légende n’est offerte pour la barre horizontale.

Le bleu est la couleur implicite pour les graphiques linéaire, en escalier et en nuage de points.  Les couleurs implicites de la barre horizontale sont le blanc et le gris.  Vous pouvez définir la largeur de la ligne, la largeur de bande et la taille des points pour la biographie, mais pas pour un seul état.  Pour l’instant, ces réglages sont appliqués à l’ensemble de la fenêtre de biographie.  Toutes ces définitions sont enregistrées avec la biographie.

Pour modifier le graphique ou la couleur, cliquez deux fois sur le graphique voulu d’une biographie ou cliquez à droite sur le graphique et sélectionnez « Propriétés de l’etat » du menu local.  Vous pouvez en outre changer à ce moment la chaîne de définition des labels de l’axe des Y, le cas échéant.  La boîte de dialogue ci-dessous sert à définir ou ajuster ces propriétés.

Dialog avec des proprietes à changer pour des etats

Si le graphique à barre horizontale est sélectionné, une deuxième couleur doit être choisie.  Pour les états logiques, il s’agit des couleurs correspondant aux valeurs Vrai et Faux.  Pour tous les autres états, il s’agit des couleurs de départ et de fin du processus d’interpolation de couleur.

Définition et enregistrement des options d'affichage

Pour changer les options d'affichage de de la fenêtre de biographie active, servez-vous du menu Format.  Le menu Affichage, qui comprend les options de barre d'outils et de barre d'état, s'applique à tout le logiciel.

L'option Options du menu Outils peut servir à définir et à enregistrer les valeurs implicites des nouvelles biographies.  La boîte de dialogue Options offre trois onglets : Général, Défauts du graphique et Défauts des axes.  Les options de l'onglet Général entrent en vigueur immédiatement, tandis que les deux onglets de valeurs par défaut ne s'utilisent que pour la création d'une nouvelle biographie.  Cliquez sur le bouton OK pour enregistrer les valeurs par défaut dans le fichier “ini” du logiciel.

L'onglet Général présenté ci-après sert à définir et à enregistrer les valeurs par défaut de la séance qui sont utilisées au lancement du logiciel.  Pour changer ces valeurs pendant une séance, utilisez les menus Outils et Affichage.

Dialog avec les options du l'onglet Tools/Options/General

Les valeurs par défaut du graphique qu'on utilise pour la création d'une nouvelle biographie comprennent les options d'affichage présentées ci-dessous.  Pour changer ces valeurs dans le cas d'une biographie ouverte, faites appel au menu Format.

Dialog avec les options du l'onglet Tools/Options/Defaults du graphique

On définit et enregistre les valeurs par défaut des axes, dans le cadre de la création d'une nouvelle biographie, à l'aide du troisième onglet.  Pour définir les propriétés des axes d'une biographie ouverte, cliquez deux fois sur la zone des axes de la fenêtre de graphique ou servez-vous de la commande Propriétés des axes du menu Format.

Dialog avec les options du l'onglet Tools/Options/Defaut des axes

Précisons que toutes les options d'affichage et les propriétés des axes actuellement en vigueur pour la biographie ouverte sont enregistrées avec le fichier de la biographie.

Impression d'une biographie ou envoi dans le presse-papiers

Pour imprimer une biographie, utilisez l’option Fichier/Imprimer ou le bouton Imprimer de la barre d’outils.

La taille des biographies imprimées est adaptée en fonction de la page, sans modification du rapport hauteur/largeur.  La disposition utilisée est tributaire du rapport hauteur/largeur de la fenêtre de biographie qui est imprimée; autrement dit, si la largeur de la fenêtre est plus grande que sa hauteur, le système à recours au format horizontal.

Pour envoyer une biographie au presse-papiers, faites appel à Édition/Copier, à Ctrl-C ou au bouton Copier de la barre d’outils.

Date de modification :

Qu'attendons-nous du modèle de microsimulation RiskPaths?

Que peut ajouter la simulation à l'analyse statistique?
Caractéristiques souhaitées d'un modèle de microsimulation RiskPaths

Que peut ajouter la simulation à l'analyse statistique?

Avant de pouvoir répondre à la question de savoir ce que la simulation ajoute à l'analyse statistique, nous devons bien comprendre ce que les résultats statistiques présentés à la section précédente révèlent. Les résultats des estimations pour les deux pays et pour les deux cohortes nous permettent d'étudier les similarités et les différences entre ces pays, ainsi que l'évolution des paramètres au cours du temps séparément pour chaque processus individuel. Nous constatons une similarité remarquable des paramètres entre les deux pays, surtout pour les cohortes d'avant la transition. Fondamentalement, la Bulgarie ne diffère de la Russie qu'en ce qui concerne le risque trois fois plus faible de dissolution d'une union et la vitesse plus lente de formation d'une deuxième union. Par conséquent, si nous comparons les cohortes avant et après la transition, nous observons des changements spectaculaires dans la plupart des processus. Le risque d'une première naissance a été réduit de moitié durant les trois premières années de la première union, sans redressement ultérieur, quoique les paramètres aient changé relativement peu après trois années dans une union. En outre, dans les deuxièmes unions, la fécondité a baissé de plus de 50 %. La différence la plus importante entre les deux pays après la transition s'observe pour la formation d'une première union, les taux ayant été réduits de moitié en Bulgarie, mais étant demeurés stables en Russie. Pour la dissolution de la première union nous observons le tableau opposé - le risque de dissolution d'une union a augmenté d'environ 40 % en Russie, mais est resté presque le même en Bulgarie.

Il s'agit là d'exemples typiques des éclaircissements que peut fournir l'analyse d'un processus unique. Nous avons décomposé un système complexe en ses processus constitutifs et étudié les changements à l'intérieur de ces processus. Dans le cas de la fécondité, nous avons introduit des risques relatifs - nous avons étudié comment certains facteurs (ici différentes situations d'union) influencent un processus unique. Il s'agit d'une question analytique très typique et ce genre de recherche abonde dans la littérature scientifique.

La puissance de la microsimulation se dégage quand nous étudions divers processus simultanément. Même dans notre exemple démographique très simple, les résultats sont difficiles à interpréter quand nous nous intéressons à l'effet qu'ont sur les résultats agrégés les changements dans des processus uniques. Par exemple, quel est l'effet de l'accroissement de 40 % du risque de dissolution d'une union sur le fait de ne pas avoir d'enfants en Russie? Il dépendra de la fécondité en dehors des unions et dans les deuxièmes unions, ainsi que de la vitesse de formation d'une deuxième union. Le risque relatif de fécondité est plus élevé dans les deuxièmes unions qu'après trois années dans la première union, mais la formation de la deuxième union prend du temps (durant lequel la fécondité est très faible) et toutes les femmes ne forment pas une deuxième union. Ces effets s'annulentils les uns les autres ou la dissolution d'une union affectetelle la fécondité, et dans quelle direction? Ce genre de question nous invite à utiliser la microsimulation pour une analyse de sensibilité. Comment agrégeonsnous le changement de résultat en réponse à la variation d'un seul paramètre? Notons que nous sommes maintenant passés d'une analyse au niveau d'un processus unique à une analyse du comportement d'un système.

Une comparaison des deux cohortes suscite un type supplémentaire d'analyse de système - quelle est la contribution relative du changement dans les processus uniques aux résultats agrégés? Si nous comparons les deux cohortes simulées, nous voyons que l'absence d'enfants a augmenté considérablement dans les deux pays, mais encore plus en Bulgarie qu'en Russie. Nous pouvons utiliser la microsimulation pour décomposer les contributions des changements dans les divers processus au changement agrégé. Comment aurait évolué la prévalence de l'absence d'enfants si seuls les paramètres de fécondité avaient changé? Quelle est la contribution des changements concernant la formation d'une union? L'accroissement du risque de dissolution d'une union atil contribué à l'accroissement de l'absence d'enfants en Russie? Naturellement, le changement agrégé n'est pas égal à la simple somme arithmétique des effets partiels. Certains changements de processus pourraient avoir un effet plus prononcé ou plus faible en présence de changements dans les autres processus. Par exemple, l'effet du changement de fécondité dans les deuxièmes unions dépendra fortement de la probabilité d'être dans une deuxième union, laquelle est conditionnelle aux risques de formation et de dissolution d'une première union. La microsimulation peut nous aider à déceler et à mieux comprendre ce genre d'interaction.

Quand nous examinons la cohorte après la transition, nous sommes déjà entrés dans le domaine des prédictions. Comme les données ont été recueillies 14 ans après la transition, en réalité, aucune cohorte postérieure à la transition n'a vécu l'entièreté de sa période reproductive. Donc, pour des mesures de cohorte comme l'absence d'enfants, l'évaluation de la cohérence avec d'autres sources de données est limitée à une comparaison à d'autres projections. Toutefois, nous pouvons aussi utiliser notre modèle pour refaire des prédictions sous diverses hypothèses quant aux futurs changements dans les processus. Nous pourrions avoir conçu une théorie qui nous mène à l'hypothèse que seules des parties des changements observés sont de nature permanente (p. ex.causés par un changement culturel), tandis que d'autres sont transitoires (p. ex.résultant d'une crise économique, par conséquent réversibles avec la reprise économique). Que se passerait-il si les taux de fécondité revenaient à leur valeur initiale alors que la formation plus lente d'une union (ultérieure) persiste, ou inversement? Ce genre d'analyse peut produire des résultats surprenants, car ce n'est pas nécessairement le renversement du processus qui, initialement, a eu l'effet global le plus important qui produira l'effet opposé le plus grand.

Existe-t-il des incidences en ce qui concerne les politiques? Bien que notre modèle soit évidemment trop simple pour l'analyse des politiques, il ne faut pas beaucoup d'imagination pour voir comment la microsimulation peut appuyer l'élaboration des politiques.

  • Dans de nombreux cas, les phénomènes étudiés ont un rapport direct avec les politiques. La baisse de la fécondité aura par exemple une incidence sur la viabilité des systèmes de sécurité sociale. Un bon modèle de projection démographique peut par conséquent produire des données d'entrée précieuses pour une planification subséquente de bonne qualité. La microsimulation est l'outil qui permet de combiner des modèles statistiques distincts en modèles de projection.
  • Les événements simulés dans un modèle de microsimulation peuvent également être euxmêmes les cibles des politiques. Un gouvernement pourrait chercher à influer sur la fécondité, ce qui est possible s'il met en place des politiques capables d'influencer les processus modélisés. Cependant, nous devons d'abord arriver à comprendre la contribution individuelle de ces processus aux résultats agrégés que nous voulons modifier; donc, nous avons besoin de microsimulations. Si nous pouvons mettre un prix sur ces politiques, nous serons également capables d'utiliser la microsimulation pour trouver la combinaison de politiques la plus rentable, et donc d'étudier les effets secondaires possibles. (Sous le régime socialiste, la Russie et la Bulgarie avaient effectivement en place un ensemble de politiques puissantes, telles que l'impôt sur le célibat et l'accès privilégié au logement pour les jeunes couples mariés. Le prix de la régulation des choix de vie individuels s'est avéré être assez élevé.)
  • La microsimulation nous permet de compléter les modèles résultant de l'analyse statistique par des scénarios stratégiques et des modèles de comptabilité économique détaillés. Elle offre un outil très naturel pour la simulation des politiques, car celles-ci sont définies au niveau individuel ou micro, ce qui aboutit à des applications qui intègrent la modélisation démographique et économique.

Caractéristiques souhaitées d'un modèle de microsimulation RiskPaths

Entrées : Tableaux des paramètres, scénarios et paramètres de la simulation

Même s'il est très simple, le modèle RiskPaths possède environ 130 valeurs de paramètre que les utilisateurs doivent être capables d'attribuer et de mémoriser comme il convient. Ces paramètres devraient être présentés de manière bien structurée dans l'application de microsimulation, sous forme de tableaux étiquetés, d'accès (ou de navigation) facile, qui peuvent être lus ou modifiés au besoin.

Quand nous utilisons un modèle, nous créons habituellement différents scénarios, c'estàdire différentes paramétrisations du modèle. Nous devons pouvoir sauvegarder ces scénarios afin que certaines simulations puissent être reproduites dans l'avenir. Les scénarios contiennent tous les tableaux des paramètres et, idéalement, des descriptions textuelles ou des notes supplémentaires qui décrivent les changements spécifiques intégrés dans chaque scénario. En outre, les scénarios doivent inclure les paramètres du scénario, tels que le nombre de cas simulés (étant donné que RiskPaths est un modèle orienté cas). Une grande taille d'échantillon réduira la variation Monte Carlo, mais au prix de l'exécution plus lente des simulations. Si nous nous intéressons uniquement aux agrégats généraux, des échantillons de plus petite taille pourraient suffire. Par ailleurs, l'analyse détaillée d'événements rares ou une ventilation détaillée des résultats (p. ex.selon le groupe d'âge) nécessitera de grands échantillons. En outre, l'utilisateur pourrait ne pas vouloir produire toutes les sorties disponibles. Limiter la sortie souhaitée peut de nouveau accélérer les simulations, mais aussi donner lieu à une présentation plus concise et focalisée des résultats, conformément aux besoins de l'utilisateur.

Tous les éléments susmentionnés (tableaux des paramètres, notes descriptives, nombre de cas, choix de la sortie à produire) font partie d'un scénario. Dans nos applications RiskPaths, toute cette information devrait être mémorisée ensemble pour un scénario particulier et elle devrait pouvoir être extraite, consultée et modifiée facilement.

Sortie et visualisation des sorties

Les modèles de microsimulation peuvent produire des sorties à deux niveaux, micro et macro. Une application de microsimulation pourrait en théorie écrire toutes les caractéristiques de niveau individuel et tous leurs changements au cours du temps dans un fichier et laisser à l'utilisateur la tâche d'analyser le fichier de données résultant au moyen d'un logiciel statistique. Dans le cas de RiskPaths, cela aboutirait à un fichier contenant les dates de tous les événements simulés qui surviennent au cours de la trajectoire de vie simulée de chaque individu. Six événements seulement peuvent avoir lieu dans une vie simulée, de sorte que chaque enregistrement de données contiendrait au plus six variables : quatre événements de formation/dissolution d'union, la grossesse et le décès. Toutefois, pour des applications plus complexes, la taille et la complexité du fichier pourraient être énormes.

En plus d'un fichier longitudinal de ce genre, nous pourrions aussi souhaiter une sortie transversale, dans laquelle sont enregistrés les états de tous les individus à un point particulier dans le temps. L'utilisation d'un tel fichier serait relativement limitée dans la simulation d'une seule cohorte, mais il ressemblerait à une enquête transversale ou à un recensement de population dans un modèle de population.

Habituellement, un utilisateur de modèle ne s'intéresse pas aux fichiers de microdonnées proprement dits, mais à leur analyse. Il agrégera généralement les données et produira des indicateurs et des tableaux sommaires. Si les développeurs d'un modèle savent comment les données simulées seront ou devraient être analysées, ces mesures et tableaux peuvent déjà être calculés et produits dans une exécution de l'application de microsimulation. Dans ce cas, les utilisateurs n'auront pas besoin d'exécuter des routines statistiques supplémentaires; ils pourront voir les résultats immédiatement après l'exécution d'une simulation. Dans notre modèle RiskPaths, la sortie ne comporte qu'un petit nombre de tableaux et d'indicateurs sommaires que nous nous attendons à être produits dans l'application. Nous nous intéressons au taux de fécondité par âge, à l'absence d'enfants, à l'âge moyen au moment de la première grossesse, à la première grossesse selon la situation d'union et à certaines mesures de mortalité.

Comme pour les tableaux de paramètres, la sortie agrégée du modèle requiert une structure. Nous pourrions souhaiter présenter certaines mesures sommaires d'un ou plusieurs comportements apparentés regroupés dans un tableau et nous voudrions certainement ordonner le contenu du tableau de manière significative. En outre, comme pour les paramètres, les résultats tabulaires devraient être étiquetés de manière qu'ils soient faciles à lire et à comprendre.

Comme tous les résultats de microsimulation sont sujets à la variation Monte Carlo, les chiffres agrégés ne sont qu'une visualisation des résultats. Nous pourrions aussi vouloir obtenir des renseignements sur la distribution de chaque valeur du tableau. Ce genre d'information nous aiderait à sélectionner une taille de population suffisante pour un niveau de précision souhaité des résultats.

L'affichage graphique des trajectoires individuelles est un type particulier de sortie de microdonnées. Il peut s'agir d'une fonction utile, car elle donne aux utilisateurs une vue des individus simulés, donc un moyen de voir le fonctionnement des modèles statistiques. Elle peut aussi être utile aux développeurs des modèles car elle facilite le débogage. Puisque RiskPaths est un outil de formation, nous souhaitons montrer comment les biographies individuelles résultent des processus statistiques. Donc, outre les événements qui surviennent au cours de la vie, nous pourrions aussi vouloir voir comment les risques des autres événements évoluent au cours du temps et des situations au cours de la vie.

Interface utilisateur et documentation

Jusqu'à présent, nous avons formulé des attentes concernant le contenu, l'affichage et la présentation des données d'entrée et de sortie du modèle. Du point de vue de l'utilisateur, devonsnous simplement ajouter un bouton de démarrage pour compléter l'application de microsimulation? Estce que toutes les applications logicielles contemporaines contiennent des fichiers d'aide. En tant qu'utilisateur de modèles de microsimulation, nous devrions nous attendre à avoir accès à une aide détaillée en ligne, non seulement concernant l'utilisation du logiciel de modélisation proprement dit, mais aussi au sujet des éléments particuliers du modèle et des interdépendances entre ces éléments.

Date de modification :

Exploration du modèle RiskPaths

L'interface utilisateur
Tableaux des paramètres
Exécution d'une simulation
Sortie de tableau : agrégats et distributions
Fonction d'aide et documentation du modèle
Sortie graphique des biographies individuelles

La suite de notre discussion comprend une description rapide de l'interface visuelle fournie par Modgen pour le modèle RiskPaths. Pour exécuter RiskPaths, il faut que l'application des composants préalables à Modgen (Modgen Prerequisites) ainsi que l'exécutable RiskPaths soient installés sur votre ordinateur. Comme toutes les applications Modgen, RiskPaths contient un système d'aide qui contient de la documentation sur l'interface utilisateur (indépendante du modèle) de Modgen et sur le modèle RiskPaths proprement dit. Par conséquent, dans la description qui suit, nous nous concentrons sur les étapes centrales de l'exécution de RiskPaths, et nous vous laissons le soin d'explorer en détail le modèle et le logiciel en vous aidant des fichiers d'aide détaillés.

L'interface utilisateur

Toutes les applications Modgen ont la même interface utilisateur graphique (figure 1) qui comprend les éléments suivants :

  • une barre de menu et une barre d'outils pour administrer et exécuter des scénarios, ainsi que pour obtenir de l'aide;
  • une fenêtre de sélection contenant une liste groupée hiérarchiquement de tous les paramètres et tableaux de sortie du modèle;
  • un cadre dans lequel tous les paramètres ou tableaux correspondants peuvent être affichés.

Au moment du démarrage de l'application RiskPaths.exe, la fenêtre de sélection et le cadre des tableaux sont vides, parce que nous devons d'abord charger (ou créer) un scénario de simulation. Pour cela, suivez les étapes suivantes :

  • Ouvrez le scénario de simulation  « base.sce  ». Vous pouvez le faire en cliquant sur le bouton  « Open  » ou en choisissant  « Open.  » dans le menu  « Scénario  ».
  • Choisissez les paramètres du scénario. Vous pouvez avoir accès à la boête de dialogue concernant les paramètres en cliquant sur le bouton  « Settings  » ou en choisissant  « Settings.  » dans le menu  « Scénario  ». Spécifier un petit nombre de cas à simuler (p. ex.10 000), afin que votre premier modèle soit exécuté rapidement. En outre, veiller à ce que  « MS Access tracking  » soit activé. Cela vous permettra de voir les bibliographies individuelles en utilisant l'outil BioBrowser qui vient avec Modgen.
  • Sauvegardez votre scénario sous un nouveau nom en sélectionnant  « Save as.  » dans le menu  « Scénario  ».

L'interface utilisateur

Tableaux des paramètres

Les utilisateurs d'une application Modgen peuvent contrôler tous les paramètres contenus dans les tableaux de paramètres du modèle. Un tableau de paramètres individuel peut être choisi en cliquant sur son entrée dans la liste dans la fenêtre de sélection. Le tableau s'affiche alors dans le cadre d'affichage dans lequel il peut alors être édité. Les tableaux de paramètres Modgen peuvent avoir n'importe quel nombre de dimensions, variant d'un paramètre avec une case à cocher unique à des paramètres possédant de nombreuses caractéristiques ou dimensions (p. ex.région, sexe, âge, période).

Tableaux des paramètres

Exécution d'une simulation

Cliquez sur le bouton  « Run/resume  » ou choisissez  « Run/resume  » dans le menu  « Scénario  ». L'état d'avancement de la simulation est affiché dans une boête de dialogue indiquant les progrès. Dans le cas d'un petit échantillon de 10 000 acteurs, l'exécution prend environ 20 secondes. Quand l'exécution du modèle est achevée, tous les tableaux de sortie ont été mis à jour par Modgen.

Sortie de tableau : agrégats et distributions

Les résultats des simulations sont inscrits dans des tableaux de sortie prédéfinis. Il convient de souligner que les valeurs affichées dans les tableaux de sortie ne représentent qu'une parmi plusieurs vues possibles des résultats. En cliquant sur un tableau avec le bouton de droite de la souris, il est possible d'avoir accès à une fiche de propriétés du tableau. Entre autres, elle permet l'affichage de l'information distributionnelle (les erreurstypes et le coefficient de variation) de toutes les valeurs simulées. Le contenu des tableaux peut également être copié et collé. Vous pouvez choisir de copier le tableau tel qu'il est affiché ou toutes les dimensions du tableau en une seule fois (s'il existe plus de deux dimensions).

Fonction d'aide et documentation du modèle

Comme toutes les applications Modgen, RiskPaths fournit des fichiers d'aide de divers types. Deux d'entre eux concernent Modgen proprement dit, à savoir un guide général de l'utilisateur de l'interface visuelle ainsi que des notes sur les versions de Modgen. Les autres fichiers d'aide sont particuliers au modèle. Toutes les applications Modgen contiennent un fichier de documentation encyclopédique détaillé sur le modèle. Cette documentation est créée automatiquement à partir d'un code commenté de manière appropriée.

Fonction d'aide et documentation du modèle

Sortie graphique des biographies individuelles

L'application de consultation des biographies (BioBrowser) de Modgen est un outil qui permet l'affichage graphique des trajectoires de vie individuelles. Cette visualisation des résultats des simulations est particulièrement utile pour le débogage du modèle. Afin d'utiliser l'outil, la fonction de dépistage (tracking) doit être activée dans les paramètres du scénario. La liste des variables à dépister doit aussi être déclarée par le développeur du modèle dans le code du modèle au moyen d'une instruction de dépistage. Modgen dépiste alors tous les changements concernant les variables incluses dans l'instruction de dépistage pour un échantillon d'acteurs simulés (dont la taille est spécifiée comme l'un des paramètres du scénario).

Affichez les biographies crées par RiskPaths, lancez simplement l'application BioBrowser et chargez le fichier de dépistage de votre scénario de simulation, p. ex.Base(trk).mdb.

Sortie graphique des biographies individuelles

 

Date de modification :

Organisation des fichiers

RiskPaths.mpp (le fichier de simulation principal)
PersonCore.mpp
Fichiers de comportement
Tables.mpp
Tracking.mpp
Fichier de traduction de langue RiskPathsFR.mpp

Le code Modgen de RiskPaths est réparti entre huit fichiers .mpp distincts, tandis que toutes les valeurs des paramètres RiskPaths (parce que dernier est un modèle simple) sont contenues dans un seul fichier .dat. En principe, un développeur de modèle est entièrement libre de décider comment répartir le code Modgen dans les différents fichiers, mais une structure modulaire telle que celle de RiskPaths, est recommandée.

Figure 2 : Organisation des fichiers de RiskPaths

Figure 2 : Organisation des fichiers de RiskPaths
Modules généraux Nom du fichier
Moteur de simulation RiskPaths.mpp
Fichier de base des acteurs PersonCore.mpp
Définition des tableaux Tables.mpp
Dépistage des sorties Tracking.mpp
Traductions en français RiskPathsFR.mpp
Modules de comportement Nom du fichier
Mortalité Mortality.mpp
Fécondité Fertility.mpp
Formations et dissolutions d'unions Unions.mpp
Fichier des paramètres Nom du fichier
Paramètres du scénario de référence Base(RiskPaths).dat

Il convient de souligner que les fichiers de code .mpp contiennent souvent des commentaires qui ressemblent à des étiquettes. Ces commentaires sont placés à côté des déclarations des symboles, tels que les états, les niveaux d'état, les paramètres, les tableaux et les dimensions de tableau. Modgen interprète en fait ces commentaires comme des étiquettes et les utilise subséquemment quand les tableaux ou les paramètres sont affichés dans l'interface visuelle de Modgen. Ces étiquettes sont alors utilisées dans le fichier d'aide encyclopédique du modèle qui est produit automatiquement. Les commentaires du code qui sont utilisés comme des étiquettes commencent par un identificateur de langue de deux caractères, par exemple :

//EN Union status

De nombreux commentaires de ce genre figurent dans les exemples de code qui suivent pour RiskPaths.

Pour des descriptions plus détaillées des modules, des fonctions et des événements, des notes utilisant la syntaxe qui suit peuvent également être placés dans le code.

/*NOTE(Person.Finish, EN)
The Finish function terminates the simulation of an actor.
*/

En plus de renseigner sur le code, ces notes sont utilisées dans le fichier d'aide encyclopédique produit automatiquement.

RiskPaths.mpp (le fichier de simulation principal)

Ce fichier contient le code essentiel à la définition du type de modèle (p. ex.orienté cas, temps continu) ainsi que le moteur de simulation, c'est-à-dire le code qui exécute la simulation complète. Parce que RiskPaths est un modèle orienté cas, le code du moteur de simulation est itéré sur tous les cas et traite les files d'événement de chaque cas. Le fichier identifie aussi les langues utilisées dans le modèle. Le code contenu dans ce fichier est en grande partie indépendant du modèle à l'intérieur d'une classe de modèles (p. ex.temps continu, orienté cas) et une version de ce fichier est fournie automatiquement quand le guide intelligent intégré dans Modgen est utilisé pour lancer un nouveau projet Modgen.

Pour le développement de notre modèle RiskPaths de cohorte en temps continu orienté cas avec un acteur  « Person », le code fourni par le guide intelligent ne nécessite que très peu de modifications. Le code complet de ce fichier .mpp a moins d'une page de long.

PersonCore.mpp

Le seul acteur dans RiskPaths est une personne. Dan le fichier PersonCore.mpp, nous avons placé le code qui fait partie de la déclaration de l'acteur, mais qui n'est pas directement relié à un comportement spécifique. Le fichier contient deux horloges d'âge définies comme des états autoplanifiés (integer_age et age_status) et deux fonctions d'acteur, Start() et Finish(), qui sont exécutées à la création d'un acteur et à son décès, respectivement.

Dans la fonction Start(), nous initialisons le temps et l'âge des états à 0. Les deux états sont créés et tenus à jour automatiquement par Modgen et ne peuvent être modifiés que dans la fonction Start(). Leur type dépend du type de modèle; comme RiskPaths est un modèle en temps continu, le temps et l'âge sont des états continus.

La fonction Finish() doit être appelée au moment de l'événement de décès d'un acteur. Son rôle est d'éliminer l'acteur des tableaux et de la simulation, et de récupérer toute mémoire informatique utilisée par l'acteur.

Tous les états et fonctions d'acteur sont décrits dans un bloc  « actor Person { }; ». Pour permettre que l'organisation du code en fonction de divers domaines de la trajectoire de vie soit modulaire, il peut y avoir plusieurs blocs d'acteur dans un projet, habituellement un pour chaque fichier de comportement.

La première section de code de ce module contient trois types de définitions. Nous commençons par définir un intervalle de vie range LIFE.

range LIFE //EN Simulated age range
{
0,100
};

Range est un type Modgen qui définit un intervalle de valeurs entières. RiskPaths limite l'intervalle d'âge possible des personnes à 100 ans. Ce type est utilisé pour déclarer un état dérivé contenant l'âge d'une personne en années complètes.

Le deuxième type de définition est utilisé pour diviser les âges continus en intervalles d'âge de 2,5 ans en commençant à l'âge de 15 ans.

partition AGEINT_STATE//EN 2.5 year age intervals
{
15, 17.5, 20, 22.5, 25, 27.5, 30, 32.5, 35, 37.5, 40
};

La troisième définition est une classification des types d'union. En général, si un intervalle (range), une partition ou une classification est utilisée dans plusieurs fichiers, il est bon de la définir dans le fichier de base de l'acteur.

classification UNION_STATE //EN Union status
{
US_NEVER_IN_UNION,//EN Never in union
US_FIRST_UNION_PERIOD1,//EN First union < 3 years
US_FIRST_UNION_PERIOD2,//EN First Union > 3 years
US_AFTER_FIRST_UNION,//EN After first union
US_SECOND_UNION,//EN Second union
US_AFTER_SECOND_UNION//EN After second union
};

Dans le segment de code qui suit, nous déclarons deux états d'acteur dérivés et deux fonctions. Les états dérivés des intervalles de temps sont utilisés pour modifier les valeurs des paramètres qui varient en fonction du temps. Dans notre modèle, integer_age est nécessaire parce que les risques de mortalité dépendent de l'âge en années, tandis que age_status intervient parce que les risques de base pour la première grossesse et la formation d'une première union sont modélisés de manière à ce qu'ils changent par intervalles de 2,5 ans après le 15e anniversaire.

Tant integer_age que age_status doit être tenu à jour au cours de la simulation. Le concept Modgen d'état dérivé nous permet de les tenir à jour automatiquement. Tous deux sont dérivés de l'état  « âge » (qui est un état particulier produit et tenu à jour automatiquement par Modgen). Afin de diviser l'âge en intervalles de temps définis dans la partition AGEINT_STATE, nous utilisons la fonction Modgen self_scheduling_split. Le deuxième état dérivé, integer_age, peut être obtenu directement en utilisant la fonction Modgen self_scheduling_int. Pour être certain que sa valeur reste dans l'intervalle de valeurs possibles de LIFE, nous le convertissons au type LIFE, ce qui est effectué par la macro Modgen COERCE.

actor Person
{
//EN Current age interval
int age_status = self_scheduling_split(age, AGEINT_STATE);

//EN Current integer age
LIFE integer_age = COERCE( LIFE, self_scheduling_int(age) );

//EN Function starting the life of an actor
void Start();

//EN Function finishing the life of an actor
void Finish();
}

Le code qui reste dans ce module correspond à l'exécution des fonctions Start() et Finish(). La fonction Finish() est laissée vide car nous n'avons besoin d'aucune autre action que celle exécutée automatiquement par Modgen au moment du décès d'un acteur.

void Person::Start()
{
// Age and time are variables automatically maintained by
// Modgen. They can be set only in the Start function
age = 0;
time = 0;
}

/*NOTE(Person.Finish, EN)
The Finish function terminates the simulation of an actor.
*/
void Person::Finish()
{
// After the code in this function (if any) is executed,
// Modgen removes the actor from tables and from the simulation.
// Modgen also recuperates any memory used by the actor.
}

Fichiers de comportement

Dans RiskPaths, nous distinguons trois groupes de comportements : la mortalité, la fécondité et la formation/dissolution d'une union. Par conséquent, nous avons réparti le code dans trois fichiers .mpp : Mortality.mpp, Fertility.mpp et Unions.mpp. Chaque fichier de comportement est habituellement subdivisé en trois sections :

déclaration des paramètres (incluant tous types de définitions qui sont requises pour commencer);

déclarations des états d'acteur et des événements;

exécution des événements.

Mortality.mpp

Ce fichier définit l'événement de mortalité qui termine la vie de l'acteur simulé. Mortality.mpp est un module de comportement typique et nous suivons une présentation standard du code : déclarations des paramètres (avec les définitions des types), déclarations des acteurs et exécution des événements.

Déclarations des paramètres

La mortalité est paramétrisée par les probabilités de décès selon l'âge; donc, la probabilité de survivre une année supplémentaire change à chaque anniversaire. Nous introduisons aussi un paramètre qui nous permet de  « désactiver » la mortalité. Quand il est utilisé, chaque acteur atteint l'âge maximal de 100 ans (ce qui peut être utile pour certains types d'analyse de la fécondité). La figure 3 montre les tableaux des paramètres de mortalité de l'application RiskPaths.

Figure 3 : Paramètres de la mortalité

Figure 3 : Paramètres de la mortalité

Les paramètres sont déclarés dans un bloc de code  « parameters {.}; ». Modgen permet d'utiliser les types numériques standard de C++, tels que int, long, float, double ou boolean ( « logical » dans la terminologie de Modgen), ainsi que les types range (intervalle), partition et classification particuliers à Modgen qui ont été introduits dans PersonCore.mpp. La dimensionnalité des paramètres dans le modèle RiskPaths est définie par les classifications et les intervalles. Le code qui suit produit pour RiskPaths les paramètres illustrés à la figure 3. Pour les probabilités annuelles de décès, nous utilisons l'intervalle LIFE qui a été défini dans PersonCore.mpp. L'instruction (parameter_group) regroupe les deux paramètres de mortalité afin de fournir une liste de sélection hiérarchique ordonnée dans l'interface utilisateur (de nouveau, comme illustré à la figure 3).

parameters
{
logical CanDie;//EN Switch mortality on/off
double ProbMort[LIFE];//EN Death probabilities
};

parameter_group P01_Mortality//EN Mortality
{
CanDie, ProbMort
};

Déclarations des acteurs

Les acteurs sont décrits par des états qui sont modifiés par des événements. Les états peuvent être continus (entiers ou réels) ou catégoriques. Dans le module de la mortalité, l'état d'intérêt est le fait qu'une personne est en vie ou non, si bien qu'il est catégorique par nature. Les niveaux d'un état catégorique sont définis au moyen de la commande classification de Modgen.

Nous déclarons un état life_status de type LIFE_STATE, qui est initialisé avec LS_ALIVE à la naissance et fixé à LS_NOT_ALIVE par l'événement de décès. L'initialisation de tous les états en attribuant la valeur initiale est une bonne pratique. Cependant, chaque valeur initiale doit être comprise entre des parenthèses, c'est-à-dire {}; sinon, l'état est exécuté comme un état dérivé.

classification LIFE_STATE //EN Life status
{
LS_ALIVE,//EN Alive
LS_NOT_ALIVE//EN Dead
};

actor Person
{
LIFE_STATE life_status = {LS_ALIVE};//EN Life Status
event timeDeathEvent, DeathEvent;//EN Death Event
};

Les événements sont déclarés dans le bloc actor Person {..} en utilisant le motclé event. Tous les événements consistent en une fonction qui produit le temps de l'événement suivant et une fonction contenant le code décrivant les conséquences de l'événement.

Exécution d'un événement

Quand l'option de mortalité est activée, la fonction timeDeathEvent produit un temps aléatoire basé sur le paramètre de mortalité pour l'année d'âge donnée. Afin d'obtenir des durées aléatoires d'après les probabilités, nous supposons que les risques de mortalité sont constants durant chaque période, c'estàdire entre les anniversaires. (Fait exception la probabilité de décès qui est égale à 1, ce qui entraêne le décès immédiatement après le début de l'année d'âge). Il convient de souligner que tout temps ultérieur à l'anniversaire suivant entraênera la précédence de l'événement d'anniversaire sur l'événement de mortalité; autrement dit, l'événement d'anniversaire censurera l'événement de mortalité.

TIME Person::timeDeathEvent()
{
TIME event_time = TIME_INFINITE;
if (CanDie)
{
if (ProbMort[integer_age] >= 1)
{
event_time = WAIT(0);
}
else
{
event_time = WAIT(-log(RandUniform(3)) /
-log(1 - ProbMort[integer_age]));
}
}
// Death event can not occur after the maximum duration of life
if (event_time > MAX(LIFE))
{
event_time = MAX(LIFE);
}
return event_time;
}

La fonction d'exécution de l'événement DeathEvent est simple. Elle donne à life_status la valeur LS_NOT_ALIVE et appelle la fonction Finish(), qui élimine l'acteur de la simulation et récupère tout espace mémoire utilisé par cet acteur.

void Person::DeathEvent()
{
life_status = LS_NOT_ALIVE;
Finish();
}

Fertility.mpp

Ce fichier définit et exécute l'événement de première grossesse. Comme nous nous servons de RiskPaths pour étudier l'absence d'enfants, nous ne simulons aucun autre événement relié à la fécondité. Fertility.mpp est un module de comportement et, de nouveau, nous adoptons la même présentation standard du code : définitions des types, déclarations des paramètres, déclarations des acteurs et exécution des événements.

Déclarations des paramètres

La fécondité est paramétrisée par un risque de grossesse de base par intervalle d'âge de 2,5 ans en commençant au 15e anniversaire et par un facteur de risque relatif qui dépend de la situation d'union et de la durée. Nous définissons donc deux paramètres : AgeBaselinePreg1 et UnionStatusPreg1.

Figure 4 : Paramètres de fécondité

Figure 4 : Paramètres de fécondité

Pour les risques de fécondité, une partition du temps est utilisée pour définir les colonnes. Pour l'âge de référence, nous utilisons la partition AGEINT_STATE qui a été définie dans PersonCore.mpp. Pour définir les états d'union possibles pour les facteurs de risque relatif, le modèle utilise la classification UNION_STATE qui est déclarée dans PersonCore.mpp également.

parameters
{
//EN Age baseline for first pregnancy
double AgeBaselinePreg1[AGEINT_STATE];
//EN Relative risks of union status on first pregnancy
double UnionStatusPreg1[UNION_STATE];
};

parameter_group P02_Ferility //EN Fertility
{
AgeBaselinePreg1, UnionStatusPreg1
};

Déclarations des acteurs

Le seul état du module de la fécondité est « parity_status » qui ne peut posséder que deux niveaux :  « sans enfants » et  « enceinte ». (En effet, RiskPaths ne simule plus les événements de fécondité d'un acteur après la première grossesse.)

Dans Fertility.mpp, nous ne modélisons qu'un seul événement : la grossesse. La paire correspondante de fonctions d'événement est timeFirstPregEvent et FirstPregEvent.

classification PARITY_STATE //EN Parity status
{
PS_CHILDLESS,//EN Childless
PS_PREGNANT//EN Pregnant
};

actor Person
{
//EN Parity status derived from the state parity
PARITY_STATE parity_status = {PS_CHILDLESS};

//EN First pregnancy event
event timeFirstPregEvent, FirstPregEvent;
};

Exécution des événements

Comme tous les événements Modgen, l'événement de première grossesse est exécuté en deux parties. La première détermine le moment de l'événement et la deuxième, les conséquences si l'événement a lieu. La fonction timeFirstPregEvent vérifie si l'acteur est couramment exposé au risque et, dans l'affirmative, tire une durée aléatoire en se basant sur le modèle de régression à risques constants proportionnels par morceaux paramétrisé par un âge de référence et un risque relatif selon la situation d'union. Par conséquent, le taux de risque est calculé d'après les deux paramètres AgeBaselinePreg1 et UnionStatusPreg1. Une durée aléatoire peut être obtenue à partir d'un nombre aléatoire suivant une loi uniforme par la transformation :

randdur=-log(RandUniform(1))/taux de risque

La fonction Modgen RandUniform() produit un nombre aléatoire à distribution uniforme compris entre 0 et 1. La fonction requiert un argument entier utilisé pour attribuer une chaêne de nombres aléatoires indépendants différente à chaque fonction de production d'un nombre aléatoire dans le code. S'il est omis, Modgen réécrit automatiquement un indice unique dans le fichier .mpp avant la conversion en code C++.

Lorsque l'événement a lieu, la valeur de l'état  « parité » augmente de 1. (Il convient de souligner que l'état dérivé parity_status est placé automatiquement par  « PS_PREGNANT ».)

TIME Person::timeFirstPregEvent()
{
double dHazard = 0;
TIME event_time = TIME_INFINITE;
if (parity_status == PS_CHILDLESS)
{dHazard = AgeBaselinePreg1[age_status]
* UnionStatusPreg1[union_status];
if (dHazard > 0)
{
event_time = WAIT(-log(RandUniform(1)) / dHazard);
}
}
return event_time;
}

void Person::FirstPregEvent()
{parity++;
}

Unions.mpp

La programmation des transitions entre les unions ne donne lieu qu'à l'introduction de nouveaux concepts mineurs dans la programmation Modgen, si bien que la discussion du code qui suit est limitée principalement à la dissolution des unions. Les taux de risque pour les premier et deuxième événements de dissolution d'une union sont sauvegardés dans le même tableau de paramètres parce qu'ils utilisent tous deux les mêmes intervalles temporels de durée d'union.

Afin de construire un paramètre au moyen des dimensions temps et ordre de l'union, nous définissons une partition du temps et une classification :

partition UNION_DURATION//EN Duration of current union
{
1, 3, 5, 9, 13
};

classification UNION_ORDER //EN Union order
{
UO_FIRST,//EN First union
UO_SECOND//EN Second union
};

parameters
{
.
//EN Union Duration Baseline of Dissolution
double UnionDurationBaseline[UNION_ORDER][UNION_DUR];
.
};

Figure 5 : Paramètres de dissolution d'une union

Figure 5 : Paramètres de dissolution d'une union

Dans la fonction timeUnion1DissolutionEvent(), les taux de risque de dissolution de la première union sont obtenus de la façon suivante :

dHazard = UnionDurationBaseline[UO_FIRST][union_duration];

De la même façon, timeUnion2DissolutionEvent() fait référence à la deuxième ligne du paramètre :

dHazard = UnionDurationBaseline[UO_SECOND][union_duration];

Contrairement aux processus dont nous avons discuté jusqu'à présent, les processus de dissolution d'une union ne débutent pas à un moment prédéfini (p. ex.le 15e anniversaire), mais au moment des événements de formation d'une union. La durée d'une union est définie comme un état dérivé autoplanifié de la forme suivante :

//EN Currently in an union
logical in_union = (union_status == US_FIRST_UNION_PERIOD1
|| union_status == US_FIRST_UNION_PERIOD2
|| union_status == US_SECOND_UNION);

//EN Time interval since union formation
int union_duration = self_scheduling_split(
active_spell_duration( in_union, TRUE), UNION_DURATION);

En ce qui concerne la formation d'une union, l'exécution de l'horloge qui modifie l'état de durée de l'union union_status de US_FIRST_UNION_PERIOD1 à US_FIRST_UNION_PERIOD2 après trois ans dans une première union nécessite une certaine discussion. Contrairement aux états dérivés autoplanifiés utilisés pour toutes les autres horloges du modèle, ici, principalement pour illustrer cette alternative, nous exécutons explicitement l'horloge comme un événement proprement dit. Cet événement a lieu après trois ans dans la première union. L'horloge est réglée au moment de la formation de la première union. La déclaration d'acteur comprend un état qui enregistre le moment du changement d'état, ainsi que la déclaration de l'événement.

actor Person
{
.

//EN Time of union period change
TIMEunion_period2_change = {TIME_INFINITE};

//EN Union period change event
eventtimeUnionPeriod2Event, UnionPeriod2Event;
};

Le temps pour le changement d'état est réglé dans l'événement de formation de la première union. Dans l'exemple de code, WAIT est une fonction Modgen intégrée qui produit le temps de l'événement courant plus une durée spécifiée (dans notre exemple, trois ans).

void Person::Union1FormationEvent()
{
unions++;
union_status = US_FIRST_UNION_PERIOD1;union_period2_change = WAIT(3);
}

L'exécution de l'événement est simple :

TIME Person::timeUnionPeriod2Event()
{
return union_period2_change;
}

void Person::UnionPeriod2Event()
{
if (union_status == US_FIRST_UNION_PERIOD1)
{
union_status = US_FIRST_UNION_PERIOD2;
}
union_period2_change = TIME_INFINITE;
}

Tables.mpp

Modgen fournit une fonction de totalisation croisée très puissante et souple pour communiquer les résultats du modèle. La programmation de chaque tableau de sortie ne requiert habituellement que quelques lignes de code. RiskPaths ne contient qu'un seul fichier de tableaux qui regroupe les déclarations de tous ses tableaux de sortie. Cependant, pour des modèles plus détaillés, il est conseillé de regrouper les déclarations de tableau par groupes de comportement.

La syntaxe de base pour les tableaux est présentée à la figure 6. Les deux éléments centraux d'une déclaration de tableau sont les dimensions de classification de capture (qui définissent quand un acteur entre dans une cellule et quand il en sort) et la dimension d'analyse (qui enregistre ce qui se passe pendant que l'acteur est dans la cellule). Habituellement, les dimensions de classification sont des intervalles d'âge ou de temps (p. ex.fécondité par âge), des états (p. ex.fécondité selon la situation d'union) ou une combinaison des deux. Modgen ne limite pas le nombre de dimensions.

La dimension d'analyse peut contenir de nombreuses expressions, qui peuvent être des états ou des états dérivés. Modgen fournit une liste très utile de fonctions d'état dérivé spéciales qui enregistrent, par exemple, le nombre d'occurrences de certains événements, le nombre de changements dans les états, ou la durée de la présence de l'acteur dans les états. Deux concepts particulièrement utiles sont le motclé unit et la fonction d'état dérivé duration(). Le premier, c'estàdire unit, enregistre le nombre d'acteurs qui entrent dans une cellule d'un tableau, tandis que duration() enregistre le temps total qu'un acteur passe dans la cellule.

Les tableaux peuvent contenir des critères filtres pour définir si et dans quelles conditions les caractéristiques de l'acteurs seront enregistrées. Le meilleur moyen de comprendre les concepts de tableaux de Modgen consiste à examiner des exemples concrets tels que celui qui suit. Comme la richesse du langage de tableau de Modgen dépasse le cadre du présent chapitre, vous êtes invité à consulter le guide du développeur de Modgen.

Figure 6 : Syntaxe des tableaux

table actor_name table_name//EN table label
[filter_criteria]
{
dimension_a *//EN dimension label
.
{
analysis_dimension_expression_x,//EN expression label
.
}
* dimension_n//EN dimension label
.
};

Tableau 1 : Espérance de vie

Le premier exemple de tableau contient les valeurs sommaires de notre simulation et ne possède aucune dimension, autrement dit les cellules s'appliquent à l'ensemble de la population sur l'entièreté de la période de simulation. Nous utilisons le motclé unit de Modgen, qui compte le nombre d'acteurs qui entrent dans une cellule d'un tableau (dans notre exemple, la simulation proprement dite) et la fonction duration() de Modgen qui additionne le temps que les acteurs passent dans cette cellule (dans notre exemple, le nombre total d'années vécues par tous les acteurs dans la simulation). L'âge moyen au décès de tous le acteurs dans la simulation est alors obtenu en divisant duration() par unit. En ce qui concerne les déclarations des paramètres, les commentaires placés dans le code sont utilisés comme étiquette dans l'application. (Notons que dans la déclaration de tableau qui suit, la partie  « decimals=3 » du commentaire est utilisée pour déterminer le nombre de décimales dans les chiffres du tableau; cette partie du commentaire n'est pas transportée jusqu'à l'étiquette utilisée dans le rapport.)

table Person T01_LifeExpectancy //EN 1) Life Expectancy
{
{
unit, //EN Total simulated cases
duration(), //EN Total duration
duration()/unit //EN Life expectancy decimals=3
}
};

Tableau 2 : Table de mortalité

Dans le deuxième tableau, nous enregistrons la population selon l'âge. Pour la sortie par âge, nous utilisons integer_age comme dimension du tableau.

table Person T02_TotalPopulationByYear//EN Life table
{
//EN Age
integer_age *
{
unit,//EN Population start of year
duration()//EN Average population in year
}
};

unit et duration() font maintenant référence au nombre d'entrées et aux durées, respectivement, dans les intervalles d'âge d'un an. Donc, unit compte les acteurs présents au début de chaque année, tandis que duration() fait référence à la population moyenne durant l'année.

Tableaux 3 et 4 : Fécondité par âge

En plus du mot-clé unit et de la fonction d'état dérivé duration(), des états et un ensemble d'autres fonctions d'état dérivé peuvent être utilisés dans les tableaux. Si l'on utilise un état sans fonction, Modgen enregistre le changement de l'état pendant qu'il est dans une cellule particulière, c'est-à-dire la valeur de l'état au moment de la sortie de la cellule moins la valeur de l'état au moment de l'entrée dans la cellule.

Par conséquent, l'expression transitions(parity_status, PS_CHILDLESS, PS_PREGNANT) /duration() enregistre la fécondité (par âge) comme étant le nombre d'événements de naissance divisé par le nombre moyen de femmes par année d'âge.

La deuxième expression est utilisée pour calculer le taux réel, c.-à-d. le nombre d'événements de naissance par durée de l'exposition. Une femme est exposée au risque d'une première grossesse quand elle est sans enfants. Nous divisons donc le nombre d'événements par le terme  « duration( parity_status, PS_CHILDLESS ) ».

La dimension du tableau est l'âge en années complètes. Comme la fécondité est nulle jusqu'à l'âge de 15 ans et est très faible après 40 ans, les périodes d'âge avant 15 ans et après 40 ans ne sont pas subdivisées. Nous définissons donc une partition AGE_FERTILEYEARS qui est utilisée dans l'instruction self_scheduling_split qui définit la dimension du tableau.

partition AGE_FERTILEYEARS //EN Fertile age partition
{
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40
};

table Person T03_FertilityByAge//EN Age-specific fertility
{
//EN Age
self_scheduling_split(age,AGE_FERTILEYEARS) *
{
//EN First birth rate all women decimals=4
transitions(parity_status, PS_CHILDLESS, PS_PREGNANT) / duration() ,

//EN First birth rate woman at risk decimals=4
transitions(parity_status, PS_CHILDLESS, PS_PREGNANT) / duration( parity_status, PS_CHILDLESS )
}
};

Le tableau 4 produit les taux de premières naissances pour les tranches d'âge de 2,5 ans utilisées pour la paramétrisation. Nous ajoutons également une autre dimension, à savoir la situation d'union; nous obtenons ainsi les valeurs simulées des paramètres du modèle.

table Person T04_FertilityRatesByAgeGroup //EN Fertility rates by age group
[parity_status == PS_CHILDLESS]
{
{
parity / duration() //EN Fertility decimals=4
}
* self_scheduling_split(age, AGEINT_STATE)//EN Age interval
* union_status//EN Union Status
};

Tableau 5 : Fécondité de la cohorte

Le tableau 5 calcule deux mesures de fécondité de la cohorte--l'âge moyen à la première grossesse et l'absence d'enfants. Pour obtenir l'âge au moment de la grossesse, nous utilisons la fonction d'état dérivé value_at_transitions(parity_status, PS_CHILDLESS ,PS_PREGNANT, age) qui produit la valeur d'un état (âge) au moment d'une transition spécifique à un autre état, nommément quand parity_status change de PS_CHILDLESS à PS_PREGNANT.

table Person T05_CohortFertility//EN Cohort fertility
{
{
//EN Av. age at 1st pregnancy decimals=2
value_at_transitions(parity_status,PS_CHILDLESS,PS_PREGNANT,age)/
parity,

//EN Childlessness decimals=4
1 - parity / unit,

//EN Percent one child decimals=4
parity / unit
}
};

Tableau 6 : Grossesses selon la situation d'union et l'ordre de l'union

Dans le tableau 6, nous utilisons un exemple de filtre qui déclenche la simulation d'une personne exactement à l'entrée dans un état, ici à la survenue de la grossesse. Nous nous intéressons à la situation d'union à la première grossesse. Notons que ce filtre exclut aussi les femmes qui demeurent sans enfants.

table Person T06_BirthsByUnion //EN Pregnancies by union status & order

[trigger_entrances(parity_status, PS_PREGNANT)]

{

{

unit //EN Number of pregnancies

}

*union_status+ //EN Union Status at pregnancy

};

Tableau 7 : Risques de formation d'une première union

Comme le tableau 4, ce tableau reproduit un tableau de paramètres. Bien qu'un tableau de sortie de ce genre ne contienne aucune information (si la taille d'échantillon est suffisamment grande, il devient très proche des paramètres originaux du modèle), il est utile pour valider le modèle et pour évaluer la variabilité Monte Carlo.

table Person T07_FirstUnionFormation//EN First union formation
[parity_status == PS_CHILDLESS]
{
//EN Age group
self_scheduling_split(age, AGEINT_STATE) *
{
//EN First union formation risk decimals=4
entrances(union_status, US_FIRST_UNION_PERIOD1)
/ duration(union_status, US_NEVER_IN_UNION)
}
};

Groupement des tableaux de sortie

Comme les paramètres, les tableaux de sortie peuvent être groupés en vue de présenter les résultats de manière plus significative. Dans l'application RiskPaths, nous distinguons trois groupes de tableaux : les tableaux de mortalité, les tableaux de fécondité et les tableaux de situation d'union.

table_group TG01_Life_Tables//EN Life tables
{
T01_LifeExpectancy, T02_TotalPopulationByYear
};

table_group TG02_Birth_Tables//EN Fertility
{
T03_FertilityByAge, T04_FertilityRatesByAgeGroup, T05_CohortFertility
};

table_group TG03_Union_Tables//EN Unions
{
T06_BirthsByUnion, T07_FirstUnionFormation
};

Tracking.mpp

Le bloc de code track{} définit la liste des états qui doivent être enregistrés longitudinalement pour produire une sortie visuelle de BioBrowser. Cette commande est souvent placée dans des fichiers de tableaux. Dans notre modèle, cependant, nous avons décidé de coder un fichier Tracking.mpp distinct, puisque nous dépistons aussi les profils de risque calculés comme des états dérivés.

track Person
{
integer_age,
life_status,
age_status,
union_duration,
dissolution_duration,
unions,
parity_status,
union_status,
preg_hazard,
formation_hazard,
dissolution_hazard
};

Le fichier comprend aussi la déclaration de trois états dérivés. Nous avons utilisé le concept d'état dérivé pour calculer les trois principaux taux de risque (grossesse, formation d'une union et dissolution d'une union) pour la sortie de BioBrowser. Nous le faisons à titre d'exemple uniquement, car tous les taux de risque, ventilés selon l'ordre de l'union, sont calculés dans les fonctions d'événement.

La déclaration des états dérivés « preg_hazard », « formation_hazard » et « dissolution_hazard » sont également de bons exemples de syntaxe pour construire des états dérivés à partir d’états simples à l’aide des conditions « if-else ».

actor Person
{
//EN Pregnancy hazard
double preg_hazard = (parity_status == PS_CHILDLESS) ?
AgeBaselinePreg1[age_status] *
UnionStatusPreg1[union_status] : 0;

//EN Union formation hazard
double formation_hazard = (union_status != US_NEVER_IN_UNION
&& union_status != US_AFTER_FIRST_UNION) ? 0 :
((union_status == US_NEVER_IN_UNION) ?
AgeBaselineForm1[age_status] :
SeparationDurationBaseline[dissolution_duration] );

//EN Union dissolution hazard
double dissolution_hazard = (union_status != US_FIRST_UNION_PERIOD1 && union_status != US_FIRST_UNION_PERIOD2
&& union_status != US_SECOND_UNION) ? 0 :
((union_status == US_SECOND_UNION) ?
UnionDurationBaseline[UO_SECOND][union_duration] :
UnionDurationBaseline[UO_FIRST][union_duration]);
};

Fichier de traduction de langue RiskPathsFR.mpp

Ce fichier .mpp existe uniquement pour les modèles qui sont définis dans Modgen comme étant multilingues (ce qui, dans le cas de RiskPaths, signifie anglais et français). Toutefois, même dans un modèle bilingue, l'une des langues, l'anglais ou le français, est encore considérée comme étant la première langue ou langue primaire du modèle. L'anglais a été choisi comme langue primaire au moment où RiskPaths a été développé et, par conséquent, le fichier RiskPathsFR.mpp contient essentiellement les traductions des étiquettes et des notes du modèle dans l'autre langue, c'estàdire le français. (Si la langue primaire originale de RiskPaths avait été le français, ce fichier de traduction aurait été appelé RiskPathsEN.mpp et il aurait contenu les traductions en anglais des étiquettes et des notes du modèle.)

Normalement, toutes les notes et étiquettes sont entrées sous forme de commentaires de code dans les fichiers sources .mpp en utilisant la langue primaire du modèle, comme nous l'avons illustré à plusieurs occasions dans les exemples qui précèdent. Les traductions correspondantes sont subséquemment placées dans ce fichier .mpp distinct.

Un outil logiciel  « Translation Assistant » d'appoint est disponible dans Modgen pour faciliter le processus de traduction en vérifiant l'ensemble complet de termes qui doivent être traduits et en ajoutant des versions uniques des entités traduites dans le fichier .mpp approprié (RiskPathsFR.mpp dans notre exemple).

Date de modification :

Introduction à Modgen

Version PDF (PDF, 497.57 Ko)

Introduction

Modgen a été conçu pour faciliter la programmation de modèles de microsimulation. Son but est d'enlever autant que possible les obstacles à la création d'un modèle de microsimulation. Voici quelques uns de ces obstacles.

  • Programmation de l'interface
  • Documentation
  • Programmation de l'engin de simulation
  • Bilinguisme

Ces obstacles sont tous supprimés par l'utilisation de Modgen puisque Modgen fournit l'interface et l'engin de simulation, est bilingue et facilite la documentation. Évidemment, cette liste n'est pas exhaustive et n'est donnée qu'à titre d'exemple.

Une conséquence de l'utilisation de Modgen pour créer un modèle de microsimulation est la non nécessité d'engager un programmeur pour programmer le modèle. En effet, Modgen s'occupe de la majorité de la programmation. Ce qu'il reste est normalement suffisamment simple pour qu'une personne n'ayant pas de connaissances approfondies en programmation puisse le faire. Il se peut même que le fait d'avoir des connaissances approfondies en programmation soit nuisible puisque le concepteur doit alors se limiter à un style de programmation qui sera comprise par l'analyste responsable du modèle.

Aussi, il n'est pas nécessaire pour utiliser Modgen de comprendre en détail ce qu'il fait. Toutefois, il peut être utile d'avoir une idée générale de ce que fait Modgen. C'est ce que tente de faire le présent document.

Installation de Modgen

Il y a deux produits, et donc deux programmes d'installation, reliés à Modgen. Ces produits sont :

  • Composants préalables à Modgen 12
  • Modgen 12

Voici ce que chacun de ces produits contient ainsi qu'une description de leur utilité.

Composants préalables à Modgen 12

De façon générale, les Composants Préalables à Modgen 12 contiennent tout ce qui est nécessaire pour que les modèles fonctionnent sur une machine. Si un concepteur souhaite distribuer un modèle, il faut donc que les utilisateurs du modèle installent les Composants Préalables à Modgen 10 avant d'installer le modèle. Ce produit contient :

  • Licence pour l'utilisation des modèles Modgen
  • Documentation pour l'utilisateur des modèles Modgen : Cette documentation concerne les utilisateurs des modèles. Elle ne fournit aucune aide pour la création des modèles. De façon générale, il s'agit de l'information concernant l'interface des modèles. Cette documentation comprend :
    • Guide de l'interface visuelle de Modgen 12
    • Notes de publication des Composants Préalables à Modgen 12
  • Application Cleaner : Cette application nettoie les fichiers temporaires oubliés sur une machine lorsqu'une simulation d'un modèle échoue. Si la simulation termine avec succès, il ne reste aucun fichier temporaire. Elle est installée avec les Composants Préalables à Modgen 12 et est exécutée à chaque nouvelle session Windows. Il est également possible de la démarrer manuellement mais alors, il faut éviter de le faire lorsqu'une simulation est en cours.
  • Serveur automatisé de Modgen : Un composant permettant à un autre programme la lecture en l'enregistrement des fichiers des paramètres d'un scénario.
  • Composants préalables de Microsoft : Quelques fichiers fournis par Microsoft qui sont requis pour tourner un modèle Modgen.

Modgen 12

De façon générale, Modgen 10 contient ce qui est nécessaire au développement de modèles. Évidemment, Visual Studio 2015 ou 2017 est nécessaire et n'est pas inclus dans Modgen 12! Précisément, ce produit contient :

  • Les Composants Préalables à Modgen
  • Ce qui est nécessaire à la création d'un nouveau modèle : Cela inclut le pré-compilateur Modgen, la bibliothèque et des fichiers d'entête.
  • Documentation pour le concepteur de modèles : Cette documentation concerne les concepteurs de modèles. Elle fournit donc de l'aide concrète sur la création de modèles, la syntaxe à utiliser, etc. Cette documentation comprend :
    • Guide du concepteur de Modgen 12
    • Notes de publication de Modgen 12
  • Capacités d'intégration avec Visual Studio

Il y a trois composants principaux qui forment Modgen. Ces composants sont :

  • Pré-compilateur Modgen
  • Bibliothèque Modgen
  • Serveur automatisé

Les deux premiers composants sont utilisés ensemble pour créer des modèles et seront décrits dans le document. Le serveur automatisé, qui permet d'accéder aux fonctions de lecture et d'écriture de fichiers de paramètres, ne sera pas discuté dans le présent document.

En rappel, le schéma suivant illustre les liens entre les fichiers nécessaires à la création d'un fichier exécutable de modèle de simulation dans le cadre de l'application. Il présente aussi les entrées et les sorties dont a besoin le fichier exécutable du modèle.

Composants de Modgen
Description : Composants de Modgen

Le pré-compilateur Modgen prend le code source (fichiers mpp) et produit les fichiers C++ suivants :

  • actors.h
  • actors.cpp
  • tabinit.h
  • tabinit.cpp
  • model.h
  • model.rc
  • parse.inf

Ces fichiers, ainsi que la bibliothèque Modgen, sont compilés par le compilateur C++ pour créer un exécutable. Cet exécutable lit les fichiers .sce et .dat et produit des tableaux.

Notons que Modgen n'est pas indépendant de Visual Studio. Les concepteurs de modèles doivent avoir la version de Visual Studio correspondante afin de pouvoir créer les modèles (Visual Studio 2015 ou 2017 pour Modgen 12).

Pré-compilateur

Le pré-compilateur est l'exécutable « Modgen.exe ». Le langage Modgen dans lequel un concepteur écrit un modèle est une extension du langage C++. Avant d'être compilé, le code des modèles doit être transformés en code C++. C'est ce que fait le pré-compilateur. Il lit les fichiers .mpp contenant le code du modèle et crée les fichiers .cpp équivalents, en plus des fichiers spéciaux nécessaires à la création du modèle. De façon générale, le pré-compilateur Modgen a la responsabilité de comprendre le modèle de données du modèle voulu et de l'implanter. Voici une description plus précise de ce que fait Modgen, à l'étape de pré-compilation :

  • Vérifie que la syntaxe est correcte pour tout élément du langage Modgen. La syntaxe C++ sera par la suite vérifiée par le compilateur C++.
  • Vérifie que les fonctions essentielles comme « Simulation » sont présentes dans le code du modèle.
  • Comprend les acteurs et crée les classes en rassemblant toutes les déclarations des acteurs éparpillées dans les fichiers .mpp
  • Comprend les tableaux voulus et crée les classes pour les tableaux
  • Comprend les relations entre les états et les autres symboles (états dérivés, événements, tableaux) et crée le code nécessaire pour maintenir ces relations
  • Crée le code nécessaire pour mettre à jour le temps pour chaque acteur
  • Crée une structure interne permettant au modèle de créer un système d'aide du modèle au besoin et de façon autonome.

Notons que cette liste n'est pas exhaustive. Le pré-compilateur est appelé automatiquement lorsqu'un mode est compilé.

Bibliothèque

La bibliothèque de Modgen contient les éléments que tous les modèles ont en commun. Lors de la compilation, des liens seront faits avec la bibliothèque Modgen de façon à l'incorporer dans l'exécutable du modèle. De cette façon, chaque modèle est un exécutable indépendant. Entre autres, elle contient :

  • l'interface de tout modèle Modgen
  • l'engin de simulation
  • le générateur d'aide

Le langage C++ requiert quelques fichiers d'entête pour incorporer la bibliothèque dans un modèle. Ces fichiers sont installés avec Modgen. En plus de la bibliothèque de Modgen, il y a d'autres bibliothèques et fichiers d'entêtes de Microsoft qui sont fournis avec Visual Studio et incorporés dans le modèle.

Bilinguisme

La loi canadienne exige que toute application logicielle créée par un organisme du gouvernement du Canada soit bilingue, c'est-à-dire que le français et l'anglais soient traités également. Modgen étant une application logiciel créée à Statistique Canada, il se doit d'être bilingue. Toutefois, dans le cas de Modgen, il y a plus d'un niveau au bilinguisme requis. De fait, Modgen est une application qui permet de créer des applications. Il est donc nécessaire que Modgen soit bilingue, mais aussi qu'il permette de créer des applications bilingues.

Pré compilateur

Modgen lui-même est bilingue. Le français et l'anglais sont traités aussi également qu'il est possible de le faire. La langue choisie soit nécessairement être donnée en argument dans la ligne de commande du pré compilateur.

Exemple :

c:\Program Files\StatCan\Modgen 12\Modgen.exe -FR

En pratique, le pré compilateur Modgen est appelé lorsqu'un modèle est compilé. On peut changer la langue choisie de Modgen avec un utilitaire installé avec Modgen qui s'appelle Langue Modgen Language.

Modèles

Modgen contient tout ce qui est nécessaire pour que l'interface des modèles soit bilingue, c'est-à-dire en français et en anglais. De plus, il est possible et très simple pour les concepteurs de modèles d'utiliser d'autres langues que le français et l'anglais. Il suffit alors de traduire l'un des fichiers contenant toutes les chaênes de caractères de Modgen (ModgenEN.mpp, ModgenFR.mpp) et de l'inclure dans le modèle comme module.

Même si Modgen est bilingue, l'interface n'aura que la(les) langue(s) définie(s) dans le modèle. Pour obtenir le bilinguisme dans un modèle, il faut définir le modèle comme étant bilingue. Voici comment définir les langues utilisées au gouvernement du Canada :

// Voici les langues dans lesquelles le modèle peut être vu
languages
{
	EN,	// English
	FR	// Français
};

Il ne faut pas oublier que tout modèle distribué par le gouvernement du Canada doit être bilingue. Il se peut qu'il ne soit pas clair si un modèle est un logiciel ou un produit de données. Peu importe, puisque dans les deux cas, il doit être entièrement bilingue s'il est produit par un organisme du gouvernement du Canada.

Éléments d'un modèle Modgen

Modgen permet de créer deux types de modèles différents :

  • Modèles de cas : Un modèle de cas est un modèle dans lequel la simulation se déroule cas par cas. Un cas est alors typiquement constitué d'un acteur principal avec, au besoin, quelques acteurs secondaires formant son entourage. Toutefois, dans certains modèles, il est possible d'avoir plus d'un acteur principal par cas si, par exemple, un cas simule une famille. Le nombre de cas à simuler est défini comme paramètre de contrôle de l'exécution. Les modèles « LifePaths », « PopSim », et « Pohem » sont des exemples de modèles de cas.
  • Modèles basés sur le temps : Un modèle basé sur le temps est un modèle dans lequel est simulé une population, ensemble, pendant un certain temps. La durée de la simulation est alors définie comme paramètre de contrôle de l'exécution. Les modèles « CVMM » et « HIVMM » sont des exemples de modèles basés sur le temps.

Contenu d'un modèle

Les modèles de cas et les modèles basés sur le temps sont constitués de symboles Modgen. Ce sont ces symboles et les relations entre eux qui gèrent la simulation. Une courte description de chaque catégorie de symboles est donnée ici. Pour une description plus détaillez, veuillez vous référer au Guide du concepteur de Modgen 12.

Acteurs

Tout d'abord, les modèles Modgen simulent la vie d'un acteur. Un acteur peut être n'importe quelle entité que le concepteur de modèle souhaite simuler. Ce peut être une personne, un logement, un plan de pension, etc.

Les acteurs sont définis par leurs :

  • États
  • Événements
  • Fonctions
  • Crochets
États

Les états décrivent les caractéristiques de l'acteur. Il existe deux grandes catégories d'états dans un modèle Modgen :

  • États simples
  • États dérivés
États simples

Les états simples sont les états dont la valeur n'est pas maintenue automatiquement par Modgen. Plutôt, la valeur des états simples est modifiée dans le code créé par le concepteur de modèle. Les états simples ne doivent être modifiés qu'à l'intérieur d'un événement, ou d'une fonction appelée à l'intérieur d'un événement.

Exemple :

int age_int;	//FR Âge intègre

Les états simples peuvent avoir une valeur initiale. Afin de les distinguer des états dérivés, on assigne une valeur initiale à un état simple en utilisant des accolades.

Exemple :

int age_int = {0} ;	//FR Âge intègre
États dérivés

Les états dérivés sont les états dont la valeur est indiquée sous forme d'expression dans la déclaration. Modgen maintient la valeur de ces états tout au long de la simulation. Habituellement, ces états sont dérivés d'autres états, d'où leur nom.

Exemple :

//FR Année
MODELED_TIME modeled_year = COERCE(MODELED_TIME, year);

En plus des expressions simples comme dans l'exemple précédent, il existe également des fonctions que le concepteur de modèle peut choisir d'utiliser pour créer des états dérivés.

Exemple :

//FR Âge au début de l'année
int age_debut_annee = value_at_latest_change( annee, age_int);
Types

Généralement, les états sont déclarés de type :

  • Entier (int)
  • Réel (float ou double)
  • Logique (logical)
  • Temps (TIME)
  • Avec un type créé dans le modèle (classification, étendue, partition)
Événements

Les événements ont un rôle clé dans les modèles Modgen puisque c'est par l'exécution d'événements que la simulation est faite. Ces événements sont constitués d'une paire de fonctions :

  • fonction pour déterminer le temps de l'événement
  • fonction pour déterminer les conséquences de l'événement

Le temps des événements est mis à jour au besoin. Lorsque le temps doit être recalculé, Modgen évalue de nouveau la valeur de la fonction temps de l'événement. Modgen suppose que le temps de l'événement doit être recalculé lorsque :

  • un des états utilisés dans la fonction temps de l'événement a changé de valeur
  • l'événement a eu lieu.

La fonction temps de l'événement ne devrait pas affecter les acteurs. Cela implique que les états ne peuvent en aucun cas être modifiés à l'intérieur d'une fonction temps d'un événement. Le pré-compilateur Modgen veille à ce que ça soit respecté.

C'est tout le contraire pour la fonction de l'événement. La fonction qui détermine les conséquences de l'événement est en fait ce qui est exécuté lorsque l'événement a lieu. C'est à l'intérieur des fonctions d'événements que les états sont modifiés. Un état ne devrait jamais être modifié à l'extérieur d'un événement, ou d'une fonction appelée par la fonction de l'événement, une fois l'initialisation terminée. Modgen veille à ce que ça soit respecté.

Fonctions

Il est possible d'utiliser des fonctions membres d'un acteur pour généraliser une section de code qui sera utilisée dans un ou plusieurs événements. De façon générale, il est nécessaire de créer une fonction lorsqu'une partie de code sera réutilisée à plusieurs endroits. Dans un tel cas, l'utilisation d'une fonction simplifie la maintenance puisque lorsque le code doit être modifié, il ne doit être modifié qu'à un seul endroit. Ne pas utiliser une fonction dans ces cas là augmente le risque éventuel d'introduire des bogues. Parfois, on peut souhaiter utiliser une fonction même si le code n'est pas réutilisé, soit parce qu'il le sera éventuellement, soit afin d'obtenir plus de modularité.

En plus des fonctions créées par le concepteur du modèle, il existe des fonctions que tout acteur doit posséder. Il s'agit des fonctions « Start » et « Finish »

Fonction « Start »

La fonction « Start » doit être présente pour chaque acteur. Elle sera appelée une fois pour chaque acteur, lors de sa création. Elle contient l'initialisation de l'acteur, y compris l'initialisation faite par Modgen. Notons qu'un état initialisé dans la fonction « Start » n'affecte ni les tableaux, ni les états dérivés tels que « entrances() ». Pour cette raison, il vaut mieux faire ces initialisations dans la fonction « Start » et non dans la fonction qui crée l'acteur. Si le concepteur de modèle n'a aucune initialisation à faire et n'a pas inclus la fonction « Start », Modgen créera une fonction contenant simplement l'initialisation des états aux valeurs de défaut faite par Modgen.

Exemple 1 :

actor Personne	//FR Personne
{
	void Start();	//FR Initialise une nouvelle personne
};

void Personne::Start()
{
}

Exemple 2 :

actor Personne	//FR Personne
{
	//FR Commence Personne
	void Start( int nObs, logical lImmigrant, double dTempsDebut, logical lEnfant, Personne *prMere ); 
};  

/*NOTE(Personne.Start, FR)
	Cette fonction commence la personne.
*/
void Personne::Start( int nObs, bool bImmigrant, TIME tTempsDebut, bool bEnfant) 
{
	immigre_apres_recensement = bImmigrant;
	num_recense = nObs;

	ne_apres_recensement = bEnfant;

	time = CoarsenMantissa(tTempsDebut);
...
	vivant = TRUE;
	emigrant = FALSE;
   
	// Année 
	annee = (int) time;
};

Dans l'exemple précédent, les états « vivant » et « emigrant » auraient dê être initialisés à même leur déclaration. De façon générale, les états initialisés dans la fonction « Start » sont les états dont la valeur n'est pas constante, mais peut dépendre, par exemple, des valeurs données en argument à la fonction.

Fonction « Finish »

Il existe aussi une fonction « Finish » pour contenir tout ce qui doit être fait lorsqu'un acteur est détruit. Par exemple, on peut vouloir que tous les acteurs auxquels l'acteur est lié soient détruits également. Si le concepteur de modèle n'a rien de particulier à faire avant que l'acteur soit détruit et a omis la fonction « Finish », alors Modgen créera une fonction de base automatiquement. Notons que Modgen détruit tout lien aux autres acteurs lorsque la fonction « Finish » est appelée, sans toutefois appeler la fonction « Finish » de ces acteurs.

Exemple :

actor Personne	//FR Personne
{
	void Finish();	//FR Termine Personne 
};  

void Personne::Finish()
{
    // Vide pour le moment
}
Crochets

Les crochets permettent de relier des fonctions à des événements ou à d'autres fonctions. Cela permet de diviser un événement ou une fonction en différentes sections qui appartiennent à des modules différents.

En particulier, on utilise beaucoup les crochets avec les fonctions « Start » et « Finish » afin de faire l'initialisation qui se rapporte à un module à l'intérieur de ce module même. Par défaut, tous les crochets s'insèreront à la fin d'une fonction. Si on souhaite qu'ils soient tous insérés à un autre endroit, on peut le faire en définissant « IMPLEMENT_HOOK » à l'endroit approprié de la fonction.

Voici un exemple où les crochets s'inséreront au début de la fonction :

/* NOTE(Person.Finish,FR) 
	Fonction qui nettoie l'acteur, une fois qu'il a terminé.
*/
void Person::Finish()
{
	Person	*prChild = {NULL};
	int		 nIndex = {0};

	IMPLEMENT_HOOK();
...
	if ( tentative && sex == FEMALE ) 
	{
		mlChildren->FinishAll();
		mlChildrenAtHome->FinishAll();
		mlBiologicalChildren->FinishAll();
	}
}

Notons que dans le cas de la fonction « Finish », il fait plus de sens d'avoir les crochets au début de la fonction puisqu'à la fin de la fonction, les propriétés de l'acteur ne sont plus valides.

Il arrive aussi qu'on veuille insérer quelques crochets à un endroit différent des autres. On peut alors créer une fonction intermédiaire à laquelle se raccrochent les crochets, et appeler cette fonction au bon endroit.

Exemple :

actor Person	//FR Individu principal
{
	void Start( ...);	//FR Fonction qui lance l'acteur Personne
	void StartClockHere();	//FR Fonction fictive Start Clock

};

/* NOTE(Person.StartClockHere,FR) 
Fonction fictive qui permet d'initialiser l'horloge avant toutes 
les autres fonctions accrochées et fonctions dérivées.
*/
void Person::StartClockHere()
{
}

void Person::Start( ... )
{
...
	time = birth;
	StartClockHere(); 
...	
	year_of_birth = year;
	month_of_birth = month_of_year;
	day_of_birth = day_of_month;
...	
}

Dans cet exemple, la fonction « StartClockHere » sera exécutée immédiatement après que le temps ait été initialisé. Les autres crochets à la fonction « Start » ne sont exécutés qu'à la fin de la fonction. Ça leur permet d'utiliser les états de l'horloge tels que « year », « month », etc. pour initialiser d'autres états. La fonction « StartClockHere » ne contient pas de code, mais des crochets s'y rattachent :

actor Person	//FR Individu principal
{
	//FR Initialise l'horloge à la naissance de l'acteur
	void StartClock();	

	hook StartClock, StartClockHere;
};

C'est la fonction « StartClock », définie dans un autre module, qui contient le code qui initialise l'horloge et ses états, comme « year », « month », etc.

Ensembles d'acteurs

Les ensembles d'acteurs sont des collections d'acteurs maintenues dynamiquement par Modgen. Cela signifie que Modgen s'occupe de l'adhésion au groupe selon le critère fourni par Modgen. Les ensembles d'acteur peuvent être multidimensionnels. Dans ce cas, les dimensions sont constituées d'états des acteurs regroupés en ensembles. Pour chaque combinaison de valeur des dimensions, un sous-ensemble est créé. L'appartenance d'un acteur à un seul sous-ensemble est automatiquement maintenue par Modgen. Pour en savoir davantage sur les ensembles d'acteurs, vous pouvez vous référer au Guide du concepteur de Modgen.

Liens

Les liens définissent des relations entre acteurs de même type ou de type différents. Il peut y avoir des liens d'un acteur à un seul autre acteur, d'un acteur à plusieurs acteurs, ou de plusieurs acteurs à plusieurs acteurs. Dans tous les cas, les liens réciproques sont automatiquement créés et maintenus par Modgen. Cela implique que le code du modèle n'a qu'à assigner l'un des liens et le lien réciproque sera modifié pour refléter le changement.

Exemples de liens :

// Déclare le lien un-à-plusieurs pour l'appartenance à une famille 
link
	Person.lFamily	//FR Famille
	Family.mlMembers[]	//FR Membres de la famille 
;

// lien entre parents et enfants 
link 
	Person.mlChildren[]	//FR Enfants
	Person.mlParents[]	//FR Parents 
;

// lien entre la personne et son(sa) conjoint(e) 
link Person.lSpouse;	//FR Conjoint(e)

Pour de plus amples renseignements sur les liens, vous pouvez vous référer au Guide du concepteur de Modgen 12.

Paramètres

Les paramètres permettent à l'utilisateur du modèle d'avoir un certain contrôle sur la simulation. Les paramètres devraient être utilisés partout où le concepteur souhaite donner du contrôle à l'utilisateur du modèle. Le fait de permettre à l'utilisateur du modèle de préciser des hasards pour contrôler différents aspects de la simulation, par exemple, donne à l'utilisateur la possibilité d'explorer différents scénarios.

Il existe deux grandes catégories de paramètres :

  • paramètres
  • paramètres générés par le modèle
Paramètres

Il s'agit de la catégorie la plus fréquente. On utilise un paramètre lorsqu'on laisse à l'utilisateur le soin d'entrer une valeur. Les valeurs des paramètres se trouvent dans les fichiers .dat. L'utilisateur contrôle donc directement la valeur de ces paramètres.

Exemple :

parameters 
{
	//FR hazard total de mortalité (m total) 
	double MortHazard[MODELED_AGE][SEX];
};
Paramètres générés par le modèle

Il s'agit de paramètres qui doivent être dérivés, souvent à partir d'autres valeurs données en paramètres. Pour chaque paramètre généré par le modèle, il doit y avoir du code correspondant dans la fonction « PreSimulation » décrite à la section suivante.

Exemple :

parameters 
{
	//FR Hasards de mortalité résiduels 
	model_generated double 
		ResidualMortHazard[MODELED_AGE][SEX];
};

Tableaux

Les tableaux forment la sortie des modèles Modgen. Il existe deux types différents de tableaux :

  • tableaux : Les tableaux croisés d'un modèle génèrent des résultats agrégés d'une simulation.
  • tableaux d'utilisateurs : Ces tableaux sont mal nommés. Il ne s'agit pas ici des utilisateurs des modèles mais des utilisateurs de Modgen. Autrement dit, il s'agit des concepteurs de modèles! Les tableaux d'utilisateurs permettent aux concepteurs de modèle de créer du code qui calcule la valeur de chaque cellule. Pour chaque tableau d'utilisateur, du code doit être placé dans une fonction « UserTables » pour contrôler le contenu du tableau. Typiquement ce code lit et combine des valeurs de différents tableaux pour en créer d'autres.

Groupes de tableaux ou de paramètres

Il est possible de regrouper certains symboles en groupes. Ces groupes servent surtout à regrouper les symboles dans l'interface du modèle mais sont également décrits dans l'aide générée par Modgen du modèle. Les symboles qu'il est possible de grouper sont :

  • paramètres du modèle
  • paramètres générés par le modèle
  • tableaux et tableaux d'utilisateurs

L'appartenance d'un symbole à un groupe doit être précisée dans la déclaration du groupe. Notons qu'un groupe peut toujours contenir un autre groupe du même genre, ce qui permet de créer une hiérarchie.

Exemple d'un groupe de paramètres :

parameter_group DEMOGRAPHIE	//FR Paramètres démographiques
{
	HasardMortalite, HasardNatalite, AgeMaximal, ProbabiliteGarcon, VariationFecondite
};

Exemple d'un groupe de tableaux :

table_group TableauxDemographiques {	//FR Tableaux démographiques
    TauxNaissance,
    Population,
    Population5Ans
};

Types

Les symboles de type sont des symboles de support. Ils ne sont pas essentiels à la simulation puisqu'ils ne jouent aucun rôle précis dans le déroulement d'un modèle. Toutefois, ils sont partout puisqu'ils servent à définir d'autres symboles comme les états ou les paramètres. Ils servent également à donner des étiquettes aux tableaux. Il y a trois catégories de symboles de types :

  • Classifications
  • Étendues (« range »)
  • Partitions
Classifications

Une classification est un ensemble de niveaux ou de catégories avec leurs étiquettes.

Exemple :

classification LANGUE2 
{
	//FR francophone
	L2_FRANCO,
	//FR non francophone
	L2_NON_FRANCO
};
Étendues

Une étendue est un intervalle de nombres entiers.

Exemple :

range AGE_NATALITE {15, 49} ;	//FR Âge pour les taux de natalité
Partitions

Une partition est un ensemble de points limites d'une variable d'état continue (ou discrète).

Exemple :

//FR Groupes d'âge
partition GROUPE_AGE 
{ 
	5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100 
};

Les descriptions présentées ici sont tirées du Guide du concepteur de Modgen 12. Vous pouvez vous y référer pour une description plus complète.

Déroulement d'un modèle

En plus des symboles contenus dans le modèle, le modèle est également constitué d'une série de fonctions générales qui en contrôlent le déroulement. Le déroulement présenté ici est celui d'un modèle de cas. Toutefois, la majorité de ce qui est présenté ici s'applique également aux modèles basés sur le temps. Notons que cette section ignore la question du traitement en parallèle qui est intégré à Modgen.

Lecture des paramètres

La première étape d'une simulation d'un modèle de cas ou basé sur le temps est la lecture des paramètres. Il n'est pas nécessaire de créer une fonction globale dans le code du modèle pour gérer la lecture ou la modification interactive des paramètres. Cela est fournit par Modgen.

Validation des paramètres

Modgen comprend des fonctions permettant au concepteur de valider et modifier les valeurs des paramètres fournies par l'utilisateur. Pour de plus amples renseignements sur ces fonctions, vous pouvez vous référer au Guide du concepteur de Modgen 12.

Pré-simulation

Après la lecture des paramètres vient la phase de pré-simulation. La phase de pré-simulation ne fera rien du tout à moins que le concepteur du modèle ait défini une fonction « PreSimulation » ou plus. Notons qu'il est possible de créer plus d'une fonction « PreSimulation » afin d'avoir plus de modularité. Dans une version future de Modgen, il sera même possible de préciser l'ordre d'exécution des fonctions PreSimulation d'un modèle.

Habituellement, les fonctions «PreSimulation » servent à calculer les paramètres générés par le modèle. À ce stade, il n'y a toujours qu'un seul fil d'exécution alors on peut modifier les paramètres générés par le modèle sans craindre les collisions entre différents fils d'exécution. De plus, il est impossible pour une fonction « PreSimulation » de modifier les acteurs, puisque les acteurs n'ont pas encore été créés.

Exemple :

parameters 
{
	//FR Hasards de mortalité totaux ( m total) 
	double MortHazard[MODELED_AGE][SEX];

	//FR Hasards de mortalité due à la maladie X de la population(mx)
	double MortHazardX[MODELED_AGE][SEX];

	//FR Hasards de mortalité due à la maladie C de la population(mc)
	double MortHazardC[MODELED_AGE][SEX];

	//FR Hasards de mortalité résiduels 
	model_generated double 
		ResidualMortHazard[MODELED_AGE][SEX];
};

void PreSimulation()
{	int nAge = {0};
	int nSex = {0};
	int nTime = {0};

	for (nAge = 0; nAge < SIZE(MODELED_AGE); nAge++)
	{
		for (nSex = 0; nSex < SIZE(SEX); nSex++)
		{
			// Calcul des hazards de mortalité résiduels 
			ResidualMortHazard[nAge][nSex] = 
				MortHazard[nAge][nSex] 
					– MortHazardC[nAge][nSex] 
					– MortHazardX[nAge][nSex];
		}
	}
}

Simulation

Une fois la pré-simulation terminée commence la phase de simulation. Le modèle doit absolument contenir une fonction « Simulation ». Typiquement, dans le cas d'un modèle de cas, il s'agira simplement d'une boucle appelant la fonction « CaseSimulation » pour chaque cas du modèle.

Exemple :

void Simulation()
{
	long  lCase = 0;
	
	for ( lCase = 0; lCase < CASES() && !gbInterrupted && !gbCancelled && !gbErrors; lCase++ )
	{
		StartCase(); 
		CaseSimulation(); 
		SignalCase();
	}
}

La fonction « Simulation » est plus compliquée pour un modèle basé sur le temps, parce qu'elle doit également créer la population de début. Elle doit également contenir la boucle d'événements contenue dans la fonction « CaseSimulation » présentée ci-bas pour les modèles de cas.

Notons que cette fonction est incluse dans les modèles créés par un des assistants de création d'un modèle de Modgen.

CaseSimulation

Dans un modèle de cas, Modgen n'exige pas une fonction appelée « CaseSimulation ». Par contre, l'utilisation d'une telle fonction simplifie le code. Cette fonction est responsable de la simulation d'un cas, et commence par créer l'acteur de départ du cas. C'est à l'intérieur de cette fonction que doit se trouver la boucle d'événements contrôlant la simulation du cas.

Exemple d'une boucle d'événements :

// boucle d'événements pour le cas actuel 
while ( !gpoEventQueue->Empty() ) 
{
	if ( gbCancelled || gbErrors)
	{
		// en cas d'erreurs, ferme le cas, détruis tous les acteurs 
		gpoEventQueue->FinishAllActors();
	}
	else 
	{
		// avance le temps des acteurs au temps de l'événement suivant	
		gpoEventQueue->WaitUntil( gpoEventQueue->NextEvent() );
	
		// exécute l'événement suivant 
		gpoEventQueue->Implement();
	}
}

Cette boucle est au cour de la simulation d'un modèle et ne devrait être modifié qu'avec grand soin. Notons d'ailleurs qu'elle est incluse dans les modèles créés par un des assistants de création d'un modèle de Modgen.

Dans les faits, cette boucle contrôle l'engin de simulation de Modgen. À l'intérieur de l'engin de simulation, il y a une queue d'événements qui maintient le temps d'attente de chaque événement du modèle. Cette queue est ordonnée de sorte que les événements sont exécutés en un ordre précis. L'engin de simulation à l'intérieur de Modgen exécute les événements dans l'ordre suivant :

  • l'événement ayant le temps le plus rapproché est exécuté en premier
  • Si les temps sont identiques, alors l'événement ayant la plus haute priorité est exécuté en premier
  • Si les priorités sont également identiques, alors les événements sont exécutés en ordre alphabétique
  • Si les noms sont aussi identiques, alors l'événement de l'acteur créé en premier dans la simulation est exécuté en premier.

Notons que si les noms sont identiques, alors il s'agit forcément d'événements d'acteurs différents puisque les événements ne se trouvent qu'une seule fois par acteur dans la queue d'événements.

PostSimulation

Au besoin, le concepteur de modèles peut définir une fonction « PostSimulation ». Si elle est définie, cette fonction est exécutée après la phase de simulation, mais avant la tabulation des données. Il est rare que cette fonction soit utile. Toutefois, si des variables globales sont utilisées dans le modèle, il peut être utile de les réinitialiser dans cette fonction. De cette façon, si l'utilisateur redémarre une simulation sans avoir fermé le modèle, les variables globales sont initialisées aux mêmes valeurs que lors de la première simulation.

Tabulation

La dernière phase produit les tableaux. Cette expression est toutefois trompeuse puisque la tabulation dans Modgen est faite au fur et à mesure. Il s'agit simplement ici d'enregistrer les tableaux produits pendant la simulation dans la base de données de sortie.

Toutefois, les tableaux d'utilisateurs sont calculés à cette étape avant d'être enregistrés dans la base de données. C'est à cette étape que sont exécutées les fonctions « UserTables » créées par le concepteur du modèle pour calculer les valeurs des cellules des tableaux d'utilisateur.

Date de modification :

Télécharger

Sommaire

Chacun des produits suivants a son propre assistant qui vous permet d'exécuter ou d'enregistrer le fichier exécutable correspondent. Lorsque vous serez prêt à exécuter ou à installer le produit, l'assistant vous demandera de choisir la langue d'installation. Ensuite, il vous présentera un contrat de licence que vous devez accepter afin de pouvoir continuer. Ensuite, l'assistant vous demandera de confirmer la destination, après quoi vous pourrez finalement installer le produit.

Ces produits ont été testés sur les systèmes d'exploitation Windows 7 SP1, Windows 8 et Windows 10. Les concepteurs de modèles doivent également avoir une copie de Microsoft Visual Studio 2015 ou 2017 (édition « Community », « Pro », ou « Enterprise »).

Si vous avez des difficultés avec l'installation, veuillez contacter statcan.microsimulation-microsimulation.statcan@statcan.gc.ca.

Modgen 12 (pour Visual Studio 2015 ou 2017)

Modgen 12 installe tout logiciel et documentation nécessaire à la modification de modèles existants ainsi qu’à la création de nouveaux modèles. Modgen 12 inclut aussi les fichiers qui sont dans les Composants Préalables à Modgen. Les machines sur lesquelles aucun développement n'aura lieu (les machines qui ne seront utilisées que pour exécuter des modèles) requièrent seulement les Composants Préalables à Modgen, et non Modgen-même. Visual Studio doit être installé avant l’installation de Modgen. La Configuration du système Modgen explique quelles options de Visual Studio 2015 et 2017 doivent être installées pour le fonctionnement de Modgen ainsi que la façon de configurer Modgen lorsqu’installé.

Téléchargez la version 12.1 de Modgen (EXE, 66.1 Mo)

Composants préalables à Modgen

Les Composants Préalables à Modgen installent tout ce qui est nécessaire pour exécuter un modèle créé avec Modgen. Cela inclut un fichier « .chm » (aide compilée) correspondent au Guide de l'interface visuelle Modgen.

Téléchargez la version 12 des Composants Préalables à Modgen (EXE, 51.7 Mo)

Exemple d'un modèle – RiskPaths 4

RiskPaths est un modèle de microsimulation simple, à temps continu, basé sur les cas et à risques concurrentiels; originalement développé pour étudier les changements de fertilité dans la Russie et la Bulgarie post-transitoires. Ce modèle est principalement utilisé comme outil d'enseignement, par exemple dans des cours à l'Ecole Doctorale Européenne de Démographie. Il démontre ce que la microsimulation peut ajouter à l'analyse d'histoire d'événements et comment les modèles de microsimulation démographiques peuvent être programmés efficacement avec le langage Modgen. RiskPaths a aussi, jusqu'à présent, été utilisé comme point de départ pour deux études; en France et au Canada. Le modèle sera installé dans un répertoire spécifique à l’utilisateur. Veuillez noter que les droits d’administrateurs ne sont pas requis pour l’installation de ce modèle.

Téléchargez le modèle RiskPaths 4 (EXE, 1.39 Mo)

Exemple d'un modèle – IDMM 3

IDMM (« Infectious Disease Microsimulation Model ») est un modèle de microsimulation simple, à risques concurrentiels, basé sur le temps et avec temps continu, qui simule une maladie hypothétique se propageant à travers un réseau social d'hôtes. Le réseau social est construit au début de la simulation. Les interactions sociales sont ensuite modélisées comme des événements distincts d'interactions qui surviennent entre des paires d'hôtes à travers le temps. La maladie peut se propager d'un hôte infectieux à un hôte susceptible lors de ces interactions. Le réseau social change à travers le temps, parce que dans ce modèle un hôte en bonne santé a tendance à abandonner ses contacts malades et à les remplacer par de nouveaux contacts. Une fois infecté, un hôte entre dans une phase de latence, suivie par une phase d'infection puis par une phase d'immunité. À la fin de la phase d'immunité, l'hôte redevient susceptible. IDMM démontre comment de grandes populations avec interactions peuvent être modélisées efficacement dans le temps continu avec le langage Modgen. Le modèle sera installé dans un répertoire spécifique à l’utilisateur.  Veuillez noter que les droits d’administrateurs ne sont pas requis pour l’installation de ce modèle.

Téléchargez le modèle IDMM 3 (EXE, 1.22 Mo)

Exemple d'un modèle – MicroParam 2

MicroParam est un modèle de microsimulation simple, à temps continu, basé sur les cas et à risques concurrentiels, qui illustre comment utiliser des microdonnées dans un paramètre afin de créer une population de départ. Cette technique est utile comme point de départ, ou lorsque le fichier de microdonnées est relativement petit. Pour de gros fichiers de microdonnées, utiliser un paramètre pour les microdonnées causera un manque de mémoire. Pour ces gros fichiers de microdonnées, utiliser un fichier binaire ou .csv est une meilleure technique. Le modèle sera installé dans un répertoire spécifique à l’utilisateur. Veuillez noter que les droits d’administrateurs ne sont pas requis pour l’installation de ce modèle.

Téléchargez le modèle MicroParam 2 (EXE, 1.52 Mo)

Exemple d'un modèle – MicroBinary 2

MicroBinary est un modèle de microsimulation simple, à temps continu, basé sur les cas et à risques concurrentiels, qui illustre comment utiliser des microdonnées dans un fichier binaire pour créer une population de départ. Cette technique est complexe et ne devrait être utilisée que pour les fichiers de microdonnées trop gros pour être copié dans un paramètre. Le modèle sera installé dans un répertoire spécifique à l’utilisateur. Veuillez noter que les droits d’administrateurs ne sont pas requis pour l’installation de ce modèle.

Téléchargez le modèle MicroBinary 2 (EXE, 1.49 Mo)

BioBrowser

BioBrowser est une application compagne de Modgen qui permet d'examiner graphiquement les profils longitudinaux des entités de bas-niveau générées par les modèles Modgen. Des exemples de fichiers sont inclus afin de permettre l'exploration des capacités de BioBrowser sans installer un modèle Modgen.

Téléchargez la version 5.1 de BioBrowser (EXE, 1.11 Mo)

Anciennes versions (pour Visual Studio 2010)

Composants préalables à Modgen 11

Téléchargez la version 11 des Composants préalables de Modgen (EXE, 6.42 Mo)

Modgen 11.7.3

Téléchargez la version 11.7.3 de Modgen (EXE, 16.1 Mo)

Exemple d'un modèle – RiskPaths 3

Téléchargez le modèle RiskPaths 3.0 (EXE, 4.13 Mo)

Exemple d'un modèle – IDMM 2

Téléchargez le modèle IDMM 2.0 (EXE, 4.12 Mo)

Date de modification :

Pour commencer

Nouveau à microsimulation?

Qu'est-ce qu'une microsimulation dynamique en sciences sociales?

Cette discussion introduit la microsimulation en sciences sociales par une définition de ses concepts sous-jacents, son développement historique, ses points forts et inconvénients, et les situations dans lesquelles la microsimulation est une approche bien appropriée pour la simulation.

Approches de microsimulation

Cette discussion classifie les approches de microsimulation, concentrant sur pourquoi et comment les sociétés sont simulées avec un ordinateur. Il y a une section sur l'explication par opposition à la prédiction comme le but de microsimulation, et la différence est donnée entre les modèles de cohorte et les modèles de population, les modèles avec une population de départ transversale ou une population synthétique, les modèles avec le temps continu ou le temps discret, et les modèles orientés cas par opposition aux modèles orientés temps.

Nouveau à Modgen?

Introduction à Modgen

Cette discussion introduit le Modgen généralement, y compris ses composants principaux (pré-compilateur, bibliothèque, serveur automatisé), les éléments fondamentaux d'un modèle (acteurs, états, évènements, autre fonctions), et les entités principales pour l'entrée (les paramètres) et la sortie (les tableaux). Une vue d'ensemble de la bilinguisme et le déroulement d'un modèle sont provisés aussi.

Caractéristiques générales des applications Modgen - Exploration du modèle RiskPaths

Cette discussion fait un bref compte rendu des fondations d'un modèle relativement simple développé à des fins de formation pour étudier l'absence d'enfants. Puis elle donne des précisions sur comment la microsimulation est une approche appropriée. Enfin, il y a une introduction sur commet l'interface visuelle de Modgen peut être utilisée pour explorer le modèle.

Modgen et l'application RiskPaths du point de vue du Concepteur de modèles

Cette discussion se concentre sur les points essentiels pour construire le modèle à des fins de formation, RiskPaths, en utilisant Modgen dans l'environnement de développement « Visual Studio ». Elle suggère des modules séparés pour les comportements différents dans le modèle, et elle inclut le contenu possible de chaque module, avec des exemples du code.

Date de modification :

Microsimulation

Les modèles de microsimulation sont des modèles informatiques qui traitent l'information sur le comportement au niveau d'une entité telle une personne, une famille ou une entreprise. Ces modèles simulent d'importantes populations représentatives de ces entités de bas niveau afin de permettre de tirer des conclusions qui s'appliquent à un niveau d'agrégation supérieur, par exemple un pays. Ce type de modèle diffère des modèles agrégés dont les variables explicatives représentent déjà des propriétés collectives. Le taux national de chômage serait un exemple de variable explicative agrégée. La microsimulation constitue le meilleur moyen d'aborder certains types de problèmes de modélisation alors qu'une approche agrégée convient mieux à d'autres types de problèmes.

Statistique Canada a élaboré un certain nombre de modèles de microsimulation ainsi que des outils génériques qui en facilitent la construction. Certains de ces modèles et outils peuvent être téléchargés à partir des pages avec lesquelles un lien est établi ci-dessous. On a procédé à l'aide de ces modèles à diverses analyses, dont certaines ont été effectuées à Statistique Canada et d'autres, à l'extérieur.

Pour plus de renseignements sur les activités de microsimulation à Statistique Canada, cliquez sur l'un ou plusieurs des liens ci-dessous.

BD/MSPS

BD/MSPS est un modèle de microsimulation transversal détaillé d'individus et de familles. Il est fondé sur une base de données annuelle non confidentielle construite au moyen de diverses enquêtes et sources de données administratives. Il sert à l'élaboration de politiques et à l'analyse de programmes fiscaux et de transferts fédéraux et provinciaux ainsi qu'à l'analyse de questions liées à la répartition du revenu.

Archivée - LifePaths Archivée

LifePaths est un modèle longitudinal dynamique de microsimulation des individus et des familles. À l'aide d'équations sur le comportement fondées sur des données chronologiques, il crée des échantillons statistiquement représentatifs de cheminements de vie individuels complets. Il est utilisé pour analyser et élaborer des politiques gouvernementales ayant une composante essentiellement longitudinale, particulièrement celles qui, de par leur nature, exigent une évaluation au niveau de l'individu ou de la famille. Il peut aussi être utilisé pour analyser diverses questions sociales de nature longitudinale comme l'équité entre les générations et l'emploi du temps tout au long de la vie.

Le projet LifePaths est maintenant abandonné et n'est plus soutenu. Le personnel de Statistique Canada est en train d'élaborer de nouveaux outils de microsimulation socioéconomique dynamique. Plus de renseignements sur l'élaboration des outils peuvent être obtenus en envoyant un courriel à statcan.microsimulation-microsimulation.statcan@statcan.gc.ca.

Demosim

Demosim est un modèle de projections démographiques par microsimulation prenant pour point de départ le fichier de microdonnées du Recensement de la population du Canada. Il permet d'obtenir des projections d'un grand nombre de caractéristiques de la population pour différents échelons géographiques et scénarios d'accroissement.

Modèles de santé

Cette vue d'ensemble décrit les modèles de microsimulation dans le domaine de la santé, incluant les modèles développés par la division de l'analyse de la santé de Statistique Canada.

Modgen

Modgen est un outil général créé à Statistique Canada pour faciliter la construction et l'utilisation de modèles longitudinaux de microsimulation. La structure, les équations, la documentation et les résultats d'un modèle sont entrés dans Modgen au moyen d'un langage de haut niveau. Modgen construit ensuite un programme informatique entièrement fonctionnel doté d'une interface utilisateur qui met en oeuvre le modèle spécifié. BioBrowser, une application associée à Modgen, permet d'explorer visuellement les profils longitudinaux des entités simulées de bas niveau générées par les modèles Modgen.

Date de modification :