##################################################### ##################################################### ##### METHODES STATISTIQUES ##### ##### ET ##### ##### EXPLORATION DE DONNEES ##### ##### Chapitre 7 ##### ##### REPRESENTATION D’UN ECHANTILLON ##### ##### PAR DES CLASSES ##### ##### (Version juillet 2015) ##### ##################################################### ##################################################### # Fichiers de données utilisés (stockés dans le répertoire courant) : # "Eaux1.txt" 20 * 7 # "CureThermale.txt" 83 * 12 # "planete" 101 * 4 # library utiles : cluster, ade4, mclust, Hmisc # # Les quatre eaux supplémentaires sont dans un fichier Eaux2a # de même structure que Eaux1 (cf.Tab.7B, chapitre 4) Eaux2a<-Eaux2[c(92,46,20,5),1:6] # Eaux2a Eaux3<-rbind(Eaux1, Eaux2a) ; dim(Eaux3) Eaux3[24,6]<-12.5 # # Tableau 1a - Eaux3 : résultats de l’algorithme kmeans (Inertie et centres de gravité). Eaux3.cr<-scale(Eaux3) Eaux3.kmeans.3<-kmeans(Eaux3.cr,3) Eaux3.kmeans.3$withinss Eaux3.kmeans.4<-kmeans(Eaux3.cr,4) Eaux3.kmeans.4$withinss Eaux3.kmeans.5<-kmeans(Eaux3.cr,5) Eaux3.kmeans.5$withinss # Centres de gravité des classes round(Eaux3.kmeans.3$centers,1) round(Eaux3.kmeans.4$centers,1) round(Eaux3.kmeans.5$centers,1) # # Tableau 1c - Eaux3 : critère d’Hartigan pour le choix du nombre de classes. swkmeans.3<-sum(Eaux3.kmeans.3$withinss) swkmeans.4<-sum(Eaux3.kmeans.4$withinss) swkmeans.5<-sum(Eaux3.kmeans.5$withinss) # erreur page 193 dans tab 1c #(swkmeans.3/swkmeans.4-1)*(nrow(Eaux3.cr)-2) #(swkmeans.4/swkmeans.5-1)*(nrow(Eaux3.cr)-3) (swkmeans.3/swkmeans.4-1)*(nrow(Eaux3.cr)-4) (swkmeans.4/swkmeans.5-1)*(nrow(Eaux3.cr)-5) # # Tableau 2a - Eaux3 : résultats de l’algorithme pam. library(cluster) Eaux3.pam.3<-pam(Eaux3.cr,3) Eaux3.pam.4<-pam(Eaux3.cr,4) Eaux3.pam.5<-pam(Eaux3.cr,5) # Classes fournies dans Tab.2B cbind(Eaux3.pam.3$clustering,Eaux3.pam.4$clustering, Eaux3.pam.5$clustering) Eaux3.pam.3$clusinfo Eaux3.pam.4$clusinfo Eaux3.pam.5$clusinfo par(mfrow=c(1,3)) # Graphiques avec une ellipse autour de chaque classe (Fig.3a) plot(Eaux3.pam.3,which=1) ; plot(Eaux3.pam.4,which=1) plot(Eaux3.pam.5,which=1) # Graphiques des silhouettes (Fig.3b) par(mfrow=c(1,3)) plot(Eaux3.pam.3,which=2) ; plot(Eaux3.pam.4,which=2) plot(Eaux3.pam.5,which=2) # # Tableau 3a - Eaux3 : partitions floues en 3, 4, 5 classes de fanny. Eaux3.fanny.3<-fanny(Eaux3.cr,3) Eaux3.fanny.4<-fanny(Eaux3.cr,4) Eaux3.fanny.5<-fanny(Eaux3.cr,5) # Coefficient de Dunn (brut et normalisé) Eaux3.fanny.3$coeff Eaux3.fanny.4$coeff Eaux3.fanny.5$coeff # Degré d’appartenance des observations à la partition en 5 classes (Tab.3B) round(Eaux3.fanny.5$membership,2) # # Tableau 6 - Comparaison des histogrammes obtenus par hclust et agnes. ALM obtenu par mstree(ade4). D1<-matrix(c(0,6,14,6,8,6,0,8,8,2,14,8,0,4,12,6,8,4,0,1,8,2,12,1,0), nrow=5,ncol=5,byrow=T) rownames(D1)<-c("a","b","c","d","e") colnames(D1)<- rownames(D1) # Comparaison des histogrammes fournis pas hclust et agnes # par(mfrow=c(1,2)) # hc <- hclust(as.dist(D1), "ave") # plot(hc) # D<-c(6,14,6,8,8,8,2,4,12,1) # agnes1<-agnes(D,diss=T, method = "average") # plot(agnes1,which=2) # Impression de l’ALM library(ade4) neig<-mstree(as.dist(D1)) s.label(D1,neig=neig) # Tableau 7 - Programmes permettant d’obtenir les résultats et les dendrogrammes. D<-c(6,14,6,8,8,8,2,4,12,1) agnes1<-agnes(D,diss=T, method = "average") agnes1$ac agnes1$order.lab<-c("a","b","d","e","c") plot(agnes1) mtext(outer=T, "Lien moyen (distance moyenne)",side=3,line=-1,cex=1) agnes2<-agnes(D,diss=T, method = "single") agnes2$ac agnes2$order.lab<-c("a","b","d","e","c") agnes3<-agnes(D,diss=T, method = "complete") agnes3$ac agnes3$order.lab<-c("a","b","d","e","c") agnes5<-agnes(D,diss=T, method = "weighted") agnes5$ac agnes5$order.lab<-c("a","b","d","e","c") par(mfrow=c(2,2)) plot(agnes2,which=2,main="Lien simple") plot(agnes3,which=2,main="Lien complet") plot(agnes1,which=2,main="Lien moyen") plot(agnes5,which=2, main="Lien moyen pondéré") mtext(outer=T, "Arbres par quatre méthodes",side=3,line=-1,cex=1.2) # # Tableau 9 - Eaux3 : résultats d’agnes pour quatre stratégies. Eaux3.cr<-scale(Eaux3) Eaux3.agnes2<-agnes(Eaux3.cr, method = "single") Eaux3.agnes2$ac Eaux3.agnes3<-agnes(Eaux3.cr, method = "complete") Eaux3.agnes3$ac Eaux3.agnes1<-agnes(Eaux3.cr, method = "average") Eaux3.agnes1$ac Eaux3.agnes4<-agnes(Eaux3.cr, method = "ward") Eaux3.agnes4$ac par(mfrow=c(2,2)) plot(Eaux3.agnes2,which=2,main="Lien simple") plot(Eaux3.agnes1,which=2, main="Lien moyen") plot(Eaux3.agnes3,which=2,main="Lien complet") plot(Eaux3.agnes4,which=2,main="Critere de Ward") # # Tableau 10 - Eaux3 : classification par division, résultats de diana. Eaux3.diana1<-diana(Eaux3.cr, metric="euclidean") Eaux3.diana1$dc par(mfrow=c(1,2)) plot(Eaux3.diana1) # mtext(outer=T, "Arbre par hiérarchie divisive et # distance euclidienne (Eaux3) ",side=3,line=-1,cex=1.2) # Tableau 11a - CureThermale : résultats bruts de mona. library(cluster) Cure<-read.table("CureThermale.txt",header=T,sep="\t") dim(Cure) Cure1<-Cure[,1:9] Cure1.mona<-mona(Cure1) names(Cure1.mona) Cure1.mona$order Cure1.mona$variable Cure1.mona$step # plot(Cure1.mona) # Fig.10 # library(mclust) planete<-read.table("Planete.txt",header=T,sep="\t") dim(planete) planete<- planete[,2:4] planete.clus<-Mclust(planete) planete.clus$modelName planete.clus$G round(planete.clus$parameters$mean,3) plot(planete.clus, planete) # Classification avec recouvrement Eaux3.acp <- dudi.pca(Eaux1,scale=TRUE) xy<-data.frame(x=Eaux3.acp$l1[,1],y=Eaux3.acp$l1[,2]) par(mfrow = c(2,2)) for (k in 1:2) { neig=mstree(dist.quant(xy,1),k) s.label(Eaux3.acp$l1,neig=neig) } # # Utilisation des coefficients de corrélation entre variables # comme des # distances dd <- as.dist((1 - cor(Eaux3))/2) round(1000 * dd) # # EXERCICES, fichiers à utiliser : Eaux1, ChaZeb-a, Loup