Chapitre 05
Monolix — le moteur SAEM
Racym Berrah, PharmD PMx Explain Relecture scientifique par l'auteur : ORCID
Pourquoi une approximation stochastique de l'EM plutôt qu'une linéarisation : les deux phases, la vraisemblance calculée à part, et ce que convergence veut dire ici.
1 activités guidées01 · Pourquoi ce chapitre
Ce qui distingue Monolix n'est pas son interface — c'est son moteur, et le fait qu'il n'y en ait qu'un. NONMEM propose le SAEM parmi une dizaine de méthodes d'estimation ; Monolix est construit autour du SAEM. Ce n'est pas une entrée dans une liste déroulante, c'est l'architecture du logiciel.
Trois particularités, souvent vécues comme des bizarreries par qui arrive de NONMEM, en découlent directement : la vraisemblance est une tâche séparée qu'il faut penser à demander ; le graphe de convergence a deux phases séparées par un trait vertical ; et un run n'échoue pas comme un run NONMEM. Il peut tout de même s'arrêter sans convergence satisfaisante, ou au nombre maximal d'itérations. Aucune des trois n'est un choix d'ergonomie. Ce chapitre remonte de ces symptômes à leur cause commune.
02 · Intuition
La vraisemblance de population exige d'intégrer les paramètres individuels, qu'on n'observe pas. Cette intégrale n'a pas de forme close dès que le modèle est non linéaire en ces paramètres — situation fréquente en PK/PD. Deux écoles s'affrontent depuis quarante ans.
Approximer localement le modèle ou l'intégrale. FO et FOCE utilisent une approximation de Taylor du modèle autour de ou autour du mode individuel ; Laplace approxime l'intégrale autour de ce mode. On maximise ensuite exactement une fonction approchée.
Ne pas calculer l'intégrale du tout. C'est l'EM, et sa version stochastique le SAEM : les paramètres individuels sont traités comme des données manquantes, qu'on simule au lieu de les intégrer. Le modèle n'est jamais déformé — il est seulement évalué, en avant, pour des valeurs de paramètres tirées au sort.
La différence se voit mécaniquement, dans la boucle interne. À chaque itération, FOCE doit résoudre pour chaque sujet un problème d'optimisation — trouver le mode — et a besoin des dérivées du modèle par rapport à . Deux choses peuvent casser : l'optimisation interne peut ne pas converger, et les dérivées peuvent ne rien vouloir dire (une différence finie à travers une EDO raide ou le flanc quasi vertical d'un Emax ne mesure que du bruit d'intégrateur). La boucle interne du SAEM, elle, est un pas de Metropolis-Hastings : on propose un , on évalue le modèle une fois, on accepte ou on rejette sur un rapport de vraisemblance. Aucune dérivée, aucun optimum interne.
Le prix est double et il faut le payer les yeux ouverts. La réponse est stochastique : deux runs identiques ne rendent pas exactement le même chiffre. Et comme l'algorithme ne calcule jamais la vraisemblance, il ne vous en rend aucune à l'arrivée.
03 · La formule décortiquée
La vraisemblance à maximiser intègre les paramètres individuels :
L'EM contourne l'intégrale en changeant de cible. Si on connaissait les , maximiser serait trivial : ce ne seraient que des moyennes et des variances. On alterne donc entre estimer ce qu'on ne voit pas et maximiser comme si on le voyait :
Sauf que cette espérance est, elle aussi, une intégrale sans forme close. Le SAEM la remplace par une approximation stochastique, en trois sous-étapes par itération :
S — Simulation. Tirer dans la distribution conditionnelle , par MCMC. C'est le seul endroit où le modèle structural est appelé.
A — Approximation. Mettre à jour une moyenne mobile des statistiques exhaustives du modèle à données complètes :
M — Maximisation. Ré-estimer à partir de , en forme close pour la famille exponentielle. C'est ce qui rend le M-step gratuit : il n'y a rien à optimiser numériquement.
Tout se joue dans . Delyon, Lavielle et Moulines (1999) donnent les deux conditions de convergence presque sûre : — le pas ne doit pas s'éteindre trop vite, sinon la suite se fige n'importe où — et — il doit s'éteindre quand même, sinon le bruit ne s'efface jamais. Kuhn et Lavielle (2004) ont porté ce résultat aux modèles non linéaires à effets mixtes, en remplaçant le tirage exact du S-step par un noyau MCMC.
Monolix choisit en deux phases, et c'est exactement la lecture du graphe de convergence :
Phase 1 — exploration. . La récurrence se réduit à : aucune mémoire, chaque itération oublie la précédente. La suite ne converge pas — elle erre, à grands pas, dans la région de forte vraisemblance. C'est voulu : c'est ce qui rend le SAEM peu sensible aux valeurs initiales.
Phase 2 — lissage. décroît, typiquement en avec entre et . La mémoire s'allonge, chaque nouvelle simulation ne corrige plus que d'une fraction, le bruit de Monte-Carlo se moyenne et converge.
Dans le fichier projet, tout cela se règle explicitement :
<MONOLIX>
[TASKS]
populationParameters()
fim(method = StochasticApproximation)
logLikelihood(method = ImportanceSampling) ; tache SEPAREE, a demander
[SETTINGS]
POPULATION:
exploratoryiterations = 500 ; phase 1 : pas constant, gamma = 1
smoothingiterations = 200 ; phase 2 : pas decroissant, gamma ~ 1/k
exploratoryautostop = yes ; coupe la phase 1 sur critere
smoothingautostop = yes
nbchains = 5 ; chaines MCMC : peu de sujets => en mettre plus
simulatedannealing = yes ; freine la decroissance des variances en phase 1
LL:
nbfixediterations = 10000 ; taille Monte-Carlo de l'echantillonnage d'importance
Deux réglages méritent un mot. nbchains : quand les sujets sont peu nombreux, une seule chaîne par sujet produit un bruit de simulation trop gros devant l'information des données ; Monolix duplique alors les sujets en plusieurs chaînes pour moyenner ce bruit. simulatedannealing : pendant l'exploration, les variances (, les paramètres du modèle d'erreur) n'ont pas le droit de décroître plus vite qu'un coefficient imposé. Sans ce frein, le SAEM referme les variances autour des valeurs initiales dès les premières itérations — et il n'explore plus rien.
La vraisemblance, calculée à part. Relisez le M-step : il ne touche qu'à , des statistiques du modèle à données complètes. À aucun moment l'algorithme n'évalue . Le SAEM maximise la vraisemblance sans jamais la calculer. À la fin du run vous avez et rien à mettre en face — d'où la tâche logLikelihood, séparée.
Deux méthodes s'offrent alors, et le choix n'est pas neutre. Linearization linéarise le modèle autour des modes individuels : rapide, mais elle réintroduit l'approximation locale que le SAEM avait évitée pendant l'estimation. ImportanceSampling est l'option la plus cohérente avec ce moteur : elle réécrit l'intégrale du sujet comme une espérance sous une loi de proposition qu'on sait simuler,
et l'estime par la moyenne de tirages :
La proposition est centrée sur la distribution conditionnelle du sujet — celle-là même que le SAEM vient d'échantillonner, on l'a donc gratuitement — mais avec des queues lourdes (une loi de Student plutôt qu'une gaussienne), pour qu'aucun tirage égaré dans une zone où est minuscule ne reçoive un poids explosif.
04 · Exemple concret
Un 1 compartiment oral, 60 sujets, 10 prélèvements chacun, soit observations. Le modèle est assez sage pour que FOCE-I y soit quasi exact : c'est le cas le plus favorable qui soit à une comparaison.
- Monolix, SAEM puis échantillonnage d'importance : , erreur standard de Monte-Carlo .
- NONMEM, FOCE-I, mêmes données, même modèle : .
Un écart de 1 103 points. Dans cet exemple construit, l'essentiel de l'écart vient d'une constante : NONMEM omet de son objectif le terme , que Monolix inclut dans sa log-vraisemblance :
Il reste point, soit environ deux erreurs de Monte-Carlo plus le résidu de l'approximation FOCE. Ici, les chiffres deviennent proches après harmonisation. Cela ne constitue pas une règle générale : sur un modèle moins sage, une autre définition de vraisemblance, une autre approximation ou d'autres conventions peuvent laisser un écart non négligeable.
Second temps, plus utile au quotidien. On ajoute le poids sur et on relance :
- sans covariable :
- avec le poids :
, contre un seuil de pour un à 1 degré de liberté à 5 %. On garde la covariable ? Prudence : les deux sont bruités, et le bruit de leur différence vaut . Le seuil se trouve à écart-type de la valeur estimée. Cette décision n'est pas portée par les données : elle est portée par la graine du générateur aléatoire.
05 · Piège fréquent
Le SAEM échoue autrement. Il fait les itérations que vous lui avez demandées, il s'arrête, il affiche parfois des paramètres, mais cela ne garantit pas que la convergence soit satisfaisante : la documentation Monolix prévoit explicitement des critères de convergence non atteints et l'arrêt au nombre maximal d'itérations. Le juge pratique reste le graphe de convergence — et c'est précisément là que le piège se referme.
Le diagnostic ne se réduit pas à une phase. On examine les trajectoires et l'indicateur de convergence pendant l'exploration, puis leur stabilisation pendant le lissage, les statuts d'arrêt et la cohérence des estimations. Une trajectoire encore monotone à la bascule demande de la prudence ; un qui glisse vers zéro sans se stabiliser peut signaler un effet aléatoire peu soutenu. La robustesse se vérifie aussi en répétant l'estimation avec plusieurs graines et valeurs initiales.
L'auto-stop utilise la stabilité de l'indicateur de convergence, des omégas et des paramètres d'erreur. Le désactiver et prolonger les phases peut constituer une analyse de sensibilité sur un modèle difficile ; ce n'est pas une règle universelle ni une garantie de meilleur optimum.
Et le contrôle qui tranche : relancez avec une autre graine et d'autres valeurs initiales. Si bouge au-delà du bruit annoncé, ce n'est pas le SAEM qui est en cause. C'est votre vraisemblance qui est plate ou multimodale — et aucun réglage d'algorithme ne réparera un modèle non identifiable.
06 · À retenir
- Monolix ne propose pas le SAEM parmi d'autres méthodes : il est construit autour. Ses trois bizarreries apparentes en découlent.
- FO/FOCE utilisent une approximation locale du modèle, Laplace une approximation locale de l'intégrale ; le SAEM évite cette linéarisation pendant l'estimation et échantillonne les effets individuels. Pas de dérivée, pas d'optimisation interne par sujet : d'où la robustesse aux modèles raides et aux données éparses.
- Deux phases : exploration à pas constant (, aucune mémoire, on erre exprès), puis lissage à pas décroissant (, le bruit se moyenne, on converge). Fondement : Delyon–Lavielle–Moulines (1999), porté au non linéaire par Kuhn–Lavielle (2004).
- Le SAEM maximise la vraisemblance sans jamais l'évaluer : le est une tâche séparée, par échantillonnage d'importance ou par linéarisation.
- Le par échantillonnage d'importance est bruité : lisez son erreur de Monte-Carlo, et augmentez
nbfixediterationsavant de trancher un LRT serré. - L'évaluation de convergence combine trajectoires d'exploration, phase de lissage, indicateurs et statuts, puis stabilité entre graines et valeurs initiales ; aucune phase ne suffit seule.
- Un de Monolix et une OFV de NONMEM ne se comparent qu'après vérification de la définition de l'objectif, des données, de l'approximation, des constantes et des conventions ; l'exemple montre comment une constante peut expliquer une grande partie d'un écart.
Point de contrôle
Vérifiez votre compréhension
Q1. Dans le graphe de convergence du SAEM, une trajectoire parfaitement plate pendant la phase de lissage indique...
Q2. Monolix calcule la vraisemblance dans une tâche séparée de l'estimation parce que...
Q3. Un -2LL de Monolix (échantillonnage d'importance) et une OFV de NONMEM (FOCE-I), sur le même jeu de données et le même modèle...
Exercices d'entraînement
Cas en plusieurs étapes combinant calcul, interprétation et raisonnement.
Monolix : contrôler la stabilité
Calcul · Décision · InterprétationÀ commencer
Monolix : contrôler la stabilité
Calcul · Décision · InterprétationÀ commencerCiter cette page
Berrah R. Monolix — le moteur SAEM. PMx Explain, 2026. https://rberrah.github.io/pharmacometrie/chapitres/monolix-moteur/
@misc{berrah2026monolixmoteur,
author = {Berrah, Racym},
title = {{Monolix — le moteur SAEM}},
howpublished = {PMx Explain},
year = {2026},
url = {https://rberrah.github.io/pharmacometrie/chapitres/monolix-moteur/},
note = {Texte actuel sous licence CC BY-NC-SA 4.0}
}