← Tous les chapitres Parcours et exercices

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ées

01 · 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 :

  1. Pour un individu dont les paramètres sont donnés, quelle courbe suit la concentration ? C'est le modèle structural — le bloc [LONGITUDINAL].
  2. 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 AdA_d et le central AcA_c — et une concentration qui n'est qu'une division :

dAddt=−kaAd,dAcdt=kaAd−ClVAc,Cc=AcV\frac{dA_d}{dt} = -k_a A_d, \qquad \frac{dA_c}{dt} = k_a A_d - \frac{Cl}{V} A_c, \qquad C_c = \frac{A_c}{V}

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 des ddt_ n'a pas d'importance, le solveur résout le système.
  • t0 fixe l'instant où s'appliquent les conditions initiales. Sans t0 explicite, 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 MTT=(n+1)/ktrMTT = (n+1)/k_{tr}, ici n=2n = 2 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, ka=1,2k_a = 1{,}2 h⁻¹, V=32V = 32 L, Cl=4,8Cl = 4{,}8 L/h, F=1F = 1.

La constante d'élimination vaut ke=Cl/V=4,8/32=0,15k_e = Cl/V = 4{,}8/32 = 0{,}15 h⁻¹, soit un rapport ka/ke=8k_a/k_e = 8. Le pic tombe à

tmax=ln⁡(ka/ke)ka−ke=ln⁡81,05≈1,98 ht_{max} = \frac{\ln(k_a/k_e)}{k_a - k_e} = \frac{\ln 8}{1{,}05} \approx 1{,}98 \text{ h}

et, comme Cmax=F⋅DVe−ketmaxC_{max} = \frac{F \cdot D}{V}e^{-k_e t_{max}} pour ce modèle, on attend Cmax≈3,125×e−0,297≈2,32C_{max} \approx 3{,}125 \times e^{-0{,}297} \approx 2{,}32 mg/L, pour une exposition AUC=F⋅D/Cl≈20,8AUC = F \cdot D / Cl \approx 20{,}8 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] ; input dé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 fixez t0 et les <nom>_0, vous divisez par VV vous-même, et vous routez la dose avec depot(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

Activités guidées

Cas en plusieurs étapes combinant calcul, interprétation et raisonnement.

Activité guidée · 10 min · Niveau 2

Monolix : vérifier les échelles

Calcul · Interprétation · Lecture de codeÀ commencer

Citer 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}
}
Contenu pédagogique uniquement. Pas de conseil médical. Pas d'ajustement posologique patient-spécifique.