Dans le paysage contemporain de l’analyse statistique et de la modélisation probabiliste, la distribution de Weibull occupe une position stratégique incontournable. Conçue initialement par le mathématicien suédois Waloddi Weibull en 1951 pour caractériser la résistance mécanique des matériaux et l’usure précoce des systèmes physiques, cette loi de probabilité continue à deux ou trois paramètres s’est progressivement émancipée de son champ d’origine pour devenir un instrument analytique de référence en sciences du comportement, en psychologie quantitative, en neurosciences cognitives et en épidémiologie. Sa flexibilité exceptionnelle réside dans son aptitude singulière à emprunter des profils morphologiques extrêmement diversifiés, allant de la décroissance hyper-exponentielle à des architectures quasi-gaussiennes rigoureusement symétriques, en passant par des asymétries positives caractéristiques des processus temporels humains.
En psychométrie et en ergonomie cognitive, la caractérisation empirique des chronométries comportementales — qu’il s’agisse des temps de réponse à des stimuli sensoriels complexes, des latences décisionnelles ou des durées de persévérance face à des protocoles expérimentaux exigeants — requiert des outils d’ajustement qui dépassent le dogme restrictif de la distribution normale. Les données de latence observées chez l’humain présentent de manière quasi universelle des queues de distribution épaisses et une asymétrie vers la droite marquée. Si des distributions concurrentes telles que la loi log-normale ou la distribution ex-gaussienne sont couramment convoquées dans les analyses chronométriques, la distribution de Weibull se distingue par sa dérivation naturelle à partir de la théorie des valeurs extrêmes, offrant ainsi une plausibilité mécanistique supérieure pour modéliser le franchissement de seuils de décision sous tension cognitive.
Le langage de programmation et environnement statistique R constitue le milieu informatique le plus abouti et le plus rigoureux pour explorer, modéliser et visualiser graphiquement les fonctions de Weibull. Grâce à sa double architecture graphique — reposant d’une part sur le moteur graphique traditionnel R Base et d’autre part sur l’écosystème vectoriel moderne incarné par ggplot2 —, R offre aux chercheurs un contrôle millimétrique sur la sémiologie graphique de leurs tracés. L’objectif de ce guide exhaustif est de fournir un parcours didactique et technique sans concession, guidant le praticien depuis les fondations mathématiques de la densité de Weibull jusqu’aux techniques avancées d’ajustement empirique par le maximum de vraisemblance, de visualisation de fonctions de risque instantané et d’exportation graphique vectorielle conforme aux standards typographiques les plus rigoureux des revues académiques internationales.
- 1. Fondements théoriques et mathématiques de la distribution de Weibull
- 2. Architecture des fonctions de Weibull natives dans le logiciel R
- 3. Construction d’un tracé de base avec la fonction curve()
- 4. Amélioration esthétique et annotation du graphique en R Base
- 5. Superposition et comparaison de multiples lois de Weibull en R Base
- 6. Visualisation de la répartition cumulative et des fonctions de survie
- 7. Approche moderne et vectorielle : Tracer la loi de Weibull avec ggplot2
- 8. Comparaison multi-paramétrique et facettage avec ggplot2
- 9. Ajustement d’une loi de Weibull à des données empiriques et tracé conjoint
- 10. Outils de diagnostic visuel de l’adéquation du modèle de Weibull
- 11. Gestion des données censurées et analyse de survie appliquée
- 12. Reproductibilité, exportation et intégration dans des publications académiques
- Références
1. Fondements théoriques et mathématiques de la distribution de Weibull
1.1 Définition analytique et fonction de densité de probabilité
La formulation mathématique d’une variable aléatoire continue suivant une loi de Weibull à deux paramètres repose sur une équation différentielle issue de la modélisation de la fiabilité des composants complexes. Sur le plan formel, une variable aléatoire réelle positive X est dite distribuée selon une loi de Weibull de paramètre de forme k (souvent désigné sous l’anglicisme shape) strictement positif et de paramètre d’échelle lambda (ou scale) strictement positif si sa fonction de densité de probabilité, notée f(x; k, lambda), est explicitée par la relation analytique fondamentale suivante pour toute valeur de x strictement supérieure à zéro :
f(x; k, lambda) = (k / lambda) * (x / lambda)^(k – 1) * exp(-(x / lambda)^k)
Dans cette formulation, pour toute valeur de x inférieure ou égale à zéro, la fonction de densité est strictement nulle, conférant ainsi à la distribution une frontière étanche à l’origine. L’impact du paramètre de forme k est prépondérant dans la détermination géométrique du profil de la distribution. Il agit comme un opérateur direct sur l’asymétrie (skewness) et l’aplatissement (kurtosis) de la courbe. Lorsque k varie, la dérivée première de la fonction de densité subit des transformations qualitatives profondes, déplaçant le mode de la distribution et régissant la vitesse d’amortissement de la queue de probabilité supérieure.
Le paramètre d’échelle lambda, quant à lui, opère une dilatation ou une contraction isotrope le long de l’axe des abscisses. Mesuré dans la même unité dimensionnelle que la variable aléatoire X, il correspond au 63,2e centile théorique de la distribution, quelle que soit la valeur attribuée au paramètre de forme. Cette propriété découle directement de l’évaluation de la probabilité cumulée en x = lambda, où la fonction exponentielle prend la valeur universelle 1 – exp(-1), soit approximativement 0,63212. Ainsi, l’augmentation de lambda étire horizontalement la courbe de probabilité tout en diminuant proportionnellement son sommet afin de préserver l’axiome fondamental selon lequel l’intégrale de la densité sur l’ensemble de son domaine de définition demeure rigoureusement égale à l’unité.
Sur le plan asymptotique, lorsque la variable x tend vers l’infini positif, le terme exponentiel négatif gouverne impérieusement la décroissance de la fonction, garantissant une convergence ultra-rapide vers zéro. À l’inverse, lorsque x s’approche de zéro par la droite, le comportement limite dépend exclusivement de la magnitude de k : si k est strictement inférieur à l’unité, la densité diverge vers l’infini, créant une singularité asymptotique verticale à l’origine ; si k est égal à un, la densité coupe l’axe vertical à la hauteur exacte de 1 / lambda ; enfin, si k excède un, la courbe s’annule en zéro avec une tangente dont l’inclinaison dépend de la puissance k – 1.
1.2 Pertinence de la loi de Weibull en sciences du comportement et psychologie
En psychologie expérimentale et en neurosciences comportementales, l’analyse fine des distributions temporelles constitue l’une des voies royales pour inférer l’architecture fonctionnelle des processus cognitifs sous-jacents. Dans le cadre de paradigmes expérimentaux chronométrés — tels que les tâches d’inhibition de type Stop-Signal, les épreuves de décision lexicale ou les tâches d’attention soutenue comme la Psychomotor Vigilance Task —, les temps de réaction ne se réduisent jamais à leur moyenne arithmétique. L’utilisation de la distribution de Weibull s’avère particulièrement pertinente car elle découle directement d’un modèle mécanistique théorique dit de « course de chevaux » (race model) ou de maillon le plus faible (weakest-link model). Dans cette perspective, la réponse comportementale observée émerge dès lors que le premier parmi une constellation de détecteurs neuronaux parallèles franchit un seuil critique d’activation.
Un autre domaine d’application psychologique de premier plan concerne l’analyse de l’attrition expérimentale et des temps d’abandon au sein d’études longitudinales ou d’interventions thérapeutiques digitalisées. Dans les protocoles cliniques ou les thérapies comportementales en ligne, la probabilité d’abandon varie au fil du temps en fonction de l’effort perçu, de la lassitude ou du désengagement cognitif. La flexibilité paramétrique de la loi de Weibull permet d’estimer si le risque instantané d’abandon augmente de manière monotone — traduisant une accumulation progressive d’épuisement cognitif et de charge mentale — ou s’il s’atténue avec le passage du temps, témoignant d’une sélection adaptative des participants les plus résilients.
Dans la littérature psychométrique contemporaine, la distribution de Weibull entre fréquemment en compétition avec la loi log-normale et la distribution ex-gaussienne (qui combine une composante normale et une queue exponentielle). Bien que l’ex-gaussienne soit historiquement prisée pour sa décomposition intuitive entre une composante motrice centrale et un processus décisionnel délibératif, elle souffre d’un manque de flexibilité dans la modélisation des événements extrêmes précoces. La loi de Weibull, ancrée dans la théorie mathématique asymptotique de Fréchet-Fisher-Tippett, offre une description supérieure des latences ultra-courtes et permet de modéliser avec une grande élégance la frontière temporelle minimale en deçà de laquelle aucune transmission synaptique physiologique n’est biologiquement envisageable.
1.3 Comportement dynamique selon la valeur du paramètre de forme
La puissance sémiotique et analytique de la loi de Weibull provient de sa capacité à métamorphoser sa morphologie fonctionnelle sous l’effet des variations de son paramètre de forme k. L’exploration visuelle de ces régimes dynamiques constitue une étape exploratoire indispensable pour tout statisticien ou psychologue confronté à des séries temporelles empiriques.
- Régime k < 1 : Défaillance précoce et décroissance hyper-exponentielle. Lorsque le paramètre de forme est inférieur à l’unité, la distribution présente un profil en « L » sans aucun mode interne. La fonction de densité décroît de manière continue et monotone depuis une valeur théoriquement infinie à l’origine jusqu’à zéro à l’infini. Sur le plan des processus latents, ce régime illustre des phénomènes où la probabilité d’occurrence d’un événement est maximale immédiatement après le stimulus initial, puis diminue drastiquement au cours du temps. En psychologie clinique, cela peut modéliser le taux de rechute immédiate après l’interruption d’une addiction ou les réponses impulsives non filtrées survenant dans des micro-intervalles temporels.
- Régime k = 1 : Mémoire nulle et distribution exponentielle pure. Au seuil exact de k = 1, l’exposant (x / lambda)^(k – 1) s’annule identiquement, et l’équation de Weibull se simplifie pour devenir strictement équivalente à la densité exponentielle de paramètre de taux 1 / lambda. Dans cette configuration singulière, le processus est qualifié de sans mémoire : la probabilité qu’un événement survienne dans le prochain intervalle temporel est strictement indépendante du temps déjà écoulé. Ce régime est théoriquement atteint dans les paradigmes de temps de réaction simple dépourvus de toute anticipation ou d’apprentissage temporel.
- Régime 1 < k < 3 : Asymétrie positive et latences comportementales typiques. Dès lors que k dépasse l’unité, la densité devient unimodale, débutant à zéro, culminant à un sommet bien identifié, puis s’étirant vers la droite en une queue allongée. L’intervalle compris entre 1,5 et 2,5 correspond très exactement à la distribution empirique typique des temps de réaction moteurs observés chez les sujets humains sains. La phase ascendante rapide capture la distribution du délai d’initiation motrice et de transmission nerveuse périphérique, tandis que la décroissance graduelle caractérise la variabilité cognitive inter-essais inhérente aux fluctuations de l’attention sélective.
- Régime k proche de 3,6 : Convergence quasi-gaussienne. Lorsque la valeur de k augmente pour atteindre approximativement 3,57 à 3,60, le coefficient d’asymétrie théorique de la loi de Weibull s’annule rigoureusement. La courbe adopte alors un profil en cloche presque indiscernable d’une distribution normale, tout en conservant un support strictement confiné aux valeurs positives. Au-delà de cette valeur, pour des valeurs de k supérieures à 4, la distribution développe une asymétrie négative (orientée vers la gauche), phénomène rare mais précieux pour modéliser des processus de vieillissement accéléré ou des temps de réponse contraints par des limites temporelles strictes (deadlines) imposées expérimentalement.
2. Architecture des fonctions de Weibull natives dans le logiciel R
2.1 La famille de fonctions standard : dweibull, pweibull, qweibull et rweibull
Fidèle à la philosophie de conception de ses distributions univariées, le système R intègre la loi de Weibull au sein d’un quatuor fonctionnel cohérent partageant le préfixe générique de la distribution. Cette architecture canonique est composée des fonctions dweibull, pweibull, qweibull et rweibull, chacune répondant à des opérations mathématiques spécifiques indispensables à la modélisation statistique.
La fonction dweibull() constitue l’opérateur de calcul de la densité de probabilité continue. Elle évalue, pour un vecteur donné d’abscisses, la hauteur exacte de la courbe théorique. Elle ne calcule pas une probabilité discrète — puisque dans le domaine continu la probabilité en un point isolé est infinitésimale —, mais une intensité locale de densité, mesurée en unités inverses de la variable observée. C’est cette fonction centrale qui sera passée en paramètre aux moteurs graphiques pour générer les profils morphologiques de la loi.
La fonction pweibull() implémente l’intégrale définie de la fonction de densité de moins l’infini (en pratique zéro) jusqu’au point d’évaluation. Elle fournit la fonction de répartition cumulative (Cumulative Distribution Function ou CDF), traduisant la probabilité formelle que la variable aléatoire X prenne une valeur inférieure ou égale au seuil q spécifié. Elle s’exprime analytiquement par la formule close F(q) = 1 – exp(-(q / lambda)^k). Son calcul est algorithmiquement extrêmement rapide puisqu’il ne requiert aucune quadrature numérique d’approximation.
Inversement, la fonction qweibull() représente la fonction quantile théorique, correspondant à la réciproque mathématique de la fonction de répartition. En lui fournissant une probabilité cumulée comprise entre 0 et 1, elle restitue la valeur critique sur l’axe des abscisses correspondant à ce rang percentile. Cette fonction est essentielle pour délimiter les intervalles de confiance bayésiens ou fréquentistes et pour positionner des repères graphiques au niveau des quantiles clés tels que la médiane théorique (centile 0,50).
Enfin, la fonction rweibull() opère comme un générateur de nombres pseudo-aléatoires distribués selon la loi de Weibull. S’appuyant sur la méthode de transformation inverse à partir de tirages uniformes générés par l’algorithme sous-jacent de Mersenne Twister, rweibull() permet aux chercheurs de simuler des cohortes synthétiques de données comportementales, autorisant des études de puissance statistique par méthode de Monte-Carlo ou le test de robustesse d’estimateurs paramétriques.
2.2 Paramétrage exact et conventions syntaxiques dans dweibull()
L’invocation correcte de la fonction dweibull() exige une compréhension scrupuleuse de ses arguments formels et des pièges d’implémentation qui peuvent altérer la validité des calculs. La signature de base de la fonction dans l’environnement R se présente sous la forme suivante :
dweibull(x, shape, scale = 1, log = FALSE)
L’argument x accueille un vecteur numérique d’abscisses pour lesquelles la densité doit être calculée. L’argument shape représente le paramètre de forme k et ne dispose d’aucune valeur par défaut : son omission déclenche immédiatement une erreur d’exécution. En revanche, l’argument scale, qui correspond au paramètre d’échelle lambda, possède une valeur fixée par défaut à 1. Cette convention, bien que pratique pour les mathématiciens travaillant sur des distributions réduites, constitue un piège récurrent pour les praticiens des sciences comportementales. Omettre de spécifier explicitement scale revient à postuler implicitement que le 63e percentile des temps de réaction se situe exactement à 1 seconde ou 1 milliseconde, ce qui est généralement dénué de toute cohérence biologique ou physique.
La gestion du domaine de validité est rigoureusement prise en charge par le code C sous-jacent de R. Si un vecteur d’entrée x contient des valeurs strictement négatives, dweibull() ne renvoie pas d’erreur mais assigne automatiquement la valeur zéro à la densité correspondante, respectant scrupuleusement la définition mathématique de la loi. En revanche, si l’utilisateur spécifie une valeur nulle ou négative pour le paramètre shape ou scale, R émet un avertissement formel et renvoie la valeur NaN (Not a Number), les paramètres de Weibull étant strictement contraints au domaine des réels positifs.
L’argument logique log = FALSE permet, lorsqu’il est basculé sur TRUE, de retourner directement le logarithme népérien de la densité de probabilité. Cette fonctionnalité s’avère critique pour les calculs de log-vraisemblance dans les algorithmes d’optimisation numérique, car elle prévient les phénomènes d’évanouissement arithmétique (underflow) qui surviennent inévitablement dans les queues de distribution où la densité devient infinitésimale.
3. Construction d’un tracé de base avec la fonction curve()
3.1 Syntaxe fondamentale et mécanisme d’évaluation de curve()
Le moteur graphique standard de R met à la disposition des chercheurs une fonction dédiée au tracé direct de relations mathématiques continues sans qu’il soit nécessaire de créer manuellement au préalable un vecteur de points ordonnés : la fonction curve. Contrairement aux fonctions graphiques élémentaires comme plot, qui opèrent sur des paires de vecteurs discrets de coordonnées cartésiennes, curve adopte un paradigme d’évaluation non standard particulièrement élégant pour l’analyse fonctionnelle.
Le mécanisme interne de curve consiste à analyser l’expression mathématique transmise en premier argument en tant qu’objet de type expression symbolique. Dans cette expression, la variable indépendante doit obligatoirement être notée sous le symbole littéral x. Les arguments from et to définissent l’intervalle fermé sur lequel le tracé doit être généré. En arrière-plan, R interpole cet intervalle en un maillage régulier de points numériques équidistants, évalue l’expression vectorielle en remplaçant la variable symbolique x par ce vecteur synthétique, puis connecte les paires de coordonnées calculées par des segments infinitésimaux produisant l’illusion d’une ligne continue parfaitement fluide.
Le choix stratégique des bornes d’affichage from et to est crucial pour restituer fidèlement l’intégralité de la morphologie de la loi de Weibull. Fixer from = 0 est indispensable pour visualiser le comportement de la distribution à l’origine. Le choix de to doit quant à lui être guidé par la fonction quantile théorique qweibull. Dans un cadre de rigueur scientifique, il est vivement déconseillé de choisir la borne supérieure de manière arbitraire. Calculer préalablement le 99,9e centile de la distribution ciblée à l’aide de l’instruction qweibull(0.999, shape = k, scale = lambda) constitue la méthode la plus rationnelle pour garantir que l’intégralité de l’aire sous la courbe sera visible sans écraser le sommet de la distribution dans une marge latérale.
3.2 Génération d’une première courbe de densité non personnalisée
Pour matérialiser une première distribution de Weibull représentative d’un temps de réaction unimodal typique, il suffit d’exécuter l’instruction élémentaire suivante au sein de la console R :
curve(dweibull(x, shape = 2, scale = 1), from = 0, to = 4)

L’exécution de cette commande ouvre immédiatement une fenêtre graphique native présentant la silhouette canonique d’une loi de Weibull de forme quadratique. L’observateur attentif relèvera immédiatement les conventions visuelles par défaut attribuées par le moteur R Base : les axes sont tracés avec une boîte fermée complète, les graduations sont espacées selon l’algorithme heuristique d’équidistance de Wilkinson, et les étiquettes textuelles des axes reprennent mécaniquement l’expression symbolique saisie, à savoir dweibull(x, shape = 2, scale = 1) en ordonnée et x en abscisse.
Un examen approfondi de la géométrie de cette courbe permet d’identifier visuellement les caractéristiques mathématiques de la configuration shape = 2 (connue historiquement sous le nom de distribution de Rayleigh). La densité part de zéro avec une pente linéaire ascendante, atteint son extremum local (le mode de la distribution) en un point d’abscisse théorique égal à lambda * sqrt((k – 1) / k) — soit pour nos paramètres 1 * sqrt(1/2) ≈ 0,707 —, puis entame une décroissance asymétrique progressive vers la droite.
Toutefois, lors du tracé de distributions de Weibull présentant un paramètre de forme élevé (induisant des pointes très étroites) ou un paramètre de forme inférieur à l’unité (induisant une courbure asymptotique violente près de zéro), le maillage d’échantillonnage par défaut de la fonction curve, qui n’est que de 101 points équidistants, peut engendrer des artefacts visuels perceptibles sous forme de facettes anguleuses. Pour éliminer tout artefact d’échantillonnage et garantir un rendu vectoriel irréprochable, il est indispensable de spécifier l’argument n = 1000 ou n = 5000, ce qui force le moteur à interpoler la densité sur plusieurs milliers de points, restituant une courbure d’une fluidité mathématique parfaite.
4. Amélioration esthétique et annotation du graphique en R Base
4.1 Personnalisation des étiquettes et du titre académique
Bien que le tracé par défaut produit par curve permette une inspection exploratoire rapide, il s’avère manifestement insuffisant pour une communication scientifique ou une intégration dans un manuscrit destiné à une revue à comité de lecture. La première étape d’optimisation consiste à doter la figure d’un appareillage textuel explicite, rigoureux et mathématiquement documenté.
L’argument main permet d’insérer un titre supérieur résumant la finalité de l’illustration. L’argument xlab doit remplacer le simple symbole x par une désignation explicite de la métrique mesurée, incluant impérativement l’unité de mesure physique, par exemple « Temps de latence cognitive (secondes) » ou « Durée de fixation oculaire (ms) ». De manière analogue, l’argument ylab doit formaliser la dimension de l’axe vertical, généralement libellé « Densité de probabilité f(x) ».
L’enrichissement le plus raffiné repose toutefois sur l’incorporation de la notation typographique mathématique native au moyen de la fonction expression ou de la construction dynamique bquote. R dispose d’un parseur typographique inspiré de TeX permettant d’afficher des caractères grecs authentiques et des indices sans nécessiter de paquets externes. Ainsi, la transmission de l’instruction mathématique permet de formater les paramètres sous forme de symboles grecs kappa et lambda avec une perfection éditoriale absolue :
curve(dweibull(x, shape = 2, scale = 1.5), from = 0, to = 5, main = expression(paste(« Densité de probabilité de Weibull (« , italic(k), » = 2, « , italic(lambda), » = 1.5) »)), xlab = « Temps de réponse (s) », ylab = « Densité f(t) »)
4.2 Optimisation des attributs de ligne et de style visuel
La lisibilité d’un graphique scientifique repose grandement sur le contraste et la hiérarchie visuelle des éléments géométriques. Le trait par défaut produit par le système graphique de base présente une épaisseur unitaire extrêmement fine (lwd = 1), qui s’estompe visuellement lors de réductions d’échelle dans les colonnes de revues académiques ou sur des supports de projection.
Pour conférer à la courbe une présence visuelle affirmée, il est préconisé d’assigner à l’argument lwd (line width) une valeur comprise entre 2 et 3.5. Simultanément, le choix chromatique via l’argument col permet de sortir du noir générique. Dans les publications psychologiques, des teintes sobres et institutionnelles telles que « steelblue », « midnightblue » ou « darkred » renforcent l’élégance sans distraire le lecteur. Le type de trait, paramétré par l’argument lty (line type), permet de distinguer les conditions lorsque l’impression en niveaux de gris est requise (1 pour une ligne continue, 2 pour un trait tireté, 3 pour un pointillé dense).
Enfin, la configuration de l’encadrement géométrique via l’argument bty (box type) offre un levier esthétique déterminant. Par défaut, R trace un cadre intégral à quatre côtés (bty = « o »), ce qui enserre visuellement les données de manière inutile. L’adoption d’un tracé en « L » (bty = « l ») permet de ne conserver que les axes orthogonalement indispensables (abscisse et ordonnée), allégeant le ratio d’encre statistique préconisé par Edward Tufte dans ses traités fondateurs de sémiologie graphique.

4.3 Gestion des marges et des paramètres d’affichage global avec par()
L’optimisation ergonomique avancée en R Base s’opère par l’intermédiaire de la fonction maîtresse par, qui pilote l’ensemble des paramètres d’état de l’environnement graphique actif. Toute modification effectuée au sein de par s’applique de manière persistante à l’ensemble des appels graphiques subséquents au sein de la même session graphique.
L’un des ajustements ergonomiques les plus fondamentaux concerne l’orientation des graduations numériques d’ordonnée. Par convention héritée des terminaux historiques, R trace les graduations de l’axe vertical parallèlement à l’axe lui-même, forçant le lecteur à pencher la tête pour déchiffrer les chiffres. L’activation de l’argument las = 1 (label axis style) contraint toutes les étiquettes numériques à adopter une orientation strictement horizontale, facilitant grandement la lecture rapide des grandeurs scalaires.
De surcroît, le réglage fin des marges périmétriques au moyen de l’argument mar = c(bas, gauche, haut, droite) — dont les valeurs par défaut sont c(5.1, 4.1, 4.1, 2.1) lignes de texte — permet de supprimer les espaces morts superflus ou au contraire de libérer l’espace nécessaire pour accueillir des libellés d’axes volumineux. Il est impératif, en matière de programmation rigoureuse, de sauvegarder l’état initial des paramètres système avant toute manipulation de par, afin de pouvoir réinitialiser l’environnement graphique à l’issue de l’exécution du script d’analyse comportementale :
parametres_initiaux <- par(no.readonly = TRUE)
par(mar = c(4.5, 4.5, 3, 1), las = 1, cex.lab = 1.15, cex.axis = 1.05)
curve(dweibull(x, shape = 2.5, scale = 1), from = 0, to = 3, lwd = 2.5, col = « steelblue », bty = « l », xlab = « Durée d’inhibition (s) », ylab = « Densité »)
par(parametres_initiaux)
5. Superposition et comparaison de multiples lois de Weibull en R Base
5.1 Utilisation du paramètre add = TRUE pour le tracé multi-courbes
L’un des exercices pédagogiques et diagnostiques les plus formateurs consiste à comparer visuellement sur un canevas unique différentes configurations de la loi de Weibull, matérialisant par exemple l’effet d’une manipulation pharmacologique, d’une charge cognitive croissante ou d’un facteur clinique sur les temps de réponse comportementaux. En R Base, cette superposition s’opère par l’adjonction méthodique de l’argument add = TRUE lors des appels successifs à la fonction curve.
La règle architecturale fondamentale de cette approche réside dans le fait que la première courbe tracée conditionne de manière immuable l’étendue spatiale du repère cartésien. Tous les appels ultérieurs utilisant add = TRUE viendront simplement peindre des segments géométriques supplémentaires au-dessus du canevas déjà dimensionné. Dès lors, si la première courbe culmine à une hauteur de 0,5 alors qu’une courbe superposée ultérieurement s’élève jusqu’à une densité de 1,8, cette dernière se verra violemment tronquée par le bord supérieur de la fenêtre graphique.
Pour prévenir cet écueil classique, le chercheur doit calculer en amont le maximum global de densité parmi l’ensemble des configurations paramétriques envisagées et contraindre explicitement la fenêtre initiale à l’aide de l’argument ylim = c(0, hauteur_maximale). Par exemple, pour comparer quatre états morphologiques majeurs régis par des valeurs de k égales à 0,8 (décroissance hyper-exponentielle), 1,0 (exponentielle stricte), 2,0 (distribution de Rayleigh asymétrique) et 3,6 (profil quasi-gaussien) à échelle unitaire constante (lambda = 1), la démarche impose de borner ylim à c(0, 1.5) et xlim à c(0, 3) :

curve(dweibull(x, shape = 0.8, scale = 1), from = 0.05, to = 3, ylim = c(0, 1.4), col = « darkred », lwd = 2, lty = 1, xlab = « Temps t », ylab = « Densité f(t) », bty = « l », las = 1)
curve(dweibull(x, shape = 1.0, scale = 1), add = TRUE, col = « darkorange », lwd = 2, lty = 2)
curve(dweibull(x, shape = 2.0, scale = 1), add = TRUE, col = « forestgreen », lwd = 2, lty = 4)
curve(dweibull(x, shape = 3.6, scale = 1), add = TRUE, col = « navyblue », lwd = 2, lty = 3)
5.2 Conception d’une légende méthodologique complète
Un tracé multi-courbes demeure scientifiquement inintelligible en l’absence d’une légende exhaustive décodant rigoureusement les attributs visuels employés. La fonction legend de R Base permet d’implanter un pavé explicatif modulaire d’une grande précision.
Le premier argument de la fonction legend régit sa localisation géométrique au sein du canevas. Bien que des coordonnées numériques cartésiennes directes puissent être transmises, l’utilisation de mots-clés de positionnement textuels tels que « topright », « topleft » ou « bottomright » garantit un ancrage spatial robuste et insensible aux redimensionnements interactifs de la fenêtre d’affichage. Pour notre panneau comparatif de formes de Weibull, le coin supérieur droit (« topright ») constitue l’emplacement naturel, la queue de distribution convergeant vers zéro dans ce cadran spatial.
La règle d’or méthodologique réside dans la parfaite synchronisation bijective entre les vecteurs passés à legend et ceux exploités lors des tracés effectifs. Les arguments legend (vecteur textuel d’étiquettes), col (vecteur chromatique), lwd (épaisseurs de traits) et lty (textures de lignes) doivent présenter des longueurs rigoureusement identiques et un ordonnancement scrupuleusement superposable :
legend(« topright », legend = c(expression(paste(italic(k), » = 0.8 (Hyper-exp.) »)), expression(paste(italic(k), » = 1.0 (Exponentielle) »)), expression(paste(italic(k), » = 2.0 (Rayleigh) »)), expression(paste(italic(k), » = 3.6 (Quasi-normale) »))), col = c(« darkred », « darkorange », « forestgreen », « navyblue »), lwd = 2, lty = c(1, 2, 4, 3), bty = « n », cex = 0.95, inset = 0.02)

L’argument bty = « n » supprime judicieusement le rectangle d’encadrement de la légende, évitant la surcharge graphique, tandis que inset = 0.02 décolle légèrement la boîte de légende de la bordure du repère pour un rendu éditorial d’une propreté exemplaire.
5.3 Impact comparé de la variation d’échelle à forme constante
Tandis que la variation de la forme k altère fondamentalement la nature mathématique du processus stochastique, la modulation du paramètre d’échelle lambda explore une dynamique différente : celle de l’étirement temporel pur, sans modification du profil d’asymétrie de base.
Pour illustrer ce principe fondamental dans un cadre de temps de réaction en psychométrie, imaginons une tâche cognitive exécutée dans trois conditions de difficulté croissante : tâche de détection simple (forme fixée à k = 2, échelle lambda = 0.5 s), tâche de choix binaire (k = 2, lambda = 1.0 s), et tâche complexe à haute interférence cognitive (k = 2, lambda = 1.8 s). En superposant ces trois fonctions avec R Base, on observe un comportement fascinant de conservation géométrique :
Au fur et à mesure que lambda s’accroît, la distribution s’affaisse en hauteur tout en s’évasant latéralement sur l’axe temporel. Le sommet de la courbe (le mode empirique) recule vers la droite en proportion directe de l’augmentation d’échelle. Cependant, la géométrie relative de la distribution demeure strictement invariante : les rapports d’aire sous la courbe entre les différents quantiles standardisés restent identiques. Cette observation visuelle confirme que l’intégrale totale sous la densité est strictement préservée et égale à l’unité. En psychologie cognitive, cette manipulation visuelle démontre que l’accroissement de la charge de travail mental induit une plus grande dispersion globale des latences individuelles sans nécessairement altérer le mécanisme unitaire sous-jacent d’accumulation de preuve sensorielle.
6. Visualisation de la répartition cumulative et des fonctions de survie
6.1 Tracé de la fonction de répartition cumulative (CDF)
Si la fonction de densité de probabilité dweibull offre une représentation intuitive de la morphologie des latences, la fonction de répartition cumulative (notée F(t) ou CDF), calculée par l’opérateur natif pweibull, constitue le fondement analytique de nombreux tests statistiques non paramétriques et d’adéquation de modèles.
Le tracé de la CDF via la commande curve s’avère particulièrement aisé car ses limites d’ordonnée sont invariablement bornées sur l’intervalle canonique [0, 1], correspondant à l’espace des probabilités totales. Une représentation graphique rigoureuse de la CDF doit donc systématiquement comporter l’argument ylim = c(0, 1), conférant au graphique une échelle normalisée absolue. La courbe de répartition de Weibull adopte, pour des valeurs de forme k > 1, une forme sigmoïdale caractéristique (courbe en « S ») :
curve(pweibull(x, shape = 2.2, scale = 1.2), from = 0, to = 3, ylim = c(0, 1), lwd = 2.5, col = « darkcyan », las = 1, bty = « l », xlab = « Temps de latence t (s) », ylab = « Probabilité cumulée P(T <= t)")
Cette courbe cumulative permet une lecture directe des percentiles expérimentaux. Par exemple, la mise en évidence visuelle de la médiane théorique s’effectue avec une élégance absolue en projetant des segments orthogonaux depuis l’ordonnée 0,5 jusqu’à l’axe des abscisses à l’aide des fonctions graphiques abline ou segments. La coordonnée d’intersection correspond rigoureusement à l’évaluation théorique de qweibull(0.5, shape = 2.2, scale = 1.2), matérialisant le seuil temporel où exactement 50 % des participants ont émis leur décision motrice.
6.2 Tracé de la fonction de survie ou de fiabilité complémentaire
Dans l’analyse des durées de vie, de la résistance à la fatigue ou de l’attrition des sujets au sein d’un protocole d’entraînement cérébral exigeant, la fonction centrale d’intérêt n’est pas la probabilité cumulative d’occurrence, mais son complémentaire unitaire : la fonction de survie, conventionnellement désignée sous le symbole S(t) ou R(t) (Reliability Function). Analytiquement, elle est définie par :
S(t) = P(T > t) = 1 – F(t) = exp(-(t / lambda)^k)
Dans l’environnement R, le tracé de la fonction de survie de Weibull ne requiert aucune bibliothèque tierce. Il s’exécute directement en combinant la soustraction unaire avec l’appel vectoriel à pweibull() au sein de la fonction curve, ou en exploitant directement l’argument interne lower.tail = FALSE nativement disponible au sein de pweibull(), ce qui présente une précision arithmétique supérieure dans les queues lointaines :
curve(pweibull(x, shape = 1.8, scale = 2, lower.tail = FALSE), from = 0, to = 6, ylim = c(0, 1), lwd = 2.5, col = « firebrick », las = 1, bty = « l », xlab = « Temps d’engagement t (minutes) », ylab = « Probabilité de persévérance S(t) »)
La morphologie de S(t) démarre rigoureusement à la valeur 1 à l’instant initial t = 0 et décroît de manière strictement monotone vers zéro lorsque le temps tend vers l’infini. En colorant l’aire comprise sous cette courbe de survie au moyen de la fonction graphique de remplissage polygonal polygon, le statisticien matérialise directement l’espérance mathématique de la variable temporelle. En effet, un théorème universel du calcul des probabilités stipule que pour toute variable aléatoire positive, l’intégrale de sa fonction de survie sur [0, +∞[ est rigoureusement égale à son espérance mathématique E(T) = lambda * Gamma(1 + 1/k), où Gamma désigne la fonction Gamma d’Euler.
6.3 Modélisation et tracé de la fonction de risque instantané (Hazard Function)
L’un des avantages les plus décisifs de la loi de Weibull sur ses concurrentes réside dans la formulation analytique limpide de sa fonction de risque instantané (hazard function), traditionnellement désignée par la lettre h(t) ou lambda(t). En sciences de la santé et en analyse comportementale, le risque instantané quantifie la propension ou la vélocité conditionnelle à laquelle un événement critique (décision, défaillance, abandon) survient à l’instant t, sachant que le sujet ou le système a survécu indemne jusqu’à cet instant précis. Mathématiquement, h(t) est définie par le ratio de la densité de probabilité sur la fonction de survie :
h(t) = f(t) / S(t) = (k / lambda) * (t / lambda)^(k – 1)
R ne disposant pas d’une fonction primitive standard nommée hweibull dans son noyau de base, il appartient au statisticien de déclarer une fonction R personnalisée pour générer son tracé. La concision expressive du langage R rend cette implémentation triviale :
hazard_weibull <- function(t, shape, scale) {
return((shape / scale) * (t / scale)^(shape – 1))
}
En visualisant cette fonction pour différentes valeurs de forme k, le comportement dynamique prend une résonance expérimentale magistrale :
- Si k < 1, l’exposant k – 1 est négatif, induisant une fonction de risque strictement décroissante avec le temps. C’est le modèle de « mortalité infantile » : la vulnérabilité cognitive ou mécanique est maximale au tout début de la tâche puis s’estompe rapidement.
- Si k = 1, le terme en t disparaît totalement : h(t) = 1 / scale. Le risque instantané est rigoureusement constant dans le temps, incarnant l’aléa poissonnien pur sans usure ni apprentissage.
- Si k > 1, l’exposant est positif, et le risque instantané croît de façon monotone avec le temps. Dans un protocole de résistance mentale ou de vigilance sous privation de sommeil, ce tracé fournit la signature mathématique directe de l’épuisement cognitif et de l’accumulation progressive de fatigue psychologique, où chaque seconde supplémentaire passée augmente la probabilité immédiate d’abandon ou de décrochage attentionnel.
7. Approche moderne et vectorielle : Tracer la loi de Weibull avec ggplot2
7.1 Principes de la grammaire des graphiques appliquée aux fonctions continues
Bien que le système R Base permette d’élaborer des graphiques d’une grande rigueur, l’écosystème contemporain de R est largement dominé par le paradigme de la grammaire des graphiques implémenté au sein de la célèbre bibliothèque ggplot2, conçue par Hadley Wickham. L’approche sous-jacente à ggplot2 repose sur la décomposition conceptuelle d’un tracé en couches sémantiques indépendantes : données brutes (data), correspondances esthétiques (aesthetic mappings), entités géométriques (geometries), échelles de mesure (scales) et thèmes visuels (themes).
Lorsqu’il s’agit de tracer une distribution mathématique théorique continue comme la loi de Weibull, les néophytes commettent souvent l’erreur de générer un tableau empirique volumineux contenant des milliers de points artificiels avant d’invoquer la commande geom_line(). S’il fonctionne, ce procédé s’avère inutilement verbeux. L’approche idiomatique moderne au sein de ggplot2 consiste à exploiter la couche spécialisée stat_function(), conçue spécifiquement pour évaluer des opérateurs analytiques continus directement au-dessus d’un canevas cartésien abstrait.
La mise en œuvre de stat_function() s’articule autour d’un conteneur initial ggplot() initialisé avec un jeu de données minimal ou une délimitation de domaine via xlim(). L’opérateur stat_function() reçoit comme argument le nom non évalué de la fonction de densité R native, en l’espèce fun = dweibull, tandis que ses paramètres de forme et d’échelle sont transmis sous forme d’une liste structurée via l’argument args = list(shape = …, scale = …) :
library(ggplot2)
ggplot() +
xlim(0, 4) +
stat_function(fun = dweibull, args = list(shape = 2.2, scale = 1.3), linewidth = 1.2, color = « #2C3E50 ») +
labs(title = « Densité de Weibull via ggplot2 », x = « Temps de réaction (s) », y = « Densité »)
7.2 Esthétique avancée et typographie sous ggplot2
L’excellence d’un tracé ggplot2 destiné à une publication scientifique s’exprime à travers l’harmonisation soignée de sa couche thématique. Le thème graphique appliqué par défaut dans ggplot2 — caractérisé par un fond quadrillé gris uniforme (theme_grey) — est universellement proscrit dans les standards d’édition de l’American Psychological Association (normes APA) et les revues scientifiques de premier rang.
L’application d’un thème minimaliste d’inspiration éditoriale comme theme_classic() ou theme_minimal() permet de restaurer la clarté visuelle en éliminant les fonds saturés et en instaurant des axes orthonormés impeccables. De plus, la personnalisation fine via la fonction theme() permet de contrôler la hiérarchie typographique, la graisse des polices de caractères, les marges internes et le positionnement précis des légendes :
ggplot() +
xlim(0, 5) +
stat_function(fun = dweibull, args = list(shape = 2.5, scale = 1.8), linewidth = 1.4, color = « #1B4F72 », alpha = 0.9) +
labs(
title = « Distribution paramétrique de Weibull des temps de latence »,
subtitle = expression(paste(« Modélisation avec forme « , italic(k), » = 2.5 et échelle « , italic(lambda), » = 1.8″)),
x = « Temps de réponse comportemental (secondes) »,
y = « Densité de probabilité théorique »,
caption = « Échantillon simulé – Étude en chronométrie mentale »
) +
theme_classic(base_size = 14) +
theme(
plot.title = element_text(face = « bold », size = 16, hjust = 0.5),
plot.subtitle = element_text(size = 12, hjust = 0.5, color = « grey30 »),
axis.title = element_text(face = « bold »),
axis.line = element_line(linewidth = 0.8, color = « black »)
)
Cette structuration modulaire confère à la figure une rigueur typographique et un professionnalisme visuel qui rehaussent immédiatement la perception méthodologique de la recherche présentée.
7.3 Remplissage sous la courbe et mise en valeur des intervalles de confiance
Dans la transmission pédagogique des résultats psychométriques, la simple ligne de densité est avantageusement enrichie par le remplissage chromatique translucide de l’aire sous la courbe, conférant une physicalité tangible à l’intégrale de probabilité. ggplot2 permet d’accomplir ce rendu avec une fluidité exceptionnelle en détournant le paramètre géométrique de stat_function() au profit de geom = « area ».
Pour mettre en valeur une région probabiliste critique — par exemple la zone de détection ultra-rapide correspondant aux 5 % de réponses les plus précoces, ou la queue supérieure traduisant des défaillances attentionnelles chroniques (au-delà du 95e percentile) —, il est possible d’empiler plusieurs couches géométriques calculant des intégrales partielles sur des intervalles restreints grâce à l’argument xlim spécifique à chaque couche :
forme_k <- 2.2
echelle_lambda <- 1.5
seuil_95 <- qweibull(0.95, shape = forme_k, scale = echelle_lambda)
ggplot() +
xlim(0, 4) +
stat_function(fun = dweibull, args = list(shape = forme_k, scale = echelle_lambda), geom = « area », fill = « #3498DB », alpha = 0.3) +
stat_function(fun = dweibull, args = list(shape = forme_k, scale = echelle_lambda), xlim = c(seuil_95, 4), geom = « area », fill = « #E74C3C », alpha = 0.6) +
stat_function(fun = dweibull, args = list(shape = forme_k, scale = echelle_lambda), linewidth = 1.2, color = « #2C3E50 ») +
geom_vline(xintercept = seuil_95, linetype = « dashed », color = « #C0392B », linewidth = 1) +
annotate(« text », x = seuil_95 + 0.1, y = 0.3, label = « Percentile 95 », hjust = 0, fontface = « italic », color = « #C0392B ») +
theme_classic(base_size = 13) +
labs(title = « Isolement de la queue de distribution supérieure », x = « Temps (s) », y = « Densité »)
Ce procédé permet de matérialiser instantanément aux yeux du lecteur l’aire critique correspondant aux valeurs aberrantes physiologiques ou aux latences pathologiques dans une cohorte expérimentale.
8. Comparaison multi-paramétrique et facettage avec ggplot2
8.1 Construction d’un dataframe ordonné de paramètres (Tidy Data)
L’une des forces majeures de ggplot2 réside dans sa symbiose avec les principes du Tidyverse, où chaque variable constitue une colonne distincte et chaque observation une ligne unique d’un tableau structuré. Lorsque le chercheur souhaite comparer de multiples combinaisons de paramètres de forme et d’échelle de manière extensive, l’empilement manuel d’instructions stat_function() devient vite fastidieux et source d’erreurs.
La méthodologie contemporaine la plus puissante consiste à engendrer programmatiquement un tableau de données rectangulaire (data.frame ou tibble) croisant systématiquement une grille de paramètres prédéfinie avec un continuum dense de valeurs de l’axe temporel. Pour ce faire, les fonctions vectorielles expand.grid de R Base ou crossing() de l’extension tidyr se révèlent magistrales :
library(tidyr)
library(dplyr)
grille_parametres <- expand.grid(
t = seq(0.01, 4, length.out = 500),
shape = c(0.8, 1.5, 2.5, 3.6),
scale = c(0.8, 1.5)
) %>%
mutate(
densite = dweibull(t, shape = shape, scale = scale),
forme_label = factor(paste(« Forme k = », shape)),
echelle_label = factor(paste(« Échelle lambda = », scale))
)
En générant en une unique opération vectorisée l’intégralité des densités de probabilité à travers des milliers de combinaisons, cette approche maximise la rapidité de calcul et garantit la conformité absolue avec les standards de manipulation de données modernes de R.
8.2 Superposition sur un panneau unique avec palette chromatique adaptée
Disposant de ce tableau de données ordonné, la projection graphique sur un panneau cartésien unique avec ggplot2 s’effectue avec une remarquable économie de lignes de code. La correspondance esthétique (aes) permet de lier dynamiquement la couleur et le type de ligne aux facteurs paramétriques formattés.
À ce stade, l’accessibilité visuelle devient une préoccupation méthodologique de premier ordre. Les palettes de couleurs traditionnelles fondées sur les triplets rouge-vert posent de lourds défis de discernement pour les lecteurs présentant des déficiences de la vision chromatique (daltonisme). L’intégration de la palette scientifique Viridis au sein de ggplot2, au moyen de l’opérateur scale_color_viridis_d(), garantit une séparation perceptive uniforme et un décodage parfait, y compris lors d’impressions académiques en niveaux de gris purs :
ggplot(grille_parametres, aes(x = t, y = densite, color = forme_label, linetype = echelle_label)) +
geom_line(linewidth = 1.1) +
scale_color_viridis_d(option = « D », name = « Paramètre de forme ») +
scale_linetype_manual(values = c(« solid », « dashed »), name = « Paramètre d’échelle ») +
scale_y_continuous(limits = c(0, 1.8), expand = expansion(mult = c(0, 0.05))) +
labs(title = « Comparaison croisée des régimes de Weibull », x = « Temps normalisé (s) », y = « Densité f(t) ») +
theme_classic(base_size = 13) +
theme(legend.position = « right »)
Cette méthode permet de synthétiser visuellement des interactions paramétriques complexes sans jamais compromettre la lisibilité des courbes individuelles.
8.3 Facettage structuré avec facet_wrap() et facet_grid()
Lorsque la décomposition croisée des paramètres induit un chevauchement excessif des courbes au sein d’un panneau graphique unique, la surcharge cognitive menace la bonne compréhension du message statistique. Le paradigme des petits multiples (small multiples), théorisé par Edward Tufte et magnifiquement implémenté dans ggplot2 à travers les opérateurs de facettage, constitue la réponse architecturale par excellence.
La commande facet_wrap() permet d’éclater un canevas complexe en sous-graphiques séquentiels partageant une échelle commune, chaque facette isolant par exemple un paramètre de forme distinct. Pour une matrice bidimensionnelle orthogonale croisant rigoureusement chaque niveau de forme avec chaque niveau d’échelle, l’opérateur facet_grid() s’avère encore plus redoutable :
ggplot(grille_parametres, aes(x = t, y = densite)) +
geom_ribbon(aes(ymin = 0, ymax = densite), fill = « #2980B9 », alpha = 0.25) +
geom_line(color = « #2980B9 », linewidth = 1.2) +
facet_grid(echelle_label ~ forme_label, scales = « free_y ») +
labs(title = « Matrice paramétrique complète de la loi de Weibull », x = « Temps (s) », y = « Densité f(t) ») +
theme_bw(base_size = 12) +
theme(
strip.background = element_rect(fill = « #ECF0F1 », color = « grey70 »),
strip.text = element_text(face = « bold », size = 11),
panel.grid.minor = element_blank()
)
L’utilisation judicieuse de scales = « free_y » permet, si nécessaire, d’adapter la dynamique de l’axe vertical à chaque morphologie spécifique, évitant que le pic vertigineux d’une forme hyper-exponentielle n’écrase totalement l’amplitude d’une distribution quasi-gaussienne étalée sur une ligne voisine.
9. Ajustement d’une loi de Weibull à des données empiriques et tracé conjoint
9.1 Estimation des paramètres par le maximum de vraisemblance avec fitdistrplus
L’étape charnière de toute recherche translationnelle consiste à confronter la distribution théorique aux données réelles recueillies en laboratoire. Face à un vecteur empirique de latences de réponse mesurées chez un groupe de participants, le chercheur doit identifier les valeurs optimales des paramètres de forme et d’échelle qui maximisent la vraisemblance conjointe des observations.
L’extension statistique fitdistrplus développée par Marie Laure Delignette-Muller et Christophe Dutang constitue la référence méthodologique absolue pour l’ajustement paramétrique en R. Sa fonction maîtresse fitdist() implémente l’estimation par le maximum de vraisemblance (Maximum Likelihood Estimation, ou MLE) de manière robuste, s’appuyant sur l’algorithme d’optimisation numérique de Nelder-Mead ou de quasi-Newton (BFGS) :
library(fitdistrplus)
# Génération d’un jeu de données synthétique pour illustrer la démarche
set.seed(42)
donnees_latences <- rweibull(n = 250, shape = 2.1, scale = 1.4) + rnorm(250, mean = 0.1, sd = 0.05)
donnees_latences <- donnees_latences[donnees_latences > 0] # Maintien de la stricte positivité
# Ajustement de la loi de Weibull par MLE
ajustement_weibull <- fitdist(donnees_latences, « weibull », method = « mle »)
summary(ajustement_weibull)
L’extraction via summary() fournit non seulement les estimateurs ponctuels des paramètres (notés estimate), mais également leurs erreurs types asymptotiques (standard errors) dérivées de l’inversion de la matrice d’information de Fisher observée, ainsi que les critères de sélection de modèles pénalisés que sont l’AIC (Akaike Information Criterion) et le BIC (Bayesian Information Criterion).
9.2 Superposition de la courbe ajustée sur l’histogramme des données observées
Une fois les paramètres empiriques estimés, l’impératif méthodologique réside dans la validation graphique de l’adéquation du modèle par superposition directe de la loi théorique fittée sur la distribution empirique observée. Cette démarche requiert une attention méthodologique cruciale : l’histogramme empirique doit impérativement être tracé sur une échelle de densité et non sur une échelle d’effectifs bruts (comptages de fréquence), sous peine de rendre toute superposition dimensionnellement absurde.
Sous ggplot2, cette normalisation d’échelle s’obtient en liant l’ordonnée de l’histogramme à la statistique transformée after_stat(density). Par-dessus cet histogramme normalisé, le statisticien peut projeter simultanément l’estimateur non paramétrique de densité par noyau (KDE via geom_density) et la courbe théorique paramétrique ajustée via stat_function() alimentée par les coefficients issus de fitdist() :
forme_estimee <- ajustement_weibull$estimate[« shape »]
echelle_estimee <- ajustement_weibull$estimate[« scale »]
df_obs <- data.frame(latence = donnees_latences)
ggplot(df_obs, aes(x = latence)) +
geom_histogram(aes(y = after_stat(density)), bins = 25, fill = « grey85 », color = « white ») +
geom_density(aes(color = « Densité empirique (KDE) »), linewidth = 1, linetype = « dotted ») +
stat_function(
fun = dweibull,
args = list(shape = forme_estimee, scale = echelle_estimee),
aes(color = « Modèle Weibull ajusté (MLE) »),
linewidth = 1.2
) +
scale_color_manual(name = « Ajustement », values = c(« Densité empirique (KDE) » = « #E67E22 », « Modèle Weibull ajusté (MLE) » = « #2E86C1 »)) +
labs(
title = « Adéquation empirique du modèle de Weibull »,
x = « Temps de réaction observé (s) »,
y = « Densité probabiliste »
) +
theme_classic(base_size = 13) +
theme(legend.position = « top »)
Cette confrontation graphique simultanée permet d’évaluer d’un coup d’œil si la paramétrisation théorique capture adéquatement le mode empirique et la décroissance de la queue de latence, ou si des déviations locales suggèrent la présence de sous-populations cognitives distinctes.
10. Outils de diagnostic visuel de l’adéquation du modèle de Weibull
10.1 Construction manuelle et interprétation du graphique quantile-quantile (Q-Q Plot)
Bien que la superposition sur histogramme fournisse une première indication intuitive, elle manque de sensibilité dans les zones de faible densité de probabilité, en particulier aux extrémités de la distribution. Le graphique quantile-quantile (Q-Q Plot) s’impose comme l’outil diagnostique de référence le plus puissant pour sonder le comportement des queues théoriques et détecter d’éventuelles anomalies d’ajustement.
Le principe du tracé Q-Q de Weibull repose sur la mise en relation graphique des quantiles théoriques attendus et des quantiles effectivement observés dans l’échantillon. Pour construire manuellement ce graphique sous R sans boîte noire, la séquence opérationnelle est d’une grande rigueur mathématique :
# Tri ordonné des données observées
y_observes <- sort(donnees_latences)
n_points <- length(y_observes)
# Calcul des probabilités cumulées empiriques avec correction de Blom
rangs <- 1:n_points
probabilites_empiriques <- (rangs – 0.375) / (n_points + 0.25)
# Calcul des quantiles théoriques correspondants via qweibull
x_theoriques <- qweibull(probabilites_empiriques, shape = forme_estimee, scale = echelle_estimee)
# Construction du graphique diagnostique
qq_data <- data.frame(theorique = x_theoriques, empirique = y_observes)
ggplot(qq_data, aes(x = theorique, y = empirique)) +
geom_point(color = « #2980B9 », alpha = 0.75, size = 2) +
geom_abline(intercept = 0, slope = 1, color = « #C0392B », linetype = « dashed », linewidth = 1) +
labs(
title = « Diagramme Quantile-Quantile (Q-Q Plot) de Weibull »,
x = « Quantiles théoriques de Weibull »,
y = « Quantiles empiriques observés »
) +
theme_classic(base_size = 13)
L’interprétation clinique et méthodologique est limpide : si les données proviennent rigoureusement de la distribution théorique postulée, les points s’alignent fidèlement sur la bissectrice d’identité y = x. Une déviation systématique vers le haut dans le cadran supérieur droit signale des latences extrêmes supérieures aux prédictions du modèle (queue empirique plus lourde qu’une Weibull pure), suggérant la survenue d’épisodes de décrochage attentionnel majeur chez certains participants lors de la tâche cognitive.
10.2 Construction du graphique probabilité-probabilité (P-P Plot)
Complémentaire du diagramme Q-Q, le graphique probabilité-probabilité (P-P Plot) confronte la fonction de répartition empirique (ECDF) aux probabilités théoriques calculées par la fonction pweibull() aux points de données observés. Alors que le Q-Q plot est hautement sensible aux discordances situées dans les queues extrêmes, le P-P plot focalise sa sensibilité au cœur même de la distribution, là où la densité de points est la plus compacte.
Le calcul sous R s’exécute avec une extrême simplicité :
probabilites_theoriques <- pweibull(y_observes, shape = forme_estimee, scale = echelle_estimee)
pp_data <- data.frame(P_theorique = probabilites_theoriques, P_empirique = probabilites_empiriques)
ggplot(pp_data, aes(x = P_theorique, y = P_empirique)) +
geom_point(color = « #27AE60 », alpha = 0.75, size = 2) +
geom_abline(intercept = 0, slope = 1, color = « #C0392B », linetype = « dashed », linewidth = 1) +
labs(
title = « Diagramme Probabilité-Probabilité (P-P Plot) »,
x = « Probabilités théoriques cumulées P(X <= x)",
y = « Probabilités empiriques cumulées »
) +
theme_classic(base_size = 13)
Toute ondulation ou oscillation en « S » traversant la diagonale témoigne d’un défaut d’ajustement du paramètre d’asymétrie ou d’aplatissement au centre de la cloche de densité, orientant le chercheur vers des modèles paramétriques alternatifs si la non-linéarité s’avère substantielle.
10.3 Graphique de linéarisation de Weibull (Hazard Plotting)
Avant l’avènement des calculateurs numériques et du maximum de vraisemblance, les ingénieurs et statisticiens recouraient à une transformation mathématique double-logarithmique ingénieuse de la fonction de répartition cumulative pour évaluer visuellement l’adéquation d’une distribution de Weibull. Cette technique, connue sous le nom de tracé de papier de Weibull ou tracé de risque linéarisé (Hazard Plotting), conserve aujourd’hui une valeur pédagogique et diagnostique immense.
Repartant de l’équation de la fonction de répartition F(t) = 1 – exp(-(t / lambda)^k), isolons le terme exponentiel : 1 – F(t) = exp(-(t / lambda)^k). En appliquant une première fois le logarithme népérien aux deux membres, on obtient : ln(1 – F(t)) = -(t / lambda)^k. En inversant les signes et en appliquant un second logarithme népérien, la relation prend la forme linéaire magistrale :
ln(-ln(1 – F(t))) = k * ln(t) – k * ln(lambda)
Cette relation correspond rigoureusement à l’équation canonique d’une droite affine Y = a * X + b, où la variable d’ordonnée est Y = ln(-ln(1 – F(t))), la variable d’abscisse est X = ln(t), la pente de la droite correspond directement au paramètre de forme k, et l’ordonnée à l’origine est -k * ln(lambda).
En traçant sous ggplot2 les coordonnées transformées des observations empiriques, l’alignement sur une droite parfaite apporte la preuve géométrique indiscutable de la validité de l’hypothèse de Weibull :
hazard_linear_data <- data.frame(
ln_t = log(y_observes),
ln_minus_ln = log(-log(1 – probabilites_empiriques))
)
ggplot(hazard_linear_data, aes(x = ln_t, y = ln_minus_ln)) +
geom_point(color = « #8E44AD », size = 2) +
geom_smooth(method = « lm », color = « #34495E », se = FALSE, linewidth = 1) +
labs(
title = « Linéarisation double-logarithmique de Weibull »,
x = « ln(t) »,
y = « ln(-ln(1 – F(t))) »
) +
theme_classic(base_size = 13)
La confirmation visuelle de la rectilinéarité valide l’applicabilité formelle de la loi de Weibull, tandis que toute brisure de pente met en lumière un changement de régime mécanistique au cours de l’épreuve expérimentale.
11. Gestion des données censurées et analyse de survie appliquée
11.1 Modélisation paramétrique avec le package survival
Dans de multiples contextes de recherche expérimentale ou épidémiologique, les données temporelles recueillies sont incomplètes du fait de la survenue de mécanismes de censure. Dans une épreuve d’attention soutenue ou un protocole longitudinal d’intervention psychothérapeutique sur plusieurs mois, certains participants n’émettent jamais leur réponse avant l’interruption automatique de l’essai (temps limite ou « time-out »), ou abandonnent prématurément l’étude pour des raisons indépendantes du protocole. Ces données sont dites « censurées à droite » : nous savons avec certitude que leur temps d’événement excède le seuil de coupure, mais sa valeur absolue demeure inconnue.
L’élimination pure et simple des données censurées induit un biais d’échantillonnage dévastateur, sous-estimant dramatiquement les temps moyens réels. La modélisation de Weibull gère nativement la censure grâce à l’extension standard d’analyse de survie survival de Terry Therneau. La formulation s’appuie sur la fonction Surv(), qui couple le vecteur temporel à un indicateur binaire d’événement (1 pour un événement effectif, 0 pour une observation censurée), et sur la fonction survreg() spécifiant un modèle paramétrique de Weibull :
library(survival)
# Simulation d’une cohorte soumise à une contrainte de coupure (censure)
temps_theoriques <- rweibull(200, shape = 2, scale = 10)
temps_coupure <- runif(200, min = 5, max = 15)
temps_observes <- pmin(temps_theoriques, temps_coupure)
indicateur_evenement <- as.numeric(temps_theoriques <= temps_coupure)
# Ajustement paramétrique par survreg
modele_survie <- survreg(Surv(temps_observes, indicateur_evenement) ~ 1, dist = « weibull »)
summary(modele_survie)
Un piège syntaxique majeur guette ici les praticiens : la paramétrisation interne de survreg repose sur une formulation en modèle de temps de survie accéléré (Accelerated Failure Time, ou AFT), paramétrée en termes d’intercepte (mu) et d’échelle de log-temps (sigma). La conversion vers les paramètres canoniques de Weibull (k et lambda) exige l’application de relations mathématiques strictes :
k_canonique <- 1 / modele_survie$scale
lambda_canonique <- exp(coef(modele_survie))
Cette conversion permet de restaurer la comparabilité avec l’ensemble des autres fonctions graphiques de R.
11.2 Tracé comparatif : Modèle de Weibull paramétrique versus Kaplan-Meier
La validation empirique d’un modèle paramétrique appliqué à des données censurées s’opère par la superposition conjointe de la courbe de survie estimée par l’approche non paramétrique universelle de Kaplan-Meier et de la courbe continue lisse dérivée du modèle de Weibull paramétrique.
Pour atteindre un niveau de qualité éditoriale immédiatement exploitable dans des revues biomédicales ou psychologiques, l’écosystème survminer (développé par Alboukadel Kassambara) constitue l’outil de référence en s’articulant harmonieusement autour du moteur de ggplot2 :
library(survminer)
# Estimation non paramétrique de Kaplan-Meier
ajustement_km <- survfit(Surv(temps_observes, indicateur_evenement) ~ 1)
# Extraction du tracé éditorial de base
plot_surv <- ggsurvplot(
ajustement_km,
data = data.frame(temps_observes, indicateur_evenement),
conf.int = TRUE,
palette = « #7F8C8D »,
legend = « none »,
ggtheme = theme_classic(base_size = 13),
xlab = « Temps expérimental »,
ylab = « Probabilité de persévérance S(t) »,
title = « Persévérance expérimentale : Kaplan-Meier vs Weibull »
)
# Superposition de la courbe théorique de Weibull issue de survreg
plot_surv$plot +
stat_function(
fun = function(x) pweibull(x, shape = k_canonique, scale = lambda_canonique, lower.tail = FALSE),
color = « #C0392B »,
linewidth = 1.3
)
La juxtaposition de la courbe théorique rouge de Weibull sur l’escalier empirique de Kaplan-Meier et son intervalle de confiance à 95 % (en grisé) permet aux reviewers et aux lecteurs de juger instantanément si la paramétrisation lisse capture la réalité des défections temporelles sans lisser excessivement des singularités locales attribuables au design de l’épreuve.
12. Reproductibilité, exportation et intégration dans des publications académiques
12.1 Paramètres d’exportation graphique en haute résolution
L’élaboration d’un graphique scientifiquement irréprochable perd une part substantielle de son impact s’il est dégradé lors de son exportation par des formats de compression destructeurs ou des résolutions matricielles insuffisantes. Les revues publiées sous l’égide d’éditeurs tels qu’Elsevier, Springer, Nature Publishing Group ou l’APA exigent des résolutions d’au moins 300 à 600 DPI (Dots Per Inch) pour les figures matricielles et privilégient expressément les formats vectoriels évitant toute pixelisation.
Pour les tracés élaborés via le moteur R Base, l’utilisation de pilotes graphiques vectoriels de haute fidélité comme cairo_pdf ou cairo_ps garantit une incorporation optimale des polices de caractères typographiques et une restitution sans faille des symboles mathématiques grecs :
cairo_pdf(« Figure1_Distribution_Weibull.pdf », width = 8, height = 6)
# Exécution des commandes de tracé R Base
dev.off()
Pour les visualisations construites au sein de l’écosystème ggplot2, la fonction dédiée ggsave() offre un pilotage ergonomique absolu sur l’ensemble des dimensions physiques d’exportation. Elle permet de fixer les mesures en unités physiques réelles (centimètres ou pouces) correspondant précisément à la largeur d’une colonne (généralement 8,5 cm) ou d’une double colonne (17 cm) de mise en page académique :
# Sauvegarde vectorielle sans perte pour la publication
ggsave(
filename = « Figure2_Weibull_ggsave.pdf »,
plot = last_plot(),
device = cairo_pdf,
width = 17,
height = 11,
units = « cm »,
dpi = 600
)
Ce niveau de rigueur technique prévient les déconvenues courantes liées aux polices tronquées, aux textes flous ou aux lignes hachées lors des épreuves de composition typographique finale chez l’éditeur.
12.2 Bonnes pratiques de codage pour la science ouverte et reproductible
À l’ère de la crise de la reproductibilité en psychologie expérimentale et en sciences empiriques, la génération de visualisations graphiques ne peut plus être dissociée des impératifs méthodologiques de la science ouverte (Open Science). Chaque graphique produit doit être rigoureusement régénérable à l’identique par un relecteur indépendant à partir du code source brut.
La première règle de reproductibilité numérique consiste à fixer impérativement la graine du générateur de nombres pseudo-aléatoires au moyen de l’instruction set.seed() dès lors qu’une étape de simulation, de rééchantillonnage par bootstrap ou de tirage de Weibull via rweibull() est convoquée. Sans cette précaution élémentaire, deux exécutions consécutives du même script aboutiront à des estimations empiriques légèrement divergentes, compromettant la stabilité des diagnostics graphiques.
En second lieu, l’intégration du code au sein d’un document computationnel dynamique sous format Quarto ou R Markdown représente aujourd’hui le gold standard académique. Ce paradigme combine au sein d’un fichier textuel unique le discours théorique, les équations formelles, le code R d’analyse et les sorties graphiques générées dynamiquement. Cette traçabilité totale garantit l’alignement absolu entre les données observées et les tracés présentés.
Enfin, la conclusion systématique des scripts d’analyse par l’appel à la fonction d’introspection sessionInfo() documente précisément l’ensemble des dépendances logicielles : version exacte du compilateur R, système d’exploitation hôte et versions précises des extensions graphiques et statistiques mobilisées (telles que ggplot2, fitdistrplus ou survival). Cette transparence logicielle offre aux générations futures de chercheurs l’assurance de pouvoir reproduire fidèlement l’ensemble de l’architecture graphique présentée dans cet article.
Références
- Delignette-Muller, M. L., & Dutang, C. (2015). fitdistrplus: An R Package for Fitting Distributions. Journal of Statistical Software, 64(4), 1–34. https://doi.org/10.18637/jss.v064.i04
- Kassambara, A., Kosinski, M., & Biecek, P. (2021). survminer: Drawing Survival Curves using ‘ggplot2’ (R package version 0.4.9). https://CRAN.R-project.org/package=survminer
- Luce, R. D. (1986). Response Times: Their Role in Inferring Elementary Mental Organization. Oxford University Press. https://doi.org/10.1093/acprof:oso/9780195070019.001.0001
- R Core Team. (2023). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria. https://www.R-project.org/
- Therneau, T. M. (2023). A Package for Survival Analysis in R (R package version 3.5-5). https://CRAN.R-project.org/package=survival
- Tufte, E. R. (2001). The Visual Display of Quantitative Information (2nd ed.). Graphics Press.
- Weibull, W. (1951). A statistical distribution function of wide applicability. Journal of Applied Mechanics, 18(3), 293–297. https://doi.org/10.1115/1.4010337
- Wickham, H. (2016). ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. https://ggplot2.tidyverse.org