POL 2809 - Méthodes quantitatives d’analyse

Evelyne Brie

Automne 2026

Introduction aux valeurs p en R

Le test d’hypothèse est l’une des composantes centrales de l’analyse statistique. La valeur p représente la probabilité d’obtenir des résultats semblables aux vôtres (ou plus extrêmes) si l’hypothèse nulle est vraie. Dans ce laboratoire, nous allons (1) générer une distribution binomiale aléatoire, (2) tester l’hypothèse nulle, (3) calculer des valeurs critiques et (4) effectuer un test t. Nous terminerons avec (5) un exemple concret en science politique. Les exercices se trouvent à la toute fin du document.

Fonctions pertinentes : rbinom(), pbinom(), binom.test(), qbinom(), t.test()

 

Petit rappel : en R, le symbole <- sert à assigner (c’est-à-dire à stocker) une valeur dans un objet. Par exemple, x <- 5 signifie « mettre la valeur 5 dans l’objet nommé x ».

1. Générer et comprendre nos données

Dans ce laboratoire, nous utilisons une distribution d’essais de cartes de Zener. Ces cartes ont été inventées par Karl Zener au début des années 1930 pour tester l’existence de capacités télépathiques. Lors d’un essai typique, la personne responsable de l’expérience choisit 25 fois l’une des cinq cartes possibles (un cercle, une croix, des vagues, un carré ou une étoile) et demande à une personne participante de deviner quelle carte a été choisie, sans la lui montrer. Autrement dit, on demande à la personne participante d’utiliser ses capacités télépathiques pour deviner la bonne carte.

Voici à quoi ressemblent les cartes de Zener
Voici à quoi ressemblent les cartes de Zener

1.1 Utiliser rbinom()

Comme il y a 5 cartes différentes, la probabilité de deviner correctement une carte lors d’un essai est de 1/5 (soit 0,2). Générons une distribution binomiale aléatoire des bonnes réponses d’une seule personne pour 1000 essais de 25 cartes de Zener.

set.seed(200) # Fixer le seed pour que les résultats soient reproductibles

myData <- rbinom(n=1000, size=25, prob=0.2) # Créer une distribution binomiale aléatoire
 

À noter : set.seed() fixe le point de départ du générateur de nombres aléatoires. Sans cette ligne, vous obtiendriez des résultats différents à chaque exécution du script, et différents de ceux de vos collègues.

1.2 Mesures de tendance centrale et de dispersion

Vérifions maintenant quelques mesures de tendance centrale et de dispersion de myData.

mean(myData) # Quelle est la moyenne?
## [1] 4.978
Mode <- function(x){ # Créer une fonction « Mode() », qui n'existe pas par défaut en R
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

Mode(myData) # Quel est le mode?
## [1] 5
sd(myData) # Quel est l'écart-type?
## [1] 1.926455

En théorie, la moyenne attendue est de 25 × 0,2 = 5 bonnes réponses par essai, avec un écart-type de \(\sqrt{25 \times 0{,}2 \times 0{,}8} = 2\). Nos résultats devraient être très proches de ces valeurs.

1.3 Représenter nos données graphiquement

Représentons les résultats des 1000 essais de 25 cartes. Autrement dit, nous voulons voir combien de bonnes réponses ont été obtenues à chacun des 1000 essais (combien de fois on a deviné 0 carte, 1 carte, etc.).

1.4 Calculer la fonction de masse

Regardons d’abord la distribution de nos données, puis la fonction de masse (Probability Mass Function, ou PMF) de notre distribution binomiale. La fonction de masse associe à chaque résultat possible d’une variable discrète (ici, 0, 1, 2… jusqu’à 25 bonnes réponses) sa probabilité exacte de se produire. La somme de toutes ces probabilités est égale à 1.

# Créer un tableau de la distribution de myData en proportions
x <- table(myData)/length(myData)

x # Afficher ce tableau
## myData
##     0     1     2     3     4     5     6     7     8     9    10    11    12 
## 0.005 0.016 0.069 0.140 0.178 0.216 0.176 0.108 0.054 0.023 0.008 0.004 0.002 
##    13 
## 0.001
# Exemple : proportion des essais où l'on a deviné 2 cartes ou moins
x[1]+x[2]+x[3]
##    0 
## 0.09
# Probabilité THÉORIQUE (pas calculée sur nos données)
# lower.tail=TRUE donne P(X ≤ 2) : la valeur 2 est incluse

pbinom(2, size=25, prob=0.2, lower.tail=TRUE)
## [1] 0.09822522

La fonction pbinom() calcule la probabilité théorique de deviner correctement 2 cartes ou moins sur 25 (environ 9,8 %). Le caractère aléatoire de l’échantillonnage explique pourquoi les résultats de myData diffèrent légèrement de cette valeur théorique.

Pourquoi faire tout cela? Parce qu’avant d’utiliser les valeurs p, il faut comprendre que chaque résultat (même le plus extrême) a une certaine probabilité de se produire par le seul fait du hasard, même si cette probabilité est extrêmement faible.

2. Le test d’hypothèse

Une valeur p représente la probabilité d’observer des résultats semblables aux vôtres (ou plus extrêmes) par le seul fait du hasard. Par exemple, si je vous dis que vous n’aviez qu’environ 4,7 % de chances de deviner correctement 9 cartes ou plus sur 25, et que vous en devinez 9… peut-on conclure que vous avez un superpouvoir?

# Probabilité de deviner 9 cartes ou plus sur 25 par hasard
# Attention : lower.tail=FALSE donne P(X > 8), c'est-à-dire P(X ≥ 9)

pbinom(8, size=25, prob=0.2, lower.tail=FALSE)
## [1] 0.04677424

C’est à vous de décider quel seuil vous convaincrait, mais en science, on considère habituellement qu’une valeur p < 0,05 est suffisante pour rejeter l’hypothèse nulle.

 

Règle de décision : on utilise habituellement un seuil de 0,05.

  • Si p < 0,05 : on rejette H0. Le résultat est statistiquement significatif.
  • Si p ≥ 0,05 : on ne rejette pas H0. On ne peut pas conclure que le résultat est dû à autre chose que le hasard.

2.1 Tester l’hypothèse nulle

Hypothèse nulle (H0) Hypothèse alternative (H1)
Aucune capacité télépathique Capacités télépathiques
Probabilité de succès = 0,2 Probabilité de succès > 0,2

Comme nous vérifions si la personne répondante devine les cartes plus souvent que la probabilité de succès attendue, nous effectuons un test unilatéral (one-sided), avec l’argument alternative = "greater".

sum(myData) # Combien de cartes notre répondant(e) a-t-il ou elle devinées au total?
## [1] 4978
binom.test(4978, 25000, p=0.2, # 4978 succès, 25 000 essais, probabilité de succès sous H0 = 0,2
           alternative = "greater",
           conf.level = 0.95)
## 
##  Exact binomial test
## 
## data:  4978 and 25000
## number of successes = 4978, number of trials = 25000, p-value = 0.6385
## alternative hypothesis: true probability of success is greater than 0.2
## 95 percent confidence interval:
##  0.1949717 1.0000000
## sample estimates:
## probability of success 
##                0.19912

Comment lire ce résultat?

  • Le nombre de succès (number of successes = 4978) sur le nombre d’essais (number of trials = 25000).
  • La proportion estimée (probability of success) : environ 0,199, soit légèrement moins que 0,2.
  • La valeur p (p-value ≈ 0,64) : si la personne n’a aucune capacité télépathique, il y a environ 64 % de chances d’obtenir 4978 bonnes réponses ou plus par hasard.

Conclusion : comme p ≈ 0,64 > 0,05, on ne rejette pas l’hypothèse nulle. Rien n’indique que notre répondant(e) possède des capacités télépathiques.

Prochaine étape : à l’aide de qbinom(), trouvons combien de bonnes réponses il aurait fallu obtenir pour rejeter l’hypothèse nulle.

2.2 Trouver les valeurs critiques

Quelle est la valeur critique associée au 95e centile de ce que je devrais observer? Comme il s’agit d’un test unilatéral, on place la totalité des 5 % de résultats les plus extrêmes du côté droit de la distribution, plutôt que de les séparer en deux. Autrement dit : à partir de quel score obtient-on l’un des 5 % de résultats les plus extrêmes (c’est-à-dire les plus improbables)? Comme un tel score est très peu probable par le seul fait du hasard, on considère que le résultat n’est probablement PAS dû au hasard, mais à un processus générateur de données (PGD) différent. On rejette donc l’hypothèse nulle à ce seuil.

qbinom(p=.95, size=25000, prob=0.2) # Trouver la valeur critique au 95e centile
## [1] 5104
# Vérification : 5104 succès ne devrait PAS être significatif
binom.test(5104, 25000, p=0.2,
           alternative = "greater", # alternative à quoi? À l'hypothèse nulle!
           conf.level = 0.95)
## 
##  Exact binomial test
## 
## data:  5104 and 25000
## number of successes = 5104, number of trials = 25000, p-value = 0.05114
## alternative hypothesis: true probability of success is greater than 0.2
## 95 percent confidence interval:
##  0.1999723 1.0000000
## sample estimates:
## probability of success 
##                0.20416
# Vérification : 5105 succès devrait être significatif
binom.test(5105, 25000, p=0.2,
           alternative = "greater",
           conf.level = 0.95)
## 
##  Exact binomial test
## 
## data:  5105 and 25000
## number of successes = 5105, number of trials = 25000, p-value = 0.04951
## alternative hypothesis: true probability of success is greater than 0.2
## 95 percent confidence interval:
##  0.2000119 1.0000000
## sample estimates:
## probability of success 
##                 0.2042

qbinom() renvoie 5104, mais ce score donne encore p ≈ 0,051 (tout juste au-dessus du seuil). C’est à partir de 5105 bonnes réponses que p ≈ 0,0495 < 0,05.

 

Pourquoi 5105 et non 5104? qbinom() donne le plus petit score pour lequel la probabilité d’obtenir ce score ou moins atteint 95 %. Or, la valeur p de binom.test() est la probabilité d’obtenir ce score ou plus. Comme la distribution binomiale est discrète (on ne peut pas deviner 5104,5 cartes), la première valeur significative est souvent celle qui suit immédiatement la valeur renvoyée par qbinom(). D’où l’importance de vérifier!

 

Dans le graphique ci-dessous, la zone en rouge représente la région de rejet. On l’appelle ainsi parce que les valeurs qui s’y trouvent mènent au rejet de l’hypothèse nulle. Autrement dit : si l’hypothèse nulle est vraie (si la personne n’est pas médium), la probabilité d’obtenir ces résultats n’est que de 5 %. Ainsi, même une personne sans aucun don pourrait parfois deviner 5105 cartes ou plus par pur hasard, mais c’est très peu probable.

 

2.3 Pour aller plus loin : le test t

Imaginons que deux personnes de notre classe acceptent de faire 10 essais de cartes de Zener (chaque essai consiste à deviner 25 cartes). Voici le nombre de bonnes réponses par essai pour l’étudiant(e) A et l’étudiant(e) B.

StudentA <- c(3,5,6,4,3,5,6,5,3,5)
StudentB <- c(6,7,5,8,6,5,4,7,6,6)

mean(StudentA)
## [1] 4.5
mean(StudentB)
## [1] 6

Comment savoir si la différence entre les résultats des deux personnes est statistiquement significative? On peut effectuer un test t, qui associe une valeur p à la différence entre les moyennes des deux séries de résultats. Il nous indique la probabilité d’observer une différence aussi grande (ou plus) entre les deux personnes par le seul fait du hasard.

Hypothèse nulle (H0) Hypothèse alternative (H1)
Aucune différence entre les deux personnes Différence entre les deux personnes
Moyennes égales Moyennes différentes
# Test t bilatéral
t.test(StudentA, StudentB, alternative = "two.sided")
## 
##  Welch Two Sample t-test
## 
## data:  StudentA and StudentB
## t = -2.8749, df = 17.993, p-value = 0.01008
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -2.5961871 -0.4038129
## sample estimates:
## mean of x mean of y 
##       4.5       6.0

Conclusion : la personne A obtient en moyenne 4,5 bonnes réponses par essai, contre 6,0 pour la personne B. La statistique t (-2,87) est négative parce que R calcule A moins B. La valeur p (≈ 0,010) est inférieure à 0,05 : on rejette l’hypothèse nulle. La différence entre les deux personnes est statistiquement significative.

 

Attention : un résultat significatif ne veut pas dire que la personne B est médium! Il signifie seulement que les deux personnes ne semblent pas avoir la même moyenne. Notez d’ailleurs qu’une moyenne de 6 sur 25 reste proche de ce que le hasard seul produirait (5). La significativité statistique répond à une question précise; c’est à vous d’interpréter ce qu’elle veut dire.

3. Exemple concret en science politique

3.1 La question

Imaginons qu’un mouvement citoyen affirme qu’une majorité de la population québécoise appuie une réforme du mode de scrutin vers un système proportionnel. Pour le vérifier, une maison de sondage (fictive) interroge un échantillon aléatoire de 800 personnes. Parmi elles, 432 se disent favorables à la réforme, soit 54 %.

54 %, c’est plus que 50 %… mais avec un échantillon de 800 personnes, cet écart pourrait-il être dû au hasard de l’échantillonnage? C’est exactement la même logique que les cartes de Zener : on se demande si un résultat observé est suffisamment éloigné de ce que l’on attendrait sous l’hypothèse nulle.

Hypothèse nulle (H0) Hypothèse alternative (H1)
Pas de majorité en faveur de la réforme Majorité en faveur de la réforme
Proportion d’appui = 0,5 Proportion d’appui > 0,5

Comme l’affirmation porte sur une majorité (plus de 50 %), on effectue un test unilatéral.

3.2 Le test

binom.test(432, 800, p=0.5, # 432 personnes favorables sur 800, H0 : 50 %
           alternative = "greater",
           conf.level = 0.95)
## 
##  Exact binomial test
## 
## data:  432 and 800
## number of successes = 432, number of trials = 800, p-value = 0.01293
## alternative hypothesis: true probability of success is greater than 0.5
## 95 percent confidence interval:
##  0.5103165 1.0000000
## sample estimates:
## probability of success 
##                   0.54

Conclusion : la valeur p (≈ 0,013) est inférieure à 0,05 : on rejette l’hypothèse nulle. Si l’appui réel était de 50 % (ou moins), il serait très peu probable (environ 1,3 % de chances) d’obtenir 432 personnes favorables ou plus dans un échantillon de 800. L’intervalle de confiance (environ 0,51 à 1) ne contient pas 0,5 : les données appuient l’idée qu’une majorité de la population est favorable à la réforme.

3.3 À partir de combien de personnes favorables?

Comme à la section 2.2, cherchons le nombre de personnes favorables nécessaire pour rejeter l’hypothèse nulle.

qbinom(p=.95, size=800, prob=0.5) # Valeur critique au 95e centile
## [1] 423
# Vérification : 423 personnes favorables ne devrait PAS être significatif
binom.test(423, 800, p=0.5, alternative = "greater")$p.value
## [1] 0.05577733
# Vérification : 424 personnes favorables devrait être significatif
binom.test(424, 800, p=0.5, alternative = "greater")$p.value
## [1] 0.04825579

Il faut au moins 424 personnes favorables sur 800 (53 %) pour conclure, au seuil de 5 %, qu’il existe une majorité. Un sondage indiquant 52 % d’appui avec ce même échantillon ne permettrait donc pas d’affirmer qu’une majorité appuie la réforme.

 

Lien avec l’actualité : c’est pour cette raison que les maisons de sondage publient une marge d’erreur. Lorsqu’un média annonce qu’un parti « devance » un autre de deux points, la différence n’est souvent pas statistiquement significative. Notez aussi que la valeur p ne dit rien de la qualité de l’échantillon : un sondage mal construit (par exemple, auprès des seules personnes abonnées à la page Facebook du mouvement) peut produire un résultat significatif… et faux.

 

4. Exercices

Les solutions sont cachées par défaut : cliquez sur le bouton « Voir la solution » seulement après avoir essayé par vous-même!

 

Exercice 1

Testez l’hypothèse nulle selon laquelle une pièce de monnaie est équilibrée si vous obtenez « face » 550 fois sur 1000 lancers.

Indice : comme la pièce pourrait être déséquilibrée dans un sens comme dans l’autre, utilisez l’argument alternative = "two.sided" dans binom.test().

Voir la solution
# Solution
binom.test(550, 1000, p=0.5,
           alternative = "two.sided",
           conf.level = 0.95)
## 
##  Exact binomial test
## 
## data:  550 and 1000
## number of successes = 550, number of trials = 1000, p-value = 0.001731
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
##  0.5185565 0.5811483
## sample estimates:
## probability of success 
##                   0.55
# La valeur p (environ 0,0017) est inférieure à 0,05 et l'intervalle de
# confiance (environ 0,519 à 0,581) ne contient pas 0,5 : on rejette
# l'hypothèse nulle. La pièce ne semble pas équilibrée.
 

Exercice 2

Reprenons l’exemple de la section 3. Une deuxième maison de sondage interroge elle aussi 800 personnes et en trouve 412 favorables à la réforme (51,5 %). Peut-on conclure qu’une majorité de la population appuie la réforme? Votre conclusion concorde-t-elle avec la valeur critique trouvée à la section 3.3?

Indice : la logique est la même qu’à la section 3.2.

Voir la solution
# Solution
binom.test(412, 800, p=0.5,
           alternative = "greater",
           conf.level = 0.95)
## 
##  Exact binomial test
## 
## data:  412 and 800
## number of successes = 412, number of trials = 800, p-value = 0.2081
## alternative hypothesis: true probability of success is greater than 0.5
## 95 percent confidence interval:
##  0.4853051 1.0000000
## sample estimates:
## probability of success 
##                  0.515
# La valeur p (environ 0,21) est supérieure à 0,05 : on ne rejette pas
# l'hypothèse nulle. On ne peut pas conclure qu'une majorité appuie la
# réforme. C'est cohérent avec la section 3.3 : 412 est inférieur à 424,
# le nombre minimal de personnes favorables nécessaire.
 

Exercice 3

Sans utiliser R, répondez aux questions suivantes.

(a) Un test donne p = 0,03. Rejette-t-on l’hypothèse nulle au seuil de 0,05? Et si p = 0,08?

(b) Un collègue obtient p = 0,64 au test de la section 2.1 et conclut que « la télépathie n’existe pas ». Sa conclusion est-elle correcte?

Voir la solution
# Solution (a)
# p = 0,03 : on rejette H0 (0,03 < 0,05), le résultat est significatif.
# p = 0,08 : on ne rejette pas H0 (0,08 > 0,05).

# Solution (b)
# Non. Ne pas rejeter H0 ne prouve pas que H0 est vraie. On peut seulement
# dire que les données de CETTE personne ne fournissent pas de preuve de
# capacités télépathiques.