Skip to content

Lois continues

La page Fondations a posé les outils pour décrire une v.a. continue, densité, fonction de répartition, espérance et variance, indépendance, et la synthèse qui les chapeaute : une loi est un modèle paramétré p(x;θ) (§5). La page précédente en a déroulé le catalogue discret ; celle-ci fait de même côté continu, sur quatre lois usuelles, uniforme, exponentielle, normale et normale multidimensionnelle, présentées dans cet ordre, chacune un modèle p(x;θ) selon la même trame : modélisation, illustration, propriétés, puis exemple numérique. La fiche de la loi normale culmine avec le théorème central limite, le résultat qui explique pourquoi cette loi est partout. Deux sections closent ensuite le catalogue sur ce que l'on fait d'un modèle une fois choisi : en produire des tirages, par transformation d'une variable aléatoire, puis vérifier qu'il convient aux données.

Loi uniforme continue, XU(a,b)

La loi uniforme continue modélise une valeur prise « au hasard » dans un intervalle [a,b]. Souvent ce type de loi est choisi lorsque nous n'avons aucun a priori sur le comportement d'une variable aléatoire, à l'exception de l'intervalle des valeurs possibles. À titre d'exemple, cette loi peut servir à modéliser l'erreur de quantification d'un convertisseur analogique-numérique (l'arrondi au pas q près laisse une erreur U(q/2,q/2)).

Modélisation

La loi uniforme continue est paramétrée par θ=(a,b), les bornes de l'intervalle. Sous la forme générique du cours, p(x;θ) désigne ici la densité fX(x).

Modèle (Loi uniforme continue)

  • PDF :
fX(x)=1ba,x[a,b]
  • CDF :
FX(x)=xaba,x[a,b]

Illustration

Densités de lois uniformes continues pour trois intervalles différents

Figure 1.16a, PDF : rectangles de hauteur 1/(ba).

CDF de lois uniformes continues pour trois intervalles différents

Figure 1.16b, CDF : rampe linéaire sur [a,b].

Propriétés

Moments

E(X)=(a+b)/2var(X)=(ba)2/12

Le centre reste le même que pour la version discrète ; la dispersion croît avec la largeur de l'intervalle, au carré.

Exemple

Le code suivant montre comment tirer 100 000 erreurs de quantification au pas q=1, uniformes sur [0,5, 0,5].

python
import numpy as np
rng = np.random.default_rng(0)

u = rng.uniform(-0.5, 0.5, size=100_000)
u.mean(), u.var()   # >>> (-0.0004, 0.0832)  (≈ 0, q²/12 = 0.0833)
python
import scipy.stats as sta

X = sta.uniform(loc=-0.5, scale=1.0)   # loc = a, scale = b - a (et non b)
X.var()       # >>> 0.0833
X.cdf(0.25)   # >>> 0.75

Loi exponentielle, XExp(λ)

La loi exponentielle modélise la durée d'attente d'un événement sans mémoire : le temps entre deux pannes, entre deux requêtes. C'est la jumelle continue de la Poisson : si les événements se comptent en Poisson de taux λ, le temps entre deux événements suit Exp(λ).

Modélisation

La loi exponentielle est paramétrée par θ=λ>0, le taux d'occurrence ; plus il est élevé, plus les attentes sont courtes. Sa densité est la forme p(x;θ) de ce modèle.

Modèle (Loi exponentielle)

  • PDF :
fX(x)=λeλx,x0
  • CDF :
FX(x)=1eλx,x0

Illustration

Densités de lois exponentielles pour trois taux différents

Figure 1.17a, PDF : part de λ, décroît en eλx.

CDF de lois exponentielles pour trois taux différents

Figure 1.17b, CDF : 1eλx, croissante vers 1.

Propriétés

Moments

E(X)=1/λvar(X)=1/λ2

L'écart-type est égal à la moyenne : la loi est fortement asymétrique, elle servira de loi « pas du tout Gaussienne » pour mettre le TCL à l'épreuve en fin de fiche normale.

Preuve

Par intégration par parties, E(X)=0xλeλxdx=1/λ, et E(X2)=2/λ2, d'où var(X)=2/λ21/λ2=1/λ2 par König-Huygens. ∎

L'absence de mémoire

Proposition, Absence de mémoire (exponentielle)

Si XExp(λ), alors pour tous s,t0 :

P(X>s+tX>s)=P(X>t).

Une machine qui fonctionne depuis s heures n'est ni plus ni moins « due » pour une panne qu'une machine neuve. Il peut être démontré que l'exponentielle est la seule loi continue à posséder cette propriété ; son analogue discret est la géométrique.

Démonstration

P(X>s+tX>s)=P(X>s+t)/P(X>s)=eλ(s+t)/eλs=eλt=P(X>t). ∎

Exemple

Le code suivant montre comment tirer 100 000 durées entre pannes d'un serveur de taux λ=0,5 panne/h, puis vérifier l'absence de mémoire.

python
import numpy as np
rng = np.random.default_rng(0)

t = rng.exponential(scale=2.0, size=100_000)   # scale = 1/λ
t.mean(), t.var()   # >>> (1.994, 4.016)  (≈ 2, 4)
np.mean(t > 3)      # >>> 0.2226  (≈ e^{-1.5})
python
import scipy.stats as sta

X = sta.expon(scale=2.0)
X.sf(3)             # >>> 0.2231
X.sf(5) / X.sf(2)   # >>> 0.2231  (= P(X > 3) : sans mémoire)

Loi normale, XN(μ,σ2)

La loi normale modélise le bruit de mesure, et plus généralement toute grandeur résultant de l'accumulation de petits effets indépendants. Sa densité est la célèbre courbe en cloche, symétrique.

Modélisation

La loi normale est paramétrée par θ=(μ,σ2) : μ positionne le centre de la cloche, σ2 règle sa largeur ; sa densité est la forme p(x;θ) de ce modèle. Convention absolue du cours : le second argument de N(μ,σ2) est la variance, pas l'écart-type.

Modèle (Loi normale)

  • PDF :
fX(x)=12πσ2exp((xμ)22σ2)
  • CDF :
FX(x)=Φ(xμσ)

Φ est la fonction de répartition de la normale centrée réduite (ci-dessous), pas de forme fermée élémentaire : tout calcul se ramène à la table (ou à scipy) de Φ, via un changement d'échelle.

Illustration

Densités de lois normales pour plusieurs couples moyenne-variance

Figure 1.18a, PDF : μ déplace, σ2 élargit.

CDF de lois normales pour plusieurs couples moyenne-variance

Figure 1.18b, CDF : une rampe en S, centrée en μ.

Propriétés

Moments

E(X)=μvar(X)=σ2

Remarquons que les paramètres de la loi sont exactement ses deux premiers moments.

La standardisation

Toutes les Gaussiennes se déduisent d'une seule, N(0,1), par un simple changement d'échelle : soustraire μ, diviser par σ. Tout calcul de probabilité Gaussienne se ramène ainsi à une table (ou une fonction) unique, Φ.

Proposition, Standardisation (centrage-réduction)

Si XN(μ,σ2), alors

Z=XμσN(0,1),

la loi normale centrée réduite, de fonction de répartition notée Φ. Tout calcul Gaussien s'y ramène :

P(Xx)=Φ(xμσ).

La règle 68–95–99,7

La standardisation fige quelques probabilités de référence, valables pour n'importe quelle Gaussienne.

Écart au centreIntervalleP(μkσXμ+kσ)
k=1[μσ, μ+σ]68,3%
k=1,96[μ1,96σ, μ+1,96σ]95,0%
k=2[μ2σ, μ+2σ]95,4%
k=3[μ3σ, μ+3σ]99,7%

C'est la règle mnémotechnique 68–95–99,7. Le quantile 1,96 est celui des 95 % exacts, celui des intervalles de confiance usuels.

Densité Gaussienne avec les zones à un, deux et trois écarts-types du centre, annotées 68, 95 et 99,7 pour cent

Figure 1.19, La règle 68–95–99,7 : quelle que soit la Gaussienne, environ 68 % de la probabilité vit à ±σ du centre, 95 % à ±2σ, 99,7 % à ±3σ. Une observation à plus de 3σ est un événement à 3 pour 1 000, le cœur du raisonnement des tests du chapitre 3 (script figures/ch1/03-normale-68-95-997.py).

Le théorème central limite

Reste la question soulevée en tête de fiche : pourquoi cette loi serait-elle si répandue, alors que le réel n'est pas toujours en cloche (le marathon) ? La réponse tient dans le théorème le plus célèbre des probabilités. Il porte sur la somme de v.a. i.i.d., abréviation d'indépendantes et identiquement distribuées : les Xi suivent toutes la même loi, et sont mutuellement indépendantes. C'est le modèle par défaut de n mesures répétées d'un même phénomène, sans influence des unes sur les autres, et l'hypothèse de travail de tout le cours.

Deux façons pour une suite de variables aléatoires de « se rapprocher » d'une limite

Une suite de v.a. Yn converge en probabilité vers une constante c si, pour tout ε>0, P(|Ync|>ε)0 quand n : la loi de Yn se concentre sur c, qui doit être un nombre fixe. Elle converge en loi vers une v.a. Y si sa fonction de répartition converge vers celle de Y en tout point de continuité ; Y peut ici être elle-même aléatoire, avec une loi non dégénérée, c'est ce mode de convergence qu'utilise le théorème ci-dessous, la limite étant une loi normale, pas un nombre.

Théorème central limite (TCL)

Soient X1,,Xn des v.a. i.i.d. d'espérance μ et de variance σ2 finie, quelle que soit leur loi, et Sn=X1++Xn leur somme. Alors, quand n, la somme standardisée converge en loi vers la Gaussienne centrée réduite :

SnnμσnnloiN(0,1),

ce qui s'utilise en pratique sous la forme : pour n assez grand,

SnN(nμ, nσ2).

L'énoncé est admis. Son point remarquable est l'universalité : quelle que soit la loi de départ, dé, exponentielle, Bernoulli, sommer suffit à faire émerger la Gaussienne. D'où la justification de la phrase d'ouverture de cette fiche : toute grandeur qui accumule un grand nombre de petits effets indépendants (un bruit de capteur, une somme d'erreurs élémentaires) est presque une somme de v.a. i.i.d., donc approximativement Gaussienne par TCL. C'est cet argument qui motive, dans tout le cours, la modélisation Gaussienne des composantes de bruit.

Exemple de convergence : sommer des exponentielles

Le théorème se met à l'épreuve sur la loi la plus asymétrique du catalogue, Exp(1) (μ=1, σ2=1) : rien ne ressemble moins à une cloche que sa densité.

Histogrammes de la somme de N tirages exponentiels pour N valant 1, 2, 10 et 100, comparés à la densité Gaussienne prédite par le TCL

Figure 1.20, Gaussianisation de la somme SN pour une loi de départ Exp(1), très asymétrique : à N=1 la prédiction Gaussienne est franchement fausse (et doit l'être), à N=10 elle est déjà bonne, à N=100 elle est indiscernable de l'histogramme (script figures/ch1/03-tcl-convergence.py).

Conséquence : la loi de la moyenne

L'analyse de données ne somme pas ses mesures, elle les moyenne. Le théorème s'y transpose sans calcul supplémentaire : la moyenne empirique Xn=Sn/n n'est que la somme ramenée à l'échelle d'une observation, et diviser par n ne change pas la forme d'une loi.

Corollaire, loi de la moyenne empirique

Sous les hypothèses du théorème central limite, pour n assez grand,

Xn=1ni=1nXiN(μ, σ2n).

Les deux paramètres se lisent directement sur ceux de Sn : E(Xn)=nμ/n=μ, et var(Xn)=nσ2/n2=σ2/n par la règle var(aX)=a2var(X). Le contraste avec la somme est instructif. La dispersion de la somme croît en σn : additionner des aléas les accumule. Celle de la moyenne fond en σ/n : la moyenne vise juste en espérance et se resserre autour de sa cible à mesure que n grandit. Diviser par 10 l'incertitude d'une moyenne exige donc 100 fois plus de mesures, une contrainte que tout ingénieur finit par rencontrer.

C'est sous cette forme que le TCL servira dans tout le cours : la Gaussienne est la loi des moyennes. Le chapitre 2 en fait son point de départ, la moyenne empirique y devenant le premier estimateur rencontré.

Loi normale multidimensionnelle, XN(μ,C)

Une mesure isolée n'est pas toujours la situation la plus riche : deux capteurs relevés ensemble, deux coordonnées d'une position, ou plus généralement un vecteur de n mesures forment un objet aléatoire à part entière. La Gaussienne se généralise à un tel vecteur X=(X1,,Xn).

Modélisation

La loi normale multidimensionnelle est paramétrée par θ=(μ,C) : μRn le vecteur des espérances, et C, une matrice n×n symétrique définie positive, la matrice de covariance (Cii la variance de Xi, Cij la covariance entre Xi et Xj). Sa densité est la forme p(x;θ) de ce modèle. Elle n'admet pas de CDF sous forme fermée.

Modèle (Loi normale multidimensionnelle)

  • PDF :
fX(x)=1(2π)n/2|C|1/2exp(12(xμ)TC1(xμ))

Illustration

Pour n=2, avec des variances σ12,σ22 et une corrélation ρ,

C=(σ12ρσ1σ2ρσ1σ2σ22).

Ce que C change à la forme du nuage se lit directement sur deux simulations en dimension 2 :

Nuage de points Gaussien en 2D, non corrélé, contours de niveau circulaires

Figure 1.21a, X1 et X2 non corrélées, même dispersion sur chaque axe (σ1=σ2=1), 500 tirages simulés : le nuage est rond.

Nuage de points Gaussien en 2D, corrélé, contours de niveau elliptiques inclinés

Figure 1.21b, X1 et X2 corrélées (ρ=0,8), même dispersion sur chaque axe : le nuage s'incline et s'étire selon la diagonale (script figures/ch1/03-normale-2d.py).

Le nuage rond correspond à ρ=0, soit une matrice diagonale C=I ; le nuage incliné correspond à ρ=0,8, dont les termes hors diagonale non nuls inclinent l'ellipse selon la diagonale.

Propriétés

Moments

E(X)=μcov(X)=C

Le cas non corrélé

Si C est diagonale, C=diag(σ12,,σn2), alors les composantes X1,,Xn sont indépendantes, et la densité se factorise :

fX(x)=i=1nfXi(xi),XiN(μi,σi2).

Pour une Gaussienne, absence de corrélation et indépendance coïncident, un résultat qui ne vaut pas pour une loi quelconque. Un bruit blanc (C=σ2I) n'est alors rien d'autre que n bruits Gaussiens scalaires indépendants, empilés dans un vecteur.

Exemple

Le code suivant montre comment évaluer la densité de deux capteurs bruités corrélés à ρ=0,8, tous deux d'écart-type unité, puis en tirer 100 000 réalisations.

python
import numpy as np

def densite_normale_2d(x, mu, C):
    """Densité de N(mu, C) en dimension 2."""
    ecart = x - mu
    inv_C = np.linalg.inv(C)
    det_C = np.linalg.det(C)
    exposant = -0.5 * ecart @ inv_C @ ecart
    return np.exp(exposant) / (2 * np.pi * np.sqrt(det_C))

mu = np.array([0.0, 0.0])
C = np.array([[1.0, 0.8], [0.8, 1.0]])
densite_normale_2d(np.array([0.0, 0.0]), mu, C)   # >>> 0.2653  (le pic)
python
import scipy.stats as sta

X = sta.multivariate_normal(mean=[0.0, 0.0], cov=[[1.0, 0.8], [0.8, 1.0]])
X.pdf([0.0, 0.0])   # >>> 0.2653

ech = X.rvs(size=100_000, random_state=0)
np.cov(ech.T)       # >>> [[1.00, 0.80], [0.80, 1.01]]  (≈ C)

Au chapitre 2 : ce modèle, plusieurs mesures bruitées et corrélées à la fois, sera au cœur de la dérivation des moindres carrés.

Récapitulatif : une loi = un modèle paramétré

Le catalogue est complet. Reprenons la lecture posée en fondations, §5, une loi est un modèle paramétré p(x;θ), et appliquons-la aux huit lois des deux catalogues :

LoiθE(X)var(X)Situation-type
Bernoulli B(p)ppp(1p)conversion d'un test A/B
Binomiale B(n,p)(n,p)npnp(1p)bits erronés sur une trame
Géométrique G(p)p1/p(1p)/p2attente du premier succès
Poisson P(λ)λλλrequêtes par seconde
Uniforme discrète U{a,b}(a,b)(a+b)/2(n21)/12le dé
Uniforme U(a,b)(a,b)(a+b)/2(ba)2/12erreur de quantification
Exponentielle Exp(λ)λ1/λ1/λ2temps entre deux pannes
Normale N(μ,σ2)(μ,σ2)μσ2bruit de mesure

Huit situations, une seule idée : chaque ligne est un modèle p(x;θ), et modéliser, c'est choisir la ligne. Chacune de ces lignes s'interroge avec l'interface unique de scipy.stats (fondations, §5.3) : le même code fonctionne pour les huit lois en changeant la première ligne, sta.bernoulli(p), sta.binom(n,p), sta.geom(p), sta.poisson(lam), sta.randint(a, b+1), sta.uniform(loc=a, scale=b-a), sta.expon(scale=1/lam), sta.norm(loc=mu, scale=sigma).

Transformation d'une variable aléatoire

Les sections précédentes décrivent une variable aléatoire dont la loi est donnée. Deux besoins inverses se présentent en pratique : déduire la loi d'une quantité calculée à partir d'une autre, Y=g(X), et produire des tirages d'une loi voulue à partir du seul générateur dont dispose une machine, un tirage uniforme sur [0,1]. Les deux relèvent de la même opération, transformer une variable aléatoire.

Changement de variable

Proposition, Changement de variable

Soit X une v.a. continue de densité fX et g une fonction strictement monotone et dérivable. La densité de Y=g(X) est

fY(y)=fX(g1(y))|dg1dy(y)|,

  • g1 est la fonction réciproque de g,
  • le facteur |dg1/dy| corrige la dilatation locale de l'axe.
Démonstration

Pour g croissante, l'événement {Yy} est l'événement {Xg1(y)}, donc les fonctions de répartition se répondent :

FY(y)=FX(g1(y)).

Dériver les deux membres par rapport à y donne la densité annoncée. Pour g décroissante, l'inégalité se retourne et fait apparaître un signe moins, que la valeur absolue absorbe.

Le cas de loin le plus fréquent est la transformation affine, Y=aX+b, pour laquelle g1(y)=(yb)/a et le facteur correctif vaut 1/|a|. Ses moments se lisent sans calcul, par la linéarité de l'espérance et la règle sur la variance : E(Y)=aE(X)+b et var(Y)=a2var(X). Appliquée à la Gaussienne, elle produit la standardisation, qui ramène toute cloche à la cloche centrée réduite.

Méthode de la transformation inverse

Un ordinateur ne sait engendrer qu'une seule loi, l'uniforme sur [0,1]. Toutes les autres s'en déduisent, et la fonction de répartition fournit le chemin.

Théorème, Transformation inverse

Soit FX une fonction de répartition continue et strictement croissante, et UU(0,1). La variable aléatoire

X=FX1(U)

admet FX pour fonction de répartition.

Démonstration

FX étant croissante, l'événement {FX1(U)x} est l'événement {UFX(x)}. Or U est uniforme sur [0,1], donc P(Uu)=u pour tout u de cet intervalle. En prenant u=FX(x) :

P(Xx)=P(UFX(x))=FX(x).

Le mécanisme se comprend mieux en le regardant opérer. Tirer u uniformément, c'est tirer uniformément une probabilité cumulée ; la renvoyer sur l'axe des x par FX1 concentre les valeurs là où la fonction de répartition monte vite, c'est-à-dire là où la densité est forte.

Illustration

Si le théorème est exact, des u régulièrement répartis sur l'axe vertical doivent ressortir resserrés là où la densité visée est grande, et un grand nombre de tirages doit reconstituer cette densité.

Fonction de répartition exponentielle en bleu ; cinq points noirs régulièrement
              espacés sur l'axe vertical, chacun suivi d'une flèche horizontale jusqu'à la courbe
              puis d'une flèche verticale vers l'axe des abscisses, où les cinq valeurs obtenues
              sont serrées près de zéro.

Figure 1.22a, La transformation inverse en action sur la loi exponentielle (λ=1) : cinq valeurs de u renvoyées sur l'axe des x par FX1 (script figures/ch1/03-transformation-inverse.py).

Histogramme gris décroissant de dix mille tirages, exactement recouvert par la courbe
              en tirets noirs de la densité exponentielle.

Figure 1.22b, Dix mille tirages produits par cette méthode, confrontés à la densité visée.

À gauche, les cinq u sont régulièrement espacés sur l'axe vertical, et les cinq x qu'ils produisent ne le sont pas : quatre d'entre eux tombent en deçà de 1,5, parce que c'est là que la fonction de répartition gagne le plus de hauteur. La méthode transporte donc l'uniformité des probabilités cumulées vers la non-uniformité des valeurs. À droite, l'histogramme de dix mille tirages épouse la densité exponentielle, et leur moyenne vaut 1,02 pour une espérance théorique de 1/λ=1.

Le cas discret

Une fonction de répartition discrète progresse par paliers et n'est donc pas inversible au sens strict. La construction se transpose en retenant la première valeur dont la probabilité cumulée dépasse u :

X=min {xk : FX(xk)U}.

Géométriquement, l'axe [0,1] est découpé en segments dont les longueurs sont les probabilités P(X=xk) ; le tirage u tombe dans l'un d'eux, et désigne la valeur correspondante. Une valeur deux fois plus probable occupe un segment deux fois plus long, donc est retenue deux fois plus souvent.

Implémentation

La méthode s'écrit en trois étapes, identiques dans les deux cas :

  1. tirer u uniformément sur [0,1], autant de fois que de valeurs souhaitées ;
  2. inverser la fonction de répartition, analytiquement si elle s'inverse, par recherche dans les probabilités cumulées sinon ;
  3. vérifier l'échantillon obtenu contre la loi visée, moyenne et variance empiriques, ou histogramme.
python
import numpy as np
rng = np.random.default_rng(2026)

M, lam = 10_000, 1.0

# continuous case: F(x) = 1 - exp(-lam x) inverts in closed form
u = rng.random(M)
x = -np.log(1.0 - u) / lam
x.mean()                                  # >>> 1.0202  (expected: 1 / lam = 1)

# discrete case: a loaded die, the first value whose cumulated mass exceeds u
pmf = np.array([0.10, 0.10, 0.10, 0.10, 0.10, 0.50])
cdf = np.cumsum(pmf)
faces = np.searchsorted(cdf, rng.random(M)) + 1
np.mean(faces == 6)                       # >>> 0.4945  (expected: 0.50)
python
import scipy.stats as sta

X = sta.expon(scale=1 / lam)
X.rvs(size=M, random_state=2026).mean()   # >>> 1.0047  (expected: 1 / lam = 1)

X.ppf(0.5)                                # >>> 0.6931  (the median, ln 2 / lam)

La méthode rvs de scipy.stats (section 5.3 des fondations) ne fait rien d'autre : elle applique FX1, exposée par ailleurs sous le nom ppf (percent point function), à des tirages uniformes.

Limites

La méthode exige de savoir inverser FX, ce qui n'est pas toujours possible. La loi normale en est l'exemple central : sa fonction de répartition Φ n'a pas de forme fermée élémentaire, et son inverse non plus. Deux voies contournent l'obstacle. La première inverse Φ numériquement, c'est ce que fait sta.norm.ppf. La seconde emprunte une transformation différente, la transformation de Box-Muller, qui produit deux Gaussiennes centrées réduites indépendantes à partir de deux uniformes indépendantes :

Z1=2lnU1cos(2πU2),Z2=2lnU1sin(2πU2).

Sa démonstration relève du changement de variable en dimension deux ; sa mise en œuvre fait l'objet du projet Les lois usuelles en NumPy, qui recode ainsi les tirages de tout le catalogue du chapitre.

Adéquation d'un modèle

Le catalogue fournit huit modèles ; rien n'a encore dit comment vérifier que celui retenu convient aux données. Comment confronter une loi p(x;θ) aux mesures qu'elle prétend décrire ? Deux lectures graphiques suffisent à trancher la plupart des cas, avant tout calcul.

Définition

Définition, Diagramme quantile-quantile

Le diagramme quantile-quantile (QQ-plot) porte les quantiles du modèle en abscisse et les quantiles observés en ordonnée. Pour N mesures triées x(1)x(N), il trace les N points

( F1(i0,5N;θ),  x(i) ),i=1,,N,

  • F1(;θ) est la fonction quantile du modèle, l'inverse de sa fonction de répartition,
  • x(i) est la i-ème plus petite mesure,
  • (i0,5)/N est la fraction de l'échantillon située sous cette mesure.

Si le modèle décrit les données, les points s'alignent sur la première bissectrice.

La lecture est immédiate : un point au-dessus de la bissectrice signale une mesure plus grande que ce que le modèle prévoit à ce rang, un point en dessous une mesure plus petite. Un décrochage aux deux extrémités, en arc, révèle une asymétrie que le modèle ne reproduit pas.

Illustration

L'histogramme des chronos de marathon de la figure 1.4 s'étirait vers la droite. Si la loi normale, symétrique, décrit mal cette asymétrie, l'écart doit rester discret sur l'histogramme et éclater sur le diagramme quantile-quantile.

Histogramme gris des chronos de marathon, surmonté d'une courbe en cloche bleue :
              la cloche suit le sommet mais laisse dépasser quelques barres à droite.

Figure 1.23a, Chronos de 1998 marathoniens simulés et loi normale de même moyenne et de même écart-type qu'eux, 4,08 h et 0,68 h (script figures/ch1/03-adequation-marathon.py).

Diagramme quantile-quantile : un nuage de points bleus formant un arc qui traverse la
              bissectrice noire en tirets, au-dessus d'elle aux deux extrémités.

Figure 1.23b, Diagramme quantile-quantile des mêmes chronos contre cette loi normale ; la bissectrice correspond à un modèle exact.

À gauche, la Gaussienne suit correctement le corps de la distribution, et l'œil hésite à la rejeter. À droite, les points quittent la bissectrice aux deux extrémités et dessinent un arc, la signature d'une loi asymétrique confrontée à un modèle symétrique. Le désaccord se chiffre : le modèle prévoit 5 coureurs au-delà de 6 h parmi les 1998, il y en a 28 ; au-delà de 6 h 30, il en prévoit moins d'un et il y en a 12. L'histogramme dissimule ces écarts parce qu'ils portent sur de faibles effectifs ; le diagramme quantile-quantile les expose parce qu'il compare les données au modèle rang par rang.

Confusion classique

« La densité superposée épouse l'histogramme, donc le modèle convient. » Non : l'histogramme est dominé par le corps de la distribution, là où se concentrent les effectifs. Les queues, qui portent les événements rares et souvent les plus coûteux, y sont pratiquement invisibles.

Implémentation

Le diagramme se construit en trois lignes, et scipy en fournit une version toute faite :

python
import numpy as np
import scipy.stats as sta
rng = np.random.default_rng(2026)

# the marathon times of figure 1.4, simulated from a shifted lognormal
chronos = 2.0 + rng.lognormal(mean=np.log(2.0), sigma=0.32, size=2_000)
chronos = chronos[chronos < 7.5]

x = np.sort(chronos)                              # the N measurements, sorted
p = (np.arange(1, x.size + 1) - 0.5) / x.size     # plotting positions
q = sta.norm.ppf(p, x.mean(), x.std())            # quantiles of the model
# then plot x against q, together with the first bisector
python
import matplotlib.pyplot as plt
import scipy.stats as sta

sta.probplot(chronos, dist="norm", plot=plt)
# quantiles are standardised here: the reference is the least-squares line,
# not the first bisector

Ces deux lectures restent qualitatives : elles montrent un désaccord sans le quantifier, et deux personnes peuvent lire le même diagramme différemment. Le chapitre 3 transforme ce jugement en décision chiffrée, en traitant l'adéquation d'un modèle comme un problème de détection.