Aller au contenu principal

Tests d’hypothèse, tailles d’effet et comparaisons multiples

Une moyenne observée dépasse sa cible de 4. Cet écart est-il compatible avec les fluctuations d’échantillonnage, ou suffit-il à rejeter l’hypothèse selon laquelle la moyenne de la population égale la cible ? Même si on la rejette, un écart de 4 justifie-t-il une action ? Le test d’hypothèse répond à la première question ; la taille d’effet et un seuil de décision pratique éclairent la seconde. Les bases de l’échantillonnage, de l’erreur standard et de la couverture des intervalles figurent dans Statistiques et probabilités.

Traduire la question en test​

L’explication des tests statistiques du NIST part de deux hypothèses : l’hypothèse nulle H0H_0 énonce ce que l’on veut tester, tandis que l’alternative H1H_1 précise les écarts à détecter. Il faut aussi une statistique résumant les données et sa distribution de référence lorsque H0H_0 et les hypothèses d’échantillonnage sont vérifiées.

Pour une moyenne de population μ\mu :

Question fixée à l’avanceHypothèse nulleAlternativeRésultats plus extrêmes
La moyenne a-t-elle changé ?H0:μ=500H_0:\mu=500H1:μ≠500H_1:\mu\ne500Écarts dans les deux sens
La moyenne a-t-elle augmenté ?H0:μ≤500H_0:\mu\le500H1:μ>500H_1:\mu>500Écarts positifs plus grands
La moyenne a-t-elle diminué ?H0:μ≥500H_0:\mu\ge500H1:μ<500H_1:\mu<500Écarts négatifs plus grands

Choisir la question, le niveau de signification α\alpha, la taille d’échantillon ou la règle d’arrêt avant de regarder les données. Pour ces tests unilatéraux d’une moyenne normale, calculer la probabilité de queue à la frontière μ=500\mu=500 contrôle l’erreur sur toute l’hypothèse nulle unilatérale.

Le NIST définit la valeur p comme la probabilité, sous l’hypothèse nulle, d’obtenir une statistique au moins aussi extrême que celle observée. Le sens d’« extrême » dépend de l’alternative retenue à l’avance. La règle usuelle rejette H0H_0 lorsque p≤αp\le\alpha ; sinon, elle ne la rejette pas.

Comme l’explique l’American Statistical Association, la valeur p est conditionnelle à l’hypothèse nulle et au modèle statistique. Elle ne donne ni la probabilité que l’hypothèse nulle soit vraie, ni celle que ce rejet précis soit erroné. Attribuer des probabilités aux hypothèses exige un autre modèle, par exemple les a priori et vraisemblances de la mise à jour bayésienne.

Exemple détaillé : une moyenne passe de 500 à 504​

Supposons 25 observations normales, indépendantes et de même distribution, dont la moyenne est xˉ=504\bar x=504. Dans cet exemple hypothétique, l’écart-type de la population σ=10\sigma=10 est connu. On teste H0:μ=500H_0:\mu=500 contre H1:μ≠500H_1:\mu\ne500, avec α=0.05\alpha=0.05. Le test du NIST pour une moyenne de population utilise, lorsque l’écart-type est connu :

SE=σn=1025=2,Z=Xˉ−μ0SE.SE=\frac{\sigma}{\sqrt n}=\frac{10}{\sqrt{25}}=2, \qquad Z=\frac{\bar X-\mu_0}{SE}.

Sous H0H_0, Z∼N(0,1)Z\sim N(0,1) ; la valeur observée est z=2z=2. Si Φ\Phi désigne la fonction de répartition normale standard, la valeur p bilatérale vaut

p=PH0(∣Z∣≥2)=2[1−Φ(2)]≈0.045500.p=P_{H_0}(|Z|\ge2)=2[1-\Phi(2)]\approx0.045500.

Dans ce modèle, lorsque H0:μ=500H_0:\mu=500 est vraie, environ 4,55 % des échantillons répétés de 25 observations produiraient un écart standardisé en valeur absolue au moins aussi grand. On rejette donc μ=500\mu=500 au niveau de 5 %. Le calcul utilise les résumés d’échantillon fournis : 504 est une donnée de l’exemple, pas le résultat d’une mesure réelle.

Si la question fixée à l’avance portait sur une augmentation, la valeur p de queue supérieure serait 1−Φ(2)≈0.0227501-\Phi(2)\approx0.022750. Elle vaut ici la moitié de la valeur bilatérale parce que l’écart observé va dans le sens de l’alternative et que la distribution de référence est symétrique. Une question initiale portant sur une diminution donnerait au contraire une valeur p de queue inférieure d’environ 0,977250. Choisir la queue supérieure après avoir vu un écart positif change la règle du test. Sous une distribution nulle continue et symétrique, choisir systématiquement la plus petite valeur p unilatérale et la comparer à 0,05 donne un taux d’erreur bilatéral réel de 0,10.

Lire le même résultat avec un intervalle de confiance​

Pour le même modèle, on utilise l’intervalle du NIST pour une moyenne avec écart-type de population connu :

xˉ±z0.975SE=504±1.959964×2≈[500.080,507.920].\bar x\pm z_{0.975}SE =504\pm1.959964\times2 \approx[500.080,507.920].

L’intervalle exclut 500, ce qui concorde avec le rejet par le test bilatéral à 5 %. L’explication du NIST sur la correspondance entre test et intervalle utilise également le modèle à écart-type connu. Cette correspondance exige le même modèle, la même erreur standard, une alternative bilatérale et un niveau de confiance adapté ; un test unilatéral correspond à une borne unilatérale. Les 95 % décrivent la couverture de la méthode lors d’échantillonnages répétés.

Lorsque σ\sigma est inconnu, le remplacer par l’écart-type empirique ss ajoute une incertitude d’estimation. Pour des observations normales indépendantes et de même distribution, sous H0H_0, (Xˉ−μ0)/(s/n)(\bar X-\mu_0)/(s/\sqrt n) suit tn−1t_{n-1} : valeurs p et intervalles doivent alors tous deux utiliser la loi t. Voir le théorème central limite pour les approximations avec des populations non normales ; agrandir l’échantillon ne corrige ni la dépendance ni le biais d’échantillonnage.

Taux d’erreur, puissance et effets pratiques​

Les techniques quantitatives du NIST distinguent signification statistique et importance pratique, et définissent les erreurs et la puissance suivantes :

QuantitéSens lors d’échantillonnages répétés
Erreur de type IRejeter H0H_0 alors qu’elle est vraie ; un test valide de niveau α\alpha borne cette probabilité par α\alpha
Probabilité d’erreur de type II β\betaProbabilité de ne pas rejeter H0H_0 pour une alternative vraie spécifiée
Puissance 1−β1-\betaProbabilité de rejeter H0H_0 pour cette alternative

L’effet brut estimé vaut 504−500=4504-500=4, soit 4/10=0.44/10=0.4 après standardisation par l’écart-type de la population. Si une action exige une hausse d’au moins 5, l’estimation ponctuelle reste sous ce seuil et l’intervalle de la hausse [0.080,7.920][0.080,7.920] ne l’établit pas au-dessus de 5. Détecter un écart à zéro et atteindre un seuil pratique sont deux jugements distincts.

La puissance se calcule pour un effet réel spécifié. Dans le même modèle à écart-type connu, une hausse réelle δ=4\delta=4 donne à la statistique la loi N(λ,1)N(\lambda,1), où λ=δn/σ\lambda=\delta\sqrt n/\sigma. Pour c=z1−α/2c=z_{1-\alpha/2}, la puissance bilatérale est

Pδ(∣Z∣>c)=Φ(−c−λ)+1−Φ(c−λ).P_\delta(|Z|>c)=\Phi(-c-\lambda)+1-\Phi(c-\lambda).

Elle vaut environ 0,516005 pour n=25n=25, et 0,979327 si l’on choisit à l’avance n=100n=100, toujours avec un effet réel de 4. La puissance est la probabilité de détection du plan d’étude pour l’effet spécifié, pas la probabilité qu’un résultat observé soit vrai. Ne pas rejeter n’établit pas non plus l’équivalence : celle-ci demande une plage de différences acceptables fixée à l’avance et une procédure correspondante, comme l’explique le guide du NIST sur les tests d’équivalence, section 5. La formule de taille d’échantillon traite la précision des intervalles ; détecter un effet donné demande aussi une puissance, un sens de test et un taux d’erreur.

Ce code, limité à la bibliothèque standard, recalcule le test, l’intervalle et la puissance :

import math
from statistics import NormalDist

def normal_sf(z):
# Compute the upper tail directly to avoid cancellation near 1.
return 0.5 * math.erfc(z / math.sqrt(2))


normal = NormalDist()
n, xbar, mu0, sigma, alpha = 25, 504.0, 500.0, 10.0, 0.05
se = sigma / math.sqrt(n)
z = (xbar - mu0) / se
p_upper = normal_sf(z)
p_two = 2 * normal_sf(abs(z))
critical = normal.inv_cdf(1 - alpha / 2)
lo, hi = xbar - critical * se, xbar + critical * se
print(f"SE={se:.3f}, z={z:.3f}")
print(f"p_upper={p_upper:.6f}, p_two={p_two:.6f}")
print(f"95% CI=[{lo:.3f}, {hi:.3f}]")
print(f"shift={xbar - mu0:.3f}, standardized={(xbar - mu0) / sigma:.3f}")
for size in (25, 100):
shift = 4.0 / (sigma / math.sqrt(size))
power = normal_sf(critical + shift) + normal_sf(critical - shift)
print(f"n={size}, power_at_shift_4={power:.6f}")

Sortie :

SE=2.000, z=2.000
p_upper=0.022750, p_two=0.045500
95% CI=[500.080, 507.920]
shift=4.000, standardized=0.400
n=25, power_at_shift_4=0.516005
n=100, power_at_shift_4=0.979327

Que contrôler sur plusieurs comparaisons ?​

Si 20 hypothèses nulles sont toutes vraies et si chaque test indépendant a une probabilité d’erreur de type I exactement égale à 0,05, la probabilité d’au moins un faux rejet vaut

1−(1−0.05)20≈0.641514.1-(1-0.05)^{20}\approx0.641514.

Ce produit exige l’indépendance. Partager les mêmes tâches de test peut rendre les comparaisons de modèles dépendantes ; l’indépendance doit donc être justifiée. Il faut néanmoins définir la famille : quels modèles, indicateurs et sous-groupes étayent la conclusion, plutôt que de ne conserver après coup que les comparaisons significatives.

L’article original de Benjamini et Hochberg introduit le FDR et souligne qu’il égale le FWER lorsque toutes les hypothèses nulles sont vraies.

Objectif de contrôleDéfinitionQuestion traitée
Taux d’erreur familial, FWERP(V≥1)P(V\ge1)Quelle est la probabilité d’au moins un faux rejet dans cette famille ?
Taux de fausses découvertes, FDRE[V/max⁡(R,1)]E[V/\max(R,1)]Sur des répétitions, quelle est la proportion moyenne de faux rejets parmi les hypothèses rejetées ?

VV compte les faux rejets et RR tous les rejets ; la proportion est nulle lorsque R=0R=0. En présence d’effets réels, le FDR permet certaines fausses découvertes pour accroître la détection. Un contrôle à 5 % ne garantit pas qu’au plus 5 % des découvertes de cette réalisation précise soient erronées.

Un petit exemple de Bonferroni et BH​

Pour une famille de mm tests définie à l’avance, l’inégalité de Bonferroni fournit une méthode directe : tester chacun au niveau α/m\alpha/m, ou comparer les valeurs ajustées min⁡(1,mpi)\min(1,mp_i) à α\alpha. Si chaque valeur p initiale est valide, le FWER ne dépasse pas α\alpha, sans condition d’indépendance. Il s’agit de borner la probabilité de l’union des événements d’erreur par la somme de leurs probabilités.

La documentation SciPy sur le contrôle des fausses découvertes précise les conditions de dépendance : Benjamini–Hochberg (BH) contrôle le FDR pour des tests indépendants ou satisfaisant une dépendance de régression positive (PRDS). Benjamini–Yekutieli (BY) garantit aussi le contrôle sous une dépendance générale, mais reste plus conservateur. Une corrélation ne suffit pas à établir PRDS.

BH ordonne les valeurs p en p(1),…,p(m)p_{(1)},\ldots,p_{(m)}, cherche le plus grand kk tel que p(k)≤kq/mp_{(k)}\le kq/m, puis rejette les kk premières hypothèses. Si aucun kk ne convient, aucun rejet n’est effectué. Cette règle à taille fixe figure aussi dans la section 7.2 de l’article de Johari et ses collègues. Les valeurs ajustées dans l’ordre croissant sont

p(i)BH=min⁡(1,min⁡j≥imjp(j)).p^{BH}_{(i)}=\min\left(1,\min_{j\ge i}\frac{m}{j}p_{(j)}\right).

Supposons que cinq comparaisons définies à l’avance produisent ces valeurs p illustratives, avec un objectif de 0,05 pour le FWER ou le FDR :

ComparaisonValeur p bruteAjustement BonferroniAjustement BH
A0.0010.0050.005
B0.0120.0600.030
C0.0180.0900.030
D0.0410.2050.05125
E0.2001.0000.200

Bonferroni rejette A ; BH rejette A, B et C. Les seuils BH dans l’ordre sont 0,01, 0,02, 0,03, 0,04 et 0,05 ; la troisième position est la dernière qui satisfait la règle. Ces méthodes contrôlent des objectifs différents. Le choix dépend de l’acceptabilité de fausses découvertes dans un ensemble, et non du nombre de résultats significatifs obtenu.

Le calcul suivant utilise la bibliothèque standard pour ajuster cette liste finie, puis remet les valeurs BH dans l’ordre d’entrée. Il suppose une liste non vide de valeurs p valides.

ps = [0.001, 0.012, 0.018, 0.041, 0.200]
m = len(ps)
order = sorted(range(m), key=ps.__getitem__)
bh = [0.0] * m
running = 1.0
for rank in range(m, 0, -1):
index = order[rank - 1]
running = min(running, m * ps[index] / rank)
bh[index] = running
bonferroni = [min(1.0, m * p) for p in ps]
print("Bonferroni:", [round(p, 6) for p in bonferroni])
print("BH:", [round(p, 6) for p in bh])
print("reject at 0.05:", sum(p <= 0.05 for p in bonferroni),
sum(p <= 0.05 for p in bh))
print(f"20 independent true nulls, FWER={1 - 0.95**20:.6f}")

Sortie :

Bonferroni: [0.005, 0.06, 0.09, 0.205, 1.0]
BH: [0.005, 0.03, 0.03, 0.05125, 0.2]
reject at 0.05: 1 3
20 independent true nulls, FWER=0.641514

Ajuster les valeurs p n’ajuste pas automatiquement les intervalles. Pour couvrir simultanément les paramètres de la famille, construire chaque intervalle au niveau de confiance 1−α/m1-\alpha/m ; Bonferroni garantit une couverture simultanée d’au moins 1−α1-\alpha. BH contrôle les fausses découvertes : les intervalles ordinaires à 95 % des découvertes n’offrent donc pas une garantie de couverture simultanée.

Sélection des modèles et examens répétés des résultats​

Cawley et Talbot montrent qu’un critère de sélection de modèles calculé sur un échantillon fini peut lui-même être surajusté, ce qui introduit un biais de sélection si les performances sont ensuite rapportées sur les mêmes données. Après avoir comparé quantifications, prompts, réglages de contexte et plusieurs indicateurs, retenir la meilleure configuration et calculer sa valeur p comme si cette paire seule avait été choisie à l’avance omet la sélection.

Lorsque les modèles partagent les mêmes tâches de test, l’estimation de l’incertitude doit préserver les paires de tâches et les éventuels regroupements par projet. Statistiques et probabilités présente les unités d’échantillonnage, les différences de perte par tâche et le bootstrap apparié.

Il faut également distinguer sélection et arrêt. Refaire un test ordinaire après chaque nouveau lot de tâches et s’arrêter dès que p<0.05p<0.05 retire à la valeur p finale sa garantie d’erreur initiale à taille fixe. L’étude de Johari et ses collègues sur le suivi continu explique cet effet et construit des valeurs p toujours valides, ou always-valid, qui permettent un arrêt dépendant des données sous leurs hypothèses statistiques. Recalculer des valeurs p ordinaires ne leur confère pas cette propriété.

Pour l’évaluation des modèles locaux, organiser une comparaison ainsi :

  1. Fixer les configurations, l’indicateur principal, le seuil d’amélioration pratique, la famille de comparaisons et l’objectif de contrôle d’erreur.
  2. Sélectionner les configurations sur les tâches de développement ; évaluer les candidats figés sur de nouvelles tâches de test qui n’ont pas servi à la sélection. En validation croisée imbriquée, placer tout le processus de sélection dans la boucle interne.
  3. Fixer à l’avance la taille de l’échantillon de test. Pour décider en cours d’expérience, employer une méthode séquentielle explicite en conservant ses conditions.
  4. Rapporter ensemble l’unité d’échantillonnage, l’effet estimé, l’intervalle, les valeurs p brutes et ajustées, ainsi que les règles de comparaison et d’arrêt.

L’ajustement pour comparaisons multiples exige des valeurs p initiales valides. Appliquer BH aux gagnants à la fin ne remplace pas le plan de test manquant lorsque les données ont servi à la sélection ou que l’arrêt dépend des résultats.

Explorer les liensOuvrir le réseau