miércoles, 8 de enero de 2014

Diferentes métodos para definir puntos de corte de una variable cuantitativa (3)

Ya hemos visto diferentes métodos de categorización de variables, desde los básicos como realizarlos desde cortes naturales y equiprobables, como también los que se tienen en cuenta desde los histogramas con intervalos de ancho fijo y ancho variable. Ahora miraremos los que se utilizan a partir de métodos multivariados.

Cortes a partir de un método de clasificación


Entre los métodos de clasificación más usuales se encuentran los jerárquicos y no jerárquicos. Para nuestro caso utilizaremos la clasificación mixta el cual consiste en utilizar primero un método jerárquico y luego consolidar los grupos establecidos mediante un método no jerárquico como el k-means. Para ello utilizaremos la función HCPC del paquete FactoMineR.

res.hcpc<-HCPC(Edad)
> min.cla<-unlist(by(res.hcpc$data.clust[,1],res.hcpc$data.clust[,2],min))
> cortes<-c(min.cla,max(Edad))
> resultados(Edad,cortes)
[15,29) [29,43) [43,60) [60,90] 
    130      68      64      38
Al realizar esté método se sugiere realizar 4 grupos los cuales se observan los siguientes cortes

Notamos que los cortes dan una descripción muy general de la forma de los datos. Además, los cortes son de intervalos de ancho variables. Esté método tiene sus pros y contras. Entre sus pros está que los cortes se basan en la agrupación misma de los datos, también que al considerar pocos cortes los resultados son buenos para otros tipos de análisis. Sin embargo, entre sus contras está que los cortes no son muy claros de cómo es la estructura misma de los datos (frecuencias altas, outliers).

Realicemos el mismo ejercicio pero con los cortes de la regla de Sturges.

k<-nclass.Sturges(Edad)
> res.hcpc<-HCPC(Edad,k)
> min.cla<-unlist(by(res.hcpc$data.clust[,1],res.hcpc$data.clust[,2],min))
> cortes<-c(min.cla,max(Edad))
> resultados(Edad,cortes)
[15,21) [21,25) [25,30) [30,36) [36,43) [43,50) [50,60) [60,68) [68,89) [89,90] 
     36      56      44      30      32      32      32      14      22       2
Se consideran 10 intervalos y lo interesante es que estos cortes si dan idea claramente de como son los datos. En el siguiente gráfico se detallan los resultados.
Cortes a partir de árboles de decisión

Para utilizar los arboles de decisión se deben tener en cuenta una variable auxiliar que defina grupos de alguna índole. Para nuestro caso utilizaremos dos casos comunes. El primero consiste en construir grupos a partir de proceso de clasificación obtenido de un método de correspondencias múltiples para el conjunto de datos estudiado y otro caso en el que se pregunta cuál es el tipo de empleo que tiene la persona.

Caso uno (Clasificación a partir de un análisis de correspondencia múltiple)

Por simplicidad utilizamos los datos de tea según el ejemplo y se construyen grupos a partir de 18 variables de interés las cuales se describen en el ejemplo

Para el ejemplo se consideran las primeras 20 componentes las cuales tienen los valores propios mayores de 1/27 (27 son el número de dimensiones consideradas para esté ejemplo).

tea.MCA<-tea[, 1:18]
res<-MCA(tea.MCA, ncp=20, graph = FALSE)
res.hcpc<-HCPC(res ,nb.clust=0,consol=TRUE,min=3,max=10,graph=TRUE)
Al considerar la agrupación se sugieren realizar 3 grupos los cuales se concatenan con la variable Edad tenida en cuenta

datos.clus<-res.hcpc$data.clust
cluster<-data.frame(clust=datos.clus$clust)
cluster$id<-as.numeric(row.names(datos.clus))
cluster[order(cluster[,2]),]
BD<-data.frame(Edad,clust=cluster$clust)
summary(BD)
      Edad       clust  
 Min.   :15.00   1:176  
 1st Qu.:23.00   2: 32  
 Median :32.00   3: 92  
 Mean   :37.05          
 3rd Qu.:48.00          
 Max.   :90.00

Para los arboles de decisión se utilizara el paquete rpart y partykit

library("rpart")
fit<-rpart(clust~Edad,data=BD)

> library("partykit")
> g_fit <- as.party(fitb.tree)
> print(g_fit, header = FALSE)
[1] root
|   [2] Edad < 20.5: 1 (n = 36, err = 25.0%)
|   [3] Edad >= 20.5
|   |   [4] Edad >= 21.5: 1 (n = 244, err = 41.0%)
|   |   [5] Edad < 21.5: 3 (n = 20, err = 35.0%)

Number of inner nodes:    2
Number of terminal nodes: 3
> plot(g_fit, type = "extended")

Sin entrar en detalles encontramos que los cortes de la variable edad se deben realizar en 20.5 y 21.5. Al realizar los cortes obtenemos lo siguiente

cortes<-c(min(Edad),fit$splits[,"index"],max(Edad))
> resultados(Edad,cortes)
  [15,20.5) [20.5,21.5)   [21.5,90] 
         36          20         244
Está forma sugiere los mejores cortes según la información de los datos. 

Caso dos (Clasificación a partir de un variable de interés)

Ahora detallemos si tuviéramos una variable sobre el trabajo desempeñado por la persona que consume te.

BD$SPC<-tea$SPC
> summary(BD$SPC)
    employee       middle   non-worker other worker       senior      student      workman 
          59           40           64           20           35           70           12
> fit<-rpart(SPC~Edad,data=BD)
> g_fit <- as.party(fit)
> print(g_fit, header = FALSE)
[1] root
|   [2] Edad >= 23.5
|   |   [3] Edad >= 58.5: non-worker (n = 38, err = 5.3%)
|   |   [4] Edad < 58.5
|   |   |   [5] Edad >= 30.5
|   |   |   |   [6] Edad >= 50.5
|   |   |   |   |   [7] Edad < 55.5: employee (n = 15, err = 53.3%)
|   |   |   |   |   [8] Edad >= 55.5: middle (n = 7, err = 57.1%)
|   |   |   |   [9] Edad < 50.5: middle (n = 99, err = 70.7%)
|   |   |   [10] Edad < 30.5: employee (n = 55, err = 60.0%)
|   [11] Edad < 23.5: student (n = 86, err = 31.4%)

Number of inner nodes:    5
Number of terminal nodes: 6
> plot(g_fit, type = "extended")
Encontramos que los mejores cortes para estudiar la edad son 23.5, 30.5, 50.5, 55.5 y 58.5. Al realizar estos cortes obtenemos lo siguiente

> cortes<-c(min(Edad),fit$splits[,"index"],max(Edad))
> resultados(Edad,cortes)
  [15,23.5) [23.5,30.5) [30.5,50.5) [50.5,55.5) [55.5,58.5)   [58.5,90] 
         86          55          99          15           7          38
Los puntos de cortes para la edad, se sugieren para estudiar el tipo de empleo de la persona que consume te.

Resumiendo los resultados encontramos que esté método es adecuando siempre y cuando se cuente con una variable que defina grupos de interés. Uno de los contra que se tienen es que en ocasiones el árbol no se construye con una sola variable, por lo cual no se logran definir los puntos de corte.

En definitiva existen muchas formas de definir puntos de cortes, espero les haya agradado esté resumen.

Ver también: Puntos de corte de una variable cuantitativa (1)Puntos de corte de una variable cuantitativa (2)