######### correction exercice II - exemple 3 ####################### M = matrix(c(0,23,15,22,30,26,20,23,0,26,25,16,25,33,15,26,0,28,37,28,20,22,25,28, 0,22,7,28,30,16,37,22,0,20,22,26,25,28,7,20,0,18,20,33,20,28,22,18,0),byrow=T,ncol=7) rownames(M)=c("A","F","O","H","R","J","Oy") colnames(M)=c("A","F","O","H","R","J","Oy") M M1=cbind(M,(M[,4]+M[,6])/2) M1=rbind(M1,c(M1[,8],0)) M1=M1[c(-4,-6),c(-4,-6)] rownames(M1)=c("A","F","O","R","Oy","HJ") colnames(M1)=c("A","F","O","R","Oy","HJ") M1 M2=cbind(M1,(M1[,1]+M1[,3])/2) M2=rbind(M2,c(M2[,7],0)) M2=M2[c(-1,-3),c(-1,-3)] rownames(M2)=c("F","R","Oy","HJ","AO") colnames(M2)=c("F","R","Oy","HJ","AO") M2 M3=cbind(M2,(M2[,1]+M2[,2])/2) M3=rbind(M3,c(M3[,6],0)) M3=M3[c(-1,-2),c(-1,-2)] rownames(M3)=c("Oy","HJ","AO","FR") colnames(M3)=c("Oy","HJ","AO","FR") M3 M4=cbind(M3,(M3[,1]+M3[,3])/2) M4=rbind(M4,c(M4[,5],0)) M4=M4[c(-1,-3),c(-1,-3)] rownames(M4)=c("HJ","FR","AOOy") colnames(M4)=c("HJ","FR","AOOy") M4 M5=cbind(M4,(M4[,1]+M4[,2])/2) M5=rbind(M5,c(M5[,4],0)) M5=M5[c(-1,-2),c(-1,-2)] rownames(M5)=c("AOOy","HJFR") colnames(M5)=c("AOOy","HJFR") M5 M=as.dist(M) cah=hclust(M,"average") names(cah) cah$height cah$merge plot(cah,hang=-1,main="moyenne") rect.hclust(cah,h=25) par(mfrow=c(2,2)) possible <- c( "single", "complete", "average") for(k in 1:3) plot(hclust(M,possible[k]),hang=-1,main=possible[k]) plot(hclust(M^2,"ward"),hang=-1,main="Inertie intra-classe") ############ correction exercice II - exemple 5 ##################### M = matrix(c(1,8/12,10/12,8/11,6/11,8/12,1,8/12,8/11,10/11,10/12, 8/12,1,6/11,6/11,8/11,8/11,6/11,1,8/10,6/11,10/11,6/11,8/10,1),byrow=T,ncol=5) rownames(M)=c("A","B","C","D","E") colnames(M)=c("A","B","C","D","E") M M*11 M=1-M M1=cbind(M,apply(M[,c(2,5)],1,max)) M1=rbind(M1,c(M1[,6],0)) M1=M1[c(-2,-5),c(-2,-5)] rownames(M1)=c("A","C","D","BE") colnames(M1)=c("A","C","D","BE") M1 M2=cbind(M1,apply(M1[,c(1,2)],1,max)) M2=rbind(M2,c(M2[,5],0)) M2=M2[c(-1,-2),c(-1,-2)] rownames(M2)=c("D","BE","AC") colnames(M2)=c("D","BE","AC") M2 M3=cbind(M2,apply(M2[,c(1,2)],1,max)) M3=rbind(M3,c(M3[,4],0)) M3=M3[c(-1,-2),c(-1,-2)] rownames(M3)=c("AC","DBE") colnames(M3)=c("AC","DBE") M3 M=as.dist(M) cah=hclust(M,"complete") names(cah) cah$height cah$merge plot(cah,hang=-1,main="complete") rect.hclust(cah,h=0.25) ######## correction exercice II - exemple 6 #########################""" M = matrix(c(0,16,1,9,10,16,0,17,25,2,1,17,0,4,9,9,25,4,0,13,10,2,9,13,0),ncol=5) M = as.dist(M) par(mfrow=c(2,2)) possible <- c( "single", "complete", "average") for(k in 1:3) plot(hclust(M,possible[k]),hang=-1,main=possible[k]) plot(hclust(M^2,"ward"),hang=-1,main="Inertie intra-classe") # correction manuelle M = matrix(c(0,16,1,9,10,16,0,17,25,2,1,17,0,4,9,9,25,4,0,13,10,2,9,13,0),ncol=5) rownames(M)=c("A","B","C","D","E") colnames(M)=c("A","B","C","D","E") M1=cbind(M,apply(M[,c(1,3)],1,mean)) M1=rbind(M1,c(M1[,6],0)) M1=M1[c(-1,-3),c(-1,-3)] rownames(M1)=c("B","D","E","AC") colnames(M1)=c("B","D","E","AC") M1 M2=cbind(M1,apply(M1[,c(1,3)],1,mean)) M2=rbind(M2,c(M2[,5],0)) M2=M2[c(-1,-3),c(-1,-3)] rownames(M2)=c("D","AC","BE") colnames(M2)=c("D","AC","BE") M2 M3=cbind(M2,apply(M2[,c(1,2)],1,mean)) M3=rbind(M3,c(M3[,4],0)) M3=M3[c(-1,-2),c(-1,-2)] rownames(M3)=c("BE","ACD") colnames(M3)=c("BE","ACD") M3 M=as.dist(M) cah=hclust(M,"average") plot(cah,hang=-1) cah$height ############## correction Exercice II exemple 7 ##### tab <- matrix(c(0,sqrt(2),0,0,0,0,-sqrt(2),0,sqrt(2),sqrt(2),-sqrt(2),-sqrt(2)),c(4,3),byrow=T) colnames(tab) <- c("X","Y","Z") rownames(tab) <- c("A","B","C","D") tab dist.tab=dist(tab) cah.tab=hclust(dist.tab^2,method="ward") plclust(cah.tab,hang=-1) rect.hclust(cah.tab,h=5) unclass(cah.tab) cutree(cah.tab,h=5) cl=kmeans(tab,2) plot(tab, col = cl$cluster, pch=3) points(cl$centers, col = 1:2, pch = 7, lwd=3) segments(tab[cl$cluster==1,1],tab[cl$cluster==1,2],cl$centers[1,1],cl$centers[1,2]) library(cluster) clusplot( tab, pam(tab, 2)$clustering ) ############## correction Exercice III Application : acp sur cidre ##### ### individus ### cidre=read.table("cidre.txt") cidreR=scale(cidre)*sqrt(10/9) library(ade4) acp = dudi.pca(cidre,scannf=FALSE) d=dist.dudi(acp) round(d,1) dist(cidreR) dist(cidre) cah=hclust(d^2,"ward") names(cah) cah$height sum(cah$height)/20 par(mfrow=c(2,1)) barplot(cah$height[order(cah$height,decreasing=TRUE)]) plot(cah,hang=-1) cutree(cah,h=20) rect.hclust(cah,h=20) par(mfrow=c(2,1)) s.class(dfxy=acp$li,fac=as.factor(cutree(cah,h=20))) s.label(acp$li) ### variables #### d=dist.dudi(acp,amongrow=FALSE) round(d,1) cah=hclust(d^2,"ward") sum(cah$height) barplot(cah$height[order(cah$height,decreasing=TRUE)]) plot(cah,hang=-1) cutree(cah,h=3) rect.hclust(cah,h=3) s.corcircle(acp$co) plclust(cah,hang=-1) s.class(dfxy=acp$co,fac=as.factor(cutree(cah,h=2))) ### Application : AFC et CSP #### csp=read.table("csp.txt") afc=dudi.coa(csp,scannf=FALSE) d=dist.dudi(afc) d cah=hclust(d^2,"ward") names(cah) cah$height plot(cah,hang=-1) cutree(cah,h=0.05) rect.hclust(cah,h=0.05) "" par(mfrow=c(2,1)) s.label(afc$li) s.class(dfxy=afc$li,fac=as.factor(cutree(cah,h=0.05))) d=dist.dudi(afc,amongrow=FALSE) cah=hclust(d^2,"ward") names(cah) cah$height plot(cah,hang=-1) cutree(cah,h=0.05) rect.hclust(cah,h=0.05) par(mfrow=c(2,1)) s.label(afc$co) s.class(dfxy=afc$co,fac=as.factor(cutree(cah,h=0.05)))