leer datos de pruba

setwd('C:/Users/facu/Google Drive/Tesis Lic/Bibliografia no citable/Curso de R')
Datos <- read.table('BD_PRUEBA_SIMPLE.csv',header = TRUE,sep = ",",dec = '.')





str(Datos)
## 'data.frame':    300 obs. of  24 variables:
##  $ EDAD              : int  56 54 24 20 59 19 36 52 19 18 ...
##  $ GENERO            : Factor w/ 2 levels "F","M": 2 1 2 2 1 1 1 1 1 1 ...
##  $ TABAQUISMO        : Factor w/ 2 levels "NO","SI": 1 2 2 1 1 2 1 2 2 1 ...
##  $ ALCOHOLISMO       : Factor w/ 2 levels "NO","SI": 2 2 1 1 1 2 1 1 1 2 ...
##  $ PERIODONTITIS     : Factor w/ 2 levels "CONTROLADA","NO CONTROLADA": 1 1 2 1 1 1 2 2 1 2 ...
##  $ RIESGO_PERIODONTAL: Factor w/ 3 levels "ALTO","BAJO",..: 1 2 2 2 3 3 3 1 1 2 ...
##  $ INGESTA_MED       : Factor w/ 2 levels "NO","SI": 2 1 1 1 1 1 2 1 1 2 ...
##  $ MATERIAL          : Factor w/ 2 levels "TITANIO 4","ZIRCONIO": 1 2 2 1 1 2 1 1 2 1 ...
##  $ MARCA             : Factor w/ 7 levels "ASTRATECH","DIOHORIZONS",..: 7 3 2 3 3 6 1 2 7 3 ...
##  $ DISENO            : Factor w/ 2 levels "CILINDRICO","CONICO": 2 1 1 2 1 1 2 2 1 1 ...
##  $ LONGITUD          : int  10 11 8 11 11 11 8 13 13 5 ...
##  $ DIAMETRO          : int  3 4 3 3 3 3 4 3 3 3 ...
##  $ CONEXION          : Factor w/ 2 levels "HEXAGONO EXTERNO",..: 1 1 1 2 2 2 2 2 2 1 ...
##  $ PROCEDENCIA       : Factor w/ 2 levels "IMPORTADO","NACIONAL": 1 2 2 1 2 1 2 1 1 2 ...
##  $ TRAT_SUP          : Factor w/ 4 levels "ARENOSO","LASER",..: 4 2 2 2 4 1 4 3 4 1 ...
##  $ PROTOCOLO_CARGA   : Factor w/ 3 levels "INMEDIATO","TARDIO",..: 2 2 1 3 2 1 3 1 3 3 ...
##  $ EXODONCIA         : Factor w/ 2 levels "NO","SI": 2 1 2 2 1 1 2 1 1 1 ...
##  $ EXPANSION_OSEA    : Factor w/ 2 levels "NO","SI": 1 1 1 1 1 2 2 1 1 2 ...
##  $ ELEV_SENO_MAXILAR : Factor w/ 2 levels "NO","SI": 1 2 1 1 1 2 2 2 2 2 ...
##  $ REG_TEJIDO_DURO   : Factor w/ 2 levels "NO","SI": 1 1 1 1 2 2 2 2 2 2 ...
##  $ REG_TEJIDO_BLANDO : Factor w/ 2 levels "NO","SI": 1 1 1 2 1 2 2 1 2 2 ...
##  $ TIEMPO_COLOC      : Factor w/ 3 levels "INMEDIATO","TARDIO",..: 1 3 3 2 3 2 2 1 2 2 ...
##  $ TIPO_HUESO        : Factor w/ 4 levels "TIPO I","TIPO II",..: 1 1 3 2 3 4 2 4 2 1 ...
##  $ INDIC_PROTESICA   : Factor w/ 4 levels "PIEZA UNITARIA",..: 1 3 3 4 2 1 2 1 3 4 ...

Clustering para variables cualitativas la funcion dayse de la biblioteca cluster permite calcular la amtriz de distancia en tablas cuyas variables estan mezcalda entres variables cualitativas y cuantitativas

library(cluster)

D<-daisy(Datos,metric = "gower")

hago hclust

jer<-hclust(D,method="complete")
plot(jer,hang = -1)

rect.hclust(jer,k=4,border = "red")

Interpretacion de los datos cualitativos

library(rattle)
## Warning: package 'rattle' was built under R version 3.4.2
## Rattle: A free graphical interface for data science with R.
## Versión 5.1.0 Copyright (c) 2006-2017 Togaware Pty Ltd.
## Escriba 'rattle()' para agitar, sacudir y  rotar sus datos.
str(Datos)
## 'data.frame':    300 obs. of  24 variables:
##  $ EDAD              : int  56 54 24 20 59 19 36 52 19 18 ...
##  $ GENERO            : Factor w/ 2 levels "F","M": 2 1 2 2 1 1 1 1 1 1 ...
##  $ TABAQUISMO        : Factor w/ 2 levels "NO","SI": 1 2 2 1 1 2 1 2 2 1 ...
##  $ ALCOHOLISMO       : Factor w/ 2 levels "NO","SI": 2 2 1 1 1 2 1 1 1 2 ...
##  $ PERIODONTITIS     : Factor w/ 2 levels "CONTROLADA","NO CONTROLADA": 1 1 2 1 1 1 2 2 1 2 ...
##  $ RIESGO_PERIODONTAL: Factor w/ 3 levels "ALTO","BAJO",..: 1 2 2 2 3 3 3 1 1 2 ...
##  $ INGESTA_MED       : Factor w/ 2 levels "NO","SI": 2 1 1 1 1 1 2 1 1 2 ...
##  $ MATERIAL          : Factor w/ 2 levels "TITANIO 4","ZIRCONIO": 1 2 2 1 1 2 1 1 2 1 ...
##  $ MARCA             : Factor w/ 7 levels "ASTRATECH","DIOHORIZONS",..: 7 3 2 3 3 6 1 2 7 3 ...
##  $ DISENO            : Factor w/ 2 levels "CILINDRICO","CONICO": 2 1 1 2 1 1 2 2 1 1 ...
##  $ LONGITUD          : int  10 11 8 11 11 11 8 13 13 5 ...
##  $ DIAMETRO          : int  3 4 3 3 3 3 4 3 3 3 ...
##  $ CONEXION          : Factor w/ 2 levels "HEXAGONO EXTERNO",..: 1 1 1 2 2 2 2 2 2 1 ...
##  $ PROCEDENCIA       : Factor w/ 2 levels "IMPORTADO","NACIONAL": 1 2 2 1 2 1 2 1 1 2 ...
##  $ TRAT_SUP          : Factor w/ 4 levels "ARENOSO","LASER",..: 4 2 2 2 4 1 4 3 4 1 ...
##  $ PROTOCOLO_CARGA   : Factor w/ 3 levels "INMEDIATO","TARDIO",..: 2 2 1 3 2 1 3 1 3 3 ...
##  $ EXODONCIA         : Factor w/ 2 levels "NO","SI": 2 1 2 2 1 1 2 1 1 1 ...
##  $ EXPANSION_OSEA    : Factor w/ 2 levels "NO","SI": 1 1 1 1 1 2 2 1 1 2 ...
##  $ ELEV_SENO_MAXILAR : Factor w/ 2 levels "NO","SI": 1 2 1 1 1 2 2 2 2 2 ...
##  $ REG_TEJIDO_DURO   : Factor w/ 2 levels "NO","SI": 1 1 1 1 2 2 2 2 2 2 ...
##  $ REG_TEJIDO_BLANDO : Factor w/ 2 levels "NO","SI": 1 1 1 2 1 2 2 1 2 2 ...
##  $ TIEMPO_COLOC      : Factor w/ 3 levels "INMEDIATO","TARDIO",..: 1 3 3 2 3 2 2 1 2 2 ...
##  $ TIPO_HUESO        : Factor w/ 4 levels "TIPO I","TIPO II",..: 1 1 3 2 3 4 2 4 2 1 ...
##  $ INDIC_PROTESICA   : Factor w/ 4 levels "PIEZA UNITARIA",..: 1 3 3 4 2 1 2 1 3 4 ...

Voy a quitar los datos cualitativos

centros <- centers.hclust(Datos[,-c(2,3,4,5,6,7,8,9,10,13,14,15,16,17,18,19,20,21,22,23,24)],jer,nclust = 4,use.median = FALSE)

centros
##          EDAD  LONGITUD DIAMETRO
## [1,] 43.42593  9.481481 12.29630
## [2,] 48.43704 10.000000 15.11852
## [3,] 47.05714  9.857143 21.78571
## [4,] 44.24390  8.317073 22.41463

Analisammos lo datos cualitativos

row.names(centros)<-c("Cluster 1" ,"Cluster 2" ,"Cluster 3","Cluster 4")
centros <- as.data.frame(centros)
maximos <- apply(centros,2,max)
minimos <- apply(centros,2,min)
centros <- rbind(maximos,centros)
centros <-rbind(minimos,centros)
centros
##               EDAD  LONGITUD DIAMETRO
## 1         43.42593  8.317073 12.29630
## 11        48.43704 10.000000 22.41463
## Cluster 1 43.42593  9.481481 12.29630
## Cluster 2 48.43704 10.000000 15.11852
## Cluster 3 47.05714  9.857143 21.78571
## Cluster 4 44.24390  8.317073 22.41463
library(fmsb)

radarchart(centros,maxmin = TRUE, axistype = 4, axislabcol = "slategray4",
           centerzero = FALSE,seg = 8,cglcol = "gray67",
           pcol = c("black","red","green","blue"),
           plty = 1,
           plwd = 5,
           title = "comparacion de clusteres"
           )


legenda <- legend(1.5,1,legend = c("Cluster 1","Cluster2","Cluster 3","Cluster 4"),
                  seg.len=1.4,
                  title = "clusteres",
                  pch=21,
                  bty = "n",lwd = 3, y.intersp = 1,horiz = FALSE,
                  col=c("black","red","green","blue"))

Interpretar las cualitativas aparte

plot(Datos$ALCOHOLISMO, col= c(4,6),las=2, main = " Variable Alcoholismo", xlab= "todos los datos")

vamos a separar las variables por cluster

grupo <- cutree(jer,k=4)
Ndatos <- cbind(Datos,grupo)
cluster <- Ndatos$grupo

sel.cluster1 <- match(cluster,1,0)
sel.cluster1[1:10]
##  [1] 1 0 0 0 0 0 1 1 0 1
Datos.Cluster1<- Ndatos[sel.cluster1>0,]
dim(Datos.Cluster1)
## [1] 54 25

Calculamos la Cantidad de Individuos por Cluster

sel.cluster2 <- match(cluster,2,0)
Datos.Cluster2<- Ndatos[sel.cluster2>0,]
dim(Datos.Cluster2)
## [1] 135  25
sel.cluster3 <- match(cluster,3,0)
Datos.Cluster3<- Ndatos[sel.cluster3>0,]
dim(Datos.Cluster3)
## [1] 70 25
sel.cluster4 <- match(cluster,4,0)
Datos.Cluster4<- Ndatos[sel.cluster4>0,]
dim(Datos.Cluster4)
## [1] 41 25

vamos a plotear las variables por cluster para analizarlas individualmente

plot(Datos.Cluster1$ALCOHOLISMO, col= c(4,6),las=2, main = " Variable Alcoholismo", xlab= "Cluster 1")

plot(Datos.Cluster1$TABAQUISMO, col= c(4,6),las=2, main = " Variable Tabaquismo", xlab= "Cluster 1")

plot(Datos.Cluster1$PERIODONTITIS, col= c(4,6),las=2, main = " Variable Peritonitis", xlab= "Cluster 1")

plot(Datos.Cluster1$RIESGO_PERIODONTAL, col= c(4,6),las=2, main = " Variable Peritonitis", xlab= "Cluster 1")

cluster 2

plot(Datos.Cluster2$ALCOHOLISMO, col= c(4,6),las=2, main = " Variable Alcoholismo", xlab= "Cluster 2")

Acp Mediante un escalamiento multidimensional con datos cualitativos y cuantitativos mexclados.

str(Datos)
## 'data.frame':    300 obs. of  24 variables:
##  $ EDAD              : int  56 54 24 20 59 19 36 52 19 18 ...
##  $ GENERO            : Factor w/ 2 levels "F","M": 2 1 2 2 1 1 1 1 1 1 ...
##  $ TABAQUISMO        : Factor w/ 2 levels "NO","SI": 1 2 2 1 1 2 1 2 2 1 ...
##  $ ALCOHOLISMO       : Factor w/ 2 levels "NO","SI": 2 2 1 1 1 2 1 1 1 2 ...
##  $ PERIODONTITIS     : Factor w/ 2 levels "CONTROLADA","NO CONTROLADA": 1 1 2 1 1 1 2 2 1 2 ...
##  $ RIESGO_PERIODONTAL: Factor w/ 3 levels "ALTO","BAJO",..: 1 2 2 2 3 3 3 1 1 2 ...
##  $ INGESTA_MED       : Factor w/ 2 levels "NO","SI": 2 1 1 1 1 1 2 1 1 2 ...
##  $ MATERIAL          : Factor w/ 2 levels "TITANIO 4","ZIRCONIO": 1 2 2 1 1 2 1 1 2 1 ...
##  $ MARCA             : Factor w/ 7 levels "ASTRATECH","DIOHORIZONS",..: 7 3 2 3 3 6 1 2 7 3 ...
##  $ DISENO            : Factor w/ 2 levels "CILINDRICO","CONICO": 2 1 1 2 1 1 2 2 1 1 ...
##  $ LONGITUD          : int  10 11 8 11 11 11 8 13 13 5 ...
##  $ DIAMETRO          : int  3 4 3 3 3 3 4 3 3 3 ...
##  $ CONEXION          : Factor w/ 2 levels "HEXAGONO EXTERNO",..: 1 1 1 2 2 2 2 2 2 1 ...
##  $ PROCEDENCIA       : Factor w/ 2 levels "IMPORTADO","NACIONAL": 1 2 2 1 2 1 2 1 1 2 ...
##  $ TRAT_SUP          : Factor w/ 4 levels "ARENOSO","LASER",..: 4 2 2 2 4 1 4 3 4 1 ...
##  $ PROTOCOLO_CARGA   : Factor w/ 3 levels "INMEDIATO","TARDIO",..: 2 2 1 3 2 1 3 1 3 3 ...
##  $ EXODONCIA         : Factor w/ 2 levels "NO","SI": 2 1 2 2 1 1 2 1 1 1 ...
##  $ EXPANSION_OSEA    : Factor w/ 2 levels "NO","SI": 1 1 1 1 1 2 2 1 1 2 ...
##  $ ELEV_SENO_MAXILAR : Factor w/ 2 levels "NO","SI": 1 2 1 1 1 2 2 2 2 2 ...
##  $ REG_TEJIDO_DURO   : Factor w/ 2 levels "NO","SI": 1 1 1 1 2 2 2 2 2 2 ...
##  $ REG_TEJIDO_BLANDO : Factor w/ 2 levels "NO","SI": 1 1 1 2 1 2 2 1 2 2 ...
##  $ TIEMPO_COLOC      : Factor w/ 3 levels "INMEDIATO","TARDIO",..: 1 3 3 2 3 2 2 1 2 2 ...
##  $ TIPO_HUESO        : Factor w/ 4 levels "TIPO I","TIPO II",..: 1 1 3 2 3 4 2 4 2 1 ...
##  $ INDIC_PROTESICA   : Factor w/ 4 levels "PIEZA UNITARIA",..: 1 3 3 4 2 1 2 1 3 4 ...

calculo la matriz de distancia con daisy usando metrica gower por que son datos mixtos

D<-daisy(Datos,metric = "gower")

ahora hago multidimensional scaling

res<- cmdscale(D,eig = TRUE,k=5)# K ES EL NUMERO DE COMPONENTES
#PLOTEAR LA SOLUCION
  x<- res$points[,1]
  y<- res$points[,2]
  
  plot(x,y,xlab = "Componente 1", ylab = "Componente 2", main = "MDS", type = "n")
  text(x, y, labels = row.names(Datos),cex=.7)

Opcion 2 Acp Usando Variables Dummy

library(dummies)
## dummies-1.5.6 provided by Decision Patterns
 datos.new <- dummy.data.frame(Datos, sep = ".")
 names(datos.new)
##  [1] "EDAD"                                       
##  [2] "GENERO.F"                                   
##  [3] "GENERO.M"                                   
##  [4] "TABAQUISMO.NO"                              
##  [5] "TABAQUISMO.SI"                              
##  [6] "ALCOHOLISMO.NO"                             
##  [7] "ALCOHOLISMO.SI"                             
##  [8] "PERIODONTITIS.CONTROLADA"                   
##  [9] "PERIODONTITIS.NO CONTROLADA"                
## [10] "RIESGO_PERIODONTAL.ALTO"                    
## [11] "RIESGO_PERIODONTAL.BAJO"                    
## [12] "RIESGO_PERIODONTAL.MEDIO"                   
## [13] "INGESTA_MED.NO"                             
## [14] "INGESTA_MED.SI"                             
## [15] "MATERIAL.TITANIO 4"                         
## [16] "MATERIAL.ZIRCONIO"                          
## [17] "MARCA.ASTRATECH"                            
## [18] "MARCA.DIOHORIZONS"                          
## [19] "MARCA.FIA"                                  
## [20] "MARCA.NEODENT"                              
## [21] "MARCA.ROSTER DENT"                          
## [22] "MARCA.STRAUMANN"                            
## [23] "MARCA.TREE-OSS"                             
## [24] "DISENO.CILINDRICO"                          
## [25] "DISENO.CONICO"                              
## [26] "LONGITUD"                                   
## [27] "DIAMETRO"                                   
## [28] "CONEXION.HEXAGONO EXTERNO"                  
## [29] "CONEXION.HEXAGONO INTERNO"                  
## [30] "PROCEDENCIA.IMPORTADO"                      
## [31] "PROCEDENCIA.NACIONAL"                       
## [32] "TRAT_SUP.ARENOSO"                           
## [33] "TRAT_SUP.LASER"                             
## [34] "TRAT_SUP.LISO"                              
## [35] "TRAT_SUP.RUGOSO"                            
## [36] "PROTOCOLO_CARGA.INMEDIATO"                  
## [37] "PROTOCOLO_CARGA.TARDIO"                     
## [38] "PROTOCOLO_CARGA.TEMPRANO"                   
## [39] "EXODONCIA.NO"                               
## [40] "EXODONCIA.SI"                               
## [41] "EXPANSION_OSEA.NO"                          
## [42] "EXPANSION_OSEA.SI"                          
## [43] "ELEV_SENO_MAXILAR.NO"                       
## [44] "ELEV_SENO_MAXILAR.SI"                       
## [45] "REG_TEJIDO_DURO.NO"                         
## [46] "REG_TEJIDO_DURO.SI"                         
## [47] "REG_TEJIDO_BLANDO.NO"                       
## [48] "REG_TEJIDO_BLANDO.SI"                       
## [49] "TIEMPO_COLOC.INMEDIATO"                     
## [50] "TIEMPO_COLOC.TARDIO"                        
## [51] "TIEMPO_COLOC.TEMPRANO"                      
## [52] "TIPO_HUESO.TIPO I"                          
## [53] "TIPO_HUESO.TIPO II"                         
## [54] "TIPO_HUESO.TIPO III"                        
## [55] "TIPO_HUESO.TIPO IV"                         
## [56] "INDIC_PROTESICA.PIEZA UNITARIA"             
## [57] "INDIC_PROTESICA.PROTESIS COMPLETA FIJA"     
## [58] "INDIC_PROTESICA.PROTESIS COMPLETA REMOVIBLE"
## [59] "INDIC_PROTESICA.PUENTE"
#hago un cap con las varyables dummy


suppressMessages(suppressWarnings(library(FactoMineR)))

# npc cantidad de componentes, centrar y reducir con scale.unit,

res <- PCA(datos.new,scale.unit = TRUE,ncp=5,graph = FALSE)
# ploteo ejes 1, 2 choix grafico el plano de los individuos color de los individuos en rojo new plot en true para borrar graficos

plot(res,axes = c(1,2), choix="ind",col.ind="red", new.plot=TRUE)

plot(res,axes = c(1,2), choix="var",col.ind="red", new.plot=TRUE)

establecemos el cos2 mayo o igual que dos para eliminar los infividuos mal representados y visualizar mejor los graficos

plot(res,axes = c(1,2), choix="ind",col.ind="red", new.plot=TRUE,select = "cos2 0.2")

Hacemos lo mismo para las varibles

plot(res,axes = c(1,2), choix="var",col.ind="red", new.plot=TRUE,select = "cos2 0.25")

Hacemos clusterin jerarquico sobre las componentes principales con el algoritmo completo

modelo <- hclust(dist(datos.new),method = "complete")
plot(modelo)

Alinemos y pedimos que nos marque 2 cluster

plot(modelo,hang = -1)

#la siguente instruccion separa los cluster en 3

rect.hclust(modelo,k=2,border = "red")

Hacemos lo mismo pero cambiamos el algoritmo a ward.d2

modelo <- hclust(dist(datos.new),method = "ward.D2")
plot(modelo,hang = -1)

#la siguente instruccion separa los cluster en 3

rect.hclust(modelo,k=2,border = "red")

Hacemos un analisis de improtancia de comoponentes principales entre 2 y 200 cluster asi el algoritmo eligira la mejor opcion de cluster

res <- PCA(datos.new,scale.unit = TRUE,ncp=3,graph = FALSE)


# nb.clust -1 
#min y max para indicar la cant de cluster
res.hcpc <- HCPC(res, nb.clust = -1, consol = TRUE,min = 2, max = 200, graph = TRUE)

plot.HCPC(res.hcpc,choice = "bar")

plot.HCPC(res.hcpc,choice = "map",select="cos2 0.2")

plot.HCPC(res.hcpc, choice = "3D.map", angle=60)

library(rattle)

#vamos a calcular los centros de graveda de cada cluster
centros <- centers.hclust(datos.new,modelo,nclust = 2,use.median = FALSE)

Hacemos 2 graficos uno con todas las variables y otro quitando als cuantitativas que estane n otra escala para poder apreciar las cualitativas a parte de cada cluster

Analisis para el cluster 1

row.names(centros)<-c("Cluster 1" ,"Cluster 2")

centros2<-centros[,-1:-27:-28]
## Warning in -1:-27:-28: numerical expression has 27 elements: only the first
## used
barplot(centros2[1,],col = c(2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40),las=2)

barplot(centros[1,],col = c(2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40),las=2)

Analisis para el cluster 2

row.names(centros)<-c("Cluster 1" ,"Cluster 2")

centros2<-centros[,-1:-27:-28]
## Warning in -1:-27:-28: numerical expression has 27 elements: only the first
## used
barplot(centros2[2,],col = c(2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40),las=2)

barplot(centros[2,],col = c(2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40),las=2)