Dans de nombreux essais randomisés, une variable quantitative est mesurée une première fois avant la mise en place du traitement, puis à nouveau au cours du suivi. Cette seconde mesure constitue alors le critère d’évaluation utilisé pour évaluer l’efficacité du traitement.

Cette situation est particulièrement fréquente dans les essais portant sur des affections chroniques, pour lesquelles on cherche par exemple à déterminer si un traitement permet de réduire un niveau préexistant de douleur, d’anxiété ou encore de pression artérielle.

La question paraît alors simple : le traitement est-il efficace ?

Pourtant, lorsque l’on dispose d’une mesure à baseline et d’une mesure au suivi, plusieurs stratégies d’analyse sont possibles :

Pour illustrer les différentes stratégies d’analyse, nous allons nous appuyer sur l’exemple présenté par Vickers et Altman dans leur article publié dans le BMJ en 2001.

L’étude porte sur 52 patients souffrant de douleurs à l’épaule, randomisés dans deux groupes : 27 patients dans un groupe placebo et 25 dans un groupe acupuncture. Le critère d’évaluation est un score combinant douleur et capacité fonctionnelle, compris entre 0 et 100, les valeurs les plus élevées correspondant à un meilleur état clinique. Ce score est mesuré une première fois avant le traitement (baseline), puis une seconde fois après la fin du traitement.

Les données individuelles de l’étude n’étant pas disponibles, nous allons simuler un jeu de données reproduisant les effectifs, les moyennes et les écarts-types rapportés dans la publication pour les scores à baseline, au suivi et pour leur variation

library(dplyr)
library(tidyr)
library(purrr)
library(ggplot2)
library(ggstatsplot)
library(gtsummary)
library(parameters)
library(broom)

theme_set(theme_bw())
simuler_groupe <- function(
    n,
    groupe,
    moyenne_baseline,
    ecart_type_baseline,
    moyenne_post,
    ecart_type_post,
    ecart_type_delta
) {

  covariance_baseline_post <- (
    ecart_type_baseline^2 +
      ecart_type_post^2 -
      ecart_type_delta^2
  ) / 2

  matrice_covariance <- matrix(
    c(
      ecart_type_baseline^2,
      covariance_baseline_post,
      covariance_baseline_post,
      ecart_type_post^2
    ),
    nrow = 2,
    byrow = TRUE
  )

  donnees <- MASS::mvrnorm(
    n = n,
    mu = c(moyenne_baseline, moyenne_post),
    Sigma = matrice_covariance,
    empirical = TRUE
  )

  tibble(
    groupe = groupe,
    baseline = donnees[, 1],
    post = donnees[, 2]
  )
}

set.seed(2026)

donnees_simulees <- bind_rows(
  simuler_groupe(
    n = 27,
    groupe = "Placebo",
    moyenne_baseline = 53.9,
    ecart_type_baseline = 14.0,
    moyenne_post = 62.3,
    ecart_type_post = 17.9,
    ecart_type_delta = 14.6
  ),
  simuler_groupe(
    n = 25,
    groupe = "Acupuncture",
    moyenne_baseline = 60.4,
    ecart_type_baseline = 12.3,
    moyenne_post = 79.6,
    ecart_type_post = 17.1,
    ecart_type_delta = 16.1
  )
) |>
  mutate(
    groupe = factor(
      groupe,
      levels = c("Placebo", "Acupuncture")
    ),
    delta = post - baseline
  )

Vérifions tout d’abord que les données simulées reproduisent bien les principales caractéristiques descriptives rapportées dans la publication.

tableau_descriptif <- donnees_simulees |>
  tbl_summary(
    by = groupe,
    include = c(baseline, post, delta),
    statistic = all_continuous() ~ "{mean} ({sd})",
    digits = all_continuous() ~ 1,
    label = list(
      baseline ~ "Baseline",
      post ~ "Post",
      delta ~ "Post-Baseline"
    ),
    missing = "no"
  ) |>
  modify_header(
    label ~ "**Score**",
    stat_1 ~ "**Placebo, N = {n}**",
    stat_2 ~ "**Acupuncture, N = {n}**"
  ) |>
  bold_labels()

tableau_descriptif
ScorePlacebo, N = 271Acupuncture, N = 251
Baseline53.9 (14.0)60.4 (12.3)
Post62.3 (17.9)79.6 (17.1)
Post-Baseline8.4 (14.6)19.2 (16.1)
1 Mean (SD)

Les moyennes et écarts-types obtenus reproduisent les caractéristiques utilisées pour construire les données synthétiques, elles-mêmes issues des résultats descriptifs rapportés par Vickers et Altman.

Exploration des données baseline

Avant de nous intéresser à l’effet du traitement, commençons par comparer les scores des deux groupes à baseline.

tableau_baseline <- donnees_simulees |>
  tbl_summary(
    by = groupe,
    include = baseline,
    statistic = all_continuous() ~ "{mean} ({sd})",
    digits = all_continuous() ~ 1,
    label = baseline ~ "Score à baseline",
    missing = "no"
  ) |>
  add_difference(
    test = all_continuous() ~ "t.test",
    test.args = all_continuous() ~ list(var.equal = FALSE)
  ) |>
  modify_header(
    label ~ "**Score**",
    stat_1 ~ "**Placebo, N = {n}**",
    stat_2 ~ "**Acupuncture, N = {n}**"
  ) |>
  bold_labels()

tableau_baseline
ScorePlacebo, N = 271Acupuncture, N = 251Difference295% CI2p-value2
Score à baseline53.9 (14.0)60.4 (12.3)-6.5-14, 0.830.081
1 Mean (SD)
2 Welch Two Sample t-test
Abbreviation: CI = Confidence Interval

Visualisation :

ggbetweenstats(
  data = donnees_simulees,
  x = groupe,
  y = baseline,
  type = "parametric",
  bf.message = FALSE,
  xlab = NULL,
  ylab = "Score à baseline"
)

À baseline, le score moyen est de 53,9 points dans le groupe placebo et de 60,4 points dans le groupe acupuncture, soit une différence de 6,5 points en faveur du groupe acupuncture. Cette différence n’est toutefois pas statistiquement significative au seuil de 5 % (p = 0,08). Il ne s’agit pas ici d’utiliser le résultat de ce test pour décider s’il faut ou non prendre en compte la valeur à baseline dans l’analyse : la prise en compte de la baseline ne dépend pas de la significativité de la différence initiale entre les groupes.

Une première stratégie consiste à ignorer la baseline et à comparer les deux groupes uniquement à la fin de l’étude.

Commençons par décrire les scores observés au suivi et par estimer directement la différence entre les deux groupes.

tableau_post <- donnees_simulees |>
  tbl_summary(
    by = groupe,
    include = post,
    statistic = all_continuous() ~ "{mean} ({sd})",
    digits = all_continuous() ~ 1,
    label = post ~ "Score post",
    missing = "no"
  ) |>
  add_difference(
    test = all_continuous() ~ "t.test",
    test.args = all_continuous() ~ list(var.equal = FALSE)
  ) |>
  modify_header(
    label ~ "**Score**",
    stat_1 ~ "**Placebo, N = {n}**",
    stat_2 ~ "**Acupuncture, N = {n}**"
  ) |>
  bold_labels()

tableau_post
ScorePlacebo, N = 271Acupuncture, N = 251Difference295% CI2p-value2
Score post62.3 (17.9)79.6 (17.1)-17-27, -7.5<0.001
1 Mean (SD)
2 Welch Two Sample t-test
Abbreviation: CI = Confidence Interval

La comparaison est ici réalisée à l’aide du test t de Welch, qui ne suppose pas l’égalité des variances dans les deux groupes.

Visualisation :

ggbetweenstats(
  data = donnees_simulees,
  x = groupe,
  y = post,
  type = "parametric",
  var.equal = FALSE,
  bf.message = FALSE,
  xlab = NULL,
  ylab = "Score au suivi"
)

Le tableau et le graphique conduisent à la même comparaison : le score moyen post traitement est plus élevé dans le groupe acupuncture que dans le groupe placebo. La différence observée est d’environ 17,3 points.

À première vue, on pourrait donc conclure à un effet du traitement.

Mais cette analyse pose un problème important : les deux groupes ne partaient pas du même niveau.

Nous avons vu lors de l’exploration des données que le score moyen était déjà plus élevé à baseline dans le groupe acupuncture. La différence observée en fin d’intervention mélange donc :

Autrement dit, comparer uniquement les scores post intervention revient à attribuer au traitement une partie d’une différence qui était déjà présente avant son administration.

Cette première approche ne permet donc pas d’isoler correctement l’effet du traitement lorsque les groupes présentent un déséquilibre initial.

Deuxième approche : comparer les scores de changement

Une autre idée paraît alors très naturelle :

Puisque les groupes ne partent pas du même niveau, pourquoi ne pas soustraire la valeur initiale à la valeur post traitement?

Pour chaque sujet, on calcule :

Δi=Yi,postYi,baseline\Delta_i = Y_{i,\text{post}} – Y_{i,\text{baseline}}

Ce score de changement devient alors la variable réponse étudiée. Il suffit ensuite de comparer sa moyenne entre les deux groupes, par exemple à l’aide d’un test t de Welch.

tableau_delta <- donnees_simulees |>
  tbl_summary(
    by = groupe,
    include = delta,
    statistic = all_continuous() ~ "{mean} ({sd})",
    digits = all_continuous() ~ 1,
    label = delta ~ "Écart de score",
    missing = "no"
  ) |>
  add_difference(
    test = all_continuous() ~ "t.test",
    test.args = all_continuous() ~ list(var.equal = FALSE)
  ) |>
  modify_header(
    label ~ "**Score**",
    stat_1 ~ "**Placebo, N = {n}**",
    stat_2 ~ "**Acupuncture, N = {n}**"
  ) |>
  bold_labels()

tableau_delta
ScorePlacebo, N = 271Acupuncture, N = 251Difference295% CI2p-value2
Écart de score8.4 (14.6)19.2 (16.1)-11-19, -2.20.015
1 Mean (SD)
2 Welch Two Sample t-test
Abbreviation: CI = Confidence Interval

Visualisation

ggbetweenstats(
  data = donnees_simulees,
  x = groupe,
  y = delta,
  type = "parametric",
  bf.message = FALSE,
  xlab = NULL,
  ylab = "Écart de score (suivi - baseline)"
)

Le score augmente en moyenne de 8,4 points dans le groupe placebo et de 19,2 points dans le groupe acupuncture. La différence moyenne de changement entre les groupes est donc de 10,8 points en faveur du groupe acupuncture. Cette différence est statistiquement significative selon le test t de Welch.

Cette approche semble a priori séduisante : en soustrayant la baseline, on pourrait penser que l’on annule le problème créé par une différence initiale entre les groupes.

Mais ce n’est pas si simple car le changement est lui-même lié à la valeur initiale.

Vickers et Altman rappellent notamment le phénomène de régression vers la moyenne : lorsqu’une première mesure est particulièrement élevée ou particulièrement faible, une mesure ultérieure a tendance, en moyenne, à être moins extrême.

Dans l’exemple publié, la baseline et le changement sont négativement corrélés, avec une corrélation d’environ -0,25 au sein des groupes.

donnees_simulees |>
  group_by(groupe) |>
  summarise(
    correlation_baseline_delta = cor(baseline, delta),
    .groups = "drop"
  )
# A tibble: 2 × 2
  groupe      correlation_baseline_delta
  <fct>                            <dbl>
1 Placebo                         -0.217
2 Acupuncture                     -0.298

Dans cette étude, le groupe acupuncture présente déjà à baseline les meilleurs scores.

Or, lorsque baseline et changement sont négativement corrélés, les sujets ayant les valeurs initiales les plus élevées ont tendance à présenter des changements moins importants.

Ainsi, dans ce cas particulier, le fait que le groupe acupuncture parte d’un niveau initial plus élevé tend à réduire son changement moyen observé.

L’analyse des scores de changement sous-estime alors l’effet du traitement : elle conduit à une différence d’environ 10,8 points, contre environ 12,7 points avec l’ANCOVA.

Il faut néanmoins être prudent : ce n’est pas une règle générale selon laquelle l’analyse des changements sous-estimerait toujours l’effet du traitement. Le sens du biais dépend de la direction du déséquilibre initial et de la relation entre baseline et changement.

Nous allons ici nous concentrer sur l’utilisation de l’ANCOVA pour analyser le changement. Pour une présentation plus générale de cette méthode, vous pouvez consulter l’article Introduction à l’analyse de covariance.

L’ANCOVA modélise directement la valeur de suivi tout en tenant compte de la valeur initiale :

Yi,post=β0+β1groupei+β2Yi,baseline+εiY_{i,\text{post}} = \beta_0 + \beta_1\,\text{groupe}_i + \beta_2\,Y_{i,\text{baseline}} + \varepsilon_i

Elle permet de répondre à une question très claire :

Pour deux sujets appartenant à des groupes différents mais ayant la même valeur à baseline, quelle différence moyenne de score observe-t-on à la fin du traitement?

mod_ancova <- lm(
  post ~ groupe + baseline,
  data = donnees_simulees
)

parameters(mod_ancova)
Parameter            | Coefficient |   SE |        95% CI | t(49) |      p
--------------------------------------------------------------------------
(Intercept)          |       24.28 | 9.12 | [5.96, 42.60] |  2.66 | 0.010 
groupe [Acupuncture] |       12.71 | 4.29 | [4.10, 21.33] |  2.96 | 0.005 
baseline             |        0.71 | 0.16 | [0.38,  1.03] |  4.40 | < .001
library(moderndive)

ggplot(
  donnees_simulees,
  aes(
    x = baseline,
    y = post,
    color = groupe
  )
) +
  geom_point(size = 2, alpha = 0.7) +
  geom_parallel_slopes(se = FALSE) +
  labs(
    x = "Score à baseline",
    y = "Score au suivi",
    color = "Groupe"
  ) +
  theme_bw()

L’intercept correspond à la valeur moyenne prédite au suivi dans le groupe placebo pour un sujet dont la valeur initiale serait égale à 0.

Cette valeur est essentiellement un paramètre nécessaire au modèle et n’a généralement pas d’interprétation clinique intéressante ici.

Le coefficient associé à groupe [Acupuncture] est le coefficient qui nous intéresse principalement.

Il représente la différence moyenne de score au suivi entre le groupe acupuncture et le groupe placebo pour deux sujets ayant la même valeur à baseline c’est l’écart vertical entre els deux droites, sur le graphqiue pércédent).

Dans notre jeu de données, cette différence ajustée est d’environ 12,7 points.

Autrement dit :

à score initial identique, les patients du groupe acupuncture présentent en moyenne un score au suivi supérieur d’environ 12,7 points à celui des patients du groupe placebo.

Le coefficient associé à baseline traduit la relation entre la valeur initiale et la valeur observée au suivi.

Par exemple, si ce coefficient vaut 0,71, cela signifie qu’à groupe identique, une augmentation d’un point du score initial est associée en moyenne à une augmentation de 0,71 point du score au suivi.

Dans cet exemple, les trois approches ne conduisent pas à la même estimation de l’effet du traitement :

La différence tient à la façon dont chacune de ces méthodes utilise — ou n’utilise pas — l’information disponible à baseline.

Même lorsque les groupes sont bien équilibrés à baseline, la précision relative des différentes approches dépend de la corrélation entre la valeur initiale et la valeur de suivi.

Si cette corrélation est faible, la baseline apporte peu d’information sur la valeur finale.

Dans ce cas, construire un score de changement revient à soustraire une valeur initiale relativement peu informative, ce qui peut ajouter de la variabilité. L’analyse du post seul peut alors être plus efficace que l’analyse du changement.

À l’inverse, lorsque la corrélation entre baseline et suivi est forte, la valeur initiale contient beaucoup d’information sur la valeur finale.

Ignorer cette information, comme le fait une analyse du post seul, entraîne alors une perte de précision.

L’analyse du changement devient relativement plus efficace, mais l’ANCOVA reste généralement l’approche la plus performante car elle exploite directement l’information apportée par la baseline.

Vickers et Altman donnent un exemple particulièrement parlant : pour une corrélation baseline-suivi de 0,6, une étude nécessiterait environ :

Lorsque la corrélation devient très élevée, par exemple supérieure à 0,8, le gain d’efficacité de l’ANCOVA par rapport à l’analyse du changement devient faible.

À la lecture de ces exemples, on pourrait être tenté de choisir entre l’analyse du score final, celle du changement ou l’ANCOVA après avoir observé le déséquilibre initial ou calculé la corrélation entre baseline et suivi.

Ce serait une mauvaise pratique.

La stratégie d’analyse doit être définie avant l’analyse des données, idéalement dans le plan d’analyse statistique.

Or, au moment où cette stratégie est définie, la corrélation qui sera effectivement observée entre baseline et suivi n’est généralement pas connue avec certitude.

C’est une raison supplémentaire de privilégier l’ANCOVA comme approche générale : elle permet de tenir compte de la valeur initiale tout en exploitant l’information qu’elle apporte sur la mesure de suivi.

Lorsqu’une variable quantitative est mesurée avant et après traitement dans plusieurs groupes, plusieurs analyses peuvent sembler pertinentes.

Comparer uniquement les valeurs au suivi est simple, mais cette approche ignore complètement la baseline. Lorsqu’il existe un déséquilibre initial, une partie de la différence observée à la fin de l’étude peut déjà exister avant le traitement.

Comparer les scores de changement paraît résoudre ce problème puisqu’on soustrait la valeur initiale à chaque sujet. Pourtant, cette stratégie ne constitue pas un véritable ajustement sur la baseline et peut être affectée par la relation entre baseline et changement, notamment par la régression vers la moyenne.

L’ANCOVA modélise directement la valeur de suivi tout en tenant compte de la valeur initiale. Elle fournit une comparaison des groupes à baseline identique et utilise l’information pronostique contenue dans la mesure initiale.

C’est pourquoi Vickers et Altman concluent que l’ANCOVA constitue l’approche générale à privilégier pour l’analyse d’un essai contrôlé comportant une mesure initiale et une mesure de suivi.

Et vous, comment analysez-vous ce type de données ? Avez-vous l’habitude d’utiliser l’ANCOVA lorsque vous disposez d’une mesure à baseline et d’une mesure post-intervention ? Je serais curieuse de connaître vos pratiques et vos éventuelles difficultés : dites-moi en commentaire !

Vickers AJ, Altman DG. Analysing controlled trials with baseline and follow up measurements. BMJ. 2001;323:1123-1124 <https://pubmed.ncbi.nlm.nih.gov/11701584/>

Introduction à l’analyse de covariance (ANCOVA)

Régression à la moyenne

Vous souhaitez vous former à R en autonomie ?

bien-demarrer-r-rstudio

CAMPUS DELLADATA

Apprendre R à votre rythme

Je propose désormais une formation en ligne pour démarrer avec R et RStudio, pensée pour les profils scientifiques (recherche médicale, biologie, agro, environnement…). D’autres modules arrivent prochainement.

Portrait de Claire Della Vedova, consultante et formatrice en biostatistique et langage R

Je suis Claire Della-Vedova, consultante en biostatistique, méthodologie clinique et expertise R.

J’accompagne les fabricants de dispositifs médicaux et les équipes scientifiques des sciences du vivant dans leurs projets d’évaluation clinique, d’analyse statistique et d’analyse de données sous R.

🎓 Formations professionnelles R et biostatistiques 

🤝 Prestations et accompagnement sur mesure 

📅 Discuter d’un accompagnement ou d’une prestation sur mesure  

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Fonctions statistiques R

Aide mémoire off'R ;)

Enregistrez vous pour recevoir gratuitement mes fiches « aide mémoire » (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.