En la siguiente entrada se muestra un ejemplo de como segmentar
un conjunto de observaciones de una base de datos, según un criterio de cercanía
de las variables en cuestión.
El siguiente bloque de códigos únicamente cargan una base hipotéticas:
id<-1:13
nombre<-c("Jose","Pedro","Maria","Anna",
"Leo","Eva","Alex","Miren",
"Beatriz","Cristian","Martha","Vero","Adris")
edad<-c(22,
45, 38, 41, 29, 40, 63, 17, 22, 36, 52, 51, 19)
sexo<-c("H","H","M","M",
"H","M","H","M","M","H","M","M","M")
sexo<- as.numeric(sexo=="H")
ingresosMes<-c(7000,
85000, 26000, 117000, 0, 32000,
130000, 6500, 8900, 8600, 29000,
80000, 13000)
tarjetasMes<-c(0,
40000, 12000, 50000, 0, 12000,
80000, 0, 0, 0, 10000, 35000, 0)
HipotecasMes<-c(0,
32000, 0, 41000, 0, 0,
35000, 0, 0, 0, 0, 3000, 0)
tarjetasMesU<-c(0,
0.85, 1, 0.8, 0, 1, 0.7, 0, 0, 0, 0.4, 0.5, 0)
solicitud<-c("No",
"Si", "Si", "No", "No", "Si",
"Si", "No",
"No", "No", "No", "Si", "Si")
solicitud<-solicitud=="Si"
BancoLaFuerza<-data.frame(id,
nombre, edad, sexo,ingresosMes,tarjetasMes, HipotecasMes, tarjetasMesU,
solicitud)
Ahora, se estandarizan las variables que se utilizaran
para la categorización, esto así para evitar que la distancia calculada este
incidida por la escala de las variables.
> library(foreign)
>
> Z<-scale(BancoLaFuerza[ ,-c(1,2,9)])
> row.names(Z)<-nombre
Ahora, obtenemos la matriz de distancias y verificamos
como se conforman los grupos:
> cj=hclust(dist(Z)^2, method = "average")
> cj$merge
[,1] [,2]
[1,] -3 -6
[2,] -8 -13
[3,] -9 2
[4,] -1 -5
[5,] -10 4
[6,] -11 -12
[7,] 1 6
[8,] 3 5
[9,] -2 -4
[10,] -7 9
[11,] 7 8
[12,] 10 11
La forma de interpretar la salida anterior es que el
primer paso el algoritmo agrupó a la observación 3 con la 6 ([1,] -3
-6); en el segundo paso agrupó la observación 8 con la 13 ([2,] -8
-13) y en el tercer paso, agrupó la observación 9, con las dos
observaciones que se agruparon en el paso 2 ([3,] -9
2), y así de forma sucesiva. De esta manera, puede verse que números negativos
indican asociación entre observaciones, mientras que los positivos indican asociación
de una observación, con algunas observaciones ya agrupadas previamente.
El dendograma es una forma gráfica sencilla de verificar
la conformación de grupos:
> plot(cj,main="Dendograma",labels=row.names(Z),hang=-1)
Finalmente, para tener la indicación del grupo al que
pertenece cada observación:
> g=cutree(cj,k=4)
> g
Jose Pedro Maria Anna Leo Eva Alex Miren
1 2 3 2 1 3 4 1
Beatriz Cristian Martha Vero Adris
1 1
3 3
1