Chapitre 03
Monolix — le bloc INDIVIDUAL, omega et covariables
Racym Berrah, PharmD PMx Explain Mise à jour : Relecture scientifique par l'auteur : ORCID
Le modèle statistique en mlxtran : distributions logNormal, normal et logitNormal, corrélations entre effets aléatoires, IOV par niveau de variabilité, covariables et lecture du shrinkage.
1 activités guidées01 · Pourquoi ce chapitre
Le chapitre précédent a montré comment [LONGITUDINAL] répond à la question « quelle courbe suit un individu dont les paramètres sont donnés ». Reste l'autre moitié du travail : d'où sortent ces paramètres. Dans Monolix, toute la réponse tient dans un bloc, [INDIVIDUAL], et dans son auxiliaire, [COVARIATE].
Ce bloc est court — souvent cinq lignes. Chacune est pourtant une décision de modélisation entière : quelle loi, quelle dispersion, quelles corrélations, combien de niveaux de variabilité, quelles covariables. Et c'est ce bloc, pas le modèle structural, qui décide de ce que vous pourrez écrire dans le rapport. Ce chapitre lit ces lignes une à une, puis apprend à relire en face ce que Monolix renvoie : les omega, les gamma, les corrélations et le shrinkage.
02 · Intuition
Une ligne de [INDIVIDUAL] est une phrase complète. Lisez celle-ci à voix haute :
cl = {distribution=logNormal, typical=cl_pop, sd=omega_cl}
« La clairance est log-normale, centrée sur cl_pop, avec une dispersion omega_cl. » Trois informations : une forme, un centre, une largeur. Il n'en faut pas davantage pour dire d'où sort la clairance d'un patient.
Dans les distributions paramétriques usuelles présentées ici, Monolix représente l'effet aléatoire par une gaussienne sur une échelle choisie. Cette échelle peut être celle du paramètre (normal, transformation identité) ou une échelle transformée (logNormal, logitNormal).
normal: aucune transformation, — le paramètre est libre de changer de signe.logNormal: on ressort par , donc — toujours strictement positif.logitNormal: on ressort par la réciproque du logit, donc reste enfermé dans , quel que soit .
03 · La formule décortiquée
La ligne de base
[INDIVIDUAL]
input = {cl_pop, omega_cl, v_pop, omega_v, ka_pop}
DEFINITION:
cl = {distribution=logNormal, typical=cl_pop, sd=omega_cl}
v = {distribution=logNormal, typical=v_pop, sd=omega_v}
ka = {distribution=logNormal, typical=ka_pop, no-variability}
soit, pour la clairance :
Trois choses à savoir sur cette ligne.
typical est la médiane, pas la moyenne. Pour une log-normale, cl_pop est la valeur qui coupe la population en deux, pas son espérance. La moyenne vaut : avec , elle est 4 % au-dessus de cl_pop. L'écart est négligeable ici, mais il grandit vite avec — et c'est la médiane que vous rapportez.
no-variability est un choix explicite. La ligne ka existe toujours : elle déclare que est estimé, mais identique chez tout le monde. Retirer l'IIV ne se fait pas en effaçant une ligne, mais en remplaçant sd= par un mot-clé — ce qui vous force à assumer la décision.
sd est un écart-type. C'est la différence de paramétrisation la plus coûteuse entre les deux grands logiciels.
Le coefficient de variation exact du paramètre se déduit directement de omega :
omega |
approché () | exact |
|---|---|---|
| 0,20 | 20 % | 20,2 % |
| 0,30 | 30 % | 30,7 % |
| 0,50 | 50 % | 53,3 % |
| 0,80 | 80 % | 94,7 % |
L'approximation est excellente en dessous de 0,3 et décroche nettement au-delà de 0,5. C'est l'avantage ergonomique du choix de Monolix : la sortie se lit presque comme un CV, sans passer par une racine carrée.
Choisir la loi
distribution |
Support | Pour quoi |
|---|---|---|
logNormal |
Le défaut : , , , — positifs, asymétriques à droite. | |
normal |
Un paramètre qui peut légitimement changer de signe : une pente, un effet de traitement, un écart à une ligne de base. | |
logitNormal |
, ou | Une fraction bornée : biodisponibilité , effet maximal exprimé en fraction, proportion. |
probitNormal |
Alternative au logit, à queues un peu plus courtes. | |
powerNormal |
Box-Cox : quand la log-normale est trop asymétrique pour vos données. |
La loi bornée s'écrit avec ses bornes :
F = {distribution=logitNormal, typical=F_pop, sd=omega_F} ; borne (0,1) par defaut
Emax = {distribution=logitNormal, min=0, max=1, typical=Emax_pop, sd=omega_Emax}
et l'effet aléatoire agit alors sur l'échelle du logit :
L'intérêt est structurel : aucune valeur de , même absurde, ne peut faire sortir de . Le SAEM peut donc explorer librement sans jamais produire une biodisponibilité de 1,4.
Les corrélations entre effets aléatoires
Par défaut, les sont indépendants. Une ligne suffit à les relier :
DEFINITION:
cl = {distribution=logNormal, typical=cl_pop, sd=omega_cl}
v = {distribution=logNormal, typical=v_pop, sd=omega_v}
correlation = {level=id, r(cl, v)=corr_cl_v}
Monolix estime ici le coefficient de corrélation lui-même, pas la covariance. C'est une différence de paramétrisation avec le $OMEGA BLOCK de NONMEM, et elle joue en votre faveur : est borné à , se lit sans calcul, et son estimation ne peut pas produire une matrice non définie positive. La covariance, si vous en avez besoin pour comparer avec un modèle NONMEM, se reconstruit :
Attention à ce que porte le mot : r(cl, v) est la corrélation entre et — donc entre les logarithmes des paramètres, puisque c'est là que vivent les etas. Ce n'est pas la corrélation entre et mesurée sur leur échelle naturelle. Les deux sont proches quand les omega sont petits, et divergent quand ils sont grands.
Les niveaux de variabilité : IIV et IOV
L'IOV ne s'obtient pas en ajoutant des etas, mais en déclarant un niveau de plus :
[INDIVIDUAL]
input = {cl_pop, omega_cl, gamma_cl, v_pop, omega_v}
DEFINITION:
cl = {distribution=logNormal, typical=cl_pop,
sd={omega_cl, gamma_cl}, varlevel={id, id*occ}}
v = {distribution=logNormal, typical=v_pop, sd=omega_v}
Les deux listes se lisent terme à terme : omega_cl va avec le niveau id (un tirage par patient), gamma_cl avec le niveau id*occ (un tirage par patient et par occasion). La convention de nommage de Monolix suit ce découpage : omega_ pour l'inter-individuel, gamma_ pour l'inter-occasion.
Les covariables
Les covariables se transforment dans leur propre bloc, puis se branchent dans [INDIVIDUAL] :
[COVARIATE]
input = {WT, CRCL, SEX}
SEX = {type=categorical, categories={F, M}}
EQUATION:
tWT = log(WT/70) ; centree sur un patient de reference
tCRCL = log(CRCL/90)
[INDIVIDUAL]
input = {cl_pop, omega_cl, tCRCL, beta_cl_tCRCL, SEX, beta_cl_SEX,
v_pop, omega_v, tWT, beta_v_tWT}
SEX = {type=categorical, categories={F, M}}
DEFINITION:
cl = {distribution=logNormal, typical=cl_pop,
covariate={tCRCL, SEX}, coefficient={beta_cl_tCRCL, {0, beta_cl_SEX}},
sd=omega_cl}
v = {distribution=logNormal, typical=v_pop,
covariate=tWT, coefficient=beta_v_tWT, sd=omega_v}
soit :
avec si le patient est un homme et sinon.
Deux points de lecture. D'abord, le 0 dans {0, beta_cl_SEX} épingle la catégorie de référence : c'est lui qui décide que cl_pop est la clairance typique d'une femme. Sans référence fixée, chaque catégorie aurait son coefficient et le modèle serait non identifiable avec cl_pop.
Ensuite, remarquez ce que fait vraiment covariate=tCRCL sur une log-normale. La covariable entre additivement sur l'échelle du log, donc multiplicativement sur le paramètre :
Une covariable vise à expliquer une partie de la variabilité systématique portée jusque-là par l'eta. cl_pop devient la clairance d'un patient de référence et eta_cl porte le reste. Une baisse d'omega_cl peut donc étayer son utilité, mais son ampleur n'est pas garantie : elle dépend des données, des autres effets et de l'incertitude d'estimation. On juge aussi plausibilité, précision, diagnostics et conséquence prédictive, pas seulement le .
04 · Exemple concret
Une analyse sur 52 patients, administration orale, un compartiment, deux visites de prélèvement par patient (jour 1 et jour 15) déclarées en colonne d'occasion. IIV sur , et , erreur combinée. On construit le modèle statistique par étapes.
| Run | Modèle de variabilité | Paramètres | ||
|---|---|---|---|---|
| 1 | IIV seule, etas indépendants | 8 | 1876,4 | — |
| 2 | + correlation r(cl, v) |
9 | 1863,1 | −13,3 |
| 3 | + IOV sur cl (gamma_cl) |
10 | 1841,7 | −21,4 |
| 4 | + CRCL sur cl |
11 | 1820,9 | −20,8 |
Run 1 → 2. est estimé à 0,52. Pour deux modèles emboîtés correctement convergés et sous les conditions usuelles du rapport de vraisemblance, le repère à 1 degré de liberté est 3,84 au risque de 5 % : l'exemple soutient ici l'ajout de la corrélation. Sa plausibilité et son effet sur les simulations doivent aussi être examinés ; une covariance estimée n'est pas automatiquement une preuve de mécanisme physiologique.
Run 2 → 3. gamma_cl sort à 0,18, soit un de 18,1 % ; et omega_cl descend de 0,42 à 0,36. C'est le résultat le plus instructif du tableau : une part de ce qu'on attribuait à « ce patient élimine fort » était en réalité « cette visite-là était différente ». Sans niveau d'occasion, l'IIV absorbe l'IOV et se retrouve surestimée.
Run 3 → 4. L'exposant sur la clairance de la créatinine est estimé à 0,71, et omega_cl passe de 0,36 à 0,29 :
La fonction rénale explique donc environ 8 points de CV sur la clairance. C'est cette phrase-là, et non le de 20,8, qui a un sens clinique et qui ira dans le rapport.
Lire la sortie. Monolix renvoie les paramètres de population avec leur erreur standard et leur RSE :
| Paramètre | Estimation | RSE (%) |
|---|---|---|
cl_pop |
4,62 L/h | 4 |
v_pop |
31,8 L | 4 |
ka_pop |
1,14 h⁻¹ | 10 |
beta_cl_tCRCL |
0,71 | 18 |
omega_cl |
0,29 | 11 |
omega_v |
0,38 | 13 |
omega_ka |
0,52 | 19 |
gamma_cl |
0,18 | 17 |
corr_cl_v |
0,52 | 21 |
Tout se lit sans conversion : 0,29 d'écart-type, soit ~30 % de CV ; 0,52 de corrélation. Les paramètres de variabilité ont des RSE structurellement plus élevées que les effets fixes. Un RSE supérieur à 50 % sur un omega signale d'abord une estimation imprécise de la variance ; il invite à réexaminer l'effet aléatoire, sans démontrer son absence.
Et en face, le shrinkage :
| Effet aléatoire | Shrinkage |
|---|---|
eta_cl |
9 % |
eta_v |
14 % |
eta_ka |
46 % |
, informé par toute la courbe, a 9 % de shrinkage : ses diagnostics individuels sont ici plus informatifs que ceux de , sans que ce chiffre suffise à garantir leur exactitude. est à 46 % : sans prélèvement précoce chez la plupart des patients, la phase d'absorption apporte peu d'information individuelle, et l'estimation de chaque patient retombe vers la population.
05 · Piège fréquent
Le poids est dans le jeu de données et vous voulez l'essayer sur le volume. Dans [COVARIATE], vous écrivez tWT = log(WT) — la transformation log est bien là, c'est l'essentiel, non ?
Le run passe. beta_v_tWT sort à 0,98 : superbe, presque exactement l'allométrie attendue sur un volume. Le baisse. omega_v baisse aussi. Tous les signes du succès sont là.
Puis vous regardez v_pop : 0,49 L, RSE 140 %.
Le plus déroutant, c'est que le modèle n'est pas faux. Puisque , les deux écritures sont le même modèle à une reparamétrisation près : à l'optimum, la vraisemblance est identique, les prédictions sont identiques, omega_v et beta_v_tWT sont identiques. Seul v_pop change, de 31,8 L à L.
C'est exactement ce qui rend le piège durable : rien ne signale l'erreur, parce qu'il n'y a pas d'erreur au sens du calcul. Le centrage n'est pas une nécessité statistique de l'ajustement — c'est ce qui rend le paramètre lisible et son estimation bien posée. En pratique, le mauvais conditionnement finit tout de même par se payer : le SAEM démarre d'une valeur initiale prévue pour 30 L alors que la solution est à 0,5 L, converge moins bien, et l'étape de calcul de la matrice de Fisher devient fragile.
06 · À retenir
[INDIVIDUAL]porte tout le modèle statistique. Une ligne = une loi (distribution), un centre (typical, qui est la médiane) et une largeur (sd).no-variabilityretire l'IIV sans effacer la ligne.sdest un écart-type, là où l'$OMEGAde NONMEM est une variance : un modèle traduit en recopiant les chiffres déclare 9 % au lieu de 30 %.omegad'une IIV usuelle vit entre 0,2 et 0,5. , et décroche au-delà de 0,5.- La loi choisit la contrainte :
logNormalpour un paramètre positif,normalpour un paramètre qui peut changer de signe,logitNormalpour une fraction bornée — mais sonomegan'est alors plus un CV. correlation = {level=id, r(cl, v)=...}estime le coefficient de corrélation entre les etas, borné et directement lisible ; la covariance se reconstruit par .- L'IOV est un niveau (
varlevel={id, id*occ}), pas une liste d'etas : une seule variance par construction, donc pas deSAMEà écrire. Sans niveau d'occasion, l'IIV absorbe l'IOV et se retrouve surestimée. - Sur une logNormale,
covariate=log(CRCL/90)avec un coefficient est le modèle puissance. Une baisse d'omegapeut soutenir l'utilité d'une covariable, parmi d'autres critères. - Centrez généralement les covariables continues sur une référence pertinente : un
log(WT)non centré donne ici le même ajustement mais rendv_popdifficile à interpréter et peut dégrader le conditionnement. - Lecture des sorties : un RSE > 50 % sur un
omegasignale une variance imprécisément estimée, pas l'absence d'IIV ; le shrinkage réduit progressivement l'information individuelle ; de 2 ou 3 points peut relever du bruit de l'échantillonnage d'importance.
Point de contrôle
Vérifiez votre compréhension
Q1. Vous traduisez en Monolix un modèle NONMEM dont l'IIV sur la clairance est déclarée par `$OMEGA 0.09`. Quelle valeur donner à `omega_cl` ?
Q2. Dans le bloc [INDIVIDUAL], que déclare la ligne `correlation = {level=id, r(cl, v)=corr_cl_v}` ?
Q3. Dans `cl = {distribution=logNormal, typical=cl_pop, sd={omega_cl, gamma_cl}, varlevel={id, id*occ}}`, que représente `gamma_cl` ?
Q4. Dans le bloc [COVARIATE], vous écrivez `tWT = log(WT)` au lieu de `log(WT/70)`. Quelle est la conséquence ?
Exercices d'entraînement
Cas en plusieurs étapes combinant calcul, interprétation et raisonnement.
Monolix : traduire OMEGA
Calcul · Interprétation · Lecture de codeÀ commencer
Monolix : traduire OMEGA
Calcul · Interprétation · Lecture de codeÀ commencerCiter cette page
Berrah R. Monolix — le bloc INDIVIDUAL, omega et covariables. PMx Explain, 2026. https://rberrah.github.io/pharmacometrie/chapitres/monolix-variabilite/
@misc{berrah2026monolixvariabilite,
author = {Berrah, Racym},
title = {{Monolix — le bloc INDIVIDUAL, omega et covariables}},
howpublished = {PMx Explain},
year = {2026},
url = {https://rberrah.github.io/pharmacometrie/chapitres/monolix-variabilite/},
note = {Texte actuel sous licence CC BY-NC-SA 4.0}
}