← Tous les chapitres Parcours et exercices

Chapitre 06

NONMEM — pour aller plus loin

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

Distributions logit et normale, information a priori, MU-referencing, écosystème PsN/Xpose/Pirana et simulation.

1 activités guidées

01 · Pourquoi ce chapitre

Le chapitre précédent s'arrête au control stream minimal : un modèle de structure, des ETA log-normaux, FOCE-I. Cela suffit à faire tourner un modèle, pas à mener une analyse.

Trois murs se dressent vite. Un paramètre borné — une biodisponibilité, une fraction de répondeurs — que la log-normale laisse allègrement dépasser 1. Des données trop pauvres pour tout estimer, alors qu'un modèle publié existe déjà. Un SAEM qui met huit heures là où il devrait en mettre une.

NONMEM répond aux trois. Mais chaque réponse s'écrit à la main : CHECKMU peut détecter certaines incohérences de MU-referencing, sans remplacer la vérification du modèle et des sorties.

02 · Intuition

Écrire CL = THETA(1)*EXP(ETA(1)) n'est pas un rite : c'est un choix de distribution.

Ce que NONMEM impose, c'est que ETA(1) soit tiré d'une normale centrée, de variance ω2\omega^2. La fonction qui transforme cet ETA en paramètre, c'est vous qui la choisissez. L'exponentielle envoie la droite réelle sur les réels positifs : parfaite pour une clairance, positive et sans plafond.

Une biodisponibilité, elle, vit entre 0 et 1. Avec ω=0,4\omega = 0{,}4 autour d'une valeur typique de 0,70, la log-normale produit sans broncher des individus à 1,6. NONMEM ne proteste pas : il simule tranquillement 160 % de la dose absorbée.

La solution n'est pas de brider l'ETA — c'est de changer la fonction. La logistique envoie la droite réelle sur l'intervalle ]0, 1[ : quelle que soit la valeur tirée, le paramètre reste où il doit être. Et pour une grandeur qui peut légitimement être négative — une pente d'effet, une dérive de ligne de base — l'identité, donc une normale, est le bon choix et non un pis-aller.

03 · La formule décortiquée

Logit — pour un paramètre borné

Sur l'échelle logit, le paramètre redevient non borné, donc compatible avec un ETA normal :

logit(F1)=log⁡F11−F1=θ1+η1\text{logit}(F_1) = \log\frac{F_1}{1 - F_1} = \theta_1 + \eta_1

On revient dans l'intervalle par la réciproque :

F1=11+e−(θ1+η1)F_1 = \frac{1}{1 + e^{-(\theta_1 + \eta_1)}}
$PK
  LGT  = THETA(1) + ETA(1)     ; echelle logit, non bornee
  F1   = 1/(1 + EXP(-LGT))     ; ramene dans ]0,1[
  BASE = THETA(2) + ETA(2)     ; normale : peut etre negative
  CL   = THETA(3)*EXP(ETA(3))  ; log-normale : le cas classique

Avec THETA(1) = 0,85, la valeur typique vaut 1/(1+e−0,85)=0,701/(1+e^{-0{,}85}) = 0{,}70. L'ETA peut valoir −3 ou +3, F1 restera dans ]0, 1[.

MU-referencing — déclarer l'espérance

Le MU-referencing consiste à écrire explicitement, pour chaque ETA, l'espérance du paramètre sur son échelle de transformation :

$PK
  MU_1 = LOG(THETA(1))              ; CL
  MU_2 = LOG(THETA(2))              ; V
  CL   = EXP(MU_1 + ETA(1))
  V    = EXP(MU_2 + ETA(2))
$ESTIMATION METHOD=SAEM INTERACTION NBURN=2000 NITER=1000 PRINT=100

Dans la forme standard, MU_n dépend des THETA et de covariables compatibles avec le MU-model, sans dépendre d'un ETA ni d'une covariable variant arbitrairement au cours du temps. Le paramètre s'écrit ensuite MU_n + ETA(n) sur l'échelle choisie. Les cas d'IOV et certaines structures particulières demandent les règles détaillées de la documentation NONMEM.

Pourquoi cela aide : le MU-referencing explicite l'association arithmétique entre THETA, ETA et paramètres individuels. NONMEM peut alors exploiter plus efficacement cette structure dans les méthodes EM et MCMC, notamment SAEM et BAYES. Avec une relation linéaire adaptée, certaines mises à jour de population peuvent être simplifiées ; le gain dépend toutefois du modèle, de la méthode et de l'implémentation. La documentation NONMEM le présente comme particulièrement utile aux méthodes MCMC, pas comme une garantie universelle de gain.

Information a priori

Un a priori ajoute une pénalité à l'OFV : s'éloigner de la valeur attendue coûte, proportionnellement à la confiance qu'on lui accorde.

OFVtotal=OFVdonneˊes+(θ−θprior)⊤Σprior−1(θ−θprior)OFV_{\text{total}} = OFV_{\text{données}} + (\theta - \theta_{\text{prior}})^{\top}\Sigma_{\text{prior}}^{-1}(\theta - \theta_{\text{prior}})
$PRIOR   NWPRI NTHETA=3 NETA=2 NTHP=1 NETP=0
$THETAP  (1.1) FIX            ; moyenne a priori de KA, en h-1
$THETAPV (0.0121) FIX         ; variance de cet a priori (ET = 0.11)

NTHP=1 : seul le premier THETA reçoit un a priori, les deux autres restent libres. Attention, le bloc THETAPV attend une variance, pas un écart-type — ici 0,112=0,01210{,}11^2 = 0{,}0121.

04 · Exemple concret

Extrapolation pédiatrique. Vous disposez d'un modèle adulte publié — absorption d'ordre 1, KA = 1,1 h⁻¹, CL = 4,2 L/h, V = 32 L — et d'une nouvelle étude : 24 enfants, 2 prélèvements chacun, tous les deux après le pic. Soit 48 concentrations pour trois paramètres de structure et leurs variabilités.

En estimation libre, KA part à 11 h⁻¹ avec un ET de 40 %, et V le suit dans l'absurde. La raison est mécanique : aucun prélèvement précoce ne renseigne la phase d'absorption. KA n'est pas estimable ici, et le laisser libre contamine CL et V.

On lui donne donc un a priori, centré sur la valeur adulte, avec l'incertitude publiée :

$PRIOR   NWPRI NTHETA=3 NETA=2 NTHP=1 NETP=0
$THETAP  (1.1) FIX
$THETAPV (0.0121) FIX
$ESTIMATION METHOD=SAEM INTERACTION NBURN=2000 NITER=1000
$ESTIMATION METHOD=IMP EONLY=1 NITER=10 ISAMPLE=3000   ; estimation Monte-Carlo de l'OFV / vraisemblance marginale

KA se stabilise à 1,2 h⁻¹. Surtout, CL et V — les paramètres que l'étude renseigne réellement — redeviennent estimables, avec des ET de 12 % et 15 %.

Reste à vérifier le modèle. NONMEM ne trace aucun graphique : tout passe par l'écosystème R, piloté en ligne de commande par PsN.

execute run12.mod                          # lancer, ranger les sorties
bootstrap -samples=1000 run12.mod          # IC des parametres par reechantillonnage
vpc -samples=500 -auto_bin=auto run12.mod  # VPC
scm -config_file=scm.conf run12.mod        # forward inclusion / backward elimination

Xpose lit ces sorties et produit les diagnostics en R ; Pirana sert d'atelier pour comparer les runs. Quand on veut seulement simuler, un bloc de simulation remplace celui d'estimation :

$SIMULATION (20260716) ONLYSIM SUBPROBLEMS=500

La graine rend la simulation reproductible, ONLYSIM coupe l'estimation, SUBPROBLEMS=500 génère 500 jeux de données virtuels — le moteur des VPC et des essais cliniques simulés.

05 · Piège fréquent

Un MU-referencing incohérent peut être coûteux. CHECKMU, activé par défaut dans les versions récentes de NONMEM, cherche certaines erreurs et peut produire des avertissements, mais il ne valide pas toute la logique scientifique du control stream :

$PK
  MU_1 = LOG(THETA(1))
  CL   = THETA(1)*EXP(ETA(1))        ; MU_1 declare mais jamais utilise
  MU_2 = LOG(THETA(2)) + 0.3*ETA(1)  ; interdit : MU depend d un ETA
  V    = EXP(MU_2 + ETA(2))

Second piège, plus discret : l'a priori trop serré. Une variance a priori de 0,0001 sur KA, c'est un ET de 0,01 pour une valeur de 1,1 — vous avez fixé le paramètre sans l'écrire. Le modèle convergera, les ET rapportés seront flatteurs, et l'incertitude réelle aura disparu du dossier. Un a priori doit refléter l'incertitude réelle de sa source, erreur type publiée comprise.

06 · À retenir

  • La transformation, pas l'ETA, définit le domaine d'un paramètre : EXP() pour un positif non borné, logit pour une fraction dans ]0, 1[, identité pour une grandeur qui peut être négative.
  • Le MU-referencing explicite le lien entre THETA, ETA et paramètres individuels afin d'améliorer l'efficacité des méthodes EM/MCMC ; CHECKMU aide à détecter certaines incohérences sans remplacer la validation.
  • Un a priori injecte un modèle publié dans une analyse pauvre en données ; il se met de préférence sur ce que les données ne peuvent pas informer, et tout prior informatif sur la cible doit être explicité et testé.
  • PsN automatise bootstrap, VPC et SCM ; Xpose trace ; Pirana organise. NONMEM ne produit aucun graphique : l'écosystème n'est pas un luxe.
  • Le bloc $SIMULATION — une graine, des SUBPROBLEMS — transforme un modèle estimé en générateur de populations virtuelles.

Point de contrôle

Vérifiez votre compréhension

Q1. Le MU-referencing accélère SAEM parce que...

Q2. Pour une biodisponibilité qui doit rester entre 0 et 1, la paramétrisation adaptée est...

Q3. Un a priori sur un paramètre se justifie surtout quand...

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

NONMEM : un bootstrap par patient

Calcul · InterprétationÀ commencer

Citer cette page

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

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