La régression à la moyenne est un phénomène statistique que je trouve assez méconnu, et que personnellement, j’ai eu un peu de mal à cerner, parce que je ne comprenais pas dans quelles conditions ce mécanisme pouvait intervenir.
En réalité, c’est assez simple : le phénomène de régression à la moyenne intervient lorsque :
Si ça vous semble abstrait, imaginez que vous souhaitez évaluer l’effet de séances de coaching sur la consommation de cigarettes avec un design quasi-expérimental de type avant / après. Pour cela vous interrogez à J0 (baseline) 50 sujets à propos de leur consommation tabagique de la semaine précédente (en nombre de cigarettes), puis vous sélectionnez les 25 plus gros fumeurs (en vous disant qu’ils seront plus représentatifs des sujets qui pourraient, au final, bénéficier de séances de coaching dans la vraie vie ). Et vous les interrogez, à nouveau à propos de leur consommation de cigarettes, une semaine après les séances de coaching. Eh bien dans cette situation, lorsque vous allez comparer le comportement tabagique de vos 25 sujets sélectionnés, avant et après les séances de coaching, vous allez avoir affaire au phénomène de régression à la moyenne !
Je vous explique tout cela en détail, en l’illustrant avec des données simulées.
La régression à la moyenne est une normalisation des données lors de la seconde mesure, pour se rapprocher de la moyenne observée sur l’ensemble de la population. D’où le terme régression à la moyenne.
Dit autrement, dans cette situation de mesures répétées sur des sujets sélectionnés pour avoir des valeurs élevées ou basses du critère de jugement à baseline, une partie de l’évolution du critère d’intérêt entre les deux mesures (la réduction du nombre de cigarettes fumées dans notre exemple) est en réalité due au phénomène de régression à la moyenne : un rapprochement des données, lors de la seconde mesure, vers la moyenne des mesures de la population générale (avant la sélection). .
Ce phénomène intervient parce que certains des sujets sélectionnés pour avoir une valeur « extrême » à baseline, l’ont par hasard. Et qu’ensuite (à la seconde mesure), cette valeur se normaliser.
Dans notre exemple, pour certains sujets, la consommation tabagique élevée mesurée à baseline est bien représentative de leur consommation habituelle. Pour d’autres, au contraire, cette consommation tabagique élevée à baseline est complètement inhabituelle, et tient du hasard (certains avaient probablement rencontré une situation particulièrement stressante, qui les avait conduit à consommer davantage de cigarettes, c’était la semaine des examens, par exemple). Et donc, lorsque ces sujets sont observés une seconde fois, leur mesure se normalise (leur consommation de cigarettes retourne à leur vrai niveau, qui est plus faible). Et cela est simplement un phénomène statistique.
Si on met en évidence une diminution du critère de jugement entre les deux temps de mesure (avec un test statistique pour données apparié ), et bien une partie de cette diminution est probablement due au phénomène de régression à la moyenne.
Et puisque dans les essais cliniques, les critères d’inclusion peuvent concerner le critère de jugement (pour atteindre une certaine gravité d’une maladie, par exemple) ce phénomène n’est pas rare.
Pour essayer d’illustrer le phénomène de régression à la moyenne, avec des données, je me suis servi de l’exemple présenté par Stephen Seen ici.
Il s’agit de mettre en évidence le phénomène de régression à la moyenne, entre deux temps de mesure, en dehors de toute intervention. Autrement dit, de montrer que même sans intervention susceptible de diminuer les mesures, lorsque les sujets sont sélectionnés, la moyenne des mesures au deuxième temps est inférieure à celle des mesures initiales.
Pour cela, nous allons ;
Les données sont simulées avec les paramètres suivants :
set.seed(1)
# matrice de variance covariance
#cov(x,y) =r(x,y)*sd(x)*sd(y) = 0.7*8*8 =44.8
sigma<-rbind(c(64,44.8), c(44.8,64))
mu<-c(90, 90)
n=100
library(MASS)
df<-as.data.frame(mvrnorm(n=n, mu=mu, Sigma=sigma))
library(tidyverse)
names(df) <- c("T0", "T1")
df <- df %>%
mutate(id=1:n())
head(df)
## T0 T1 id
## 1 87.30164 83.45737 1
## 2 91.22399 91.48498 2
## 3 86.65910 81.01432 3
## 4 101.27658 102.25584 4
## 5 94.45849 90.40217 5
## 6 78.47278 89.42426 6
Les estimations des moyennes à T0 et T1 sont très similaires, autour de 90 mmHg :
mean(df$T0)
## [1] 90.92026
mean(df$T1)
## [1] 90.68597
Si nous utilisons un test de Student apparié pour les comparer, nous obtenons une pvalue >0.05. Ainsi, rien ne nous permet d’affirmer que la moyenne des pressions sanguines diastoliques à T1 est différente de la moyenne à T0.
t.test(df$T0,df$T1, paired=TRUE)
##
## Paired t-test
##
## data: df$T0 and df$T1
## t = 0.39471, df = 99, p-value = 0.6939
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -0.9434954 1.4120715
## sample estimates:
## mean of the differences
## 0.2342881
Nous pouvons également visualiser les trajectoires de chaque sujet entre T0 et T1, comme ceci :
df_long <- df %>%
mutate(id=1:n()) %>%
pivot_longer(-id,
names_to="Time",
values_to="Value")
# boxplot
ggplot(df_long , aes(x=Time, y=Value, fill=Time, colour=Time))+
geom_boxplot(alpha=0.5, notch = TRUE, outlier.alpha=0)+
geom_jitter(width=0.05)+
geom_line(aes(group=id), colour="gray50")+
theme_classic()+
theme(legend.position = "none")
Nous pouvons voir que, globalement 50% des données en T1 sont supérieures à celles de T0 et 50% sont inférieures.
Sélectionnons à présent les sujets ayant une pression sanguine diastolique forte (>95mmH) à T0 :
T0_sup95 <- df %>%
filter(T0>=95)
Si nous estimons les moyennes à T0 et T1 de ces sujets, nous pouvons voir que la moyenne à T1 est numériquement inférieure d’environ 3.5 mmHg par rapport à T1.
mean(T0_sup95$T0)
## [1] 100.706
mean(T0_sup95$T1)
## [1] 97.21009
Et si nous comparons ces moyennes à l’aide d’un test de Student apparié, nous mettons en évidence une différence significative, dans le sens d’une moyenne inférieure à T1.
t.test(T0_sup95$T0,T0_sup95$T1, paired=TRUE)
##
## Paired t-test
##
## data: T0_sup95$T0 and T0_sup95$T1
## t = 3.9279, df = 22, p-value = 0.000719
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 1.650126 5.341729
## sample estimates:
## mean of the differences
## 3.495928
Cette diminution est due à l’effet de la régression à la moyenne (qui est estimé à 3.5 mmHg).
Et si entre les deux temps de mesures, nous avions introduit une intervention (un médicament par exemple) nous aurions pu nous tromper en concluant que cette différence était due à l’intervention, alors qu’elle est seulement la conséquence de l’effet de la régression à la moyenne.
Nous pouvons également suivre les trajectoires des ces sujets , comme ceci ;
T0_sup95_long <- T0_sup95 %>%
pivot_longer(-id,
names_to="Time",
values_to="Value")
ggplot(T0_sup95_long , aes(x=Time, y=Value, fill=Time, colour=Time))+
geom_boxplot(alpha=0.5, notch = TRUE, outlier.alpha=0)+
geom_jitter(width=0.05)+
geom_line(aes(group=id), colour="gray50")+
theme_classic()+
theme(legend.position = "none")
L’évolution des valeurs n’est plus du tout équilibrée, comme précédemment. Ici, la majorité des sujets (sélectionnés du fait d’une valeur élevée de la pression artérielle diastolique à baseline) ont une seconde valeur plus faible.
Nous pouvons encore visualiser le mécanisme de régression à la moyenne sur cet autre graph ;
df <- df %>%
mutate(grp = ifelse(T0<95 & T1<95,"normotensive",
ifelse(T0>=95 & T1 >=95, "hypertensive",
ifelse(T0<95 & T1>=95, "Changing1", "Changing2"))))
ggplot(df, aes(x=T0, y=T1,colour=grp))+
geom_point()+
scale_x_continuous(limits=c(70,110), breaks=c(70, 80, 90, 95, 100, 110))+
scale_y_continuous(limits=c(70,110), breaks=c(70, 80, 90, 95, 100, 110))+
geom_vline(xintercept=95, colour="black")+
geom_hline(yintercept = 95, colour="black")+
scale_colour_manual(values=c("blue", "orange", "magenta", "green3"))+
theme_classic()+
theme(legend.position = "none")
23 sujets ont une mesure supérieure à 95 mmH à T0 (au-delà du trait vertical). Parmi ces 23 sujets, 16 (soit 70%) ont une valeur à T1 inférieure à celle de T0 (groupe 2 et 3) dont 5 avec une valeur de T1 inférieure à 95 mmHg (groupe 3).
\[ y1 = cste + a \times type (y_0 – \bar{y_0}) + b \times group + error \]
Voici quelques liens pour en apprendre davantage sur ce phénomène de régression à la moyenne
J’espère que ce court article d’introduction à la régression à la moyenne vous permettra d’appréhender un peu ce phénomène, et vous rendra vigilants lors de l’interprétation de résultats de comparaisons de type avant / après.
Si cet article vous a plu, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don sur sa page Tipeee. Si cet article vous a plu, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don sur sa page Tipeee
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.
8 Responses
Merci Claire pour cet excellent article et son illustration en biomédecine.
Très bon sujet, effectivement négligé.
En anglais j’aime bien l’exemple de Veritasium dans
« How We’re Fooled By Statistics » https://www.youtube.com/watch?v=1tSqSMOyNFE
Merci beaucoup Claire cet article était vraiment très intéressant. Je vais continuer d’approfondir mes lectures sur le sujet.
Merci beaucoup, Claire cet article était très intéressant. Je vais continuer d’approfondir mes connaissances sur le sujet.
Merci Claire pour cet article, ta méthode de la rendre digeste.
Excellent article. La notion de régression à la moyenne rendue tangible et compréhensible par tous. Merci Claire !
Merci Sandra !
la régression à la moyenne est due à la corrélation imparfaite entre les 2 mesures !
Merci Claire pour ce sujet passionnant que devrait bien intégrer les chercheurs mais aussi les cliniciens. On peut observer de probable régression à la moyenne dans des suivis individuels. En rééducation, sur des cas neurologiques lourds par exemple, les premières évaluations motrices peuvent être très mauvaises en raison tout simplement de l’état psychologique de la personne, de la prise de conscience du diagnostic, de l’inconnu du devenir, de la découverte des plateaux de rééducation et de leurs personnels. Cela se traduit par une évolution typique d’une amélioration progressive des premières semaines suivi d’un plateau de performance qui précède une nouvelle dégradation. Les conditions de mesure vont jouer un rôle important dans cette courbe évolutive, les mauvaises conditions du début laissent place à un espace et des interactions sociales rassurantes, d’où un retour vers la vraie valeur de la performance, et qui va continuer à croitre par l’aspect encourageant. Elle va néanmoins rencontrer un plateau qui va au final décourager la personne et la faire régresser. Dans ce type de courbe, il est probable que la performance réelle n’ait pas bougée et que les thérapeutes aient attribué les progrès à leur action qui n’a eu, en réalité, aucune influence. En mettant en plus dans l’équation l’histoire naturelle de la maladie, l’effet Hawthorne et l’effet placebo, il est très difficile d’apporter la preuve que le thérapeute à été efficient. Le bon coté, c’est que lorsque l’évolution est positive, même si le thérapeute n’y est pour rien, il en récolte les bénéfices (et se prend parfois pour ce qu’il n’est pas). Tout ces process sont opérationnels dans l’utilisation de traitements dont on a les preuves de l’effet et c’est un plus pour le patient, par contre ils constituent la plupart du temps le seul fondement actif des traitements alternatifs dans les médecines douces. Les courbes d’amélioration, de plateau et de dégradation sont extrêmement communes dans ces interventions. Cela pose aussi la question de la fiabilité des mesures, des erreurs standards et des changements minimum détectables, on aura peut être une page sur le sujet ? Merci encore pour ce formidable blog.