Manual. Curso introducción de R. Capítulo 16: Análisis Cluster con R (II)

4 May

En esta entrega vamos a seguimos trabajando con el análisis Cluster viendo más posibilidades que nos ofrece R. Para ello vamos a realizar un estudio de agrupamiento de países europeos en función de algunos indicadores básicos:

  • Superficie
  • Población
  • PIB (en mil de $)
  • Esperanza de vida
  • Índice de desarrollo humano
  • % Población en ciudad

Para este estudio contamos con este archivo excel . El primer paso por supuesto es crear un objeto en R:


odbcClose(tabla)
library(RODBC)
setwd("c:/raul")
tabla<-odbcConnectExcel("paises.xls")
datos<-sqlFetch(tabla,"Hoja1")
odbcClose(tabla)
detach(datos)
attach(datos)
datosdensi<-datospob/datos$sup
detach(datos)

Ya tenemos el objeto datos sobre el que realizaremos el análisis. Para evitar que tamaños de población o superficies muy grandes distorsionen el análisis hemos creado una nueva variable densi que nos mide la densidad de población Es necesario computar una matriz de distancias pero en este caso el agrupamiento se llevará a cabo con las medidas de disimilitud con base en la distancia euclidea. Es decir, lo contrario a una medida de similitud:


library(cluster)
datos.estudio<-cbind(datosdensi,datospib,datosIDH,datosEspe_vida,datos$Pob_ciudad)
disimilar<-daisy(datos.estudio)

Necesitamos la librería CLUSTER para emplear la función DAISY que es la que nos calcula la matriz de disimilitudes. Con esta matriz ya podemos emplear la función HCLUST y crear un gráfico para estudiar como se agrupan los países en estudio:


cluster.1<-hclust(disimilar)
plot(cluster.1)

cluster2.JPG

Parece que tenemos 4 grupos muy claros, uno de ellos con sólo un elemento. Vamos a emplear una técnica por medios divisorios (Partitioning methods en terminología anglosajona) que sitúa cada observación en los alguno de los cluster de forma que se minimizara la suma de las disimilaridades:


cluster.2<-pam(datos.estudio,4)
cluster.2
Medoids:
ID
[1,] 22 56.66156 6656 0.803 71.8 68.4
[2,] 3 96.59071 25089 0.921 77.9 64.6
[3,] 16 80.32920 15414 0.881 78.1 59.9
[4,] 23 170.92034 42769 0.924 77.2 91.0

Clustering vector:
[1] 1 2 2 1 2 1 1 2 1 3 3 1 1 2 2 3 3 2 2 2 1 1 4 1 3 1 2 2 1 3 2 3 1 2 2 1
Objective function:
build swap
1716.162 1710.430
Available components:
[1] "medoids" "id.med" "clustering" "objective" "isolation" "clusinfo" "silinfo" "diss" "call" "data"

size max_diss av_diss diameter separation
[1,] 14 4619.601 1791.727 8554.028 839.0358
[2,] 14 3345.039 1789.240 6344.181 4017.4032
[3,] 7 3984.093 1634.563 6649.075 839.0358
[4,] 1 0.000 0.000 0.000 14336.8688

Se observa que el cluster identificado como 1 tiene los valores más bajos a excepción de la población rural que se sitúa en la media global. El cluster 2 tiene un PIB alto al igual que el ídice de desarrollo humano, la más alta esperanza de vida y uno de los menores porcentajes de personas en ciudades. El grupo 3 es parecido al grupo 1 pero su PIB no es muy bajo, aunque por debajo de la media, un 40% de su población vive en el medio rural. El grupo 4 recoge a un país muy potente y muy poblado donde nadie reside en el medio rural. Vemos como quedan los grupos:


grupos<-data.frame(datospais)
grupos<-cbind(grupos,data.frame(cluster.2
clustering))
> grupos
datos.pais cluster.2.clustering
1 Albania 1
2 Alemania 2
3 Austria 2
4 Belarús 1
5 Bélgica 2
6 Bulgaria 1
7 Croacia 1
8 Dinamarca 2
9 Eslovaquia 1
10 Eslovenia 3
11 España 3
12 Estonia 1
13 Rusia 1
14 Finlandia 2
15 Francia 2
16 Grecia 3
17 Hungría 3
18 Irlanda 2
19 Islandia 2
20 Italia 2
21 Letonia 1
22 Lituania 1
23 Luxemburgo 4
24 Macedonia 1
25 Malta 3
26 Moldova 1
27 Noruega 2
28 Holanda 2
29 Polonia 1
30 Portugal 3
31 Reino Unido 2
32 República Checa 3
33 Rumania 1
34 Suecia 2
35 Suiza 2
36 Ucrania 1

Parece claro que el grupo 1 engloba a los países del este, el grupo 2 forma la Europa más desarrollada, el grupo 3 la Europa en vías de desarrollo y el grupo 4 es Luxemburgo. Veamos gráficamente como se agrupan:


par(mfrow=c(2,1)) # 2x1 casillas gráficas
plot(cluster.2)

cluster3.JPG

Tenemos 2 gráficos: uno de componentes principales y otro de distancias entre los centroides de los cluster. Con 2 componentes ya tendríamos el 85% de la variabilidad explicada. Espero que este ejemplo os sirva de referencia para conocer las posibilidades de R en el análisis cluster. Por supuesto si tenéis cualquier duda o sugerencia rvaquerizo@analisisydecision.es

7 respuestas a «Manual. Curso introducción de R. Capítulo 16: Análisis Cluster con R (II)»

  1. Muy interesante el ejercicio. No obstante:

    1) Al leer los datos, ¿para qué tanto attach-detach?

    2)En la descripción de los grupos, deberías haber ordenado por grupo-país más que por país solamente para poder apreciarlos mejor.

    3) La gente no sabe qué son los «gráficos de bandera» que muestras: ¿podías explicarlos?

    Muchas gracias por hacer públicos estos tutoriales.

    Un saludo,

    Carlos J. Gil Bellosta

  2. 1) Lo del attach-detach son costumbres que cojo porque, aunque no los muestro, hago validaciones y sumarizaciones entre ejecución y ejecución.

    2 y 3) Estoy intentando que cada mensaje se lea en menos de 2 minutos por eso no entro en conclusiones avanzadas. Me lo apunto y realizo otro ejemplo (está teniendo mucho éxito este mensaje) en el que intento que se lea en 3-4 minutos a ver que pasa.

    Por cierto, lo más duro de hacer cada mensaje de este tipo es crear el conjunto de datos de entrada. El Eurostat va a echar chispas, uno de los siguientes ejemplos será el análisis discriminante entre países deflacionistas.

  3. Hola me gustaría saber que procedimiento puedo utlizar en SAS para realizar un análisis cluster que contenga un dataset con variables cualitativas y cuantitativas. Hay paquetes estadísticos multivariantes como Spad que realiza el cluster a través de un ACM previo. Sabes si el SAS tiene algún procedimiento parecido.

    Muchas Gracias

  4. Hola, de forma rápida en SAS tienes el PROC CLUSTER para el análisis no dirigido y el FASTCLUS para el dirigido. Perdona que no te pueda ayudar mucho más pero R en el análisis de agrupamiento ahora mismo es la mejor herramienta.

    De todos modos me apunto esta cuestión y me propongo realizar un ejemplo de cluster con SAS.

    • Hola, sigo el blog y me interesa lo relacionado con R y el análisis cluster. Estoy intentando hacer un análisis con la función DAISY., pero no se manejarlo bien y no se cómo manejar las siguientes variables.

      Quiero ordenar una colección de vinilos , haciendo grupos. Tengo una matriz con las variables.

      Elemento / Artista / Sello / Año publicación / influencia / Estilo / Sabor / Pais artista / Pais Sello /

      Tengo una hoja excel con el ejemplo. No se si me podriais echar una mano para resolver el problema. Tengo todas las lineas tabuladas.

      gracias de antemano

  5. Hola
    Tengo una base de datos de una encuesta con variables categoricas y requiero hacer el análisis cluster, pero no lo he logrado.

    Agradezco tu ayuda

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *