Fluctuations d'échantillonnage et biais

Je vous propose ici un court article pour illustrer, à travers un exemple simple, la différence entre fluctuations d’échantillonnage et biais.

Fluctuations d'échantillonnage et erreurs aléatoires

Imaginons que l’on souhaite connaître la taille réelle moyenne des garçons de 8 ans, en France. Autrement dit, la taille moyenne de la population constituée par tous les garçons de 8 ans en France. Cette moyenne est inconnue en réalité. Mais pour cet exemple, nous allons imaginer qu’elle est égale à 129 cm.

Puisque cette moyenne est en réalité inconnue, et que l’on ne peut pas mesurer tous les garçons de 8 ans un par un, le principe consiste à estimer cette moyenne à partir d’un échantillon. Par exemple, 50 (par exemple) garçons de 8 ans vont être choisis au hasard sur tout le territoire (afin que l’échantillon soit représentatif de la population). Puis ils vont être mesuré individuellement. Et enfin, la moyenne de l’échantillon, c’est-à-dire des 50 mesures, va être calculée pour estimer la moyenne de la population des garçons de huit ans.

Simulons cela avec des données. Il est très vraisemblable que la taille des garçons suivent une loi  normale, de moyenne 129 cm (puisque nous avons convenu que c’est la valeur de la vraie moyenne), et d’écart type (s) de 2.5 cm (là aussi convenons que c’est la vraie valeur).

Nous allons donc simuler 50 données de taille de garçon de 8 ans selon cette loi normale :

options(digits=5)
x1 <- rnorm(50,129,2.5)
x1

##  [1] 127.43 129.46 126.91 132.99 129.82 126.95 130.22 130.85 130.44 128.24
## [11] 132.78 129.97 127.45 123.46 131.81 128.89 128.96 131.36 131.05 130.48
## [21] 131.30 130.96 129.19 124.03 130.55 128.86 128.61 125.32 127.80 130.04
## [31] 132.40 128.74 129.97 128.87 125.56 127.96 128.01 128.85 131.75 130.91
## [41] 128.59 128.37 130.74 130.39 127.28 127.23 129.91 130.92 128.72 131.20 

Puis nous calculer la moyenne de cet échantillon :

mean(x1)
## [1] 129.25 

Nous pouvons observer que la moyenne obtenue est proche de 129, mais sans être strictement égale à 129.

Imaginons, à présent, que pour une raison ou une autre, il faille à nouveau ré-échantillonner 50 garçons de 8 ans. Ces nouveaux 50 garçons seront un peu différents des 50 premiers garçons 

x2 <- rnorm(50,129,2.5)
x2

##  [1] 126.76 129.46 132.97 126.17 128.80 129.33 130.77 128.40 133.96 128.65
## [11] 130.04 131.45 128.02 126.40 133.46 123.22 131.20 129.09 131.53 130.08
## [21] 134.23 126.00 132.97 133.89 129.01 122.87 130.19 127.51 130.98 129.72
## [31] 130.85 129.80 131.69 128.29 127.06 127.51 124.69 126.74 127.60 128.38
## [41] 128.04 124.10 126.90 133.76 130.56 133.98 128.24 128.77 128.54 126.00 

La moyenne des tailles sera donc aussi un peu différente :

mean(x2)
## [1] 129.17 

La nouvelle moyenne estimée est également proche de 129, mais sans être strictement égale à 129, ni strictement identique à la première moyenne estimée.

Recommençons alors 10 fois l’expérience :

m_hat_vec <- vector(length=10)
    for ( i in 1 : 10)
    {
     x <-rnorm(50, 129,2.5) 
     m_hat_vec[i] <- mean(x)
    }

m_hat_vec 
##  [1] 128.67 129.45 128.70 129.47 129.25 129.68 129.89 128.50 128.77 129.61 

Et visualisons les moyennes estimées sur un graphique :

m_hat_df <- data.frame(m_hat_vec )

library(ggplot2)
ggplot(m_hat_df, aes(y=m_hat_vec,x=1 ))+
    geom_point(size=3)+
    coord_flip()+
    scale_y_continuous(limits=c(127,131))+
    scale_x_continuous(limits=c(0.975, 1.025), breaks=NULL)+
    xlab("")+
    geom_point(x=1, y=129, size=5, colour="red")+
    theme_bw() 

Nous pouvons voir que les 10 moyennes estimées sont toujours un peu différentes de la vraie moyenne, et que ces différences, que l’on peut considérer comme des erreurs, sont aléatoires (parfois un peu inférieures, parfois un peu supérieures). Autrement dit, les fluctuations d’échantillonnage entraînent des erreurs aléatoires dans l’estimation des paramètres (dans notre cas, une moyenne).

Et ces erreurs, sont nulles en moyenne, puisqu’elles sont aléatoirement un peu inférieure ou un peu supérieures. Autrement dit, en moyenne les estimations de la moyenne de la population sont égales à la vraie moyenne. Pour illustrer ce point, simulons 1000 moyennes:

options(digits=7)

m_hat_vec2 <- vector(length=1000)
    for ( i in 1 : 1000)
    {
     x <-rnorm(50, 129,2.5) 
     m_hat_vec2[i] <- mean(x)
    } 

Et calculons la moyenne de ces 1000 moyennes estimées :

mean(m_hat_vec2)
## [1] 128.9939 

Vous conviendrez que c’est extrêmement proche de 129 !

Intervalle de confiance

Puisque l’estimation d’un paramètre d’une population, à partir d’un échantillon, est entaché d’une erreur aléatoire (du fait de la fluctuation de l’échantillonnage), on encadre généralement cette estimation d’un intervalle de confiance à 95%.Cet intervalle de confiance permet de préciser une étendue de valeurs qui a une probabilité de 95% de contenir la moyenne de la population.Attention, cela ne veut pas dire que la vraie moyenne a une probabilité de 95% de se situer dans cet intervalle. La moyenne de la population n’est pas une variable aléatoire, c’est une constante, elle a une valeur fixe. La moyenne de la population n’est donc pas associée une probabilité de “tomber” dans un intervalle. Elle est dans l’intervalle ou elle ne l’est pas !Le calcul de l’intervalle de confiance, peut selon le paramètre concerné (moyenne, médiane, coefficient de corrélation etc…) être estimé par des formules. Par exemple ici, pour une moyenne :\[IC_{95\%}= \left[\hat{m}-1.96 \;\ast \frac{\hat{s}}{\sqrt(n)} ; \hat{m}+1.96 \;\ast \frac{\hat{s}}{\sqrt(n)} \right]\]Avec :
  • m_hat : la moyenne des tailles observée sur l’échantillon
  • s_hat : l’écart type des tailles observée sur l’échantillon
my_m_hat <- mean(x1)
    my_m_hat
    ## [1] 129.2511
    my_s_hat <- sd(x1)
    my_s_hat
    ## [1] 2.078485
    n <- 50
    binf <- my_m_hat -1.96*my_s_hat/sqrt(50)
    binf
    ## [1] 128.675
    bsup <- my_m_hat +1.96*my_s_hat/sqrt(50)
    bsup
    ## [1] 129.8272 

Soit ici [ 128.6, ; 129.83].

Une autre façon d’envisager l’intervalle de confiance à 95% est de dire que si on recommençait 100 fois l’expérience de l’échantillonnage, de l’estimation de la moyenne, et de l’estimation de son intervalle de confiance, alors 95 intervalles sur 100 contiendront la vraie valeur de la moyenne (fixée et inconnue) et 5 ne la contiendront pas.

Lorsqu’il n’existe pas de formule pour calculer l’intervalle de confiance d’un paramètre, cet intervalle peut être estimé par des techniques de ré-échantillonnage (bootstrap). Pour cela, on peut par exemple utiliser le package slipper comme ça :

devtools::install_github('jtleek/slipper')

library(slipper)
taille_df <- data_frame(taille=x1) taille_df %>% 
slipper_ci(mean(taille),B=100, lower=0.025, upper=0.975) 

##     ci_low  ci_high
## 1 128.6075 129.8037 

On peut voir que les deux intervalles de confiance sont très proches.

Biais et erreurs systématiques

Nous venons de le voir, les erreurs engendrées par les fluctuations d’échantillonnage ont un caractère aléatoire. Les erreurs causées par les biais, au contraire, sont des erreurs systématiques.

Pour l’illustrer, imaginons que la personne en charge de choisir aléatoirement 50 garçons de 8 ans sur l’ensemble du territoire français, réalise en réalité un tirage au sort sur quelques départements réputés pour la grande taille de leurs habitants.

Dans cette situation, l’échantillon des 50 garçons de 8 ans n’est pas représentatif de la population, il y a alors un biais de sélection. La conséquence de ce biais est une surestimation systématique la taille de la population des garçons de 8 ans.

En voici une simulation :

m_hat_vec3 <- vector(length=10)
    for ( i in 1 : 10)
    {
     x2 <-rnorm(50, 132,2.5)    
     m_hat_vec3[i] <- mean(x2)
    }
m_hat_vec3

##  [1] 132.0925 131.4560 132.2760 132.0532 132.3859 131.2164 131.6312
##  [8] 131.7636 131.8795 131.8276

m_hat_df <- data.frame( m_hat_vec3) 
library(ggplot2)
ggplot(m_hat_df, aes(y=m_hat_vec3,x=1))+
    geom_point(size=3, show.legend = FALSE, colour="blue")+
    coord_flip()+
    scale_y_continuous(limits=c(127,137))+
    scale_x_continuous(limits=c(0.975, 1.025), breaks=NULL)+
    geom_point(x=1, y=129, size=5, colour="red", show.legend = FALSE)+
    scale_colour_manual(values=c("black", "blue"))+
    theme_bw() 

Les biais en épidémiologie

La notion de biais est particulièrement importante en épidémiologie étiologique, lorsqu’on cherche à mesurer la force d’un lien entre une exposition et une maladie, par l’intermédiaire du calcul d’odds ratio ou des risque relatifs. En effet, de nombreux types de biais peuvent entacher cette relation. Ils sont classiquement regroupés en trois grandes familles :

  • les biais de sélection : par exemple dans une enquête cas témoins lorsque les témoins ne sont pas représentatifs de la population cible (celle à laquelle on veut généraliser les résultats) en termes d’exposition.
  • les biais d’information : par exemple dans une enquête de cohorte lorsque les informations concernant la maladie sont mémorisées (et donc transmise au travers du questionnaire) de façon différente par les sujets exposés et non exposés.
  • les biais de confusion, lorsque le lien entre un facteur d’exposition et la maladie (café et cancer du poumon par exemple) est en réalité déformé par la présence d’un autre facteur lié à la fois à la maladie et à l’exposition (le tabac par exemple dans le lien entre café et cancer du poumon).

A l’intérieur des ces 3 grandes familles de bais, il en existe plusieurs sous catégories en fonction du type d’étude (cohorte, cas témoin ou transversale).

Si ce sujet vous intéresse, je vous recommande vivement de lire le livre du Docteur Alexis Clapin, “Enquêtes médicales et évaluation des médicaments : De l’erreur involontaire à l’art de la fraude”.

biais épidémiologie
Ce livre est très pédagogique, très agréable à lire et et les exemples employés pour décrire les différents biais des études épidémiologiques sont très parlants.

J’espère que ce court article permettra aux débutant de mieux distinguer ces deux notions de fluctuations d’échantillonnage, associés à des erreurs aléatoires, et de biais, associés à des erreurs systématique.

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 🙏

Crédits photos : Image par 3D Animation Production Company de Pixabay

6 Responses

  1. Bonjour,
    A propos de la formulation de l’intervalle de confiance à 95%. Je dirais plutôt que 95 intervalles sur 100 contiendront la vraie valeur de la moyenne (fixé et inconnue) et 5 ne la contiendront pas.
    Cordialement.
    LD

  2. Bonjour,
    Article très intéressant. Merci pour le temps que vous consacré toujours à nous fournir des articles de très haute qualité.

    Cordialement!

Laisser un commentaire

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

Bonjour !

vous venez souvent ?

Identifiez-vous pour avoir accès à toutes les fontionnalités !

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.