- Densité et fonction de répartition. Une variable continue X a une densité fX ≥ 0 : P(c < X < d) = ∫cd fX. Sa fonction de répartition (CDF) est FX(x) = P(X ≤ x), et FX′ = fX (l04, notion 2).
- La normale. N(μ, σ²), de moyenne μ et de variance σ². La normale centrée réduite N(0, 1) a la densité φ(x) = e−x²/2/√(2π) et la fonction de répartition Φ ; Φ(1) = 0,841 et Φ(−z) = 1 − Φ(z) (l04, notion 6).
- L'exponentielle. L'attente T d'un flux de taux λ a la densité λe−λt pour t ≥ 0, la répartition 1 − e−λt et la moyenne 1/λ (l05, notion 3).
- La règle de la chaîne. La dérivée de F(h(y)) est F′(h(y)) · h′(y). Elle sert dans chaque preuve de la leçon, et c'est elle qui fait apparaître le facteur qu'on oublie.
La leçon
De CDF à CDF, puis dériver : la densité ne se recopie pas outil
Brunton 23 · Functions of a Random Variable
Brunton pose Y = g(X) : des °F convertis en °C, le carré X² d'une normale, l'énergie cinétique ½mV² d'une molécule. Avant toute formule, il prévient : « brancher » la densité de X dans g ne donne pas une densité.
Le plus petit exemple : X uniforme sur [0, 1], de densité 1, et Y = 2X, uniforme sur [0, 2]. Recopier la densité, une hauteur 1 sur [0, 2], donne une aire de 2. La bonne hauteur est ½. Une densité est un taux de probabilité par unité de longueur : quand g étire, la même probabilité s'étale sur une largeur double, donc le taux est divisé par deux.
La fonction de répartition, elle, est la probabilité d'un événement, et « Y ≤ y » se réécrit « X ≤ y/2 ». D'où la règle de Brunton : de CDF à CDF, puis dériver. On intègre pour passer de la densité à la CDF, on dérive pour revenir.
En haut, X uniforme sur [0, 1] ; la bande foncée [0,2 ; 0,3] porte une probabilité de 0,1. En bas, Y = aX. Le rectangle violet est la vraie densité, de hauteur 1/a ; le pointillé rouge est la densité recopiée, de hauteur 1, dont l'aire vaut a. Bouge a : la bande devient [0,2a ; 0,3a], plus large et plus basse, et porte toujours 0,1. À a = 2, l'exemple de l'idée : aire recopiée 2, hauteur vraie 0,5.
- X a une densité, donc P(X = x) = 0 : écrire ≤ ou < ne change rien.
- g strictement monotone sur l'ensemble des valeurs de X (x² l'est sur [0, 1], pas sur ℝ) : l'événement « g(X) ≤ y » est une demi-droite pour X, « X ≤ g⁻¹(y) » si g croît, « X ≥ g⁻¹(y) » si g décroît. Sinon il a plusieurs morceaux (notion 4).
- g dérivable, avec g′(x) ≠ 0 : la règle de la chaîne fait sortir (g⁻¹)′(y) = 1/g′(x), l'inverse de l'étirement local. La valeur absolue couvre le cas g décroissante.
- En discret, rien de tout cela : les masses se transportent telles quelles, P(Y = y) = Σ P(X = x) sur les x tels que g(x) = y (l08, notion 5). C'est la densité, un taux, qui ne se transporte pas.
X est uniforme sur [0, 1], coupée en dix tranches de largeur 0,1 : chacune porte une probabilité de 0,1. Dans le premier panneau, la courbe y = g(x) envoie chaque tranche sur un intervalle de y, de la même couleur. Dans le second, la densité de Y, couchée le long du même axe y : chaque tranche y devient un rectangle d'aire 0,1, d'autant plus bas qu'il est large. Le trait noir est la densité exacte de la formule. Choisis x² : là où g est plate, près de 0, la première tranche est tassée dans [0 ; 0,01] et monte à 10. Choisis −ln x : on obtient l'exponentielle e−y.
Exemples simples uniforme étirée, spams en minutes, une exponentielle, le carré sur [0, 1]
- Uniforme étirée. Y = 2X, X uniforme sur [0, 1]. FY(y) = P(2X ≤ y) = P(X ≤ y/2) = y/2 pour y dans [0, 2]. Sa dérivée vaut ½ : la densité de Y. La densité recopiée, 1 sur [0, 2], aurait une aire de 2.
- Les spams, en heures puis en minutes. L'attente T suit une exponentielle de taux 4 par heure : fT(0) = 4 par heure. En minutes, M = 60T. FM(m) = P(T ≤ m/60) = 1 − e−4m/60, dont la dérivée en 0 vaut 4/60 = 0,0667 par minute. Même attente, densité 60 fois plus basse. Mais un même événement garde sa probabilité : P(M ≤ 6 min) = P(T ≤ 0,1 h) = 1 − e−0,4 = 0,330.
- Fabriquer une exponentielle avec un uniforme. U uniforme sur [0, 1] et Y = −ln U, une fonction décroissante. P(Y ≤ y) = P(ln U ≥ −y) = P(U ≥ e−y) = 1 − e−y : Y suit une exponentielle de taux 1, et P(Y ≤ 1) = 0,632. Avec la formule : g⁻¹(y) = e−y, (g⁻¹)′(y) = −e−y, donc fY(y) = fU(e−y) · e−y = e−y. C'est la méthode d'inversion : la fonction de répartition de l'exponentielle de taux 1 est F(y) = 1 − e−y, d'inverse F⁻¹(u) = −ln(1 − u), et 1 − U est encore uniforme. À partir d'un générateur uniforme, on simule ainsi toute loi dont on sait inverser la fonction de répartition.
- Le carré sur [0, 1], celui de la figure 1. X uniforme sur [0, 1] et Y = X² : g est croissante sur [0, 1], g⁻¹(y) = √y et (g⁻¹)′(y) = 1/(2√y). Donc fY(y) = 1 · 1/(2√y) = 1/(2√y) sur ]0, 1], la densité exacte de la figure 1. Sur [0 ; 0,01], elle donne P = √0,01 = 0,1 : la première tranche.
Preuve la formule de g monotone, en deux cas
g croissante.
g décroissante.
Lecture physique : la tranche [x, x + dx] porte la probabilité fX(x) dx. Son image a la largeur |dy| = |g′(x)| dx et porte la même probabilité, donc fY(y) |dy| = fX(x) dx. Le facteur |(g⁻¹)′| est un jacobien en dimension 1 ; en dimension 2, c'est un déterminant (l07, notion 6).
Simuler en Python uniforme étirée, −ln U, heures et minutes
import numpy as np
rng = np.random.default_rng(0)
u = rng.uniform(0, 1, 1_000_000)
# Y = 2U: the histogram of Y sits at height 0.5, not 1
h, _ = np.histogram(2 * u, bins=4, range=(0, 2), density=True)
print("Y = 2U, histogram heights:", h.round(3))
# copying the density, f_U(y / 2) = 1 on [0, 2], gives area 2
y = np.linspace(0, 2, 200_001)
print("area of the copied density:", round(np.trapezoid(np.ones_like(y), y), 3))
# Y = -ln U: CDF to CDF gives P(Y <= t) = 1 - e^(-t), an Exp(1)
e = -np.log(u)
for t in [0.5, 1.0, 2.0]:
print(f"P(-ln U <= {t}): simulated {np.mean(e <= t):.4f}, method {1 - np.exp(-t):.4f}")
# hours -> minutes: same event, same probability; the density drops by 60
T = rng.exponential(1 / 4, 1_000_000) # hours, rate 4 per hour
M = 60 * T # minutes
print("P(T <= 0.1 h) =", np.mean(T <= 0.1).round(4))
print("P(M <= 6 min) =", np.mean(M <= 6).round(4))
print("first minute:", np.mean(M <= 1).round(4), " exact", round(1 - np.exp(-4 / 60), 4),
" rate x width = 4/60 =", round(4 / 60, 4))
Y = 2U, histogram heights: [0.5 0.5 0.499 0.501] area of the copied density: 2.0 P(-ln U <= 0.5): simulated 0.3937, method 0.3935 P(-ln U <= 1.0): simulated 0.6325, method 0.6321 P(-ln U <= 2.0): simulated 0.8644, method 0.8647 P(T <= 0.1 h) = 0.3294 P(M <= 6 min) = 0.3294 first minute: 0.0643 exact 0.0645 rate x width = 4/60 = 0.0667
Où ça casse
- Brancher la densité dans g. C'est l'exercice que propose Brunton : élever au carré la densité de la normale. φ(x)² a une aire de 1/(2√π) = 0,282 : ce n'est pas une densité, et ce n'est pas la loi de X² (notion 4).
- Oublier le facteur. fX(g⁻¹(y)) seul : pour Y = aX, son aire vaut a (vignette). Le facteur |(g⁻¹)′(y)| est exactement ce que fait sortir la règle de la chaîne : sauter cette ligne, c'est le perdre.
- g non monotone. Pour g(x) = x² et une X qui prend des valeurs des deux signes, deux valeurs de x donnent le même y : l'événement « g(X) ≤ y » a deux bouts, et la densité deux termes (notion 4).
- La valeur d'une densité dépend de l'unité, une probabilité non. 4 par heure ou 0,0667 par minute : c'est la même attente. On évalue une densité en un point pour une vraisemblance, on l'intègre pour une probabilité (l04, notion 2) ; seule l'intégrale est indépendante de l'unité.
- En ML : comparer des vraisemblances sur deux échelles. Un modèle de log y donne à y la densité f(log y)/y : sa log-vraisemblance en y perd Σ log yi. Comparer sans ce terme les log-vraisemblances d'un modèle de y et d'un modèle de log y n'a pas de sens. Les normalizing flows reposent sur cette formule : log pX(x) = log pZ(z) + log |det ∂z/∂x|.
X à densité, g strictement monotone sur les valeurs de X, Y = g(X) : fY(y) = fX(g⁻¹(y)) · |(g⁻¹)′(y)|. On l'obtient en dérivant FY(y) = P(g(X) ≤ y), jamais en recopiant la densité.
Y = aX + b : nouvelle moyenne, nouvel écart-type, et le cas a < 0 outil
Brunton 23 (et 24 pour l'écart-type)
Brunton convertit des températures : de °C en °F, on multiplie par 9/5 et on ajoute 32. Prenons des journées de printemps, X ~ N(15, 5²) en °C. La méthode de la notion 1 donne FY(y) = P(1,8X + 32 ≤ y) = FX((y − 32)/1,8) : Y suit N(59, 9²) en °F. Un même événement garde sa probabilité, P(Y ≤ 68) = P(X ≤ 20) = 0,841, et la cloche s'étale d'un facteur 1,8, donc son pic baisse de 0,0798 à 0,0443.
Brunton suppose a > 0. Prenons Y = 20 − X, les degrés qui manquent pour atteindre 20 °C : a = −1. « Y ≤ 0 » veut dire « X ≥ 20 » : l'inégalité se retourne, et la probabilité vaut 0,159. Sans la retourner, on trouverait 0,841, la probabilité de l'événement contraire.
La courbe grise est X, la température en °C, N(15, 5²) ; la violette est Y = aX + b, sur le même axe des nombres. Sous chaque courbe, la zone ombrée est l'événement « X ≤ 20 » et son image. °F : la cloche s'étale de 1,8 et son pic baisse d'autant, de 0,0798 à 0,0443 ; « X ≤ 20 » devient « Y ≤ 68 », 84,1 % des deux côtés. 20 − X : la transition passe par a = 0, où tout s'écrase sur un point, puis la loi ressort en miroir ; « X ≤ 20 » devient « Y ≥ 0 » et l'ombre change de côté.
- a ≠ 0. Si a = 0, Y = b est constante : toute la probabilité est en un point, il n'y a plus de densité.
- a > 0 : FY(y) = FX((y − b)/a). a < 0 : diviser par a retourne l'inégalité, FY(y) = 1 − FX((y − b)/a). Dans les deux cas, la dérivée fait sortir 1/|a|.
- μ = E[X] et σ est l'écart-type de X. La variance a²σ² vaut pour toute loi, preuve en l08, notion 9. Ce qui est propre à la normale, c'est que Y reste normale.
- N(μ, σ²) : le second paramètre est la variance.
X est l'attente entre deux spams, exponentielle de moyenne 15 min (4 par heure). Le trait violet est la densité de aX + b, avec sa moyenne (trait rouge) et ±σ (segment vert). Au départ a = −1 et b = 30 : la loi est retournée, sa queue part à gauche. Le pointillé rouge est ce que donnerait 1/a au lieu de 1/|a| : une « densité » négative, d'aire −1. Bouge a vers les positifs : la queue repasse à droite et le pointillé disparaît ; à a = 0, il n'y a plus de densité. Bouge b : tout glisse, la forme ne change pas.
Exemples simples °C en °F, le miroir, les degrés manquants, a = 0
- De °C en °F. X ~ N(15, 5²). Moyenne 1,8 × 15 + 32 = 59 °F, écart-type 1,8 × 5 = 9 °F, variance 81. P(Y ≤ 68) = P(X ≤ 20) = Φ(1) = 0,841. Pic : 0,0798 par °C, 0,0798/1,8 = 0,0443 par °F.
- Le miroir Y = −X : fY(y) = fX(−y). Une loi symétrique autour de 0 n'en est pas changée ; une exponentielle part vers les négatifs, sa queue à gauche.
- Les degrés manquants, Y = 20 − X : moyenne 20 − 15 = 5, écart-type |−1| × 5 = 5, donc Y ~ N(5, 5²). P(Y ≤ 0) = P(X ≥ 20) = 1 − 0,841 = 0,159.
- Heures en minutes, a = 60 et b = 0 : l'attente des spams garde sa forme exponentielle, sa moyenne passe de 0,25 h à 15 min et sa densité en 0 de 4 à 4/60 (notion 1).
- a = 0. Y = b avec probabilité 1 : une variable qui n'a plus de densité, son écart-type est 0.
Preuve de CDF à CDF dans les deux sens, puis le cas normal
a > 0.
a < 0.
Le cas normal. On remplace fX par la densité de N(μ, σ²).
Simuler en Python °C en °F, et l'inégalité retournée
import numpy as np
from math import erf, sqrt
Phi = lambda z: 0.5 * (1 + erf(z / sqrt(2)))
rng = np.random.default_rng(1)
X = rng.normal(15, 5, 1_000_000) # degrees C; numpy takes the sd (5), not the variance
Y = 1.8 * X + 32 # degrees F
print("Y in F: mean", Y.mean().round(2), " sd", Y.std().round(2), " (theory 59 and 9)")
print("P(Y <= 68) =", np.mean(Y <= 68).round(4), " P(X <= 20) =", np.mean(X <= 20).round(4),
" Phi(1) =", round(Phi(1), 4))
# peak height: share of a 1-degree window around the mean
pc, pf = np.mean(abs(X - 15) < 0.5), np.mean(abs(Y - 59) < 0.5)
print("peak per degree C:", pc.round(4), " per degree F:", pf.round(4),
" ratio", round(pc / pf, 2))
# a < 0: H = 20 - X, the degrees missing to reach 20 C
H = 20 - X
print("P(H <= 0) =", np.mean(H <= 0).round(4), " 1 - F_X(20) =", round(1 - Phi(1), 4),
" F_X(20), no flip =", round(Phi(1), 4))
print("sd of H:", H.std().round(2), " = |a| sigma; a sigma would be -5")
Y in F: mean 59.0 sd 8.99 (theory 59 and 9) P(Y <= 68) = 0.842 P(X <= 20) = 0.842 Phi(1) = 0.8413 peak per degree C: 0.0803 per degree F: 0.0444 ratio 1.81 P(H <= 0) = 0.158 1 - F_X(20) = 0.1587 F_X(20), no flip = 0.8413 sd of H: 4.99 = |a| sigma; a sigma would be -5
Où ça casse
- Écart-type aσ. Avec a < 0, il serait négatif. C'est |a|σ ; la variance a²σ² n'a pas ce problème.
- 1/a au lieu de 1/|a|. Pour a < 0, la « densité » devient négative et son aire vaut −1 (pointillé de la figure 2).
- L'inégalité non retournée. Pour Y = 20 − X, écrire FY(0) = FX((0 − 20)/(−1)) = FX(20) donne 0,841 au lieu de 1 − 0,841 = 0,159.
- a = 0. Y = b n'a plus de densité ; la formule divise par 0.
- Seule une transformation affine garde la famille. aX + b d'une normale est normale. Mais eX d'une normale est log-normale, asymétrique (l08, notion 2), et X² est un χ² (notion 4). Même affine, on peut sortir de la famille : aX + b d'une exponentielle n'est exponentielle que si a > 0 et b = 0 ; sinon le support ne commence plus en 0 ou part vers les négatifs.
Y = aX + b, a ≠ 0 : fY(y) = fX((y − b)/a)/|a| ; si a < 0, l'inégalité se retourne, FY(y) = 1 − FX((y − b)/a).
Standardiser : Z = (X − μ)/σ, et les intervalles par Φ outil
Brunton 24 · Rescaling the Normal Distribution to Mean Zero and Variance One
Quand les ordinateurs étaient lents, raconte Brunton, on ne trouvait Φ que pour la normale centrée réduite, dans une table « au fond du livre ». On y ramenait toute autre normale : Z = (X − μ)/σ. C'est la notion 2 avec a = 1/σ et b = −μ/σ : moyenne μ/σ − μ/σ = 0, écart-type σ/σ = 1. On centre, puis on réduit.
Les événements se correspondent, donc les probabilités aussi : « X entre μ − σ et μ + σ » est « Z entre −1 et 1 », 68,3 %. Avec nos journées X ~ N(15, 5²) : P(10 < X < 25) = P(−1 < Z < 2) = Φ(2) − Φ(−1) = 0,9772 − 0,1587 ≈ 0,819. Brunton cite P(X < 7) sans paramètres ; ici z = (7 − 15)/5 = −1,6 et Φ(−1,6) = 0,0548.
Ce z, le z-score, compte en écarts-types la distance à la moyenne : il est sans unité.
En haut X ~ N(15, 5²) en °C, en bas Z ~ N(0, 1). Les deux axes sont alignés : 15 °C au-dessus de 0, chaque pas de 5 °C au-dessus d'un pas de 1. La cloche est la même ; seules changent les graduations, et les hauteurs, 0,0798 en haut et 0,399 en bas : cinq fois plus, puisqu'une unité de z couvre 5 °C. Choisis un intervalle, la même aire s'ombre en haut et en bas. 10 à 20 °C : ±1σ, 68,3 %. X < 7 °C, l'exemple de Brunton : Z < −1,6, 5,48 %. 10 à 25 °C : de −1 à 2, 81,9 %.
- C'est la preuve promise en l04 (notion 6) : la notion 2 avec a = 1/σ, b = −μ/σ, et une normale reste normale.
- Moyenne 0 et écart-type 1 pour toute loi de variance finie : c'est la notion 2 avec a = 1/σ > 0, donc sans retournement.
- Z ~ N(0, 1) seulement si X est normale. Standardiser ne change pas la forme (figure 3).
- c et d sont les bornes de l'intervalle.
- En pratique μ et σ sont inconnus : on standardise avec μ et σ, estimés sur l'apprentissage, et ce n'est plus la standardisation exacte. Pour la moyenne de n variables i.i.d. N(μ, σ²) standardisée par l'écart-type estimé, la loi devient une Student à n − 1 degrés de liberté, pas N(0, 1) (inférence en régression).
La densité de Z = (X − μ)/σ en violet, contre la normale centrée réduite φ en pointillé. Les trois lois, une fois standardisées, ont une moyenne 0 et un écart-type 1, mais seule la normale coïncide avec φ. Choisis exponentielle : Z = T − 1 (taux 1 : μ = σ = 1 ; toute exponentielle donne la même Z) commence à −1 et garde sa queue droite ; la zone ombrée, P(Z > 2) = e−3 = 0,0498, fait plus du double des 0,0228 que donnerait Φ. Choisis uniforme : Z reste entre −1,73 et 1,73, et P(Z > 2) = 0.
Exemples simples la règle 68-95-99,7, deux intervalles, les 400 pièces, des variables explicatives
- ±1, 2, 3 écarts-types. Pour toute normale : 68,3 %, 95,4 % et 99,7 % (vus en l04, notion 6). Pour X ~ N(15, 5²), ce sont les intervalles 10 à 20, 5 à 25 et 0 à 30 °C.
- Un intervalle quelconque. P(10 < X < 25) : z = (10 − 15)/5 = −1 et (25 − 15)/5 = 2, donc Φ(2) − Φ(−1) = 0,9772 − 0,1587 ≈ 0,819.
- Une queue. P(X < 7) : z = −1,6, Φ(−1,6) = 0,0548.
- Les 400 pièces de Brunton (l04, notion 7). Le nombre de piles est approximativement N(200, 10²) ; entre 190 et 230, la normale sans correction donne Φ((230 − 200)/10) − Φ((190 − 200)/10) = Φ(3) − Φ(−1) = 0,840 (la valeur exacte, 0,852, demande la correction de continuité, l04 notion 7). C'était déjà une standardisation.
- En ML : standardiser des variables explicatives (features). Trois clients, A (170 cm, 30 k€), B (180 cm, 30 k€), C (170 cm, 40 k€). En cm et en k€, A est à 10 de B et à 10 de C. Passe le revenu en € : A est toujours à 10 de B, mais à 10 000 de C, et un k-means ne voit plus que le revenu. Divise chaque variable par son écart-type, disons 10 cm et 20 k€ : A est à 1 de B et à 0,5 de C, quelle que soit l'unité de départ.
Simuler en Python Φ contre simulation, une exponentielle standardisée, des z-scores
import numpy as np
from scipy.stats import norm
rng = np.random.default_rng(2)
# X ~ N(15, 5^2): P(10 < X < 25) by standardising, then by simulation
X = rng.normal(15, 5, 1_000_000)
sim = np.mean((10 < X) & (X < 25))
print("Phi(2) - Phi(-1) =", round(norm.cdf(2) - norm.cdf(-1), 4), " simulated:", sim.round(4))
# a standardised Exp(1) (mu = sigma = 1) has mean 0 and sd 1, but it is not normal
Z = rng.exponential(1.0, 1_000_000) - 1.0
print(f"mean {Z.mean():.3f} sd {Z.std():.3f}")
print("P(Z > 2):", np.mean(Z > 2).round(4), " Phi says", round(norm.sf(2), 4))
print("P(Z < -1):", np.mean(Z < -1).round(4), " Phi says", round(norm.cdf(-1), 4))
# z-scores make distances unit-free: A, B, C = (height in cm, income in euros)
F, sd = np.array([[170, 30_000], [180, 30_000], [170, 40_000]]), np.array([10, 20_000])
print("raw: AB", np.linalg.norm(F[0] - F[1]), " AC", np.linalg.norm(F[0] - F[2]))
D = (F - F[0]) / sd # differences to A, counted in standard deviations
print("z-scores: AB", np.linalg.norm(D[1]), " AC", np.linalg.norm(D[2]))
Phi(2) - Phi(-1) = 0.8186 simulated: 0.819 mean 0.000 sd 1.000 P(Z > 2): 0.0498 Phi says 0.0228 P(Z < -1): 0.0 Phi says 0.1587 raw: AB 10.0 AC 10000.0 z-scores: AB 1.0 AC 0.5
Où ça casse
- Standardiser ne rend pas normal. Une exponentielle standardisée a une moyenne 0 et un écart-type 1, mais P(Z > 2) = 0,0498 au lieu de 0,0228, et P(Z < −1) = 0 au lieu de 0,159 (figure 3). La règle 68-95-99,7 ne vaut que pour une normale ; le TCL dira quand une moyenne standardisée le devient approximativement (l11).
- σ, pas σ².
scipy.stats.norm(loc, scale)etnp.random.normal(loc, scale)prennent l'écart-type. Passer la variance 25 au lieu de 5 donne une cloche cinq fois trop large : P(10 < X < 25) tombe de 0,819 à 0,235. - Les statistiques du jeu de test (test set). μ et σ se calculent sur le jeu d'apprentissage seul, puis s'appliquent telles quelles au jeu de test. Les recalculer sur tout le jeu fait fuir de l'information (validation croisée et fuite).
- μ et σ ne sont pas μ et σ. Une moyenne standardisée par l'écart-type estimé suit une Student si les données sont normales, aux queues plus lourdes que N(0, 1) ; l'écart ne compte qu'à petit n.
- Les arbres n'en ont pas besoin. Standardiser est une transformation croissante : elle ne change l'ordre d'aucune valeur, donc les mêmes partitions, seule la valeur du seuil change (arbres). k-means, k-NN, PCA et régression pénalisée, eux, en dépendent.
X ~ N(μ, σ²) : P(c < X < d) = Φ((d − μ)/σ) − Φ((c − μ)/σ), parce que Z = (X − μ)/σ suit N(0, 1), ce qui n'est vrai que si X est normale.
Le χ² à un degré de liberté : Y = X² culture
Brunton 25 · The Chi-Squared Distribution: The Square of the Normal Distribution
Brunton prend X ~ N(0, 1) et Y = X², « l'une des lois les plus utiles pour les tests ». Même méthode : « Y ≤ y » veut dire « X² ≤ y », donc « −√y ≤ X ≤ √y ». Les deux queues de X, à gauche et à droite, se replient sur un seul côté de Y. P(Y ≤ 1) = P(−1 ≤ X ≤ 1) = 0,683 ; P(Y ≤ 3,84) = P(|X| ≤ 1,96) = 0,95.
Près de 0, le carré écrase. La bande |X| ≤ 0,1 porte 8 % de la masse de X, et elle tombe tout entière dans [0 ; 0,01] : une densité moyenne de 7,97 sur cet intervalle. Plus on s'approche de 0, plus c'est tassé : la densité de Y n'est pas bornée en 0, et son aire vaut pourtant 1. C'est la loi du χ² à un degré de liberté.
En haut, la densité φ de X, et la bande ombrée de −√y à √y. En bas, la densité du χ², et [0, y] ombré : les deux aires sont égales. Bouge y ou choisis un repère. y = 1 : la bande ±1, 68,3 %. y = 3,84 : la bande ±1,96, 95 %. y = 0,01 : la bande ±0,1 porte déjà 8 % de la masse, entassée dans [0 ; 0,01] : densité moyenne 7,97 (valeur affichée).
- X ~ N(0, 1) exactement. Pour X ~ N(μ, σ²), c'est ((X − μ)/σ)² qui suit cette loi : on standardise d'abord (notion 3).
- Y ≥ 0 : FY(y) = 0 pour y ≤ 0.
- g(x) = x² n'est pas monotone : chaque y > 0 a deux antécédents, ±√y, d'où les deux termes en Φ.
- La somme de k carrés de N(0, 1) indépendantes suit un χ² à k degrés de liberté, de moyenne k et de variance 2k : c'est elle qui sert aux tests. Le χ² à un degré est aussi une loi Gamma de forme ½ et de taux ½ (l05, notion 7).
La courbe est Φ. FY(y) est l'écart vertical entre Φ(√y) et Φ(−√y), le segment rouge. Les deux tangentes ont la même pente, φ(√y), parce que φ est paire : elles sont parallèles. Quand y augmente, le bout droit avance de 1/(2√y) par unité de y et monte ; le bout gauche recule d'autant et descend. La longueur des flèches rouges est proportionnelle à cette vitesse : elles raccourcissent quand y grandit. Les deux mouvements élargissent l'écart : chacun apporte pente × vitesse, φ(√y)/(2√y), et leur somme est fY(y). Clique ▶ élargir la bande, ou bouge y. À y = 1 : pente 0,242, chaque bout 0,121, fY(1) = 0,242.
Exemples simples trois valeurs de y, la densité, la moyenne, une perte
- y = 1. 2Φ(1) − 1 = 0,683, et fY(1) = φ(1) = 0,242.
- y = 3,84. √3,84 ≈ 1,96, et 2Φ(1,96) − 1 = 0,95. Le seuil 3,84 d'un test du χ² à un degré de liberté est le carré de 1,96, le quantile 97,5 % de la normale.
- y = 0,01. P(|X| ≤ 0,1) = 0,0797, sur un intervalle de longueur 0,01.
- La densité en deux points : fY(0,5) = 0,439 et fY(2) = 0,104, les valeurs de
scipy.stats.chi2(1).pdf. - Moyenne et variance. E[Y] = E[X²] = Var(X) + E[X]² = 1. Pour la normale centrée réduite E[X⁴] = 3, donc Var(Y) = 3 − 1 = 2.
- En ML : une perte (loss) est une somme de carrés normalisés. En régression avec un bruit N(0, σ²), la log-vraisemblance négative vaut ½ Σ (ri/σ)² plus une constante (du bruit à la loss). Si les bruits εi sont indépendants, Σ (εi/σ)² suit un χ² à n degrés de liberté, de moyenne n ; avec les résidus d'une régression linéaire à p coefficients, il en reste n − p.
Preuve de CDF à CDF avec deux bouts, la dérivée sur laquelle Brunton trébuche
Le point délicat est la quatrième ligne : le moins devant Φ(−√y) et celui de la dérivée intérieure de −√y se compensent. Les pentes de Φ, elles, sont égales.
Moyenne et variance : E[Y] = E[X²] = Var(X) + E[X]² = 1 (l08, notion 6). Var(Y) = E[X⁴] − E[X²]² = 3 − 1 = 2, où E[X⁴] = 3 est admis ici : on le retrouve en dérivant quatre fois en 0 la fonction génératrice et²/2 de N(0, 1), dont le terme en t⁴ est t⁴/8 = 3 · t⁴/4! (l12, notion 3).
Simuler en Python X² contre 2Φ(√y) − 1, la densité, une somme de cinq carrés
import numpy as np
from scipy import stats
rng = np.random.default_rng(3)
Y = rng.normal(0, 1, 1_000_000) ** 2
# CDF to CDF: P(Y <= y) = P(|X| <= sqrt y) = 2 Phi(sqrt y) - 1
for y in [0.01, 1, 3.84]:
exact = 2 * stats.norm.cdf(y ** 0.5) - 1
print(f"P(Y <= {y}): simulated {np.mean(Y <= y):.4f}, exact {exact:.4f}")
print(f"mean {Y.mean():.3f} variance {Y.var():.3f} (theory 1 and 2)")
# density in a window of width 0.02 vs e^(-y/2) / sqrt(2 pi y), +- two standard errors
for y in [0.5, 2.0]:
p = np.mean(abs(Y - y) < 0.01)
noise = 2 * np.sqrt(p * (1 - p) / Y.size) / 0.02
fy = np.exp(-y / 2) / np.sqrt(2 * np.pi * y)
print(f"density at {y}: simulated {p / 0.02:.3f} +- {noise:.3f}, formula {fy:.4f}")
# sum of k = 5 independent squares: chi-square with 5 degrees of freedom
S = (rng.normal(0, 1, (1_000_000, 5)) ** 2).sum(axis=1)
print(f"k = 5: mean {S.mean():.3f} variance {S.var():.2f} (theory 5 and 10)")
P(Y <= 0.01): simulated 0.0800, exact 0.0797 P(Y <= 1): simulated 0.6822, exact 0.6827 P(Y <= 3.84): simulated 0.9500, exact 0.9500 mean 1.000 variance 1.999 (theory 1 and 2) density at 0.5: simulated 0.437 +- 0.009, formula 0.4394 density at 2.0: simulated 0.101 +- 0.004, formula 0.1038 k = 5: mean 4.996 variance 10.00 (theory 5 and 10)
Où ça casse
- Le carré de la densité. φ(x)² n'est pas la densité de X² : son aire vaut 0,282, et elle vit sur toute la droite alors que X² ≥ 0.
- Une seule branche. Oublier −√y donne φ(√y)/(2√y), d'aire ½ : il manque la masse des X négatifs.
- Une densité infinie n'est pas une probabilité infinie. fY(y) tend vers l'infini quand y tend vers 0, mais P(Y ≤ 0,01) = 0,0797 seulement. Une densité est un taux : elle peut exploser sur un intervalle de plus en plus court.
- X non centrée réduite. Si X ~ N(15, 5²), X² n'est pas un χ² : E[X²] = 25 + 15² = 250. C'est ((X − 15)/5)² qui en est un.
- Ce qui est normal, c'est l'erreur standardisée. Une erreur divisée par son écart-type est ≈ N(0, 1), avant tout carré ; c'est la somme des carrés de ces erreurs standardisées qui est ≈ χ². Il faut aussi qu'elles soient indépendantes, et chaque paramètre estimé retire un degré de liberté (parties 1, tests).
Si X ~ N(0, 1), X² suit un χ² à 1 degré de liberté : P(X² ≤ y) = P(|X| ≤ √y) = 2Φ(√y) − 1, moyenne 1, variance 2, et 3,84 ≈ 1,96². Une somme de k carrés indépendants donne un χ² à k degrés de liberté. Pas de carte ici : elle viendra avec les tests.
Résumé
- Une densité est un taux par unité : elle ne se recopie pas. Une fonction de répartition, probabilité d'un événement, se transporte.
- Méthode : FY(y) = P(g(X) ≤ y), réécrire en événement sur X, puis dériver par la règle de la chaîne.
- g monotone : fY(y) = fX(g⁻¹(y)) · |(g⁻¹)′(y)| ; la densité se divise par l'étirement.
- Y = aX + b : fY(y) = fX((y − b)/a)/|a|, moyenne aμ + b, écart-type |a|σ ; a < 0 retourne l'inégalité.
- Une normale reste normale : aX + b ~ N(aμ + b, a²σ²).
- Z = (X − μ)/σ : moyenne 0 et écart-type 1 toujours, N(0, 1) seulement si X est normale ; P(c < X < d) = Φ((d − μ)/σ) − Φ((c − μ)/σ).
- X ~ N(0, 1) ⇒ X² suit un χ² à 1 degré de liberté : P(X² ≤ y) = 2Φ(√y) − 1, moyenne 1, variance 2, densité infinie en 0.
Chaîne verbalisée — une prise, à voix haute
- Pourquoi ne peut-on pas simplement remplacer x par g⁻¹(y) dans la densité de X ?Une densité est un taux par unité de longueur : si g étire, la même probabilité s'étale, il faut diviser par l'étirement |g′|. Uniforme sur [0, 1] étirée par 2 et recopiée : aire 2.
- Quelle est la méthode pour trouver la loi de Y = g(X) ?Écrire FY(y) = P(g(X) ≤ y), le traduire en événement sur X, l'exprimer avec FX, puis dériver par la règle de la chaîne.
- Densité de aX + b, et ce qui change si a < 0 ?fX((y − b)/a)/|a|. Si a < 0, l'inégalité se retourne : FY(y) = 1 − FX((y − b)/a). L'écart-type est |a|σ.
- X ~ N(15, 5²). Que vaut P(10 < X < 25) ?On standardise : z = −1 et 2, donc Φ(2) − Φ(−1) = 0,9772 − 0,1587 ≈ 0,819.
- Standardiser une variable explicative exponentielle la rend-elle normale ?Non : moyenne 0 et écart-type 1, mais la même forme. P(Z > 2) = 0,050, et non les 0,023 de Φ.
- Quelle est la loi de X² pour X ~ N(0, 1) ?P(X² ≤ y) = P(|X| ≤ √y) = 2Φ(√y) − 1 : deux antécédents ±√y. Densité e−y/2/√(2πy), moyenne 1 : le χ² à 1 degré de liberté ; 3,84 ≈ 1,96².
Où ça sert ensuite
stats::standardisation (notions 1, 2, 3) · stats::chi2 (notion 4, culture ici : la carte viendra avec les tests).
Une carte se fait depuis le « ce qu'on garde » d'une notion OUTIL, après ta lecture, dans tes mots.