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)
Ver también: Puntos de corte de una variable cuantitativa (1), Puntos de corte de una variable cuantitativa (2)
No hay comentarios:
Publicar un comentario