C'est de la data et mon expeRtise afin d'en tirer le maximum

Démonstration du théorème central limite (TCL)

Introduction

Le théorème central limite (TCL) est un théorème très important en biostatistique. Ce théorème nous dit que, quelle que soit la distribution d’une variable aléatoire X, la somme de cette variable (S(x)), et par extension, la moyenne (moy(x)), puisque la moyenne est une somme divisée par une constant), suivent une distribution normale.

Autrement dit, même si une variable ne suit pas une distribution normale, la moyenne de cette variable suit une distribution normale.

C’est le recours à ce théorème qui nous permet, entre autres, d’estimer l’intervalle de confiance d’une moyenne, en employant la formule :

\[IC = \bar{x} \pm z_{1-\frac{\alpha}{2}}\;\frac{sd(x)}{\sqrt{n}}\]

On parle d’approximation normale de l’intervalle de confiance, puisque le terme Z1_α/2 est le quantile de la loi normale correspondant à la probabilité 1−α/2 .

Pour un intervalle de confiance à 95%, α = 0.05 et le quantile correspondant à la probabilité 0.975 (les 5% sont répartis pour moitié à droite, pour moitié à gauche) est égal à 1.965.

Il est courant d’accepter l’application de ce théorème lorsque le nombre de données est au moins égale à 30 (c’est un chiffre que l’on retrouve souvent, je ne sais pas d’où il vient, et je ne doute que ce nombre soit toujours suffisant).

Démonstration

A partir d'une loi uniforme

Pour cela, nous allons simuler 50 valeurs d’une variable X, selon une loi uniforme, en spécifiant une valeur minimum de 10 et une valeur maximale de 20.

La loi uniforme spécifie que la densité de probabilité est constante sur l’intervalle [min; max]

Autrement dit, la probabilité de sélectionner une valeur entre le min et le max spécifiés est la même, elle est constante.

# permet de fixer la graine du tirage aléatoire, pour que l'exemple soit reproductible
set.seed(2)
# génération de 50 données selon la loi uniforme de min=10 et max=20
x <- runif(50,min=10, max=20)
Nous allons, à présent, afficher les 6 premières valeurs simulées et visualiser la distribution de l’ensemble des 50 valeurs :

# affichage de 6 premières valeurs simulées
head(x)

## [1] 11.84882 17.02374 15.73326 11.68052 19.43839 19.43475

# visualisation de la distribution des
hist(x, breaks=10, col="skyblue", main="Simulation de l'échantillon\n selon une loi uniforme") 

Comme nous pouvons le voir la distribution de la variable x a plutôt une forme uniforme, et absolument pas normale (on dit aussi gaussienne). Une distribution gaussienne à une forme en cloche comme ceci :

Enfin, nous calculons la moyenne (moy(x)):

moy_x = mean(x)
moy_x

## [1] 15.11183 

Pour évaluer la distribution de la moyenne de x (moy(x)), une seule valeur n’est pas suffisante ! Il nous faut donc recommencer la simulation d’un échantillon de valeurs un grand nombre de fois (10 000 par exemple), et stocker la moyenne de chaque échantillon dans un vecteur :

# Nombre de simulations
nb_sim <- 10000

# Taille de l'échantillon simulé
sample_size <- 50
# initialisation du vecteur de stockage des moyennes
moy_vec <- vector(length=nb_sim)

# simulations
set.seed(2)
for (i in 1 : nb_sim)
{
x <- runif(sample_size,10, 20)
moy_vec[i] <- mean(x)
} 

A présent que la moyenne de chaque échantillon simulé est contenue dans le vecteur, nous allons pouvoir visualiser la distribution de ces moyennes :

hist(moy_vec, breaks=20, col="red3", main="Distribution des moyennes\n des échantillons simulés\n selon une loi uniforme") 

Nous pouvons voir que les moyennes ont bien une distribution gaussienne !

A partir d'une loi log-normale

Essayons, à présent, avec une autre distribution, log-normale par exemple, qui est une distribution asymétrique :

# permet de fixer la graine du tirage aléatoire, pour que l'exemple soit reproductible
set.seed(2)
# génération de 50 données selon la loi log normal (meanlog=0, sdlog=1)

x <- rlnorm(50, meanlog = 0, sdlog = 1)

hist(x, breaks=10,col="skyblue", main="Simulation de l'échantillon\n selon une loi log-normale" ) 

A partir d'une loi log-normale

Comme attendu, nous pouvons voir que la distribution de la variable x est bien asymétrique, et absolument pas normale.

mean(x)

## [1] 1.920796

# Nombre de simulations
nb_sim <- 10000

# Taille de l'échantillon simulé
sample_size <- 50
# initialisation du vecteur de stockage des moyennes
moy_vec <- vector(length=nb_sim)

# simulations
set.seed(1)
for (i in 1 : nb_sim)
{
x <- rlnorm(sample_size , meanlog = 0, sdlog = 1)
moy_vec[i] <- mean(x)
} 
hist(moy_vec, breaks=20, col="red3", main="Distribution des moyennes\n des échantillons simulés\n selon une loi log normale (n=50)") 

Bien que la distribution ne soit pas parfaitement gaussienne, elle en a globalement la forme.

Si nous augmentons la taille des échantillons générés à 100, nous pouvons voir que la “normalité” s’améliore :

distribution de la moyenne d'un échantillon selon loi log-normal avec n=200

La normalité s’améliore encore davantage avec n=200 !

J’espère que cette petite démonstration vous permettra de mieux comprendre ce théorème central limite, et son implication dans le calcul de l’intervalle de confiance.

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 🙏

14 réponses

  1. Bonjour Madame.
    Vous accomplissez un travail formidable.
    Vos articles regorgent beaucoup d’intérêt et de pertinence.

    Merci.

  2. Hey !

    Merci pour cet article, mais j’ai deux petites questions concernant l’application pratique du théorème.

    1) Mettons que le labo où je bosse me demande une analyse statistique sur les résultats de 100 prélèvements concernant un gène X.

    Les valeurs ne suivent pas une loi normale (on va dire qu’elles sont uniformes). Comme est-ce que le CTL s’applique ? Je ne peux pas générer des valeurs aléatoires pour obtenir plusieurs moyennes comme on le fait ici, puisque je dois travailler sur ces 100 prélèvements.

    2) Dans le cas où l’on peut appliquer le CTL, celui-ci ne sert bien qu’à déterminer les intervalles de confiance n’est-ce pas ? Est-ce que cela ne revient pas au même que de calculer les intervalles de confiance via le SEM ?

    Merci d’avance ^^

  3. BONJOUR Mme CLAIRE DELLA VEDORA

    Merci Infiniment pour votre collaboration

    veuillez nous informer sur logiciel “R” réseau neurone artificiel

    et merci d’avance

Laisser un commentaire

Votre adresse de messagerie 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.