library(FactoMineR)
library(factoextra)
library(gridExtra)
library(corrplot)
options(repr.plot.width=15, repr.plot.height=9)
Dans cet exercice on utilise un jeu de données indiquant la qualité de divers vins (rouges) en fonction de leurs caractéristiques physico-chimiques. La qualité (dernière colonne) est une note de 0 à 10. Autres variables :
Les variables 6, 7 et 10 correspondent à des additifs (conservateurs), a priori sans bonnes propriétés gustatives.
data <- read.csv("~/winequality-red.csv", sep=";")
head(data)
dim(data)
1] Décrivez ce que fait la ligne de code ci-dessous. (1.5 points)
res.pca <- PCA(data, quanti.sup=12, ncp=7)
2] Qu'est-ce qui est affiché par le code ci-dessous ? Combien d'axes doit-on garder pour conserver 75% d'inertie ? (1.5 points)
res.pca$eig
3] Commentez le résultat du code ci-dessous. (1.5 points)
grid.arrange(
plot(res.pca, choix="ind", invisible="quali", select="cos2 500", unselect=1),
plot(res.pca, choix="ind", invisible="quali"), ncol=2)
s <- sort(rowSums(res.pca$ind$cos2[,1:2]), decreasing=TRUE)
plot(s, cex.axis=1.5, cex.lab=1.5, xlab="Individus classés par cos2 décroissant", ylab="cos2")
4] Commentez les graphes ci-dessous. (2.5 points)
grid.arrange(
plot(res.pca, choix="var", axes=c(1,2)),
plot(res.pca, choix="var", axes=c(3,4)), ncol=2)
corrplot(cor(data))
On reprend le jeu de données de l'exercice 2, en se focalisant sur les variables "quality" et "pH".
Rappel : la distance du $\chi^2$ entre une répartition d'entiers $n_1, \dots, n_k$ et l'effectif théorique $t_1, \dots, t_k$ s'écrit $d_{\chi^2} = \sum_{i=1}^{k} \frac{(n_i - t_i)^2}{t_i}$.
Tableau des effectifs dans chaque modalité :
quality \ pH | high | low | medium |
---|---|---|---|
average | 350 | 23 | 946 |
excellent | 4 | 2 | 12 |
good | 44 | 3 | 152 |
poor | 26 | 1 | 36 |
q <- data[["quality"]]
q[q == 3 | q == 4] = "poor" ; q[q == 5 | q == 6 ] = "average"
q[q == 7] = "good" ; q[q == 8 | q == 9] = "excellent"
p <- data[["pH"]]
ind1 <- p < 3 ; ind2 <- (p >= 3 & p < 3.4) ; ind3 <- p >= 3.4
p[ind1] = "low" ; p[ind2] = "medium" ; p[ind3] = "high"
df <- data.frame("quality"=q, "pH"=p)
t <- table(df)
res.CA <- CA(t)
res.CA$eig
Les données utilisées pour cet exercice correspondent au résultat d'une enquête effectuée par la ville de Québec, portant sur la qualité de vie ressentie des habitants, au cours de l'été 2020.
Variables :
# Jeu de données préparé depuis les résultats bruts :
# https://www.donneesquebec.ca/recherche/dataset/sondage-de-satisfaction-aupres-des-citoyens-ete-2020
data <- read.csv("~/sondage_ville_Quebec.csv", colClasses="factor")
head(data)
dim(data)
res.mca <- MCA(data, graph=FALSE)
1] Quelle est l'inertie totale du jeu de données ? (1 point)
2] Au vu du résultat de code ci-dessous et en utilisant la règle vue en cours, combien d'axes devrait-on considérer ? (1 point)
Rappel de l'heuristique : $\lambda_s \geq \frac{1}{J}$ avec $J$ le nombre de variables.
res.mca$eig
3] Rappelez pourquoi les axes n'expliquent chacun que quelques pourcents d'inertie. (1 point)
4] Considérant les indications ci-dessous, analysez les deux premiers axes et les variables. (4 points)
colors = rep(1, 954)
xtrem_idx <- c(743, 765, 105, 282, 102, 517, 520, 573)
colors[xtrem_idx] = "blue"
plot(res.mca, col.ind=colors)
res.mca$var$eta2
# Gauche / droite :
data[xtrem_idx[1:4],]
# Bas / haut :
data[xtrem_idx[5:8],]
5] Quelles sont les différences entre les résultats d'une ACM basée sur le tableau disjonctif complet ou sur le tableau de Burt ? (1 point)
On considère l'extrait suivant d'un jeu de données visant à prédire la méthode de contraception (féminine) choisie en fonction de critères socio-démographico-économiques. L'étude s'est effectuée en Indonésie en 1987, sur quelques milliers de femmes mariées.
Source : https://archive.ics.uci.edu/ml/datasets/Contraceptive+Method+Choice
âge | éducation | au_foyer | contraception |
---|---|---|---|
49 | 4 | 1 | aucune |
45 | 4 | 1 | aucune |
49 | 1 | 1 | aucune |
33 | 3 | 1 | long-terme |
38 | 4 | 1 | long-terme |
31 | 4 | 0 | court-terme |
36 | 1 | 1 | court-terme |
Construire un arbre de décision binaire selon la méthode vue en cours en utilisant l'indice d'entropie : $I_E = - \sum_{k=1}^{K} p_k \log p_k,$ avec $p_k$ proportion de la classe $k$ dans les données du noeud courant. Détaillez les étapes, et dessinez l'arbre. (5 points)
Calculez le taux d'erreur sur chacun des ensembles de test suivants. Commentez. (3 points)
âge | éducation | au_foyer | contraception |
---|---|---|---|
25 | 2 | 1 | 1 |
46 | 1 | 1 | 1 |
32 | 3 | 1 | 2 |
30 | 3 | 0 | 3 |
âge | éducation | au_foyer | contraception |
---|---|---|---|
22 | 2 | 1 | 1 |
26 | 4 | 1 | 1 |
32 | 4 | 1 | 2 |
38 | 4 | 1 | 3 |
Appliquez l'algorithme des k-means aux lignes ci-dessous (extrait du jeu de données Iris). Effectuez deux exécutions avec pour centres initiaux respectivement
$(4, 3, 1, 0), (4, 3, 2, 0)$ et $(6, 3, 5, 2)$, puis
$(4, 3, 1, 0), (5, 2, 3, 1)$ et $(7, 3, 6, 2)$.
Commentez.
Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
---|---|---|---|---|
4.7 | 3.2 | 1.6 | 0.2 | setosa |
4.8 | 3.1 | 1.6 | 0.2 | setosa |
5.4 | 3.4 | 1.5 | 0.4 | setosa |
5.2 | 4.1 | 1.5 | 0.1 | setosa |
5.6 | 2.5 | 3.9 | 1.1 | versicolor |
5.9 | 3.2 | 4.8 | 1.8 | versicolor |
7.2 | 3.0 | 5.8 | 1.6 | virginica |
7.4 | 2.8 | 6.1 | 1.9 | virginica |
Rappel : boucle jusqu'à convergence
i. affecter chaque point à la classe dont le centre est le plus proche,
ii. recalculer les centres des classes (moyenne des éléments).
On suppose qu’un trait est gouverné par deux gènes, qui peuvent être de deux types, G et g. On suppose que G est dominant (c’est-à-dire que c'est lui qui s'exprime si la paire est Gg) et g récessif. Les états Gg, GG et gg sont appelés respectivement hybride, dominant et récessif.