TP3 : Tests Statistiques — Fil Conducteur

Auteur·rice

HAMLIL Mohamed

Date de publication

31 décembre 2025

TP3 : Tests Statistiques — Fil Conducteur

Objectifs

  • Charger les données puis vérifier leur structure.
  • Formuler les hypothèses nulle (\(H_0\)) et alternative (\(H_1\)) avant chaque test.
  • Interpréter les sorties (statistique, p-value, décision) pour répondre aux questions métiers.

Étude 1 : Épaisseur Intima-Media

Contexte : Les données sont importées depuis le fichier post-199413-Intima_Media.txt. Les variables utiles sont : - SEXE - poids (kg) - taille (cm) - mesure (épaisseur intima-media en mm)

But : Vérifier si l’épaisseur moyenne diffère selon le profil (IMC, sexe).

1. Importation et exploration

Code
# Importation des données
Intima_Media <- read.table("../../data/post-199413-Intima_Media.txt", header = TRUE, sep = " ", dec = ",")

# Aperçu des données
head(Intima_Media)
  SEXE AGE taille poids tabac paqan SPORT mesure alcool
1    1  33    170    70     1     1     0   0.52      1
2    2  33    177    67     2    20     0   0.42      1
3    2  53    164    63     1    30     0   0.65      0
4    2  42    169    76     1    26     1   0.48      1
5    2  53    152    54     0    NA     0   0.45      1
6    2  50    162    53     2    10     0   0.49      1

Conseil : Lors de la lecture de la sortie head(), vérifiez bien les types de variables (entiers vs doubles) et détectez la présence éventuelle de valeurs manquantes (NA).

2. Manipulation des données

Nous attachons le dataframe pour accéder directement aux variables et nous calculons l’Indice de Masse Corporelle (IMC).

Code
attach(Intima_Media)

# Vérification d'une variable (ex: SEXE)
# (Affiche la liste des valeurs pour vérifier l'import)
# SEXE 

# Calcul de l'IMC (Poids en kg / Taille en m au carré)
# Note: la taille est en cm dans le fichier, on divise par 100
IMC <- poids / (taille / 100)^2

3. Analyse des sujets obèses

Nous nous intéressons aux sujets ayant un IMC > 30.

Code
# Repérer les sujets obèses (IMC > 30)
# Affiche un vecteur de TRUE/FALSE
# IMC > 30 

# Nombre de sujets obèses
nb_obeses <- sum(IMC > 30, na.rm = TRUE)
cat("Nombre de sujets obèses :", nb_obeses, "\n")
Nombre de sujets obèses : 9 
Code
# Proportion de sujets obèses
prop_obeses <- mean(IMC > 30, na.rm = TRUE)
cat("Proportion de sujets obèses :", round(prop_obeses, 4), "\n")
Proportion de sujets obèses : 0.0818 

4. Test de conformité (One Sample t-test)

Question : L’épaisseur moyenne (mesure) chez les sujets obèses est-elle supérieure à 0.58 mm ?

  • H₀ :
  • H₁ : (Test unilatéral à droite greater)
Code
# Extraction des mesures pour les sujets obèses
mesure1 <- mesure[IMC > 30]

# Test t de Student unilatéral
t.test(mesure1, mu = 0.58, alternative = "greater")

    One Sample t-test

data:  mesure1
t = 1.5272, df = 8, p-value = 0.08262
alternative hypothesis: true mean is greater than 0.58
95 percent confidence interval:
 0.5715358       Inf
sample estimates:
mean of x 
0.6188889 

Interprétation : Regardez la p-value. Si elle est inférieure au seuil (généralement 0.05), on rejette . Sinon, on ne peut pas conclure que l’épaisseur est significativement supérieure à 0.58.


Étude 2 : Prévalence du VIH (Afrique)

Contexte : On travaille sur le fichier post-199414-prevalsidafric.xls pour estimer et tester des proportions de séropositifs dans différents sous-groupes.

1. Importation

Code
library(readxl)
preval <- read_excel("../../data/post-199414-prevalsidafric.xls")
head(preval)
# A tibble: 6 × 6
    age   VIH analphab nb_gros remunere seule
  <dbl> <dbl>    <dbl>   <dbl>    <dbl> <dbl>
1    44     0        1       7        0     0
2    24     0        0       2        0     1
3    30     0        0       5        0     0
4    27     1        1       2        1     0
5    21     0        0       3        0     0
6    20     0        1       2        0     0
Code
attach(preval)

2. Analyse des 18-25 ans

Question : La prévalence chez les 18-25 ans est-elle inférieure à 10% ?

  • Données : On filtre les sujets entre 18 et 25 ans inclus.
  • H₀ :
  • H₁ : (Test unilatéral à gauche less)
Code
# Comptage des 18-25 ans
nb_jeunes <- sum(age <= 25 & age >= 18)
cat("Nombre de jeunes (18-25) :", nb_jeunes, "\n")
Nombre de jeunes (18-25) : 147 
Code
# Table de contingence pour ce sous-groupe
table_jeunes <- table(VIH[age <= 25 & age >= 18])
print(table_jeunes)

  0   1 
137  10 
Code
# Nombre de séropositifs (VIH=1) dans ce groupe (ici 10 cas observés)
nb_pos_jeunes <- 10 

# Test de proportion
# p = 0.1 (valeur de référence)
# alternative = "less" (unilatéral inférieur)
prop.test(nb_pos_jeunes, nb_jeunes, p = 0.1, alternative = "less", correct = FALSE)

    1-sample proportions test without continuity correction

data:  nb_pos_jeunes out of nb_jeunes, null probability 0.1
X-squared = 1.6697, df = 1, p-value = 0.09815
alternative hypothesis: true p is less than 0.1
95 percent confidence interval:
 0.000000 0.110572
sample estimates:
         p 
0.06802721 

3. Analyse de la population globale

Question : La prévalence globale est-elle différente de 25% ?

  • H₀ :
  • H₁ : (Test bilatéral two.sided)
Code
# Supposons 118 cas positifs sur 400 observations totales (données de l'exemple)
prop.test(118, 400, p = 0.25, alternative = "two.sided")

    1-sample proportions test with continuity correction

data:  118 out of 400, null probability 0.25
X-squared = 4.0833, df = 1, p-value = 0.04331
alternative hypothesis: true p is not equal to 0.25
95 percent confidence interval:
 0.2512453 0.3427632
sample estimates:
    p 
0.295 

Étude 3 : Comparaisons (Moyennes et Variances)

Cette section utilise des fonctions spécifiques (parfois issues de packages comme OneTwoSamples ou des fonctions R standard) pour illustrer différents cas de figure.

1. Tests sur une moyenne ()

Cas connu

Exemple théorique sur une variable x.

  • H₀ :
Code
# Chargement du package si disponible (sinon utiliser z.test ou calcul manuel)
# library(OneTwoSamples) 

x <- c(6.47, 7.02, 7.15, 7.22, 7.44, 6.99, 7.47, 7.61, 7.32, 7.22, 7.52, 6.92,
       7.28, 6.69, 7.24, 7.19, 6.97, 7.52, 6.22, 7.13, 7.32, 7.67, 7.24, 6.21)

# Note : Si la fonction mean_test1 n'est pas disponible, voir TP précédents pour le calcul manuel Z
# mean_test1(x, mu = 7.3, sigma = 0.38)

# Test unilatéral à gauche (alternative = -1 ou "less")
# mean_test1(x, mu = 7.3, sigma = 0.38, side = -1) 

Cas inconnu (Test t de Student)

Question : La moyenne est-elle supérieure à 10 ?

Code
x_t <- c(10.1, 9.8, 10.2, 10.3, 10.4, 9.8, 9.9, 10.4, 10.2, 9.5, 10.4, 9.6)

# Test t unilatéral
t.test(x_t, mu = 10, alternative = "greater")

    One Sample t-test

data:  x_t
t = 0.5404, df = 11, p-value = 0.2998
alternative hypothesis: true mean is greater than 10
95 percent confidence interval:
 9.883838      Inf
sample estimates:
mean of x 
    10.05 

Autre exemple (Rendement) : Test bilatéral contre une référence .

Code
x_rendement <- c(232, 277, 235, 245, 245, 250, 268, 256)
t.test(x_rendement, mu = 276)

    One Sample t-test

data:  x_rendement
t = -4.5644, df = 7, p-value = 0.002591
alternative hypothesis: true mean is not equal to 276
95 percent confidence interval:
 238.0484 263.9516
sample estimates:
mean of x 
      251 

2. Comparaisons à deux échantillons

Il faut systématiquement :

  1. Poser les hypothèses.
  2. Vérifier si les variances sont connues ou inconnues.
  3. Si inconnues, tester leur égalité (F-test) ou utiliser Welch (par défaut).

Cas connus (Machines)

Code
machine1 <- c(106.70, 107.02, 107.15, 107.22, 107.41, 106.39, 107.47, 107.61, 107.38, 107.22)
machine2 <- c(107.68, 106.69, 107.24, 107.69, 106.97, 107.52, 106.22, 107.23, 107.32)

# Fonction hypothétique mean_test2 pour variances connues
# mean_test2(machine1, machine2, sigma = c(1.3, 0.9))

Cas inconnus (Producteurs)

D’abord, on peut tester l’égalité des variances.

Code
prod1 <- c(12.12, 12.03, 13.58, 13.38, 11.81, 15.92, 13.65)
prod2 <- c(14.81, 13.93, 14.91, 15.87, 15.62, 15.39)

# Test de Fisher pour l'égalité des variances
var.test(prod1, prod2)

    F test to compare two variances

data:  prod1 and prod2
F = 4.1891, num df = 6, denom df = 5, p-value = 0.1375
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
  0.6003532 25.0824222
sample estimates:
ratio of variances 
          4.189085 
Code
# Ou fonction custom: var_test2(prod1, prod2)

Ensuite, on compare les moyennes. Si les variances sont jugées égales (p-value > 0.05 au test précédent), on utilise var.equal = TRUE.

Code
# Test t avec variances supposées égales
t.test(prod1, prod2, var.equal = TRUE)

    Two Sample t-test

data:  prod1 and prod2
t = -2.9181, df = 11, p-value = 0.01398
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -3.2900490 -0.4609034
sample estimates:
mean of x mean of y 
 13.21286  15.08833 

Autre exemple (Lots)

Code
lot1 <- c(31.70, 31.98, 32.24, 32.35, 31.18, 32.19, 32.63, 31.19, 31.54, 31.89)
lot2 <- c(31.61, 31.10, 31.20, 31.11, 32.66, 31.15, 31.71, 31.22, 31.16, 31.21)

# Test des variances
var.test(lot1, lot2)

    F test to compare two variances

data:  lot1 and lot2
F = 1.0017, num df = 9, denom df = 9, p-value = 0.998
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
 0.2488152 4.0329538
sample estimates:
ratio of variances 
          1.001729 
Code
# Test t unilatéral (lot1 < lot2 ?) avec variances égales (car p-value var.test élevée)
# Note: Dans le code d'origine, t.test compare lot1 et lot1 (erreur de copier-coller probable),
# ici corrigé pour comparer lot1 et lot2.
t.test(lot1, lot2, var.equal = TRUE, alternative = "less")

    Two Sample t-test

data:  lot1 and lot2
t = 2.1875, df = 18, p-value = 0.9789
alternative hypothesis: true difference in means is less than 0
95 percent confidence interval:
      -Inf 0.8533243
sample estimates:
mean of x mean of y 
   31.889    31.413 

3. Comparaison de deux proportions

Contexte : Comparer deux taux de succès (Avant/Après intervention).

  • Avant : 54 succès sur 230.
  • Après : 110 succès sur 340.
  • H₁ : La proportion a augmenté (donc ).
Code
x_prop <- c(54, 110)
n_prop <- c(230, 340)

# Test unilatéral "less" (p1 < p2)
prop.test(x = x_prop, n = n_prop, alternative = "less")

    2-sample test for equality of proportions with continuity correction

data:  x_prop out of n_prop
X-squared = 4.8484, df = 1, p-value = 0.01384
alternative hypothesis: less
95 percent confidence interval:
 -1.00000000 -0.02301415
sample estimates:
   prop 1    prop 2 
0.2347826 0.3235294 

Résumé : Comment interpréter les sorties

  1. Identifier la p-value : C’est la probabilité d’obtenir ces données si l’hypothèse nulle était vraie.
  2. Comparer au seuil : Si p-value < 0.05 (généralement), le résultat est statistiquement significatif → Rejet de .
  3. Conclure : Formuler une phrase réponse en lien avec le problème métier (ex: “L’épaisseur moyenne est significativement supérieure à la norme”).
  4. Vérifier les conditions : Normalité des données (pour le t-test sur petits échantillons), effectifs suffisants (pour les tests de proportions), indépendance des observations.