TD1 : Statistiques descriptives

Types de variables

1. Pour chacune des variables suivantes, dire si elles sont qualitatives (catégorielles) ou quantitatives et discrètes ou continues

• La race d’un chien

• Le salaire d’un individu

• La marque d’un téléphone portable

• L’âge d’un individu

• Le nombre de députés d’un pays

• La température d’un réacteur nucléaire

• Le nombre de frères et soeurs d’un individu

Affichage/visualisation de données

Histogrammes

Exemple : représentation de la distribution de taille d’individus

Des données ont été collectées par Benjamin Yakir et enregistrées dans le fichier “exemple.csv”. On peut les stocker dans un objet R de type “dataframe” nommé data_Yakir avec le code suivant :

data_Yakir <- read.csv("exemple.csv")

et afficher les premiers éléments avec la commande “head”

head(data_Yakir)
       id    sex height
1 5696379 FEMALE    182
2 3019088   MALE    168
3 2038883   MALE    172
4 1920587 FEMALE    154
5 6006813   MALE    174
6 4055945 FEMALE    176

On voit que les données consistent en une colonne avec un numéro d’identification, une colonne avec le sexe de l’individu, et une colonne avec la taille.

On peut isoler ces dernières données et les placer dans un nouveau “vecteur” taille :

taille <- data_Yakir$height

On peut constater avec la commande print que taille contient tout un tas de valeurs.

print(taille)
  [1] 182 168 172 154 174 176 193 156 157 186 143 182 194 187 171 178 157 156
 [19] 172 157 171 164 142 140 202 176 165 176 175 170 169 153 169 158 208 185
 [37] 157 147 160 173 164 182 175 165 194 178 178 186 165 180 174 169 173 199
 [55] 163 160 172 177 165 205 193 158 180 167 165 183 171 191 191 152 148 176
 [73] 155 156 177 180 186 167 174 171 148 153 136 199 161 150 181 166 147 168
 [91] 188 170 189 117 174 187 141 195 129 172

On trace un histogramme avec la fonction hist. Notez qu’on peut imposer les limites de l’axe x avec xlim.

hist(taille,xlim=c(100, 220))

On peut changer le nombre de “paniers” (bins en anglais) avec le mot-clef “breaks” (qui peut correspondre à différentes choses, mais si vous précisez un seul nombre, ce sera le nombre approximatif de paniers : “a single number giving the number of cells for the histogram”)

1. Tracer le même histogrammes avec 5 ou 50 “paniers”

Attention, le mot “frequency” ici en anglais signifie la fréquence au sens de “compte”

Utilisation de ggplot

Nous pouvons utiliser ggplot, et travailler non sur les vecteurs simples, mais directement sur une “dataframe”. Cela offre simplicité et fonctionnalités nouvelles. Là encore, on peut imposer les limites avec xlim.

library("tidyverse")
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.3     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.0
✔ ggplot2   3.4.4     ✔ tibble    3.2.1
✔ lubridate 1.9.2     ✔ tidyr     1.3.0
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
ggplot(data_Yakir, aes(x=height)) + geom_histogram() + xlim(c(100,220))
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Warning: Removed 2 rows containing missing values (`geom_bar()`).

ggplot utilise le mot plus explicite de “count”

Vous pouvez changer la taille du panier avec le mot-clef “binwidth=” qui determine la largeur du “panier”

2. Tracer à nouveau le même histogrammes, en utilisant ggplot, et en changeant la taille du panier. essayer par exemple 1 ou 40 cm (en gardant les limites en x à 100 et 220).

3. Quelle serait une “bonne” largeur de “panier” ?

4. Vous pouvez trier ici les personnes par sexe, et représenter avec des couleurs différentes les filles et les garçons. Indication : le mot-clef “fill” permet de choisir la couleur de remplissage, le mot-clefs “alpha” correspond à la transparence

Exercice : taille de cellules de plantes

Nous allons réutiliser les données déjà vues au TD0 (ou non!), issues de microscopies confocales, et qui mesurent précisément la tailles des cellules et des noyaux dans un meristème floral. On rappelle que les données brutes correspondantes sont dans le fichier “cell-nuclei.csv” sur le portail.

#Image du meristeme floral

5. Charger en mémoire les mesures effectuées sur les cellules de plante. Fichier “cell-nuclei.csv”sur le portail

6. Représenter l’histogramme de la répartition du volume des cellules

7. Superposer l’histogramme de la répartition du volume des cellules, à celui de la répartition du volume des noyaux

“Rug plots”

Un “rug plot” est une représentation compacte et discrète de la densité des données. Voir https://ggplot2.tidyverse.org/reference/geom_rug.html pour plus de détails.

Voici un exemple si l’on veut représenter le volume des cellules en fonction des volumes des noyaux, tout en ayant une idée de la densité, et sans utiliser d’histogramme.

donnees_meristeme <- read.csv("cell-nuclei.csv")
ggplot(donnees_meristeme, aes(x=volume,y=nuc_volume))  + geom_point()  + geom_rug()

Courbes de densité

L’option aes(y = after_stat(density))` permet de tracer l’histogramme en “densité” et non en “count”

8. Quel est le lien entre ces deux histogrammes ?

ggplot(donnees_meristeme, aes(x=volume)) + geom_histogram(binwidth=20) + xlim(0,800)
Warning: Removed 16 rows containing non-finite values (`stat_bin()`).
Warning: Removed 2 rows containing missing values (`geom_bar()`).

ggplot(donnees_meristeme, aes(x=volume)) + geom_histogram(binwidth=20, aes(y = after_stat(density))) + xlim(0,800)
Warning: Removed 16 rows containing non-finite values (`stat_bin()`).
Removed 2 rows containing missing values (`geom_bar()`).

Une représentation alternative à l’histogramme, et qui est plus adaptée pour une variable continue est la courbe de densité

ggplot(donnees_meristeme, aes(x=volume)) + geom_density()

On peut superposer les deux pour comprendre la signification de cette courbe de densité.

ggplot(donnees_meristeme, aes(x=volume)) + geom_histogram(binwidth=20, aes(y = after_stat(density)))+ geom_density(col="red")+ xlim(0,800)
Warning: Removed 16 rows containing non-finite values (`stat_bin()`).
Warning: Removed 16 rows containing non-finite values (`stat_density()`).
Warning: Removed 2 rows containing missing values (`geom_bar()`).

Boxplots (boites à moustaches)

Définition

On rappelle que la boite à moustache (boxplot) est une représentation plus contacte qui est construite à partir de 5 valeurs :

  • aux extrémités, les valeurs minimales et maximales

  • au centre la médiane

  • les limites de la “boite” qui représentent le premier (Q1) et le troisième (Q3) quartile. On appelle d’ailleurs écart interquartile, la valeur EI = Q3 - Q1 qui représente donc la hauteur de la boite.

Concrètement, il y a autant de points contenus dans chacun des quatre intervalles

En reprenant l’exemple précédent, on peut tracer la boite à moustache de la distribution de taille

boxplot(taille)

Exclusion de valeurs extrèmes de la boite à moustache

On remarque qu’il y a un point qui n’est pas contenu dans la boite à moustache car il est trop “extrême” par rapport au reste de la distribution. Le critère est le suivant pour exclure les points extrêmes.

Les points sont exclus

-si leur valeur est inférieure à Q1 -1.5*EI

-si leur valeur est supérieure à Q3 +1.5*EI

9. Vérifier graphiquement que le critère a bien été respecté dans l’exemple ci dessus

Exercices

10. Tracer la boite à moustache correspondant à la distribution des tailles des personnes présentes dans la salle. Dans un premier temps vous réaliserez cette boite à moustache “à la main” (papier/crayon)

10 bis. Vérifier votre résultat à l’aide de l’ordinateur

Rappel : on peut définir un vecteur (une collection de valeurs numériques, par exemple 1,12,5,7) avec la syntaxe

vecteur <- c(1,12,5,7)

On peut aussi avoir des informations sur un vecteur avec la commande summary()

11. Tracer la boite à moustache correspondant à la distribution des volumes des cellules segmentées

On peut aussi tracer les boites à moustache avec ggplot. avec la fonction geom_boxplot() Attention, il faut penser à convertir la variable layer en facteur (voir TD0 si besoin)

12. Tracer les boites à moustache correspondant chacune seulement à la distribution des volumes des cellules qui appartiennent à la couche 1, 2, 3 ou 4 respectivement. On pourra ensuite tracer ces 4 boites à moustaches ensemble sur un graphique en fonction de i, le label de la couche de cellule.

Fonctions de répartition

La fonction de répartition empirique d’un échantillon x à un point t correspond à la proportion des valeurs de l’échantillon x plus petites où égales à t.

13. Tracer à la main la fonction de répartition empirique des tailles des personnes de la salle.

Sous R, la fonction de répartition d’un vecteur x peut s’obtenir avec la commande ecdf()

14. Vérifier votre résultat avec R. Quel est le lien entre la fonction de répartition et les valeurs des quartiles trouvés précédemment? Vérifier la cohérence de vos résultats. Vous pourrez pour cela utiliser la fonction abline(h = y0)y0 est la position d’une ligne horizontale qui sera tracée. Quelles sont les lignes horizontales pertinentes à tracer ?

15. Tracer la fonction de répartition empirique pour le volume des cellules de plantes de l’étude précédente.

Quantification des données

Mesure du “centre” des données

Nous avons déjà vu que le “centre” de la distribution pouvait être estimé avec la médiane. Une autre façon de quantifier ce “centre” est de calculer la moyenne.

16. Calculer manuellement la moyenne des tailles des personnes de la salle, comparer avec la valeur de la médiane. Commenter.

Nous allons maintenant comparer plusieurs échantillons

set.seed(0)
echantillon1 <- rnorm(100000,mean=5,sd=2)
echantillon2 <- rbeta(100000,10,2)
echantillon3 <- rexp(100000,1)

17. Pour chacun des échantillons, tracer les histogrammes, puis comparer la moyenne et la médiane. Commenter.

Mesure de l’étalement des données

Nous avons déja vu l’écart interquartile qui est une première estimation de l’étalement des données. Vous avez vu en cours qu’une mesure plus complète est l’écart type qui est défini comme la racine carré de la variance, elle même étant la moyenne des déviations au carré.

18. Construisez étape par étape la valeur de l’écart type de la distribution des tailles des personnes présentes dans la pièce. Commencer par calculer les déviations, puis les déviations au carré, puis la moyenne de cet objet, puis la racine carré de cette valeur. Comparer avec le résultat obtenu directement avec la commande sd() de R (“standard deviation” en anglais)

19. Calculer les écart types des trois échantillons précédents. Discuter la cohérence du résultat par rapport à la représentation graphique

20. Représenter graphiquement sur l’histogramme des tailles, la position de la moyenne, de la mediane et des quartiles. Vous pourrez pour cela utiliser la fonction abline(v = x0)x0 est la position d’une ligne verticale qui sera tracée.

Moyenne et écart type

Exercice de Denis Poinsot

Denis Poinsot pose une question amusante dans son livre “Statistiques pour statophobes” :

Voici un extrait de son livre :

“Supposons pour les besoins de la démonstration que vous soyez un étudiant de 22 ans rêvant de rencontrer l’âme sœur lors de vos prochaines vacances d’été. Nous supposerons de surcroît que le coût [incluant le coût écologique!] du voyage et de l’hébergement ne sont pas un problème (ceci est presque un ouvrage de mathématiques après tout alors autant éliminer tout réalisme et y aller carrément). Supposons cependant que, hélas, toutes les destinations soient complètes et qu’il ne vous reste plus que deux possibilités de lieux de vacances:

Choix 1. La Datcha du Corbeau Mort, une paisible pension de famille dans la banlieue industrielle de Verkoïansk (Sibérie).

Choix 2. Surf Island, une île paradisiaque baignée par des vagues superbes à quelques miles au large de Hawaii.

Réfléchissez bien. Oh, avant que j’oublie, voici une autre information: Moyenne d’âge des 252 hôtes de la Datcha du Corbeau Mort : 64 ans Moyenne d’âge des 248 hôtes de Surf Island : 22 ans

20. Quelle destination choisissez vous? C’est un choix difficile. Mais je suppose que vous êtes parvenu à vous décider.

Dans l’avion qui vous mène à destination, vous découvrez l’information suivante, imprimée en tout petits caractères en bas de la brochure distribuée par l’agence : Variance de l’âge des hôtes de la Datcha du Corbeau Mort : 1092 ans (au carré) Variance de l’âge des hôtes de Surf Island : 372 ans (au carré)”

21. Avec cette information supplémentaire (en plus des informations précédentes!), pouvez vous imaginer différentes allures compatibles de distribution

En réalité, dans le livre de Denis Poinsot, les répartitions ressemblent à ceci

set.seed(0)
enfants <- rnorm(134,mean=3.7,sd=3)
parents <- rnorm(114,mean=43.2,sd=3)
Hawaii= c(enfants,parents)
infirmierEs <- rnorm(95,mean=22,sd=1.5)
vieux <- rnorm(157,mean=90,sd=3)
Siberie = c(infirmierEs,vieux)

hist(Hawaii,breaks=30)

mean(Hawaii)
[1] 21.85821
var(Hawaii)
[1] 396.8644
hist(Siberie,breaks=30)

mean(Siberie)
[1] 64.33373
var(Siberie)
[1] 1091.828

22. Est ce qu’une représentation en boite à moustache aurait contenu plus d’information? Tracez-les. Pour cela vous pourrez commencer par réorganiser les données sous forme de dataframe avec les facteurs appropriés

Tracé en forme de violons (“violin plots”)

23. Une variation des “boxplot” sont les “violin plots”. Est ce que ce type de représentation serait plus utile ici ? le mot-clef correspondant pour ggplot est + geom_violin().

donnees_Poinsot <- data.frame(age = c(Hawaii,Siberie),
                   lieu = c(rep("Hawaii", length(Hawaii)),
                             rep("Siberie", length(Siberie))))

ggplot(donnees_Poinsot,aes(x=lieu,y=age)) + geom_violin()

Variables aléatoires et réalisations

On considère un dé équilibré à 6 faces. Après 12 lancers, les résultats sont les suivants :

  • “2” est obtenu trois fois
  • “3” est obtenu une fois
  • “4” est obtenu quatre fois
  • “5” est obtenu trois fois
  • “6” est obtenu une fois

24. Quelle est la loi de la variable aléatoire X correspondant au lancer d’un dé équilibré ? Quelle est la fonction de répartition théorique de cette variable aléatoire ? Quelle sont l’espérance et la variance de X ? Quel est le quantile théorique d’ordre 1/4 ?

25. Quelle est la moyenne empirique correspondant aux 12 lancers? Quelle est la variance empirique ? Quelle est la fonction de répartition empirique? Quel est le quantile théorique d’ordre 1/4 ?

26. Superposer sur un seul graphe la fonction de répartition empirique, correspondant aux 12 lancers, avec la fonction de répartition théorique

theorique <-c(1,2,3,4,5,6)
reel <- c(rep(2,3),rep(3,1),rep(4,4),rep(5,3),rep(6,1))
plot(ecdf(theorique),col="blue")
plot(ecdf(reel),col="red",add=T)

27. Créer un vecteur qui stockera les résultats d’un très grand nombre n de lancers. Et superposer à nouveau les deux fonctions de répartition. Faire varier le nombre n et commenter.

Revenons à nos 12 lancers. il est important de comprendre que si l’on répète l’expérience de lancers de 12 dès un grand nombre m de fois, certaines valeurs pour x̄12 (la moyenne de nos 12 lancers) sortirons plus que d’autres. Nous allons vérifier cela numériquement en jouant avec m.

28. Créer une fonction qui réalise n lancers de dés et qui calcule la moyenne de ces n lancers. Tester cette fonction pour le cas n=12 qui nous interesse.

moyenne_de_n_lancers_de_des <- function(n) {
reel_n_lancers <- sample(x = c(1, 2,3,4,5,6), size = n, replace = TRUE)
mean(reel_n_lancers)
}
moyenne_de_n_lancers_de_des(12)
[1] 3.833333

29. Utiliser la fonction apply (voir TD0 si besoin), en combinaison avec la fonction créée à la question précédente, pour générer un vecteur de longueur m ou chaque composante représentera une réalisation de n=12 lancers. Tracer enfin l’histogramme de ce vecteur de taille m.

30. Jouez avec la valeur de m, et superposez différent histogrammes. Commenter