Cas pratique
Warfarine — un modèle PopPK, de la donnée aux diagnostics
Un fil rouge complet sur un vrai jeu de données warfarine (251 observations, 32 sujets) : explorer, ajuster à la main, choisir un modèle d'erreur, estimer avec nlmixr2 (R), diagnostiquer et comparer — comme dans un projet réel.
Support d'enseignement uniquement — aucune recommandation posologique clinique.
Données → exploration → modèle structural → erreur résiduelle → modèle statistique → estimation (SAEM) → diagnostics → comparaison
1 · Le jeu de données
Format « long » de population, une ligne par événement (dose ou observation). Colonnes typiques :
| Colonne | Signification |
|---|---|
id | identifiant patient |
time | temps (h) |
amt | dose administrée (mg) |
dv | observation (concentration PK ou effet PD) |
dvid | type : 1 = PK, 2 = PD |
wt, sex, age | covariables |
Jeu de données classique, inspiré de l'exemple Monolix ↗ (dose orale unique, PK puis PD).
2 · Explorer les données et ajuster le modèle
Avant tout, on regarde : les 251 vraies observations ci-dessous. Puis on ajuste à la main un modèle 1 compartiment (absorption Ka, latence Tlag, clairance CL, volume V) pour que la courbe traverse le nuage — le RMSE chiffre l'écart. Basculez en Obs vs préd pour voir le même ajustement autrement.
Les observations Warfarin réelles sont regroupées pour 32 sujets. Régler manuellement Ka, CL, V et Tlag modifie une seule courbe typique et sa comparaison Obs–PRED illustrative ; ce n’est pas le diagnostic d’un modèle PopPK estimé avec IIV et covariables. RMSE est ici descriptif.
Chaque point est une concentration réelle mesurée. La dispersion du faisceau annonce la variabilité inter-individuelle à modéliser (chapitre variabilité).
3 · Le modèle structural (le code)
Le squelette déterministe correspondant à l'ajustement ci-dessus : un compartiment, absorption orale d'ordre 1, temps de latence.
# Modèle structural PK — 1 compartiment, absorption orale + Tlag (nlmixr2)
pk_1cmt <- function() {
ini({
tka <- log(0.9) # constante d'absorption Ka
tcl <- log(0.135) # clairance CL
tv <- log(8.0) # volume V
tlag <- log(0.8) # temps de latence
eta.cl ~ 0.1 # variabilité inter-individuelle sur CL
eta.v ~ 0.1
add.err <- 0.7 # erreur résiduelle
})
model({
ka <- exp(tka); cl <- exp(tcl + eta.cl); v <- exp(tv + eta.v)
lag(depot) = exp(tlag) # retard avant absorption
d/dt(depot) = -ka * depot
d/dt(centr) = ka * depot - (cl / v) * centr
cp = centr / v
cp ~ add(add.err)
})
}
fit <- nlmixr(pk_1cmt, dat_pk, est = "saem")4 · L'erreur résiduelle
La prédiction ne passe jamais exactement par les points : il reste un bruit résiduel (dosage, temps, non-modélisé). Sa forme compte. Autour de la courbe, la bande à ±1,96·SD doit contenir ≈ 95 % des vrais points — testez les trois modèles d'erreur :
Ce graphe montre uniquement la forme supposée de la SD résiduelle selon la prédiction. Il ne juge pas l'adéquation du modèle : cela nécessite des prédictions individuelles et des diagnostics de résidus.
Additive : largeur constante (bien à basse concentration). Proportionnelle : s'élargit avec la prédiction (bien à haute). Combinée : les deux — souvent le meilleur compromis. Détails : chapitre L'erreur résiduelle.
# Modèle d'erreur résiduelle : trois choix
cp ~ add(add.err) # additive : bruit de largeur constante
cp ~ prop(prop.err) # proportionnelle : %CV constant
cp ~ add(add.err) + prop(prop.err) # combinée : plancher additif + pourcentage5 · Modèle statistique + estimation (SAEM)
On ajoute la variabilité inter-individuelle (η sur CL, V, log-normale) et, si utile, une covariable (poids sur CL/V par allométrie). Les paramètres sont estimés par SAEM (maximum de vraisemblance), qui alterne simulation des effets individuels et mise à jour des paramètres de population.
# Covariable poids (allométrie centrée à 70 kg) + erreur combinée
model({
cl <- exp(tcl + 0.75 * log(WT/70) + eta.cl) # exposant allométrique 0,75
v <- exp(tv + 1.00 * log(WT/70) + eta.v)
...
cp ~ add(add.err) + prop(prop.err)
})6 · Diagnostics — les graphiques de qualité d'ajustement
Le modèle est-il fiable ? On croise plusieurs graphiques, chacun révélant un défaut différent. (Panorama complet : parcours Validation.)
a · Observations vs prédictions (données réelles)
Les observations Warfarin réelles sont regroupées pour 32 sujets. Régler manuellement Ka, CL, V et Tlag modifie une seule courbe typique et sa comparaison Obs–PRED illustrative ; ce n’est pas le diagnostic d’un modèle PopPK estimé avec IIV et covariables. RMSE est ici descriptif.
Chaque point : une vraie observation placée en (prédiction, valeur mesurée). Un bon modèle aligne le nuage sur la diagonale ; ajustez CL/V/Ka/Tlag et voyez le nuage se resserrer.
b · VPC — le test prédictif visuel
Un écart répété ou structuré peut être compatible avec une mauvaise spécification du modèle, de la variabilité, de l’erreur résiduelle, du plan ou des classes. Une VPC n’identifie pas seule une cause unique.
Des écarts répétés entre les percentiles observés et les bandes simulées suggèrent une inadéquation prédictive, sans identifier seuls une cause structurale ou de variabilité. (La VPC utilise des simulations stochastiques du modèle avec le plan observé.)
c · NPDE — résidus par simulation
Sous les hypothèses des NPDE, la distribution est attendue proche de N(0,1). Une moyenne décalée ou une dispersion modifiée suggère une inadéquation prédictive, sans en identifier seule la cause.
Sous leurs hypothèses de calcul, les NPDE sont attendus proches de N(0,1). Un décalage de moyenne ou de dispersion suggère une inadéquation prédictive sans en identifier la cause. (Schéma illustratif.)
7 · Comparer les modèles (diagnostics numériques)
Les graphiques disent comment un modèle se trompe ; les nombres disent lequel choisir. On compare l'OFV (−2 log L) via le test du χ² (modèles emboîtés) ou l'AIC/BIC (pénalisés). Détails : Diagnostics numériques.
Sous les conditions de régularité pour des modèles emboîtés, un ΔOFV au-delà du seuil favorise le modèle plus riche par LRT. Un ΔAIC ou ΔBIC négatif le favorise selon ce critère ; aucun ne confirme le modèle. Les paramètres en frontière exigent une autre loi de référence et le n effectif du BIC doit être documenté en modèle hiérarchique.
| Modèle | Structure | AIC | BIC | logLik |
|---|---|---|---|---|
r01 | 1 compartiment, sans Tlag | 899.6 | 927.8 | -441.8 |
r02 | 1 compartiment + Tlag | 781.8 | 817.1 | -380.9 |
r03 | 2 compartiments + Tlag | 817.1 | 859.4 | -396.5 |
Ajouter le Tlag (r01→r02) fait chuter l'AIC de ~118 points : le modèle avec délai est très fortement favorisé dans cette comparaison. Passer à 2 compartiments (r03) dégrade l'AIC : plus complexe n'est pas meilleur.
8 · Bilan & pour aller plus loin
En huit étapes, on a construit un modèle PopPK complet sur données réelles : exploration → structural (+ Tlag) → erreur résiduelle → variabilité/covariables → estimation → diagnostics → comparaison. La suite naturelle est la partie PK/PD — relier l'effet (INR / activité) à la concentration, souvent avec un retard (turnover des facteurs de coagulation) — et l'individualisation de dose.
Chapitres liés : erreur résiduelle · covariables · diagnostics · OFV/AIC/BIC · PK/PD.
9 · Télécharger le matériel
- example_warfarin.Rmd — notebook R complet (nlmixr2)
- warfarin_pkpd_nlmixr2_EN.ipynb — version PK/PD (Jupyter)
- warfarin_monolix_nlmixr2.ipynb — comparaison Monolix ↔ nlmixr2
- warfarin_data.csv — jeu de données
Pré-requis R: nlmixr2, rxode2, nlmixr2data, ggplot2, dplyr.