TP1_Exos.utf8.md

Exercice 1 : Yams

  1. Faire une fonction qui simule le lancement d’une pièce (résultat pile ou face).
  2. Faire une fonction qui simule le lancement d’un dé à 6 faces (avec la fonction sample()).
  3. Simuler le jeu de Yams (lancer de 5 dés simultanément) en utilisant les paramètres size et replace de la fonction sample().
  4. Estimer la probabilité d’obtenir un yams (5 des identiques) en utilisant les fonctions apply(), replicate() et unique(). Comparer à la valeur théorique.
# 1.a)
pile_ou_face <- function() sample(0:1, 1, replace=T)
# 1.b)
de <- function() sample(1:6, 1, replace=T)
#1.c)
yams <- function() sample(1:6, 5, replace=T)

num_exp = 1e6
simu <- replicate(num_exp, yams())
is_yams <- function(x) length(unique(x)) == 1
result <- apply(simu, MARGIN=2, FUN=is_yams)
proba_yams_empirique = sum(result) / num_exp
proba_yams_theorique = 1 / 6^4  # = 6 * 6^5
sprintf("Proba empirique %.2e vs. Proba theorique: %.2e",
        proba_yams_empirique, proba_yams_theorique)
## [1] "Proba empirique 7.47e-04 vs. Proba theorique: 7.72e-04"

Exercice 2 : Etude sur l’indice de la masse corporelle

On dispose d’un échantillon de 10 enfants agés de 3 ou 4 ans lors de leur entrée en maternelle. Les données disponibles pour chaque enfant sont :

  • le sexe : F pour fille et G pour garçon;
  • le fait que leur école soit située en ZEP : O pour oui et N pour non;
  • l’âge en années et en mois (constituant deux variables An et Mois);
  • le poids en kg arrondi à 100 g près;
  • la taille en cm arrondie à 0.5 cm près.
Prénom Erika Célia Eric Eve Paul Jean Adan Louis Jules Léo
Sexe F F G F G G G G G G
ZEP O O O O N O N O O O
Poids 16 14 13.5 15.4 16.5 16 17 14.8 17 16.7
An 3 3 3 4 3 4 3 3 4 3
Mois 5 10 5 0 8 0 11 9 1 3
Taille 100 97 95.5 101 100 98.5 103 98 101.5 100
  1. Choisissez la fonction R appropriée pour enregistrer les données de chacune des variables dans des vecteurs que vous nommerez Individus, Poids, Taille et Sexe.
  2. Calculez la moyenne des variables lorsque c’est possible.
  3. Calculer l’IMC des individus et regroupez les valeurs obtenues dans un vecteur nommé IMC sachant que \(IMC= \displaystyle \frac{Poids (kg)}{Taille^2(m)}\).
  4. Regroupez ces variables dans la structure R qui vous paraît la plus adaptée.
  5. Utilisez l’aide en ligne de R afin d’obtenir des informations sur la fonction plot().
  6. Tracez le nuage de points du Poids en fonction de la Taille. Pensez à fournir un titre à votre graphique et à annoter vos axes.
# 2.1 Vecteurs
Sexe = factor(c('F', 'F', 'G', 'F', 'G', 'G', 'G', 'G', 'G', 'G'))
ZEP = factor(c('O', 'O', 'O', 'O', 'N', 'O', 'N', 'O', 'O', 'O'))
Poids = c(16, 14, 13.5, 15.4, 16.5, 16, 17, 14.8, 17, 16.7)
Taille = c(100, 97, 95.5, 101, 100, 98.5, 103, 98, 101.5, 100)
Individus = strsplit("Erika Célia Eric Eve Paul Jean Adan Louis Jules Léo",' ')[[1]]
# 2.2 Moyenne:
mean(Taille)
## [1] 99.45
mean(Poids)
## [1] 15.69
# 2.3 calcul de l'IMC
(indice <- Poids / (Taille / 100) ^ 2)
##  [1] 16.00000 14.87937 14.80223 15.09656 16.50000 16.49102 16.02413
##  [8] 15.41025 16.50125 16.70000
# 2.4 Data-frame:
IMC <- data.frame(Sexe=Sexe,
                  ZEP=ZEP, 
                  Taille=Taille,
                  Poids=Poids,
                  An=c(3, 3, 3, 4, 3, 4, 3, 3, 4, 3),
                  Mois=c(5, 10, 5, 0, 8, 0, 11, 9, 1, 3),
                  Prenom=Individus)

# Inserer une colonne:
IMC$indice <- indice
# Enlever la colonne:
IMC = subset(IMC, select = -c(indice))

# 2.6
plot(y=IMC$Poids, x=IMC$Taille,
     xlab='Taille (cm)', ylab='Poids (kg)',
     pch=19,
     main="Nuage de points du Poids en fonction de la Taille")

Exercice 3: Importer des données

donnees <- read.table(file="nutriage.txt", header=T,sep="\t", dec=".")
# creere des variables avec les noms de chaque colonne:
attach(donnees)

Exerice 4 : Etude d’un jeu de données

Structuration des variables suivant leur type

En statistique, on classe les variables selon 4 catégories :

  • qualitatives nominales (sans ordre)
  • qualitatives ordinales (avec ordre)
  • quantitatives discrètes
  • quantitatives continues

Classification des variables statistiques Description des variables de nutriage

Question : A partir de cette figure, classer toutes les variables du jeu de données nutriage ?

  • sexe : Quali. nominale
  • situation : Quali. nominale
  • the : Quanti. discrete
  • cafe : Quanti. discrete
  • taille : Quanti. continue
  • poids : Quanti. continue
  • age : Quanti. continue
  • viande : Quali. ordinale
  • poisson : Quali. ordianle
  • fruit_crus : Quali. ordinale
  • fruit_legume_cuits : Quali. ordinale
  • chocol : Quali. ordinale
  • matgras : Quali. nominale
# Relaod:
donnees <- read.table(file="nutriage.txt", header=T,sep="\t", dec=".")

# Sexe:
# class(donnees$sexe)
# donnees$sexe <- as.factor(donnees$sexe)
# class(donnees$sexe)
donnees$sexe <- factor(donnees$sexe,
                       levels=(1:2),
                       labels=c("Homme", "Femme"))
# Situation:
donnees$situation <- factor(donnees$situation,
                            levels=(1:4),
                            labels=c("seul", "couple", "famille", "autre"))
# Matgras
donnees$matgras <- factor(donnees$matgras,
                          levels=(1:8),
                          labels=c("beurre", "margarine", "h.arachide",
                                   "h.tournesol", "h.olive", "h.melange",
                                   "h.colza", "graisse"))

# chocol:
for (var in c("chocol", "viande", "poisson", "fruit_crus", "fruit_legume_cuits")) {
  donnees[[var]] <- ordered(donnees[[var]],
                            levels=(0:5),
                            labels=c("Jamais",
                                     "Moins d'une fois par S",
                                     "Une fois par semaine",
                                     "2/3 fois par semaine",
                                     "4/6 fois par semaine",
                                     "Tous les jours"))
}

Présentation synthétique des données

On dispose des mesures d’une ou plusieurs variables pour chacun des N individus. Le tableau donne les variables en colonne et les individus en ligne. Sous R, les données ainsi définies sont dans une structure appelée data.frame.

Tableau des effectifs ou des fréquences d’une variable qualitative

Pour connaître la distribution d’une variable dans notre échantillon, il est plus pratique de représenter un tableau de données individuelles sous une forme plus condensée, par exemple un tableau des effectifs ou des fréquences. On peut le faire sous R grâce à la commande table(). On se servira de la fonction length() pour donner le tableau des fréquences.

Question : Comment les personnes de cet échantillon utilisent les matières grasses pour cuisiner ?

table(matgras)
## matgras
##  1  2  3  4  5  6  7  8 
## 15 27 48 68 40 23  1  4
popul <- length(matgras)
table(matgras)/ popul * 100
## matgras
##          1          2          3          4          5          6 
##  6.6371681 11.9469027 21.2389381 30.0884956 17.6991150 10.1769912 
##          7          8 
##  0.4424779  1.7699115

Question : Combien de personnes mangent quotiennement de la viande ?

table(viande)
## viande
##  0  1  2  3  4  5 
##  1  3 11 83 67 61
sum(viande == "Tous les jours")
## [1] 0

Tableau de données regroupées en classes d’une variable quantitative

On peut représenter un tableau de données individuelles quantitatives en regroupant les valeurs par intervalle. Par exemple, on peut se servir de la fonction hist() en spécifiant le vecteur des bornes des classes dans son paramètre breaks.

Question : Combien y-a-t-il d’individus dont la taille est dans l’intervalle ]155,160] ?

res <- hist(taille, plot=F)
nn <- as.character(res$breaks)

x<-as.table(res$counts)
dimnames(x)
## [[1]]
##  [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"
dimnames(x) <- list(paste(nn[-length(nn)], nn[-1], sep="-"))
x
## 140-145 145-150 150-155 155-160 160-165 165-170 170-175 175-180 180-185 
##       1       7      37      50      46      31      27      17       4 
## 185-190 
##       6
# Alternative:
sum(taille>155 & taille<=160)
## [1] 50

Tableaux croisant deux variables qualitatives

Tableau de contingence

On peut utiliser la fonction table() pour obtenir le tableau de contingence de deux variables

Question : Dans cet échantillon de 226 individus, quel est le pourcentage d’hommes vivant en couple ?

matable <- table(sexe, situation)
matable
##     situation
## sexe  1  2  3
##    1 20 63  2
##    2 78 56  7
# Alternative:
sum(sexe == "Homme" & situation == "couple") / length(sexe) * 100
## [1] 0

On peut ajouter les marges en utilisant la fonction addmargins().

Question : Parmi les hommes, quel est le pourcentage d’homme vivant en couple ?

matable_complete <- addmargins(matable)
matable_complete
##      situation
## sexe    1   2   3 Sum
##   1    20  63   2  85
##   2    78  56   7 141
##   Sum  98 119   9 226
# Alternative:
sum(sexe == "Homme" & situation == "couple") / sum(sexe == "Homme") * 100
## [1] NaN

Résumés numériques

Tous les exemples donnés seront effectués sur la variable taille. Les résumés numériques ne peuvent être calculés en présence de données manquantes (NA). Si cela est nécessaire, il est possible d’utiliser la fonction na.omit() pour les retirer lors du calcul.

x <- na.omit(taille)

Résumés de position d’une distribution d’une variable quantitative

La médiane

La médiane d’une série statistique est la valeur \(m_e\) de la variable \(X\) qui partage cette série statistique en deux parties (inférieure et supérieure à \(m_e\)) de même effectif. Cette quantité ne se calcule pas sur des variables purement qualitatives.

La fonction R est median() et s’applique uniquement sur des valeurs numériques.

Question : Combien d’invidus mesurent strictement moins que la médiane et combien mesurent strictement plus que la médiane ?

median_taille = median(taille)
sum(taille < median_taille); sum(taille > median_taille)
## [1] 107
## [1] 107
sum(taille == median_taille)
## [1] 12

La moyenne

Elle se calcule uniquement sur des variables quantitatives via la fonction mean(). Question : Quelle est la moyenne de la variable taille ? La comparer à la mediane ?

mean_taille = mean(taille)
mean_taille; median_taille
## [1] 163.9602
## [1] 163

Les fractiles

Le fractile d’ordre p (0<p<1) est la valeur \(q_p\) qui coupe l’échantillon en deux portions, l’une ayant un nombre d’éléments (inférieurs à \(q_p\)) égal à \(p\%\) du nombre total d’éléments et l’autre à \((1-p)\%\) étant supérieurs à \(q_p\). Il ne se calcule pas pour des variables purement qualitatives. Si on prend \(p=0.5\), on retrouve la définition de la médiane.

En R, la fonction quantile() (avec le paramètre probs) permet de donner les fractiles de la variable.

quantile(taille, probs=c(0.1,0.25,0.77))
## 10% 25% 77% 
## 153 157 171
deciles_1_9 = quantile(taille, probs=seq(0.1, 0.9, by=0.1)); deciles_1_9
##   10%   20%   30%   40%   50%   60%   70%   80%   90% 
## 153.0 156.0 158.5 160.0 163.0 165.0 168.0 172.0 176.0
quartiles = quantile(taille, probs=seq(0.25, 0.75, by=0.25)); quartiles
## 25% 50% 75% 
## 157 163 170
deciles = quantile(taille, probs=seq(0, 1, by=0.1)); deciles
##    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
## 140.0 153.0 156.0 158.5 160.0 163.0 165.0 168.0 172.0 176.0 188.0

En créant 3 vecteurs, vous donnerez 3 sorties pour la variable taille :

  • 1er et 9ème déciles
  • 1er, 2ème et 3ème quartiles
  • tous les déciles

La fonction summary() appliquée sur un vecteur de données quantitatives permet de calculer le minimum, le maximum, la moyenne et les trois quartiles.

Question : Donner les principaux résumés numériques pour la variable age.

# summary(taille)
summary(age)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   65.00   70.00   74.00   74.48   78.00   91.00

Résumé de dispersion autour de la moyenne d’une distribution

Ces résumés peuvent être calculés uniquement pour des variables quantitatives. Les principales sont :

  • Variance \(\sigma^2\) de la population. Attention, la fonction var() du logiciel R renvoie une estimation non biaisée de la variance.
  • l’écart type est la racine carrée de la variance.
  • Coefficient de variation \(c_v=\frac{\sigma}{\mu}\)

Reprogrammer les fonctions variance, écart-type, et coefficient de variation d’une population (qu’on nommera var.pop, sd.pop et co.pop).

# Mean
mean.pop <- function(x) sum(x) / length(x)
var.pop <- function(x) sum((x - mean.pop(x))**2) / length(x)
unbiased.var.pop <- function(x) sum((x - mean.pop(x))**2) / (length(x) - 1)
sd.pop <- function(x) sqrt(var.pop(x))
co.pop <- function(x) sd.pop(x) / mean.pop(x)