Chapitre 02
Monolix — le modèle structural en mlxtran
Racym Berrah, PharmD PMx Explain Relecture scientifique par l'auteur : ORCID
Le bloc [LONGITUDINAL] : bibliothèque pkmodel() ou EDO écrites à la main, conditions initiales, t0 et routage de la dose.
1 activités guidées01 · Pourquoi ce chapitre
Le modèle structural, c'est la machine qui transforme une dose et un temps en une concentration prédite. Tout le reste — variabilité, covariables, erreur résiduelle — vient se greffer dessus. Si cette machine est fausse, aucun SAEM ne la rattrapera : il ajustera au mieux les paramètres d'un modèle qui ne peut pas décrire les données.
Dans Monolix, elle s'écrit en mlxtran, dans le bloc [LONGITUDINAL]. Deux routes s'offrent à vous : appeler la bibliothèque avec pkmodel(), ou écrire vous-même le système d'équations différentielles avec ddt_. Ce chapitre montre les deux sur le même modèle — un 1 compartiment oral — et explique quand basculer de l'une à l'autre.
02 · Intuition
mlxtran vous force à répondre séparément à deux questions que la modélisation de population mélange toujours :
- Pour un individu dont les paramètres sont donnés, quelle courbe suit la concentration ? C'est le modèle structural — le bloc
[LONGITUDINAL]. - Comment ces paramètres varient-ils d'un individu à l'autre ? C'est le modèle statistique — le bloc
[INDIVIDUAL].
Cette séparation est le trait de conception du langage, pas une coquetterie de présentation. Elle a une conséquence très concrète : le fichier de modèle structural que vous écrivez à la main ne contient que [LONGITUDINAL]. Le bloc [INDIVIDUAL] est écrit par l'interface à partir de vos choix dans l'onglet du modèle statistique. Passer une loi de logNormale à normale, ajouter une IIV, brancher une covariable : rien de tout cela ne touche à vos équations.
03 · La formule décortiquée
Le 1 compartiment oral, ce sont deux compartiments d'amounts — le dépôt et le central — et une concentration qui n'est qu'une division :
Version bibliothèque. On décrit le modèle par son nom, pas par ses équations :
[LONGITUDINAL]
input = {ka, V, Cl} ; parametres RECUS, pas estimes ici
EQUATION:
Cc = pkmodel(ka, V, Cl) ; 1 cpt, absorption d'ordre 1 ; rend une CONCENTRATION
DEFINITION:
y1 = {distribution=normal, prediction=Cc, errorModel=combined1(a, b)}
OUTPUT:
output = {y1}
Version EDO à la main. Le même modèle, câblé à la main :
[LONGITUDINAL]
input = {ka, V, Cl}
PK:
depot(target = Ad) ; OU atterrit la dose du jeu de donnees
EQUATION:
t0 = 0 ; instant ou s'appliquent les conditions initiales
Ad_0 = 0 ; conditions initiales : <nom>_0 (0 par defaut)
Ac_0 = 0
ddt_Ad = -ka * Ad ; declarer ddt_Ad SUFFIT a creer le compartiment Ad
ddt_Ac = ka * Ad - (Cl/V) * Ac
Cc = Ac / V ; ici la division est a VOTRE charge
DEFINITION:
y1 = {distribution=normal, prediction=Cc, errorModel=combined1(a, b)}
OUTPUT:
output = {y1}
Ligne à ligne :
input = {ka, V, Cl}: les paramètres que le bloc reçoit. Ils ne sont pas estimés ici — c'est[INDIVIDUAL]qui les fournira. C'est la prise de courant entre structure et statistique.EQUATION:accueille les EDO et les équations algébriques ; l'ordre d'écriture desddt_n'a pas d'importance, le solveur résout le système.t0fixe l'instant où s'appliquent les conditions initiales. Sanst0explicite, l'intégration démarre au premier événement du sujet. Cela devient critique dès qu'un modèle a une ligne de base non nulle (turnover, PD) : il faut alors démarrer le système à son état d'équilibre, pas à zéro.DEFINITION:est le modèle d'observation : il relie une prédiction (Cc) à une observation (y1) par une loi et un modèle d'erreur. C'est déjà de la statistique — mais de la statistique résiduelle, qui reste dans[LONGITUDINAL]parce qu'elle porte sur l'observation, pas sur l'individu.
Pourquoi écrire les EDO soi-même, alors ? Parce que le jour où la structure sort du catalogue, la bibliothèque s'arrête. Une chaîne de transit (Savic 2007), par exemple, s'obtient en allongeant le système :
PK:
depot(target = Atr1)
EQUATION:
ddt_Atr1 = -ktr*Atr1
ddt_Atr2 = ktr*Atr1 - ktr*Atr2
ddt_Ac = ktr*Atr2 - (Cl/V)*Ac
avec un temps de transit moyen , ici compartiments de transit. Même logique pour un turnover enzymatique, une clairance variable dans le temps ou une cible saturable : dès qu'un terme dépend de l'état du système, on passe aux ddt_.
04 · Exemple concret
Prenons un individu : dose orale 100 mg, h⁻¹, L, L/h, .
La constante d'élimination vaut h⁻¹, soit un rapport . Le pic tombe à
et, comme pour ce modèle, on attend mg/L, pour une exposition mg·h/L.
Ces trois nombres sont votre test de recette. Les deux écritures ci-dessus décrivent le même modèle : elles doivent rendre la même courbe, au chiffre près. D'où le réflexe qui évite le plus de dégâts lors d'un passage à la main :
05 · Piège fréquent
Le piège n'est pas d'oublier depot() — ça, Monolix vous le signale : la dose n'a aucune porte d'entrée, le système reste à ses conditions initiales et la prédiction est plate à zéro. C'est bruyant, donc bénin.
La leçon dépasse la faute de frappe : avec pkmodel(), le routage de la dose fait partie du modèle que vous appelez ; avec vos propres ddt_, il devient votre responsabilité, et rien dans la syntaxe ne vous rappellera que vous l'avez mal exercée. Un paramètre à la RSE aberrante n'est pas toujours un problème d'identifiabilité des données : vérifiez d'abord qu'il agit encore sur la prédiction.
06 · À retenir
- Le modèle structural vit dans
[LONGITUDINAL];inputdéclare les paramètres reçus,[INDIVIDUAL]les fournit. Écrire un modèle à la main, c'est écrire[LONGITUDINAL]seul. pkmodel(): le modèle est sélectionné par le nom des arguments (ka, V, Cl= 1 cpt oral) et rend directement une concentration, dose routée comprise.ddt_: vous écrivez les EDO sur des quantités, vous fixezt0et les<nom>_0, vous divisez par vous-même, et vous routez la dose avecdepot(target=...).DEFINITION:porte le modèle d'observation (loi + modèle d'erreur), pas la variabilité inter-individuelle.- Passage bibliothèque → EDO : reproduisez d'abord la courbe de référence à l'identique, puis ajoutez la complexité.
- Une dose routée dans le mauvais compartiment ne fait pas planter le run — elle rend un paramètre muet.
Point de contrôle
Vérifiez votre compréhension
Q1. Dans un fichier mlxtran, le bloc [LONGITUDINAL] contient...
Q2. Avec un système d'EDO écrit à la main dans EQUATION:, la dose du jeu de données...
Q3. Dans pkmodel(), le choix du modèle de PK se fait...
Exercices d'entraînement
Cas en plusieurs étapes combinant calcul, interprétation et raisonnement.
Monolix : vérifier les échelles
Calcul · Interprétation · Lecture de codeÀ commencer
Monolix : vérifier les échelles
Calcul · Interprétation · Lecture de codeÀ commencerCiter cette page
Berrah R. Monolix — le modèle structural en mlxtran. PMx Explain, 2026. https://rberrah.github.io/pharmacometrie/chapitres/monolix-modele-structural/
@misc{berrah2026monolixmodelestructural,
author = {Berrah, Racym},
title = {{Monolix — le modèle structural en mlxtran}},
howpublished = {PMx Explain},
year = {2026},
url = {https://rberrah.github.io/pharmacometrie/chapitres/monolix-modele-structural/},
note = {Texte actuel sous licence CC BY-NC-SA 4.0}
}