Section 4.9 – Travaux Pratiques : Tests de Conformité

Auteur·rice

HAMLIL Mohamed

Date de publication

31 décembre 2025

Section 4.9 – Travaux Pratiques

Vue d’ensemble

Ce notebook présente des exercices pratiques sur les tests de conformité : tester si une observation ou un paramètre est conforme à une valeur de référence.

Objectifs pédagogiques :

  • Comprendre la structure générale d’un test statistique
  • Maîtriser les tests sur une seule population (moyenne, variance, proportion)
  • Tester des corrélations et interpréter les p-valeurs
  • Appliquer les tests dans R et interpréter les résultats

Concepts clés :

  • Hypothèse nulle \(H_0\) : hypothèse à tester
  • Hypothèse alternative \(H_1\) : ce qu’on affirme si \(H_0\) est rejetée
  • P-valeur : probabilité d’observer un résultat aussi extrême sous \(H_0\)
  • Niveau de risque \(\alpha\) : seuil de décision (ex: 5%)

4.9.1 Principes des Tests Statistiques

Structure générale d’un test

Un test statistique répond à la question : “Mes données sont-elles compatibles avec l’hypothèse H₀ ?

Étapes :

  1. Formulation : Énoncer H₀ (hypothèse nulle) et H₁ (hypothèse alternative)
  2. Statistique de test : Calculer une statistique à partir des données
  3. P-valeur : Calculer la probabilité (sous H₀) d’observer une stat aussi extrême
  4. Décision :
    • Si p-valeur < \(\alpha\) : rejeter H₀ (résultat significatif)
    • Si p-valeur \(\ge \alpha\) : ne pas rejeter H₀ (pas de preuve contre H₀)

Interprétation cruciale : Ne pas rejeter H₀ \(\neq\) Accepter H₀

Tests présentés

Dans ce notebook, nous testons l’hypothèse que un paramètre d’une population est égal à une valeur connue \(\theta_0\) :

Paramètre Test Fonction R Hypothèses
Moyenne \(\mu\) t-test Student t.test() Données ~ \(N(\mu,\sigma^2)\)
Variance \(\sigma^2\) Chi-deux var.test() ou sigma2.test() Données ~ \(N(\mu,\sigma^2)\)
Proportion \(p\) Binomial/Proportion prop.test() \(n\) grand ou binom.test()
Corrélation \(\rho\) Test de Pearson cor.test() Bivariée normale

4.9.3 Comparaison de la Moyenne à une Valeur de Référence

Contexte et Hypothèses

Question : La moyenne d’une population est-elle égale à une valeur de référence \(\mu_0\) ?

Hypothèses :

  • H₀ : \(\mu = \mu_0\) (la moyenne population égale la référence)
  • H₁ : \(\mu \neq \mu_0\) (la moyenne diffère de la référence) [bilatéral]
  • Ou H₁ : \(\mu > \mu_0\) ou \(\mu < \mu_0\) [unilatéral]

Test à utiliser : t-test de Student (si \(\sigma^2\) inconnue)

Statistique : \[t = \frac{\bar{x} - \mu_0}{s/\sqrt{n}} \sim t_{n-1} \quad \text{sous } H_0\]

Interprétation :

  • Si \(|t|\) grande \(\implies\) p-valeur petite \(\implies\) rejeter H₀
  • Si \(|t|\) petite \(\implies\) p-valeur grande \(\implies\) garder H₀
Code
# ========= T-TEST: Comparer une moyenne à μ₀ =========

cat("\n=== T-Test de Student ===\n\n")

=== T-Test de Student ===
Code
# Exemple: mesures d'une variable quantitative
x <- c(0.62, 0.55, 0.58, 0.63, 0.60, 0.59, 0.57, 0.61)

# Valeur de référence
mu0 <- 0.58

cat("Données observées:\n")
Données observées:
Code
print(x)
[1] 0.62 0.55 0.58 0.63 0.60 0.59 0.57 0.61
Code
cat("\nStatistiques descriptives:\n")

Statistiques descriptives:
Code
cat("  Moyenne:    ", round(mean(x), 4), "\n")
  Moyenne:     0.5938 
Code
cat("  Écart-type: ", round(sd(x), 4), "\n")
  Écart-type:  0.0267 
Code
cat("  Taille:     ", length(x), "\n")
  Taille:      8 
Code
cat("  Référence μ₀:", mu0, "\n\n")
  Référence μ₀: 0.58 
Code
# === TEST UNILATÉRAL: H1 est μ > μ₀ ===
cat("=== Hypothèses ===\n")
=== Hypothèses ===
Code
cat("  H₀: μ = ", mu0, "(la moyenne égale la référence)\n")
  H₀: μ =  0.58 (la moyenne égale la référence)
Code
cat("  H₁: μ > ", mu0, "(la moyenne est supérieure)\n\n")
  H₁: μ >  0.58 (la moyenne est supérieure)
Code
# Effectuer le test
resultat_test <- t.test(x, mu = mu0, alternative = "greater")

# Afficher les résultats
cat("=== Résultats du Test ===\n")
=== Résultats du Test ===
Code
cat("  Statistique t:", round(resultat_test$statistic, 4), "\n")
  Statistique t: 1.457 
Code
cat("  Degrés de liberté:", resultat_test$parameter, "\n")
  Degrés de liberté: 7 
Code
cat("  P-valeur:", round(resultat_test$p.value, 4), "\n\n")
  P-valeur: 0.0942 
Code
# Décision au niveau α = 5%
alpha <- 0.05
if (resultat_test$p.value < alpha) {
  decision <- "REJETER H₀"
  interpretation <- "La moyenne est SIGNIFICATIVEMENT supérieure à la référence"
} else {
  decision <- "NE PAS REJETER H₀"
  interpretation <- "Pas de preuve que la moyenne dépasse la référence"
}

cat("=== Décision (α = 5%) ===\n")
=== Décision (α = 5%) ===
Code
cat("  Décision:      ", decision, "\n")
  Décision:       NE PAS REJETER H₀ 
Code
cat("  Interprétation:", interpretation, "\n")
  Interprétation: Pas de preuve que la moyenne dépasse la référence 

Variante : Test Bilatéral

Pour tester H₁ : (la moyenne diffère, sans direction), utiliser alternative = "two.sided" (par défaut).

t.test(x, mu = mu0, alternative = "two.sided")

Cette variante test-elle une déviation dans n’importe quelle direction (haute ou basse).

Application Pratique

Dans le polycopié, on peut filtrer les données selon un critère (ex: IMC > 30) puis appliquer le test :

IMC <- poids / ((taille/100)^2)
mesure_IMC_haut <- mesure[IMC > 30]
t.test(mesure_IMC_haut, mu = 0.58, alternative = "greater")

4.9.4 Comparaison de la Variance à une Valeur de Référence

Contexte et Hypothèses

Question : La variance d’une population est-elle égale à ?

Hypothèses :

  • H₀ : (la variance égale la référence)
  • H₁ : (la variance diffère) [bilatéral, par défaut]

Test à utiliser : Test du Chi-deux

Statistique :

Fonctions R disponibles :

  • var.test() : teste l’égalité de deux variances
  • sigma2.test() : teste une variance contre une valeur (si le package est chargé)
Code
# ========= TEST CHI-DEUX: Comparer une variance à σ₀² =========

cat("\n=== Test de Variance (Chi-Deux) ===\n\n")

=== Test de Variance (Chi-Deux) ===
Code
# Exemple: poids de boîtes de conserve
poids <- c(165.1, 171.5, 168.1, 165.6, 166.8, 170.0, 168.8, 171.1, 168.8, 173.6,
           163.5, 169.9, 165.4, 174.4, 171.8, 166.0, 174.6, 174.5, 166.4, 173.8)

# Variance de référence
sigma2_0 <- 10

cat("Données observées: ", length(poids), "poids de boîtes\n")
Données observées:  20 poids de boîtes
Code
cat("Statistiques descriptives:\n")
Statistiques descriptives:
Code
cat("  Moyenne:   ", round(mean(poids), 2), "g\n")
  Moyenne:    169.49 g
Code
cat("  Variance:  ", round(var(poids), 4), "\n")
  Variance:   12.7392 
Code
cat("  Écart-type:", round(sd(poids), 4), "g\n")
  Écart-type: 3.5692 g
Code
cat("  Référence σ₀²:", sigma2_0, "\n\n")
  Référence σ₀²: 10 
Code
# === TEST CHI-DEUX MANUEL ===
cat("=== Hypothèses ===\n")
=== Hypothèses ===
Code
cat("  H₀: σ² = ", sigma2_0, "(variance égale la référence)\n")
  H₀: σ² =  10 (variance égale la référence)
Code
cat("  H₁: σ² ≠ ", sigma2_0, "(variance diffère) [bilatéral]\n\n")
  H₁: σ² ≠  10 (variance diffère) [bilatéral]
Code
# Calculer la statistique
n <- length(poids)
df_lib <- n - 1  # Degrés de liberté
chi2_obs <- df_lib * var(poids) / sigma2_0

# Calculer la p-valeur bilatérale
p_val_inf <- pchisq(chi2_obs, df = df_lib)  # P(χ² < χ²_obs)
p_val_sup <- 1 - p_val_inf                   # P(χ² > χ²_obs)
p_val_bilat <- 2 * min(p_val_inf, p_val_sup)  # Bilatéral

cat("=== Résultats du Test ===\n")
=== Résultats du Test ===
Code
cat("  Statistique χ²:", round(chi2_obs, 4), "\n")
  Statistique χ²: 24.2046 
Code
cat("  Degrés de liberté:", df_lib, "\n")
  Degrés de liberté: 19 
Code
cat("  P-valeur (bilatérale):", round(p_val_bilat, 4), "\n\n")
  P-valeur (bilatérale): 0.3768 
Code
# Décision au niveau α = 5%
alpha <- 0.05
if (p_val_bilat < alpha) {
  decision <- "REJETER H₀"
  interpretation <- "La variance EST SIGNIFICATIVEMENT différente de la référence"
} else {
  decision <- "NE PAS REJETER H₀"
  interpretation <- "Pas de preuve que la variance diffère de la référence"
}

cat("=== Décision (α = 5%) ===\n")
=== Décision (α = 5%) ===
Code
cat("  Décision:      ", decision, "\n")
  Décision:       NE PAS REJETER H₀ 
Code
cat("  Interprétation:", interpretation, "\n")
  Interprétation: Pas de preuve que la variance diffère de la référence 

Il existe des fonctions dédiées telles que sigma2.test() du package sigma2tools. Si le package est installé, on peut appeler :

# install.packages("sigma2tools")
library(sigma2tools)
sigma2.test(poids, var0 = 10)

Ce test retourne directement la statistique de test, les degrés de liberté et la p‑valeur.

Code
# Note : Ce bloc est désactivé (eval: false) car il dépend d'un fichier local "TP3/..."
# Si vous avez le fichier, changez en eval: true

# Load sigma2.test function from the local file
source("TP3/post-199979-sigma2.test.R")

# Example usage with the poids data from above
sigma2.test(poids, var0 = 10)

4.9.5 Comparaison d’une Proportion à une Valeur de Référence

Contexte et Hypothèses

Question : La proportion de succès dans la population est-elle égale à ?

Contexte typique : On observe X succès sur n essais de Bernoulli. Est-ce compatible avec ?

Hypothèses :

  • H₀ : (la proportion égale la référence)
  • H₁ : (la proportion diffère)

Tests à utiliser :

  • prop.test() : approximation normale (grand n, et )
  • binom.test() : test exact (petit n)

Statistiques :

  • Approx. normale : sous H₀
  • Exacte (Binomiale) : calcul exact des probabilités
Code
# ========= TEST DE PROPORTION =========

cat("\n=== Test de Proportion ===\n\n")

=== Test de Proportion ===
Code
# Exemple: épidémiologie
# Nombre de cas observés et taille de l'échantillon
x <- 10   # Nombre de succès (cas)
n <- 147  # Taille totale
p0 <- 0.1 # Proportion théorique (10%)

cat("Contexte: Infection chez femmes ≤ 25 ans\n")
Contexte: Infection chez femmes ≤ 25 ans
Code
cat("  Cas observés (x):", x, "\n")
  Cas observés (x): 10 
Code
cat("  Taille (n):     ", n, "\n")
  Taille (n):      147 
Code
cat("  Proportion observée:", round(x/n, 4), "\n")
  Proportion observée: 0.068 
Code
cat("  Proportion référence (p₀):", p0, "\n\n")
  Proportion référence (p₀): 0.1 
Code
# === TEST: H1 est p < p₀ (unilatéral inférieur) ===
cat("=== Hypothèses ===\n")
=== Hypothèses ===
Code
cat("  H₀: p = ", p0, "(la proportion égale la référence)\n")
  H₀: p =  0.1 (la proportion égale la référence)
Code
cat("  H₁: p < ", p0, "(la proportion est INFÉRIEURE) [unilatéral]\n\n")
  H₁: p <  0.1 (la proportion est INFÉRIEURE) [unilatéral]
Code
# Effectuer le test
test_prop <- prop.test(x, n, p = p0, alternative = "less", correct = FALSE)

cat("=== Résultats du Test ===\n")
=== Résultats du Test ===
Code
cat("  Statistique χ²:", round(test_prop$statistic, 4), "\n")
  Statistique χ²: 1.6697 
Code
cat("  P-valeur:     ", round(test_prop$p.value, 4), "\n")
  P-valeur:      0.0982 
Code
cat("  IC 95%:        [", round(test_prop$conf.int[1], 4), 
    ";", round(test_prop$conf.int[2], 4), "]\n\n")
  IC 95%:        [ 0 ; 0.1106 ]
Code
# Décision au niveau α = 5%
alpha <- 0.05
if (test_prop$p.value < alpha) {
  decision <- "REJETER H₀"
  interpretation <- "La proportion EST SIGNIFICATIVEMENT inférieure à 10%"
} else {
  decision <- "NE PAS REJETER H₀"
  interpretation <- "Pas de preuve que la proportion soit < 10%"
}

cat("=== Décision (α = 5%) ===\n")
=== Décision (α = 5%) ===
Code
cat("  Décision:      ", decision, "\n")
  Décision:       NE PAS REJETER H₀ 
Code
cat("  Interprétation:", interpretation, "\n")
  Interprétation: Pas de preuve que la proportion soit < 10% 

Ici, correct = FALSE supprime la correction de continuité (cas des grands échantillons). Pour les petits échantillons, on peut utiliser binom.test() qui calcule une p‑valeur exacte basée sur la loi binomiale.


4.9.6 Test d’un Coefficient de Corrélation

Contexte et Hypothèses

Question : Existe-t-il une corrélation linéaire significative entre deux variables X et Y ?

Hypothèses :

  • H₀ : (pas de corrélation)
  • H₁ : (corrélation existe) [bilatéral]

Test à utiliser : Test de corrélation de Pearson

Statistique :

où est le coefficient de corrélation empirique.

Interprétation :

  • Si grand r loin de 0 corrélation significative
  • Si petit r proche de 0 pas de corrélation significative
Code
# ========= TEST DE CORRÉLATION =========

cat("\n=== Test de Corrélation de Pearson ===\n\n")

=== Test de Corrélation de Pearson ===
Code
# Générer deux variables corrélées
set.seed(42)
n_obs <- 30
X <- rnorm(n_obs)
Y <- 0.7 * X + rnorm(n_obs, sd = 0.5)  # Y dépend de X

cat("Données: ", n_obs, "paires (X, Y)\n")
Données:  30 paires (X, Y)
Code
cat("Corrélation simulée forte (Y = 0.7*X + bruit)\n\n")
Corrélation simulée forte (Y = 0.7*X + bruit)
Code
# Calculer la corrélation empirique
r_obs <- cor(X, Y)

cat("=== Hypothèses ===\n")
=== Hypothèses ===
Code
cat("  H₀: ρ = 0 (pas de corrélation linéaire)\n")
  H₀: ρ = 0 (pas de corrélation linéaire)
Code
cat("  H₁: ρ ≠ 0 (corrélation existe) [bilatéral]\n\n")
  H₁: ρ ≠ 0 (corrélation existe) [bilatéral]
Code
# Effectuer le test
test_cor <- cor.test(X, Y, alternative = "two.sided")

cat("=== Résultats du Test ===\n")
=== Résultats du Test ===
Code
cat("  Coefficient r (Pearson):", round(r_obs, 4), "\n")
  Coefficient r (Pearson): 0.8322 
Code
cat("  Statistique t:          ", round(test_cor$statistic, 4), "\n")
  Statistique t:           7.9417 
Code
cat("  Degrés de liberté:      ", test_cor$parameter, "\n")
  Degrés de liberté:       28 
Code
cat("  P-valeur:               ", round(test_cor$p.value, 6), "\n")
  P-valeur:                0 
Code
cat("  IC 95%:                 [", round(test_cor$conf.int[1], 4),
    ";", round(test_cor$conf.int[2], 4), "]\n\n")
  IC 95%:                 [ 0.674 ; 0.9174 ]
Code
# Décision au niveau α = 5%
alpha <- 0.05
if (test_cor$p.value < alpha) {
  decision <- "REJETER H₀"
  interpretation <- paste("Corrélation SIGNIFICATIVE (r =", round(r_obs, 4), ")")
} else {
  decision <- "NE PAS REJETER H₀"
  interpretation <- "Pas de preuve de corrélation linéaire"
}

cat("=== Décision (α = 5%) ===\n")
=== Décision (α = 5%) ===
Code
cat("  Décision:      ", decision, "\n")
  Décision:       REJETER H₀ 
Code
cat("  Interprétation:", interpretation, "\n\n")
  Interprétation: Corrélation SIGNIFICATIVE (r = 0.8322 ) 
Code
# Visualiser la corrélation
plot(X, Y, main = "Nuage de Points avec Corrélation",
     xlab = "X", ylab = "Y", pch = 19, col = "blue")
abline(lm(Y ~ X), col = "red", lwd = 2)  # Droite de régression
legend("topleft", legend = paste("r =", round(r_obs, 4)),
       col = "red", lwd = 2)

Si on souhaite tester un coefficient différent de 0, on peut utiliser la transformation de Fisher (fonctions disponibles dans certains packages comme LeLogicielR). Dans de nombreux cas pratiques, la fonction cor.test() suffit.


📌 Résumé et Points Clés

Fonctions R Utilisées

Test Fonction Syntaxe
Moyenne t.test() t.test(x, mu = μ0, alternative = "...")
Variance var.test() Compare deux variances
Proportion prop.test() prop.test(x, n, p = p0, alternative = "...")
Corrélation cor.test() cor.test(X, Y, alternative = "two.sided")

Interprétation de la P-valeur

  • P-valeur < 0.05 : Résultat significatif au niveau 5% Rejeter H₀
  • P-valeur 0.05 : Résultat non significatif Ne pas rejeter H₀
  • P-valeur = Probabilité (sous H₀) d’observer un résultat aussi extrême

Bonnes Pratiques

  • Vérifier les hypothèses du test avant de l’appliquer
  • Choisir la direction de l’alternative avant de voir les données (unilatéral vs. bilatéral)
  • Reporter aussi l’intervalle de confiance, pas juste la p-valeur
  • Ne pas interpréter « ne pas rejeter H₀ » comme « accepter H₀ »
  • Taille d’effet : regarder aussi l’amplitude des différences, pas juste la significativité

Pièges Courants

  • ❌ Chercher le test qui donne la p-valeur la plus petite
  • ❌ Ignorer les hypothèses du test (normalité, indépendance, etc.)
  • ❌ Interpréter p > 0.05 comme “H₀ est vraie”
  • ❌ Multiplier les tests sans correction (risque d’erreur augmente)
  • ❌ Confondre significativité statistique et significativité pratique