#install.packages("ade4") #install.packages("sp") library(ade4) library(sp) # Exercice 1 # delta(X1,X2) = 1 - 2*a/(2*a+c+d) # avec a = nombre d'indices p tels que X1^p=X2^p=1 => a=2 # c = nombre d'indices p tels que X1^p=0 et X2^p=1 => c=1 # d = nombre d'indices p tels que X1^p=1 et X2^p=0 => d=1 # donc delta(X1,X2) = 1-4/(4+1+1) = 1-2/3 = 1/3 # Exercice 2 # 1 data("morphosport") morphosport # 2 donnees = morphosport$tab Deucl = dist.quant(donnees,1) # distance euclidienne hc1 = hclust(Deucl,method="ward") DeuclNorm = dist.quant(donnees,2) # distance euclidienne normalisée hc2 = hclust(DeuclNorm,method="ward") DMahal = dist.quant(donnees,3) # distance de Mahalanobis hc3 = hclust(DMahal,method="ward") # affichage des 3 dendrogrammes par(mfrow=c(1,3)) plot(hc1) plot(hc2) plot(hc3) # 3 ?scale donneesCN = scale(donnees) # recentrage et normalisation # chaque variable observée a maintenant moyenne empirique nulle et variance empirique = 1 sur la population Deucl = dist.quant(donneesCN,1) # distance euclidienne hc1 = hclust(Deucl,method="ward") DeuclNorm = dist.quant(donneesCN,2) # distance euclidienne normalisée hc2 = hclust(DeuclNorm,method="ward") DMahal = dist.quant(donneesCN,3) # distance de Mahalanobis hc3 = hclust(DMahal,method="ward") # affichage des 3 dendrogrammes par(mfrow=c(1,3)) plot(hc1) plot(hc2) plot(hc3) # On observe que les dendrogrammes pour les distances euclidiennes normalisées et de Mahalanobis # n'ont pas changé par rapport à ceux calculés sur les données de départ, tandis que le dendrogramme # calculé sur la distance euclidienne correspond à présent à celui de la distance euclidienne normalisée. # Tout ceci est normal puisque la distance euclidienne normalisée recentre et normalise les données avant # de calculer les distances, donc a le même effet que la distance euclidienne calculée sur les données # recentrées. De même la distance de Mahalanobis est identique pour les données de départ et les données # recentrées car elle effectue en fait une renormalisation plus "poussée" (renormalisation des vecteurs # observés et pas seulement des variables prises séparément) # 4 # Sur le 3e dendrogramme on observe un saut maximal du critère d'agrégation pour le passage de 4 à 3 classes. # Le nombre optimal de classes semble donc être K=4 K = 4 ClassifCAH = cutree(hc3,K) # 5 table(ClassifCAH,morphosport$sport) # On observe que certains sports semblent absents au presque dans certaines classes : ainsi la classe 2 ne contient # presque pas de sportifs pratiquant le foot ou le hand. Ceci dit la classification en semble pas vraiment respecter # la répartition en différents sports. Ceci peut signifier que la répartition en différents sports n'est pas un critère # de regroupement pertinent à partir des données morphologiques, et qu'au sein d'un même sport, les athlètes ont des # caractéristiques morphologiques variées. Ceci peut aussi signifier que la méthode CAH avec ces paramètres n'est pas # performante sur ces données # 6 ClassifKmeans = kmeans(donneesCN,K)$cluster table(ClassifCAH,ClassifKmeans) table(ClassifKmeans,morphosport$sport) # On observe une certaine corrélation entre les groupes obtenus par K-means et ceux obtenus par la CAH. Par contre, # comme précédemment ce classement ne correspond pas vraiment à la répartition en différents sports. Ceci laisse # penser que d'une part il n'y a pas de classes nettement séparées sur les données, et que le regroupement par sport # pratiqué ne donne pas une classification pertinente sur les observations. # 7 # On applique l'algorithme proposé : on effectue d'abord un k-means avec 50 classes ClassifKmeans50 = kmeans(donneesCN,50) # on récupère les nouvelles données : barycentres des classes obtenues. Elles sont renvoyées directement par la fonction kmeans # dans la composante "centers" de la sortie donnees50 = ClassifKmeans50$centers # On effectue une CAH sur les nouvelles données DMahal50 = dist.quant(donnees50,3) hc50 = hclust(DMahal50,method="ward") par(mfrow=c(1,1)) plot(hc50) ClassifCAH50 = cutree(hc50,K) # Finalement il faut combiner les deux regroupements pour retrouver le groupe associé à chaque individu de départ ClassifMixte = ClassifCAH50[ClassifKmeans50$cluster] # 8 table(ClassifCAH,ClassifMixte) table(ClassifKmeans,ClassifMixte) table(morphosport$sport,ClassifMixte) # On observe encore une certaine corrélation avec les deux classifications précédentes ; plus avec la CAH qu'avec les k-means, # ce qui est logique car les k-means n'interviennent dans la méthode mixte que de façon légère pour effectuer un pré- # regroupement des données, la classification déterminante avec 4 classes est obtenue à la fin par CAH. La comparaison # avec la variable "sport" aboutit à la même conclusion que précédemment : peu de corrélation avec la classification obtenue.