<- read.csv("exemple.csv") data_Yakir
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 :
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 :
<- data_Yakir$height taille
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.
#
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.
<- read.csv("cell-nuclei.csv")
donnees_meristeme 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
<- c(1,12,5,7) vecteur
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)
où 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)
<- rnorm(100000,mean=5,sd=2)
echantillon1 <- rbeta(100000,10,2)
echantillon2 <- rexp(100000,1) echantillon3
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)
où 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)
<- rnorm(134,mean=3.7,sd=3)
enfants <- rnorm(114,mean=43.2,sd=3)
parents = c(enfants,parents)
Hawaii<- rnorm(95,mean=22,sd=1.5)
infirmierEs <- rnorm(157,mean=90,sd=3)
vieux = c(infirmierEs,vieux)
Siberie
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()
.
<- data.frame(age = c(Hawaii,Siberie),
donnees_Poinsot 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
<-c(1,2,3,4,5,6)
theorique <- c(rep(2,3),rep(3,1),rep(4,4),rep(5,3),rep(6,1))
reel 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.
<- function(n) {
moyenne_de_n_lancers_de_des <- sample(x = c(1, 2,3,4,5,6), size = n, replace = TRUE)
reel_n_lancers 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