Exercice 1 (8 points)

  1. Soit $A = \begin{pmatrix}1 & 2 & 3\\ 2 & 3 & 4\\ 3 & 4 & 5\end{pmatrix}$. Calculer le rang de A. (1 point)
  2. Soit $A = \begin{pmatrix}1 & 0 & t\\ 2 & 1 & 0\\ 0 & 1 & 1\end{pmatrix}$. Pour quelles valeurs de $t$ la matrice est-elle inversible ? Calculer alors son inverse (2 points).
  3. Soit $A = \begin{pmatrix}2 & 1 & 0\\ 1 & 3 & 1\\ 2 & 1 & 0\end{pmatrix}$. Déterminez les vecteurs propres associés aux valeurs propres 1, 2 et 4. (3 points)
  4. Soient $A,B \in {\cal{M}}_n({\cal R})$ deux matrices carrées telles que la somme des coefficients sur chaque ligne de A et sur chaque ligne de B vaut 1. Montrer que la somme des coefficients sur chaque ligne de AB vaut 1. (2 points)

Exercice 2 (8 points)

In [44]:
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 :

  • fixed acidity : acide tartrique
  • volatile acidity : acide acétique ("vinaigre")
  • citric acid : acide citrique
  • residual sugar : sucres résiduels
  • chlorides : chlorures (sel)
  • free sulfur dioxide : dioxyde de soufre (non lié à d'autres molécules)
  • total sulfur dioxide : dioxyde de soufre (toutes formes)
  • density : densité
  • pH : pH
  • sulphates : sulfate de potassium
  • alcohol : degré d'alcool

Les variables 6, 7 et 10 correspondent à des additifs (conservateurs), a priori sans bonnes propriétés gustatives.

In [7]:
data <- read.csv("~/winequality-red.csv", sep=";")
head(data)
dim(data)
A data.frame: 6 × 12
fixed.acidityvolatile.aciditycitric.acidresidual.sugarchloridesfree.sulfur.dioxidetotal.sulfur.dioxidedensitypHsulphatesalcoholquality
<dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><int>
1 7.40.700.001.90.07611340.99783.510.569.45
2 7.80.880.002.60.09825670.99683.200.689.85
3 7.80.760.042.30.09215540.99703.260.659.85
411.20.280.561.90.07517600.99803.160.589.86
5 7.40.700.001.90.07611340.99783.510.569.45
6 7.40.660.001.80.07513400.99783.510.569.45
  1. 1599
  2. 12

1] Décrivez ce que fait la ligne de code ci-dessous. (1.5 points)

In [8]:
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)

In [9]:
res.pca$eig
A matrix: 11 × 3 of type dbl
eigenvaluepercentage of variancecumulative percentage of variance
comp 13.0991324428.1739313 28.17393
comp 21.9259096917.5082699 45.68220
comp 31.5505434914.0958499 59.77805
comp 41.2132325311.0293866 70.80744
comp 50.95929207 8.7208370 79.52827
comp 60.65960826 5.9964388 85.52471
comp 70.58379122 5.3071929 90.83191
comp 80.42295670 3.8450609 94.67697
comp 90.34464212 3.1331102 97.81008
comp 100.18133317 1.6484833 99.45856
comp 110.05955831 0.5414392100.00000

3] Commentez le résultat du code ci-dessous. (1.5 points)

In [10]:
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)

In [11]:
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))

Exercice 3 (8 points)

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
  1. Expliquez comment obtenir le tableau des effectifs théoriques en cas d'indépendance, puis calculez-le. (2 points)
  2. Calculer la distance du $\chi^2$ entre le tableau réel et le tableau en cas d'indépendance. Combien y a-t-il de degrés de liberté, et pourquoi ? (2 points)
  3. En déduire l'inertie totale du nuage des profils ligne ou colonne. (1 point)
  4. Commentez les résultats de l'AFC ci-dessous. (3 points)
In [13]:
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)
In [19]:
res.CA$eig
A matrix: 2 × 3 of type dbl
eigenvaluepercentage of variancecumulative percentage of variance
dim 10.00589599252.30658 52.30658
dim 20.00537599847.69342100.00000

Exercice 4 (8 points)

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 :

  • sexe : 2 modalités, M ou F
  • age : 7 tranches d'âge de 18 à +75 ans
  • Arrondissement : 6 zones géographiques
  • Logement : 2 modalités, propriétaire ou locataire
  • Foyer : 2 modalités, avec ou sans enfants
  • Qualite_services : 11 modalités, note de 0 à 10
  • Attentes : 4 modalités, niveau d'exigence vis-à-vis des services (--, -, +, ++)
  • Recommandation (de la ville) : 11 modalités, note de 0 à 10
  • Visite_EC : 4 modalités, visite du site d'ExpoCité (oui ou non avec nuances)
  • Visite_J-B : 3 modalités, visite d'un parc (oui nuancé, ou non)
In [11]:
# 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)
A data.frame: 6 × 10
sexeageArrondissementLogementFoyerQualite_servicesAttentesRecommandationVisite_ECVisite_J.B
<fct><fct><fct><fct><fct><fct><fct><fct><fct><fct>
1M55-644proprietairesans_enfant8 + 6 Non_cet_eteNon_cet_ete
2F45-545proprietaireavec_enfant8 + 10Non_cet_eteNon_cet_ete
3M25-343locataire sans_enfant7 - 4 Non_cet_eteNon_cet_ete
4M25-344locataire sans_enfant8 - 9 Non_cet_eteNon_cet_ete
5M35-445locataire avec_enfant10--8 Non_cet_eteNon_cet_ete
6M25-344proprietairesans_enfant8 - 7 Oui_deja Oui_deja
  1. 954
  2. 10
In [9]:
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.

In [10]:
res.mca$eig
A matrix: 42 × 3 of type dbl
eigenvaluepercentage of variancecumulative percentage of variance
dim 10.197718314.7075787 4.707579
dim 20.182984174.3567661 9.064345
dim 30.169465844.0349009 13.099246
dim 40.157522003.7505238 16.849770
dim 50.152178933.6233078 20.473077
dim 60.146821583.4957519 23.968829
dim 70.138610173.3002421 27.269071
dim 80.133851853.1869489 30.456020
dim 90.131544263.1320063 33.588027
dim 100.124337372.9604135 36.548440
dim 110.121014732.8813032 39.429743
dim 120.119485662.8448967 42.274640
dim 130.117736652.8032536 45.077893
dim 140.113854962.7108324 47.788726
dim 150.110054212.6203384 50.409064
dim 160.106383182.5329328 52.941997
dim 170.106006932.5239745 55.465971
dim 180.103083392.4543665 57.920338
dim 190.101519082.4171211 60.337459
dim 200.100788452.3997251 62.737184
dim 210.095949992.2845236 65.021708
dim 220.094641782.2533757 67.275083
dim 230.092734842.2079724 69.483056
dim 240.091612272.1812446 71.664300
dim 250.088480962.1066894 73.770990
dim 260.087814032.0908103 75.861800
dim 270.084155842.0037105 77.865511
dim 280.081887871.9497112 79.815222
dim 290.080103021.9072149 81.722437
dim 300.078061871.8586160 83.581053
dim 310.076313111.8169788 85.398031
dim 320.073789591.7568950 87.154926
dim 330.070533641.6793724 88.834299
dim 340.068272141.6255273 90.459826
dim 350.065185541.5520367 92.011863
dim 360.060845011.4486908 93.460554
dim 370.056633171.3484088 94.808962
dim 380.052237611.2437526 96.052715
dim 390.049261881.1729018 97.225617
dim 400.044991801.0712332 98.296850
dim 410.041201780.9809949 99.277845
dim 420.030330510.7221551100.000000

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)

In [28]:
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)
In [33]:
res.mca$var$eta2
A matrix: 10 × 7 of type dbl
Dim 1Dim 2Dim 3Dim 4Dim 5Dim 6Dim 7
sexe0.0558596300.025516690.0114099440.0093392490.0010525070.021426460.0027470427
age0.1382684590.296735710.1157734040.0944091970.0891019890.229925010.1364052204
Arrondissement0.1418603630.143028070.0921014540.2006076940.0582012390.102111000.1289837216
Logement0.0022303200.183957290.0127852460.2208473590.0031959410.013995600.0535317812
Foyer0.0700047560.290924470.0773351590.0049766640.0200540990.168542080.0001833297
Qualite_services0.6493691350.159112070.6070804770.3098105840.5685338830.269688410.4742969992
Attentes0.2444162790.076267180.1738477110.0955841770.0494303050.124354470.0060196202
Recommandation0.6591086120.136249520.5917503190.2255581890.5908547320.281995260.4905525583
Visite_EC0.0101312050.278373380.0110684420.1520477660.1206132390.167451180.0214376006
Visite_J.B0.0059343050.239677360.0015062310.2620391190.0207513300.088726350.0719438224
In [30]:
# Gauche / droite :
data[xtrem_idx[1:4],]
A data.frame: 4 × 10
sexeageArrondissementLogementFoyerQualite_servicesAttentesRecommandationVisite_ECVisite_J.B
<fct><fct><fct><fct><fct><fct><fct><fct><fct><fct>
743F75+ 2proprietairesans_enfant9+ 10Oui_deja Non_cet_ete
765F75+ 4locataire sans_enfant9+ 9 Oui_deja Non_cet_ete
105M45-543locataire sans_enfant0--0 Non_cet_eteNon_cet_ete
282M45-546locataire sans_enfant0++0 Non_cet_eteNon_cet_ete
In [32]:
# Bas / haut :
data[xtrem_idx[5:8],]
A data.frame: 4 × 10
sexeageArrondissementLogementFoyerQualite_servicesAttentesRecommandationVisite_ECVisite_J.B
<fct><fct><fct><fct><fct><fct><fct><fct><fct><fct>
102M18-244locataire sans_enfant5- 7Non_cet_eteNon_cet_ete
517F18-244locataire sans_enfant6+ 7Non_jamais Non_cet_ete
520M35-445proprietaireavec_enfant8++8Oui_deja Oui_premiere
573M35-442proprietaireavec_enfant7+ 8Oui_deja Oui_premiere

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)

Exercice 5 (8 points)

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 : variable continue
  • éducation : ordinale entière dans [1, 4]
  • au_foyer : 1 pour une femme travaillant à la maison, 0 si elle a un emploi ailleurs (variable catégorielle)
â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

Exercice 6 (8 points)

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).

Exercice 7 (8 points)

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.

  1. Un botaniste adopte la stratégie suivante : à chaque fois, il apparie l’individu de la n-ième génération avec un hybride. Modéliser la situation par une chaîne de Markov. Est-elle irréductible ? Apériodique ? Pourquoi ? (3 points)
  2. Même question si l'on apparie avec un dominant. (3 points)
  3. Comparer qualitativement l’évolution des deux chaînes. (2 points)