Module 1

Introduction à la biostatistique

Concepts fondamentaux et statistiques descriptives

2h Débutant Prérequis : Aucun

1 Objectifs du TP

  • Importer et explorer un jeu de données biomédicales
  • Calculer des statistiques descriptives avec R et SPSS
  • Identifier les types de variables dans un contexte réel
  • Interpréter les résultats dans un contexte médical

2 Jeu de données

Le fichier patients_diabete.csv contient les données de 50 patients d’une consultation de diabétologie dans un hôpital de Yaoundé. Les variables sont :

Variable Description Type
id Identifiant du patient -
age Âge en années Quantitative continue
sexe Sexe (M/F) Qualitative nominale
poids Poids en kg Quantitative continue
taille Taille en cm Quantitative continue
glycemie Glycémie à jeun (g/L) Quantitative continue
hba1c Hémoglobine glyquée (%) Quantitative continue
type_diabete Type de diabète (1/2) Qualitative nominale
nb_consultations Nombre de consultations/an Quantitative discrète
niveau_activite Niveau d’activité physique (Sédentaire/Modéré/Actif) Qualitative ordinale

3 Partie 1 : Importation et exploration des données

3.1 Exercice 1.1 : Importation avec R

# Charger les packages nécessaires
library(tidyverse)

# Importer les données
patients <- read_csv("data/patients_diabete.csv")

# Explorer la structure
str(patients)
head(patients)
dim(patients)

Questions :

  1. Combien de lignes et de colonnes contient le jeu de données ?
  2. Quels sont les types de données détectés par R pour chaque variable ?
  3. Y a-t-il des valeurs manquantes ?
# Vérifier les valeurs manquantes
colSums(is.na(patients))

3.2 Exercice 1.2 : Importation avec SPSS

Procédure SPSS
  1. Fichier > Ouvrir > Données
  2. Sélectionner le fichier CSV, choisir Virgule comme séparateur
  3. Vérifier les types de variables dans la Vue Variables
  4. Ajuster les niveaux de mesure : Échelle pour les quantitatives, Nominal ou Ordinal selon le cas

Syntaxe :

GET DATA /TYPE=TXT
  /FILE='data/patients_diabete.csv'
  /DELIMITERS=","
  /FIRSTCASE=2
  /VARIABLES=
    id F3
    age F2
    sexe A1
    poids F5.1
    taille F5.1
    glycemie F4.2
    hba1c F4.1
    type_diabete F1
    nb_consultations F2
    niveau_activite A12.

4 Partie 2 : Statistiques descriptives des variables quantitatives

4.1 Exercice 2.1 : Mesures de tendance centrale

Calculer la moyenne, la médiane et le mode pour les variables age, poids, glycemie et hba1c.

4.1.1 Avec R

# Moyenne et médiane
patients %>%
  summarise(
    age_moy = mean(age, na.rm = TRUE),
    age_med = median(age, na.rm = TRUE),
    poids_moy = mean(poids, na.rm = TRUE),
    poids_med = median(poids, na.rm = TRUE),
    glyc_moy = mean(glycemie, na.rm = TRUE),
    glyc_med = median(glycemie, na.rm = TRUE),
    hba1c_moy = mean(hba1c, na.rm = TRUE),
    hba1c_med = median(hba1c, na.rm = TRUE)
  )
Avec SPSS
DESCRIPTIVES VARIABLES=age poids glycemie hba1c
  /STATISTICS=MEAN MEDIAN.

Questions :

  1. La moyenne et la médiane sont-elles proches pour chaque variable ? Qu’est-ce que cela indique sur la distribution ?
  2. Pour quelle variable la différence moyenne-médiane est-elle la plus grande ? Que peut-on en déduire ?

4.2 Exercice 2.2 : Mesures de dispersion

# Tableau récapitulatif complet
patients %>%
  summarise(across(
    c(age, poids, glycemie, hba1c),
    list(
      moy = ~mean(.x, na.rm = TRUE),
      med = ~median(.x, na.rm = TRUE),
      et = ~sd(.x, na.rm = TRUE),
      min = ~min(.x, na.rm = TRUE),
      max = ~max(.x, na.rm = TRUE),
      cv = ~(sd(.x, na.rm = TRUE) / mean(.x, na.rm = TRUE)) * 100
    )
  )) %>%
  pivot_longer(everything()) %>%
  separate(name, into = c("variable", "stat"), sep = "_(?=[^_]+$)") %>%
  pivot_wider(names_from = stat, values_from = value) %>%
  mutate(across(where(is.numeric), ~round(.x, 2)))
Avec SPSS
DESCRIPTIVES VARIABLES=age poids glycemie hba1c
  /STATISTICS=MEAN STDDEV VARIANCE MIN MAX.

Questions :

  1. Quelle variable présente la plus grande variabilité relative (CV) ?
  2. Les données de glycémie sont-elles homogènes ou hétérogènes ?

5 Partie 3 : Statistiques descriptives des variables qualitatives

5.1 Exercice 3.1 : Tableaux de fréquences

# Tableau de fréquences pour le sexe
table(patients$sexe)
prop.table(table(patients$sexe)) * 100

# Tableau de fréquences pour le niveau d'activité
table(patients$niveau_activite)
prop.table(table(patients$niveau_activite)) * 100

# Tableau croisé sexe x type de diabète
table(patients$sexe, patients$type_diabete)
Avec SPSS
FREQUENCIES VARIABLES=sexe type_diabete niveau_activite
  /ORDER=ANALYSIS.

CROSSTABS /TABLES=sexe BY type_diabete
  /CELLS=COUNT ROW COLUMN.

Questions :

  1. Quelle est la répartition hommes/femmes dans l’échantillon ?
  2. Quel type de diabète est le plus fréquent ?
  3. Le mode de la variable niveau_activite est-il le même chez les hommes et les femmes ?

6 Partie 4 : Statistiques descriptives par groupe

6.1 Exercice 4.1 : Comparaison par sexe

patients %>%
  group_by(sexe) %>%
  summarise(
    n = n(),
    age_moy = mean(age, na.rm = TRUE),
    age_et = sd(age, na.rm = TRUE),
    poids_moy = mean(poids, na.rm = TRUE),
    glyc_moy = mean(glycemie, na.rm = TRUE),
    hba1c_moy = mean(hba1c, na.rm = TRUE)
  )
Avec SPSS
MEANS TABLES=age poids glycemie hba1c BY sexe
  /CELLS=COUNT MEAN STDDEV.

6.2 Exercice 4.2 : Comparaison par type de diabète

patients %>%
  group_by(type_diabete) %>%
  summarise(
    n = n(),
    age_moy = mean(age, na.rm = TRUE),
    glyc_moy = mean(glycemie, na.rm = TRUE),
    glyc_et = sd(glycemie, na.rm = TRUE),
    hba1c_moy = mean(hba1c, na.rm = TRUE),
    hba1c_et = sd(hba1c, na.rm = TRUE)
  )

Questions :

  1. Quelles différences observez-vous entre les deux types de diabète ?
  2. Ces différences vous paraissent-elles cliniquement pertinentes ?

7 Partie 5 : Exercice de synthèse

7.1 Exercice 5.1 : Rapport descriptif

Rédigez un court paragraphe (5-8 lignes) résumant les caractéristiques de l’échantillon, comme on le retrouverait dans la section “Caractéristiques de l’échantillon” d’un article scientifique.

Utilisez le format suivant : moyenne ± écart-type pour les variables quantitatives et n (%) pour les variables qualitatives.

Modèle : “L’échantillon était composé de N patients, dont X% de femmes. L’âge moyen était de X ± X ans…”

7.2 Exercice 5.2 : Tableau 1

Créez un “Tableau 1” professionnel avec le package gtsummary :

library(gtsummary)

patients %>%
  select(age, sexe, poids, glycemie, hba1c, type_diabete, niveau_activite) %>%
  tbl_summary(
    by = type_diabete,
    statistic = list(
      all_continuous() ~ "{mean} ({sd})",
      all_categorical() ~ "{n} ({p}%)"
    ),
    label = list(
      age ~ "Âge (années)",
      sexe ~ "Sexe",
      poids ~ "Poids (kg)",
      glycemie ~ "Glycémie à jeun (g/L)",
      hba1c ~ "HbA1c (%)",
      niveau_activite ~ "Niveau d'activité physique"
    )
  ) %>%
  add_overall() %>%
  bold_labels()

8 Corrigé des questions

Exercice 2.1 :

  1. Si la moyenne et la médiane sont proches, la distribution est approximativement symétrique. Si la moyenne > médiane, la distribution est étalée à droite (asymétrie positive).
  2. La glycémie présente souvent la plus grande différence car quelques patients peuvent avoir des valeurs très élevées (distribution asymétrique à droite).

Exercice 2.2 :

  1. Le CV le plus élevé indique la variable la plus dispersée relativement à sa moyenne.
  2. Si CV > 30%, les données sont hétérogènes, ce qui est fréquent pour la glycémie dans une population diabétique.

Exercice 3.1 :

  1. Voir la sortie du tableau de fréquences.
  2. Le diabète de type 2 est généralement le plus fréquent (environ 90% des cas).
  3. Les sédentaires sont souvent le mode, mais cela peut varier selon le sexe.