lunes, 14 de septiembre de 2009

Análisis cluster en R

Act1 Cluster

Aplicaciones-Ejemplos

#####Como aplicaci´on vamos a realizar un an´alisis cluster al fichero de datos cluster.sav.########3
#Este fichero contiene los datos de veinte variables (nombradas V2,V3,...,V21) de cohesi´on social de 10 pa´ýses europeos.

#cargamos los datos
datos<-read.table("cluster.txt", header=TRUE,row.names=1)
datos

tres<-read.table("Libro1.txt", header=FALSE)

dist_tres<-dist(t(tres),"eucl")
dist_tres
V1 V2 V3 V4 V5 V6
V2 17.857491
V3 32.336048 44.004659
V4 15.479018 23.482973 23.298498
V5 9.099451 8.825531 37.714188 17.837601
V6 12.323149 10.307764 39.729083 18.878559 7.005712
V7 28.680830 33.971459 20.152667 17.021457 30.292738 32.227783
Z<-dist_tres^2

#En este caso nos ocurre igual que en la secci´on anterior, los datos son muy dispares y es
#conveniente tipificarlos:
datos2<-scale(datos)

par(mar=c(8,2.5,.7,.7),lwd=3,bty="l",cex=1.7)
boxplot(data.frame(scale(datos)),pch=20,cex=.5,las=2,cex.axis=.7)

#tenemos que seleccionar una de las medidas, en este caso aplicaremos la distancia euclídea:
distancia<-dist(datos2,"eucl")
distancia<-distancia^2

#vamos a usar cuatro métodos: el linkaje simple, completo, el de la media y el de Ward.
cluster1<-hclust(distancia,method="complete")
cluster2<-hclust(distancia,method="single")
cluster3<-hclust(distancia,method="ave")
cluster4<-hclust(distancia,method="ward")

distancia->nombre
as.matrix(nombre)->Z
rownames(Z,do.NULL=T,prefix="p")->rownames(Z)

opar <- par(mfrow = c(2, 2))
plot(cluster,main="Average",ylab="Rescaled Distance Cluster Combine", xlab="Label",hang=1,cex.axis=1,cex=.8,cex.lab=.8,labels=x)
rect.hclust(cluster,k=5)
plot(cluster1,main="Complete",ylab="Rescaled Distance Cluster Combine", xlab="Label",hang=1,cex.axis=1,cex=.8,cex.lab=.8,labels=x)
rect.hclust(cluster1,k=5)
plot(cluster2,main="Single",ylab="Rescaled Distance Cluster Combine", xlab="Label",hang=1,cex.axis=1,cex=.8,cex.lab=.8,labels=x)
rect.hclust(cluster2,k=5)
plot(cluster4,main="Ward",ylab="Rescaled Distance Cluster Combine", xlab="Label",hang=1,cex.axis=1,cex=.8,cex.lab=.8,labels=x)
rect.hclust(cluster4,k=5)

#Para terminar solo tendr´iamos que graficar los dendogramas de cada m´etodo, y analizar
#los diferentes resultados para intentar ver la consistencia de los resultados (en este caso solo
#haremos el primero de ellos):
plot(cluster1)

#Obteniendo los mismos resultados que con SPSS. Finalmente calcularemos los respectivos
#coeficientes cofen´eticos para decidir cual de los m´etodos es mejor. Para ello, primero calcularemos
#las matrices cofen´eticas de los cuatro m´etodos y posteriormente la correlaci´on de estas
#con la matriz de distancias, eucl´idea en este caso.
co11<-cophenetic(cluster1)
co12<-cophenetic(cluster2)
co13<-cophenetic(cluster3)
co14<-cophenetic(cluster4)

cor(distancia,co11)
cor(distancia,co12)
cor(distancia,co13)
cor(distancia,co14)

# Por lo que concluiríamos que el mejor método es el “cluster3”, con un coeficiente cofenético
#de 0.795, por lo que le mejor m´etodo es el de la media aunque existen pocas diferencias entre ambos m´etodos.