R10 Hierarchical Clustering # A sample Dataset x1 <- c(1, 2, 3, 4, 7, 8, 10) x2 <- c(8, 2, 3, 1, 11, 8, 10) X <- cbind(x1, x2) plot(X, pch=16) identify(X, labels=1:7) X.d <- dist(X) X.d X.hc.s <- hclust(X.d, method="single") win.graph() plot(X.hc.s) dev.set(2) cutree(X.hc.s, 3) plot(X, pch=cutree(X.hc.s, 3), col=cutree(X.hc.s, 3)) dev.off(3) # Iris Data iris.s <- scale(iris[,-5]) iris.d <- dist(iris.s) species <- iris[,5] iris.hc.s <- hclust(iris.d, method="single") plot(iris.hc.s) pairs(iris[,-5], pch=cutree(iris.hc.s,6), col=cutree(iris.hc.s,6)) pairs(iris[,-5], pch=unclass(species), col=cutree(iris.hc.s,6)) iris.hc.c <- hclust(iris.d, method="complete") plot(iris.hc.c) pairs(iris[,-5], pch=cutree(iris.hc.c,6), col=cutree(iris.hc.c,6)) pairs(iris[,-5], pch=unclass(species), col=cutree(iris.hc.c,6)) # Artificial data - 4 clusters X <- matrix(rnorm(320), 80, 4) X[1:20,1] <- X[1:20,1]+10 X[21:40,2] <- X[21:40,2]+10 X[41:60,3] <- X[41:60,3]+10 X <- scale(X) pairs(X) library(rgl) plot3d(X[,1],X[,2],X[,3], type="s", size=.25, col="red") plot3d(X[,1],X[,2],X[,3], type="s", size=.25, col=rep(1:4, c(20,20,20,20))) rot <- eigen(cor(iris[,-5]))$vectors # Arbitrary rotation matrix to hide structure Y <- scale(X %*% rot) pairs(Y) plot3d(Y[,1],Y[,2],Y[,3], type="s", size=.25, col="red") plot3d(Y[,1],Y[,2],Y[,3], type="s", size=.25, col=rep(1:4, c(20,20,20,20))) Y.d <- dist(Y) Y.hc.s <- hclust(Y.d, method="single") plot(Y.hc.s) Y.hc.c <- hclust(Y.d, method="complete") plot(Y.hc.c) Y.hc.a <- hclust(Y.d, method="average") plot(Y.hc.a) Y.hc.w <- hclust(Y.d, method="ward") plot(Y.hc.w) pairs(Y, pch=cutree(Y.hc.w,4), col=cutree(Y.hc.w,4)) Y.pca <- prcomp(Y) plot(Y.pca) pairs(Y.pca$x[,1:3], pch=cutree(Y.hc.w,4), col=cutree(Y.hc.w,4)) # Swiss canton data pairs(swiss, pch=16) swiss.d <- dist(scale(swiss)) plot(hclust(swiss.d, method="single")) plot(hclust(swiss.d, method="complete")) plot(hclust(swiss.d, method="ward")) plot(hclust(swiss.d, method="average")) swiss.hc.w <- hclust(swiss.d, method="ward") pairs(swiss, pch=cutree(swiss.hc.w, 3), col=cutree(swiss.hc.w, 3)) swiss.pca <- prcomp(swiss, scale=T) plot(swiss.pca) swiss.pca$rotation pairs(swiss.pca$x[,1:4], pch=cutree(swiss.hc.w, 3), col=cutree(swiss.hc.w, 3)) swiss.hc.c <- hclust(swiss.d, method="complete") pairs(swiss, pch=cutree(swiss.hc.c, 2), col=cutree(swiss.hc.c, 2)) pairs(swiss, pch=cutree(swiss.hc.c, 4), col=cutree(swiss.hc.c, 4)) pairs(swiss.pca$x[,1:4], pch=cutree(swiss.hc.c, 4), col=cutree(swiss.hc.c, 4))