← Tous les chapitres Parcours et exercices

Chapitre 06

Monolix — pour aller plus loin

Racym Berrah, PharmD PMx Explain Relecture scientifique par l'auteur : ORCID

Distributions bornées logit et probit, auto-initialisation, tests automatiques de covariables, MonolixSuite et export NONMEM.

1 activités guidées

01 · Pourquoi ce chapitre

Les chapitres précédents vous laissent avec un modèle qui tourne : une structure dans [LONGITUDINAL], des paramètres log-normaux, un SAEM qui converge. C'est le début d'une analyse, pas son terme.

Trois murs arrivent vite. Une biodisponibilité : déclarée log-normale, elle dépassera 1, et Monolix simulera sans broncher des individus qui absorbent 150 % de leur dose. Une liste de covariables à trier, sans lancer trente projets à la main. Et, le jour où le dossier part à l'agence, un control stream NONMEM.

Monolix répond aux trois. À chaque fois, la réponse est plus subtile que le bouton qui la déclenche.

02 · Intuition

Dans le bloc [INDIVIDUAL], le mot-clé distribution= n'est pas une étiquette de présentation : c'est le choix d'une fonction de lien.

Monolix impose une seule chose, la même que NONMEM : l'effet aléatoire ηi\eta_i est tiré d'une normale centrée. Or une normale vit sur toute la droite réelle, de −∞-\infty à +∞+\infty. Une clairance, elle, est positive ; une biodisponibilité vit entre 0 et 1 ; une fraction de répondeurs aussi. Il faut donc une fonction qui envoie la droite réelle exactement sur le domaine du paramètre — ni plus large, ni plus étroit.

C'est tout ce que fait distribution=. logNormal choisit l'exponentielle et couvre ]0,+∞[]0, +\infty[. logitNormal choisit la logistique et couvre ]0,1[]0, 1[. probitNormal couvre le même intervalle par un autre chemin, la fonction de répartition normale. Le domaine du paramètre commande ; l'habitude, non.

Cette idée a une conséquence que tout le reste du chapitre ne fera que décliner : ce que Monolix vous rapporte sur un paramètre — son ω\omega, ses coefficients de covariables, sa traduction en NONMEM — vit sur l'échelle de la fonction de lien, jamais sur celle du paramètre.

03 · La formule décortiquée

Un seul modèle gouverne tout le bloc [INDIVIDUAL] :

h(ψi)=h(ψpop)+∑kβk cik+ηi,ηi∼N(0,ω2)h(\psi_i) = h(\psi_{\text{pop}}) + \sum_k \beta_k\, c_{ik} + \eta_i, \qquad \eta_i \sim \mathcal{N}(0, \omega^2)

Le paramètre individuel ψi\psi_i, une fois passé dans hh, s'écrit comme une valeur typique plus des effets de covariables plus un effet aléatoire normal. Changer de distribution, c'est changer hh — rien d'autre :

  • normal : h(x)=xh(x) = x, domaine R\mathbb{R} ;
  • logNormal : h(x)=log⁡xh(x) = \log x, domaine ]0,+∞[]0, +\infty[ ;
  • logitNormal : h(x)=log⁡x1−xh(x) = \log\frac{x}{1-x}, domaine ]0,1[]0, 1[ ;
  • probitNormal : h(x)=Φ−1(x)h(x) = \Phi^{-1}(x), domaine ]0,1[]0, 1[.

Pour la logit, on revient dans l'intervalle par la réciproque :

ψi=11+e−h(ψi)\psi_i = \frac{1}{1 + e^{-h(\psi_i)}}

Quelle que soit la valeur tirée pour ηi\eta_i — −4-4, +4+4 — le paramètre reste dans ses bornes. C'est une garantie structurelle, pas une contrainte numérique qu'un optimiseur pourrait violer.

[INDIVIDUAL]
input = {F_pop, omega_F, Cl_pop, omega_Cl, V_pop, omega_V}

DEFINITION:
F  = {distribution=logitNormal, typical=F_pop,  sd=omega_F}   ; borne dans ]0,1[
Cl = {distribution=logNormal,   typical=Cl_pop, sd=omega_Cl}  ; positif, sans plafond
V  = {distribution=logNormal,   typical=V_pop,  sd=omega_V}

Attention à la lecture : typical=F_pop se déclare et se rapporte sur l'échelle naturelle (Monolix affiche 0,70), tandis que sd=omega_F porte sur l'échelle logit. Les deux nombres de la même ligne ne vivent pas au même endroit.

La logit ne se limite pas à ]0,1[. Avec des bornes explicites, elle s'étend à n'importe quel intervalle — un EmaxE_{max} qui ne peut pas dépasser 100 % d'inhibition, un coefficient de Hill entre 1 et 5 :

Emax = {distribution=logitNormal, min=0, max=100, typical=Emax_pop, sd=omega_E}

La transformation devient alors h(ψ)=log⁡ψ−ψmin⁡ψmax⁡−ψh(\psi) = \log\frac{\psi - \psi_{\min}}{\psi_{\max} - \psi}, qui redonne bien la logit usuelle pour min⁡=0\min = 0 et max⁡=1\max = 1.

Les covariables passent par la même porte. Elles s'ajoutent sur l'échelle de hh, pas sur celle du paramètre :

[COVARIATE]
input = {WT}
EQUATION:
lWT = log(WT/70)                      ; centrage sur 70 kg

[INDIVIDUAL]
input = {Cl_pop, omega_Cl, beta_Cl_lWT, lWT}
DEFINITION:
Cl = {distribution=logNormal, typical=Cl_pop,
      covariate=lWT, coefficient=beta_Cl_lWT, sd=omega_Cl}

Ici log⁡Cli=log⁡Clpop+βlog⁡(WT/70)+ηi\log Cl_i = \log Cl_{\text{pop}} + \beta \log(WT/70) + \eta_i : β\beta est l'exposant allométrique, et l'écrire ainsi le rend directement testable. Mais si la même mécanique s'applique à une logitNormal, alors β\beta agit sur logit(F)\text{logit}(F) — ce n'est pas un effet sur FF, et il ne s'interprète pas en pourcentage de FF.

Les tests automatiques. Monolix rapporte, sans run supplémentaire, deux familles de tests. Sur les covariables déjà dans le modèle, un test de Wald sur chaque β\beta (H0:β=0H_0 : \beta = 0). Sur les covariables absentes du modèle, des tests de corrélation entre les effets aléatoires et chaque covariable candidate : corrélation de Pearson pour une covariable continue, analyse de variance pour une catégorielle. Un p petit signale un η\eta qui garde une structure que le modèle n'explique pas — donc une covariable qui vaut le coup d'être essayée. La procédure automatique (COSSAC) enchaîne ces tests pour construire le modèle de covariables pas à pas.

04 · Exemple concret

Une biodisponibilité orale, valeur typique 0,70, à décrire chez 40 sujets.

En log-normale, avec ω=0,4\omega = 0{,}4. La distribution est Fi=0,70×eηiF_i = 0{,}70 \times e^{\eta_i}. Pour que FiF_i dépasse 1, il faut ηi>log⁡(1/0,70)=0,357\eta_i > \log(1/0{,}70) = 0{,}357, soit z=0,357/0,4=0,89z = 0{,}357/0{,}4 = 0{,}89. La table normale donne :

P(Fi>1)=1−Φ(0,89)≈0,19P(F_i > 1) = 1 - \Phi(0{,}89) \approx 0{,}19

Près d'un sujet simulé sur cinq absorbe plus que sa dose. Le 95ᵉ percentile vaut 0,70×e1,96×0,4=1,530{,}70 \times e^{1{,}96 \times 0{,}4} = 1{,}53 : 153 % de la dose. Le modèle tourne, le SAEM converge, la VPC peut même être acceptable sur la plage observée — et la simulation reste une absurdité physique.

En logit-normale, avec ω=0,85\omega = 0{,}85. La valeur typique devient logit(0,70)=log⁡(0,70/0,30)=0,847\text{logit}(0{,}70) = \log(0{,}70/0{,}30) = 0{,}847. L'intervalle à 90 % des individus se calcule sur l'échelle logit puis se rabat :

0,847±1,96×0,85=[−0,819; 2,513]  ⟶  [0,31; 0,93]0{,}847 \pm 1{,}96 \times 0{,}85 = [-0{,}819 ;\ 2{,}513] \;\longrightarrow\; [0{,}31 ;\ 0{,}93]

Bornes respectées par construction, pour toute valeur de η\eta.

Et en probit, avec ω=0,50\omega = 0{,}50 ? La valeur typique devient Φ−1(0,70)=0,524\Phi^{-1}(0{,}70) = 0{,}524, et le même calcul donne [0,32; 0,93][0{,}32 ;\ 0{,}93].

Regardez ces deux dernières lignes. ω=0,85\omega = 0{,}85 en logit et ω=0,50\omega = 0{,}50 en probit décrivent la même population, à un centième près. Deux nombres qui n'ont rien à voir, une seule biologie. Le rapport est ici voisin de 1,7 — sa valeur exacte dépend du critère qu'on se donne pour dire que deux dispersions se ressemblent, la logistique ayant des queues plus lourdes que la normale. En pratique, logit et probit s'ajustent presque toujours aussi bien l'une que l'autre ; le probit se justifie surtout quand le paramètre est déjà une probabilité issue d'un mécanisme normal latent (un modèle à seuil). Le choix entre les deux compte donc beaucoup moins que le fait d'avoir compris ce que ω\omega mesure.

Le reste de la suite. Le modèle une fois estimé, la MonolixSuite le réutilise sans le réécrire, parce que tous ses outils lisent le même fichier mlxtran : Datxplore explore le jeu de données avant toute modélisation ; Mlxplore explore le modèle sans données, à coups de curseurs sur les paramètres ; Simulx simule à partir du modèle estimé — nouveaux schémas posologiques, nouvelle population, essai clinique virtuel ; PKanalix couvre la NCA.

Et Mlxplore mérite mieux que sa réputation d'outil pédagogique : c'est souvent le meilleur initialiseur disponible. Bouger un kak_a de 0,3 à 3 en regardant la courbe se déformer vous apprend le modèle ; l'auto-initialisation, elle, vous rend un nombre.

05 · Piège fréquent

Monolix affiche les ω\omega dans une seule colonne, quelle que soit la distribution. C'est là que ça casse.

Le même piège frappe à l'export, sous un autre visage. NONMEM n'a pas de mot-clé logitNormal : la traduction doit écrire la transformation à la main dans $PK.

$PK
  LGT = THETA(1) + ETA(1)      ; echelle logit
  F1  = 1/(1 + EXP(-LGT))      ; retour dans ]0,1[

Deux mises en garde pour finir, dans le même esprit.

L'auto-initialisation ne diagnostique rien. Elle propose un point de départ pour les paramètres de structure ; elle ne sait pas que votre modèle est faux, ni que vos concentrations sont en ng/mL alors que vos doses sont en mg. Elle trouvera consciencieusement les valeurs qui ajustent le mieux un jeu de données faux. Son intérêt réel est ailleurs : quand elle renvoie un VV de 3 000 L pour un médicament IV, ce n'est pas un mauvais point de départ, c'est un symptôme — lisez-le comme tel. À l'inverse, le SAEM de Monolix est nettement plus robuste aux valeurs initiales que FOCE, grâce au recuit simulé de la phase de chauffe qui maintient les variances larges au début et laisse la chaîne explorer. C'est précisément pourquoi l'auto-init est un confort, pas un sauvetage.

Les tests de covariables sont un crible, pas une décision. Un p à 0,03 sur une corrélation η\eta–covariable dit qu'il y a du signal, pas qu'il faut garder la covariable. Enchaîner les inclusions automatiques sur trente candidates fait remonter des effets qui doivent tout au hasard, et surestime systématiquement l'amplitude de ceux qu'on retient — c'est le biais de sélection décrit par Ribbing et Jonsson : le seuil qui laisse passer un effet retient de préférence les jeux de données où il paraît, par chance, plus fort qu'il n'est. Un effet doit survivre à trois questions : est-il plausible cliniquement, tient-il en backward elimination, et change-t-il quelque chose à la dose qu'on recommandera ?

06 · À retenir

  • distribution= choisit une fonction de lien hh qui envoie R\mathbb{R} sur le domaine du paramètre. Le modèle est toujours h(ψi)=h(ψpop)+∑βkcik+ηih(\psi_i) = h(\psi_{\text{pop}}) + \sum \beta_k c_{ik} + \eta_i ; seule hh change.
  • logitNormal et probitNormal bornent un paramètre dans ]0,1[ — ou dans ]min,max[ avec des bornes explicites — par construction, pour toute valeur de η\eta. Une biodisponibilité log-normale, elle, dépasse 1 sans que rien ne le signale.
  • ω\omega et β\beta vivent sur l'échelle de hh, pas sur celle du paramètre. « ω≈\omega \approx CV » ne vaut que pour la log-normale à faible variabilité : pour une distribution bornée, rapportez un intervalle de prédiction.
  • L'auto-initialisation donne un point de départ, pas un diagnostic ; le recuit simulé du SAEM rend de toute façon Monolix peu sensible aux valeurs initiales. Une proposition absurde est un symptôme du modèle ou des unités.
  • Les tests automatiques (Wald sur les β\beta, corrélations η\eta–covariables) trient les candidates sans run supplémentaire, en échantillonnant la distribution conditionnelle pour échapper au rétrécissement. Ils cribleront, ils ne décideront pas : le biais de sélection est réel.
  • La MonolixSuite partage un seul fichier mlxtran — Datxplore (données), Mlxplore (modèle), Monolix (estimation), Simulx (simulation), PKanalix (NCA) : le modèle simulé est celui qui a été estimé.
  • L'export NONMEM est un brouillon de control stream, pas un clone : algorithme et conventions potentiellement différents, OFV à ne comparer qu'après harmonisation, paramètres bornés réécrits en transformations explicites. On le relance et on le rediagnostique.

Point de contrôle

Vérifiez votre compréhension

Q1. Pour un paramètre déclaré logitNormal, le omega estimé par Monolix représente...

Q2. L'export d'un projet Monolix vers NONMEM produit...

Q3. L'auto-initialisation des paramètres dans Monolix...

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 : un bootstrap par patient

Calcul · InterprétationÀ commencer

Citer cette page

Berrah R. Monolix — pour aller plus loin. PMx Explain, 2026. https://rberrah.github.io/pharmacometrie/chapitres/monolix-avance/

@misc{berrah2026monolixavance,
  author       = {Berrah, Racym},
  title        = {{Monolix — pour aller plus loin}},
  howpublished = {PMx Explain},
  year         = {2026},
  url          = {https://rberrah.github.io/pharmacometrie/chapitres/monolix-avance/},
  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.