Testez une moyenne, une variance ou une proportion
Au chapitre précédent, l’écart-type de la machine était connu. C’est rarement le cas : en pratique, on l’estime sur les mêmes données. Et l’on ne teste pas que des moyennes : la régularité d’une production (sa variance) ou une proportion (un taux de défaut, un taux de clic) comptent autant.
Ce chapitre passe en revue les tests usuels sur un seul échantillon. Bonne nouvelle : la démarche en six étapes ne change pas. Seuls la statistique de test et sa loi changent. Nous retrouvons les 10 paquets de café pesés au chapitre 4 : g et g.
Tester une moyenne quand l’écart-type est inconnu : le test de Student
Section intitulée « Tester une moyenne quand l’écart-type est inconnu : le test de Student »On suppose les masses i.i.d. de loi , avec inconnu. On veut savoir si la machine est bien centrée : contre .
Par le théorème de Fisher (chapitre 4), en remplaçant par :
Les régions critiques au niveau se lisent sur les quantiles de Student :
| Alternative | On rejette si |
|---|---|
cafe <- c(251.3, 248.7, 250.9, 252.4, 249.5, 250.2, 247.8, 251.7, 250.6, 249.9)t.test(cafe, mu = 250) # bilatéral : t = 0.68, p = 0.51t.test(cafe, mu = 250, alternative = "less") # unilatéral H1 : m < 250from scipy import statscafe = [251.3, 248.7, 250.9, 252.4, 249.5, 250.2, 247.8, 251.7, 250.6, 249.9]print(stats.ttest_1samp(cafe, popmean=250)) # statistic 0.68, pvalue 0.51print(stats.ttest_1samp(cafe, popmean=250, alternative="less"))Tester une variance : le test du chi-deux
Section intitulée « Tester une variance : le test du chi-deux »La torréfaction exige une machine régulière : un écart-type d’au plus 1 g. On teste contre .
La moyenne étant inconnue, on utilise encore le théorème de Fisher :
Pour l’alternative , on rejette si ; pour , si ; en bilatéral, si sort de .
Si la moyenne est connue, on n’a rien à estimer pour la centrer : on utilise et , avec degrés de liberté au lieu de .
Les tests asymptotiques : quand l’échantillon est grand
Section intitulée « Les tests asymptotiques : quand l’échantillon est grand »Et si les données ne sont pas gaussiennes ? Pour de grands échantillons, le théorème central limite vient à la rescousse.
Une moyenne, loi quelconque
Section intitulée « Une moyenne, loi quelconque »Si les sont i.i.d. de loi quelconque, de variance finie, alors sous :
C’est la même statistique que celle de Student, mais on la compare aux quantiles de la loi normale. En pratique, on considère l’approximation correcte à partir de environ (plus si la loi est très dissymétrique).
Une proportion
Section intitulée « Une proportion »Soit i.i.d. de Bernoulli de paramètre (1 si l’étudiant vient à vélo). L’estimateur est la proportion observée . Sous , le TCL donne
Remarquez que la variance sous la racine est calculée avec , la valeur de : sous l’hypothèse nulle, on la connaît. On demande en général et pour que l’approximation soit bonne.
prop.test(136, 400, p = 0.30, alternative = "greater", correct = FALSE) # X-squared = 1.75^2binom.test(136, 400, p = 0.30, alternative = "greater") # test exact, sans TCLimport numpy as npfrom scipy import stats
z0 = np.sqrt(400) * (0.34 - 0.30) / np.sqrt(0.30 * 0.70)print(z0, stats.norm.sf(z0)) # 1.75 et 0.040print(stats.binomtest(136, 400, p=0.30, alternative="greater")) # version exacteRécapitulatif des tests sur un échantillon
Section intitulée « Récapitulatif des tests sur un échantillon »| Paramètre | Conditions | Statistique sous | Loi |
|---|---|---|---|
| Moyenne | gaussien, connu | exacte | |
| Moyenne | gaussien, inconnu | exacte | |
| Moyenne | loi quelconque, grand | approchée | |
| Proportion | grand | approchée | |
| Variance | gaussien, connue | exacte | |
| Variance | gaussien, inconnue | exacte |
Complément : le test d’adéquation du chi-deux
Section intitulée « Complément : le test d’adéquation du chi-deux »Nos supports de cours s’arrêtent à la loi du chi-deux ; ses deux tests les plus célèbres sont un complément standard, que nous présentons ici et au chapitre suivant.
Le test de proportion compare une fréquence à une valeur théorique. Le test d’adéquation du chi-deux en compare plusieurs à la fois. On répartit les observations en classes ; est l’effectif observé de la classe , et l’effectif attendu sous (où est la probabilité de la classe selon la loi testée). La statistique est
où est le nombre de paramètres de la loi estimés sur les données ( si la loi est entièrement spécifiée). On rejette si : le test est toujours unilatéral à droite, car seuls les grands écarts sont suspects.
Pourquoi une loi du chi-deux ? Chaque terme ressemble au carré d’un écart centré réduit, qui est approximativement normal pour de grands effectifs. On retrouve une somme de carrés de normales, comme dans la définition du chapitre 4. La contrainte fait perdre un degré de liberté, et chaque paramètre estimé en fait perdre un autre.
chisq.test(c(15, 22, 18, 26, 17, 22), p = rep(1/6, 6)) # X-squared = 4.1, df = 5from scipy import statsprint(stats.chisquare([15, 22, 18, 26, 17, 22])) # statistic 4.1, pvalue 0.54En résumé
Section intitulée « En résumé »- Student : moyenne d’un échantillon gaussien, inconnu, .
- Chi-deux sur une variance : , exact sous normalité mais très sensible à cette hypothèse.
- Tests asymptotiques : pour grand, la même statistique qu’en Student, comparée à ; pour une proportion, la variance vient de .
- Un test unilatéral et un intervalle bilatéral de même niveau peuvent donner des conclusions différentes : ils ne répondent pas à la même question.
- Adéquation du chi-deux (complément) : comparé à , avec des effectifs attendus d’au moins 5.
Exercices
Section intitulée « Exercices »Exercice · Un test de Student à la main
facileUn fournisseur garantit une teneur moyenne en sucre de 12 g pour 100 mL. Sur 16 bouteilles, supposées gaussiennes, on mesure g et g. Testez au niveau 5 % si la teneur moyenne diffère de 12 g ().
Voir la solution
contre . Sous , .
. Comme , on conserve au niveau 5 %. L’écart de 0,6 g n’est pas significatif avec 16 bouteilles (la p-valeur vaut environ 0,064). Cela ne prouve pas que la teneur vaut 12 g : l’échantillon est peut-être simplement trop petit.
En code
import numpy as npfrom scipy import stats
n, moyenne, s, m0 = 16, 12.6, 1.2, 12t0 = np.sqrt(n) * (moyenne - m0) / sseuil = stats.t.ppf(0.975, df=n - 1)print(t0, seuil) # 2.0 < 2.131 : on conserve H0print(2 * stats.t.sf(abs(t0), df=n - 1)) # p-valeur : 0.064n <- 16; moyenne <- 12.6; s <- 1.2; m0 <- 12t0 <- sqrt(n) * (moyenne - m0) / st0; qt(0.975, df = n - 1) # 2.0 < 2.131 : on conserve H02 * pt(-abs(t0), df = n - 1) # p-valeur : 0.064Exercice · Taux de défaut d'une chaîne
moyenUn contrat impose un taux de pièces défectueuses d’au plus 2 %. Sur 800 pièces contrôlées, on en trouve 24 défectueuses. Le contrat est-il respecté ? Testez au niveau 5 %, en vérifiant les conditions d’application.
Voir la solution
. On veut montrer une violation du contrat : contre .
Conditions : et , l’approximation normale est acceptable.
Comme , on rejette : le taux de défaut dépasse significativement 2 % (p-valeur ).
En code
import numpy as npfrom scipy import stats
n, defauts, p0 = 800, 24, 0.02print(n * p0, n * (1 - p0)) # 16 et 784 : conditions rempliesp_hat = defauts / nt0 = np.sqrt(n) * (p_hat - p0) / np.sqrt(p0 * (1 - p0))print(t0, stats.norm.sf(t0)) # 2.02 et p = 0.022 : on rejette H0print(stats.binomtest(defauts, n, p0, alternative="greater").pvalue) # test exact : 0.035n <- 800; defauts <- 24; p0 <- 0.02c(n * p0, n * (1 - p0)) # 16 et 784 : conditions rempliesp_hat <- defauts / nt0 <- sqrt(n) * (p_hat - p0) / sqrt(p0 * (1 - p0))t0; 1 - pnorm(t0) # 2.02 et p = 0.022 : on rejette H0prop.test(defauts, n, p = p0, alternative = "greater", correct = FALSE)$p.value # 0.022binom.test(defauts, n, p = p0, alternative = "greater")$p.value # test exact : 0.035Exercice · Adéquation à une loi de Poisson
difficileOn compte le nombre d’accidents par semaine sur un carrefour pendant 100 semaines : 0 accident (40 semaines), 1 (35), 2 (18), 3 ou plus (7). On veut tester si le nombre d’accidents suit une loi de Poisson. Le paramètre, estimé par maximum de vraisemblance sur les relevés détaillés, vaut . Les probabilités de Poisson correspondantes sont 0,387 ; 0,367 ; 0,175 et 0,071 (la dernière regroupe « 3 ou plus »). Réalisez le test au niveau 5 %.
Voir la solution
Effectifs attendus : , soit environ 38,67 ; 36,74 ; 17,45 et 7,13, tous supérieurs à 5.
Degrés de liberté : , car on a estimé un paramètre (). Le seuil vaut . On conserve : le modèle de Poisson est compatible avec les données.
En code
import numpy as npfrom scipy import stats
observe = np.array([40, 35, 18, 7]) # 0, 1, 2, 3 ou plustheta = 0.95p = stats.poisson.pmf([0, 1, 2], theta)p = np.append(p, 1 - p.sum()) # P(X >= 3)attendu = 100 * pprint(attendu.round(2)) # [38.67 36.74 17.45 7.13]
# ddof=1 : un paramètre estimé, donc 4 - 1 - 1 = 2 degrés de libertéD, p_valeur = stats.chisquare(observe, attendu, ddof=1)print(D, p_valeur, stats.chi2.ppf(0.95, 2)) # 0.147 0.93 5.99 : on conserve H0observe <- c(40, 35, 18, 7) # 0, 1, 2, 3 ou plustheta <- 0.95p <- dpois(0:2, theta)p <- c(p, 1 - sum(p)) # P(X >= 3)attendu <- 100 * pround(attendu, 2) # 38.67 36.74 17.45 7.13
D <- sum((observe - attendu)^2 / attendu)ddl <- 4 - 1 - 1 # un paramètre estiméD; 1 - pchisq(D, ddl); qchisq(0.95, ddl) # 0.147 0.93 5.99 : on conserve H0