08.08.2015 Views

Conglomerados con R (II) algoritmos aglomerativos 1 Ejemplo

Guión de la práctica - Departamento de Matemática Aplicada y ...

Guión de la práctica - Departamento de Matemática Aplicada y ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Conglomerados</strong> <strong>con</strong> R (<strong>II</strong>)Mathieu KesslerDepartamento de Matemática Aplicada y EstadísticaUniversidad Politécnica de Cartagena<strong>Conglomerados</strong> <strong>con</strong> R (<strong>II</strong>): <strong>algoritmos</strong> <strong>aglomerativos</strong>.1 <strong>Ejemplo</strong>Empecemos <strong>con</strong> un ejemplo muy sencillo (¡sólo <strong>con</strong>sta de 4 puntos!) que nos permita ilustarlos <strong>algoritmos</strong> <strong>aglomerativos</strong> <strong>con</strong> R.Se trata del ejemplo que se usó en los apuntes:x y0.30 0.60.35 0.40.70 0.80.80 0.5Vamos a llamar los puntos correspondientes A, B, C y D respectivamente.1.1 Introducción de los datos y cálculo de la clasificación jerárquicaEmpecemos por introducir los vectores <strong>con</strong>venientes:x=c(0.3,0.35,0.7,0.8)y=c(0.6,0.4,0.8,0.5)nombres=c("A","B","C","D")y juntamos estas columnas en un dataframe:xy.dat=data.frame(x,y,row.names=nombres)Podemos visualizar el <strong>con</strong>junto <strong>con</strong> un diagrama de dispersión, añadiendo las etiquetas de lospuntos:plot(xy.dat)text(xy.dat,labels=nombres,pos=4)Existen muchos tipos de <strong>algoritmos</strong> <strong>aglomerativos</strong>, casi todos tienen en común su estructuraiterativa:1. Empezamos <strong>con</strong> tantas clases como individuos.2. Dada una partición en clases, seleccionamos las dos clases más próximas y formamos unanueva que las <strong>con</strong>tenga como subclases.1


3. Paramos cuando todos los elementos estén en una única clase.Pero difieran posiblemente en dos aspectos de la implementación del punto 2:• ¿Cómo medir la distancia entre dos puntos del espacio euclídeo?• Una vez que he definido una distancia entre dos puntos del espacio, ¿cómo calculo ladistancia entre dos grupos?R nos permite distintas elecciones tanto de la distancia entre dos puntos, como del método decálculo de la distancia entre dos grupos.Para empezar, la instrucción dist nos permite calcular todas las distancias o disimilaridadesentre los puntos (las filas) de un dataframe:dist(xy.dat)La instrucción dist admite el argumento method, que permite especificar qué tipo de distanciaentre los puntos queremos calcular, siendo la distancia euclídea la opción por defecto. (másdetalles <strong>con</strong> help(dist))En el caso de nuestro <strong>con</strong>junto sencillo, deducimos que los dos puntos más próximos son A yB, cuya distancia es 0.2062. Serán, empezando en la etapa inicial <strong>con</strong> tanto <strong>con</strong>glomeradoscomo puntos, los dos primeros “grupos” que se aglomeren.Para llevar a cabo el procedimiento aglomerativo, usamos la instrucción hclust, que, partiendode una matriz de distancias o disimilaridades, proporciona la jerarquía de clasificación basándoen la iteración de la estructura antes mencionada. En su versión más sencilla, almacenamos elresultado de hclust en un objeto que llamamos como queremos (por ejemplo xy.hcl)xy.hcl=hclust(dist(xy.dat))hclust admite como argumento method que puede tomar uno de los siguientes valores: "ward":método de Ward, basado en una medida de la suma de cuadrados entre grupos; "single":single linkage (vecino más próximo); "complete" complete linkage (vecino más lejano) (Éstees el método por defecto); "centroid" mide la distancia entre dos <strong>con</strong>glomerados cómo ladistancia entre sus dos centroides; "medians" etc....1.2 Historial de <strong>con</strong>glomeraciónPor una parte, podemos re<strong>con</strong>stituir el historial de aglomeración <strong>con</strong>xy.hcl$mergeCada fila representa una etapa en el proceso de aglomeración. Cuando el elemento j de unafila, aparece <strong>con</strong> el signo negativo, indica que, en esta etapa, uno de los <strong>con</strong>glomerados quese aglomeran, está <strong>con</strong>stituido por el individuo j solo. Por ejemplo, en la primera etapa, seaglomeran los individuos 1 y 2 (es decir A y B), y en la segunda etapa, los individuos 3 y 4.En cambio, si el elemento j aparece <strong>con</strong> positivo, se refiere al <strong>con</strong>glomerado resultante de laetapa j del proceso de aglomeración.En nuestro ejemplo, deducimos el historial siguiente:1. Etapa 1: -1 -2, se aglomeran el individuo 1 y el individuo 2, es decir A y B.2


2. Etapa 2: -3 -4, se aglomeran el individuo 3 y el individuo 4, es decir C y D.3. Etapa 3: 1 2, se aglomeran el <strong>con</strong>glomerado que se formó en la etapa 1 (es decir AB)<strong>con</strong> el <strong>con</strong>glomerado que se formó en la etapa 2 (es decir CD).1.3 DendogramaPara visualizar el resultado del proceso de aglomeración, podemos representar el dendograma<strong>con</strong>plot(xy.hcl)Admite los argumentos clásicos de los gráficos (en particular, main, xlab, ylab etc...)1.4 Identificar gruposPor una parte podemos identificar visualmente grupos en el dendograma. Esta identificaciónse puede facilitar <strong>con</strong> la instrucción rect.hclust, que admite como argumento un objetoresultado de hclust, y el número de grupos k que queremos identificar. Por ejemplo,rect.hclust(xy.hcl,k=2)En este ejemplo tan sencillo, la instrucción no ayuda mucho...Podemos también obtener <strong>con</strong>rect.hclust directamente la lista de los clusters <strong>con</strong> sus miembros, si en lugar la instrucciónanterior introducimosprint(rect.hclust(xy.hcl,k=2))Por otra parte, si decidimos de una partición en un determinado número de grupos, podemosobtener para cada individuo el número del cluster en el que está asignado. Supongamos porejemplo que queremos particionar el <strong>con</strong>junto en tres grupos,basta <strong>con</strong> usar la instrucción:cutree(xy.hcl,k=3)Podemos obtener las asignaciones de distintas particiones si, en lugar de especificar un númeropar k, especificamos un vector:cutree(xy.hcl,k=2:3)Por ejemplo añadimos al <strong>con</strong>junto xy.dat tres columnas que <strong>con</strong>tengan las asignaciones de losindividuos en caso en que decidimos de una partición en 2,3 y 4 grupos respectivamente:xy.dat=data.frame(xy.dat,cutree(xy.hcl,k=2:4))2 Problemas2.1 ProteinasConsiderar el fichero del <strong>con</strong>sumo de proteinas de la práctica anterior.1. Realizar una clasificación jerárquica de los paises en base a su <strong>con</strong>sumo de proteinas segúnlas distintas fuentes de alimentación. Podreis utilizar el método de Ward, y especificarque los casos se etiqueten <strong>con</strong> la variable Country. Guardar los <strong>con</strong>glomerados de pertenenciapara un rango de soluciones de 2 a 4. Nota: habrá que trabajar <strong>con</strong> los datos3


tipificados para evitar que unas pocas variables dominen el análisis. Para tipificarun dataframe proteinas.dat y almacenar el resultado en el dataframeproteinas.tip se puede utilizar la instrucción proteinas.tip=scale(proteinas.dat)2. Contestar, examinando el historial de iteraciones, a las siguientes preguntas: ¿qué dospaises se combinan primero? ¿En qué <strong>con</strong>siste la segunda etapa? ¿Cuándo es la primeravez que se forma un <strong>con</strong>glomerado <strong>con</strong> más de dos paises?3. Examinar el dendograma: si queremos quedarnos <strong>con</strong> tres grupos, realizar la lista de lospaises que pertenecen a cada grupo. ¿y <strong>con</strong> 4 grupos?4. Realizar el análisis en componentes principales. Guardar las puntuaciones de los paisessegún el primer componente. Ordenar los paises por orden creciente de estas puntuaciones.¿El orden obtenido parece guardar relación <strong>con</strong> los grupos obtenidos en elapartado anterior? ¿Cómo explicais esta relación?2.2 CiudadesEn el fichero ciudades.txt, se encuentran datos que representan las <strong>con</strong>diciones e<strong>con</strong>ómicasde 48 ciudades en el mundo en 1991. Los datos fueron recogidos por el E<strong>con</strong>omic ResearchDepartment de Union Bank of Switzerland (disponibles en http://lib.stat.cmu.edu/DASL).Las cuatro variables son 1.City: ciudad2.Work: el número de horas anuales de trabajo, calculado como la media correspondiente a 12actividades determinadas.3. Price: precio de un <strong>con</strong>junto de 112 bienes escogidos.4.Salary: Sueldo medio correspondiente a 12 actividades determinadasRealizar un análisis en clusters jerárquicos de los datos, <strong>con</strong> el método de encadenamientocompleto (vecino más lejano). ¿Cuántos grupos aparecen?2.3 SuelosEn el fichero suelos.txt, se encuentran datos correspondientes a 20 muestras de suelos. Clasifícalosen cuatro grupos utilizando los métodos del vecino más cercano, del vecino más lejano y delcentroide.Dibuja los cuatro grupos obtenidos respecto a las variables <strong>con</strong>tenido de arena y <strong>con</strong>tenido demateria orgánica.4

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!