Contexto

La base de datos USArrests contiene estadísticas en arrestos por cada 100,000 residentes por agresión, asesinato y violación en cada uno de los 50 estados de EE.UU en 1973.

Instalar Paquetes y llamar librerías

#install.packages("caret")#algoritmos de aprendizaje automatico
library(caret)
#install.packages("datasets")#para usar la base de datos "Iris"
library(datasets)
#install.packages("ggplot2") #gráficas con mejor diseño
library(ggplot2)
#install.packages("lattice") #Crear gráficos
library(lattice)
#install.packages("DataExplorer") #Análisis Descriptivo
library(DataExplorer)
#install.packages("kernlab") #métodos de aprendizaje automatico
library(kernlab)
#install.packages("randomForest")
library(randomForest)
#install.packages("cluster") # Para agrupamientos
library(cluster)
#install.packages("ggplot2") # Para graficar
library(ggplot2)
#install.packages("factoextra") # Visualizar Clusters
library(factoextra)
#install.packages("data.table") # Conjunto de datos grandes
library(data.table)
library(rnaturalearth)
library(rnaturalearthdata)
library(sf)

Importar base de datos

df <- data.frame(USArrests)
#create_report(df)
plot_missing(df)

plot_histogram(df)

plot_correlation(df)

datos_escalados <- df
datos_escalados <-scale(df)
datos_escalados <- subset(datos_escalados)
grupos <- 4
segmentos <- kmeans(datos_escalados, grupos)
asignacion <- cbind(df, cluster = segmentos$cluster)
fviz_cluster(segmentos, data = df)

set.seed(123)
optimizacion <-clusGap(datos_escalados,FUN=kmeans,nstart=1,K.max=10)
plot(optimizacion, xlab="Número de clusters K", main= "Metodo de la silueta")

#el k optimo es el coeficiente de silueta maximo
fviz_nbclust(df,kmeans,method="wss") +
  ggtitle("Metodo del codo")

#el K óptimo es el coeficiente de la silueta del punto de inflación
promedio <-aggregate(asignacion, by=list(asignacion$cluster),FUN = mean)
promedio
##   Group.1   Murder   Assault UrbanPop     Rape cluster
## 1       1  3.60000  78.53846 52.07692 12.17692       1
## 2       2 10.81538 257.38462 76.00000 33.19231       2
## 3       3  5.65625 138.87500 73.87500 18.78125       3
## 4       4 13.93750 243.62500 53.75000 21.41250       4
table(asignacion$cluster)
## 
##  1  2  3  4 
## 13 13 16  8
asignacion$cluster <- as.factor(asignacion$cluster)

Partir los datos 80-20

set.seed(123)
renglones_entrenamiento <- createDataPartition(asignacion$cluster, p=0.8, list=FALSE) # el 80% de los datos iran a entrenamiento
entrenamiento <-asignacion[renglones_entrenamiento, ]
prueba <-asignacion[-renglones_entrenamiento, ] #le restamos los datos de entrenamiento
modelo1 <- train(cluster ~ ., data = asignacion, 
                 method="svmLinear", #cambiar
                 preProcess=c("scale","center"),
                 trControl = trainControl(method= "cv", number=10),
                 tuneGrid= data.frame(C=1) #cambiar hiperparámetros 
                 )

resultados_entrenamiento1 <-predict(modelo1,asignacion)
resultado_prueba1 <- predict(modelo1, prueba)

#Matriz de Confusión del Resultado del Entrenamiento 
mcre1 <- confusionMatrix(resultados_entrenamiento1, asignacion$cluster)
mcre1
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  1  2  3  4
##          1 13  0  0  0
##          2  0 13  0  0
##          3  0  0 16  0
##          4  0  0  0  8
## 
## Overall Statistics
##                                      
##                Accuracy : 1          
##                  95% CI : (0.9289, 1)
##     No Information Rate : 0.32       
##     P-Value [Acc > NIR] : < 2.2e-16  
##                                      
##                   Kappa : 1          
##                                      
##  Mcnemar's Test P-Value : NA         
## 
## Statistics by Class:
## 
##                      Class: 1 Class: 2 Class: 3 Class: 4
## Sensitivity              1.00     1.00     1.00     1.00
## Specificity              1.00     1.00     1.00     1.00
## Pos Pred Value           1.00     1.00     1.00     1.00
## Neg Pred Value           1.00     1.00     1.00     1.00
## Prevalence               0.26     0.26     0.32     0.16
## Detection Rate           0.26     0.26     0.32     0.16
## Detection Prevalence     0.26     0.26     0.32     0.16
## Balanced Accuracy        1.00     1.00     1.00     1.00
#Matriz de Confusión del Resultado de la Prueba 
mcrp1 <- confusionMatrix(resultado_prueba1, prueba$cluster)
mcrp1
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction 1 2 3 4
##          1 2 0 0 0
##          2 0 2 0 0
##          3 0 0 3 0
##          4 0 0 0 1
## 
## Overall Statistics
##                                      
##                Accuracy : 1          
##                  95% CI : (0.6306, 1)
##     No Information Rate : 0.375      
##     P-Value [Acc > NIR] : 0.0003911  
##                                      
##                   Kappa : 1          
##                                      
##  Mcnemar's Test P-Value : NA         
## 
## Statistics by Class:
## 
##                      Class: 1 Class: 2 Class: 3 Class: 4
## Sensitivity              1.00     1.00    1.000    1.000
## Specificity              1.00     1.00    1.000    1.000
## Pos Pred Value           1.00     1.00    1.000    1.000
## Neg Pred Value           1.00     1.00    1.000    1.000
## Prevalence               0.25     0.25    0.375    0.125
## Detection Rate           0.25     0.25    0.375    0.125
## Detection Prevalence     0.25     0.25    0.375    0.125
## Balanced Accuracy        1.00     1.00    1.000    1.000
LS0tIAp0aXRsZTogIlVTQXJyZXN0cyIKYXV0aG9yOiAiTWFyw61hIEZlcm5hbmRhIFJvYmxlcyBIZXJuw6FuZGV6IgpkYXRlOiAiMjAyNS0wMi0yMSIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAgIHRoZW1lOiAic3BhY2VsYWIiCiAgICBoaWdobGlnaHQ6ICJrYXRlIgotLS0KCiFbXSgvVXNlcnMvbWFyaWlyb2JsZXMvRGVza3RvcC9wdXJnZS5naWYpCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogcHVycGxlOyI+Q29udGV4dG88L3NwYW4+CkxhIGJhc2UgZGUgZGF0b3MgKipVU0FycmVzdHMqKiBjb250aWVuZSBlc3RhZMOtc3RpY2FzIGVuIGFycmVzdG9zIHBvciBjYWRhIDEwMCwwMDAgcmVzaWRlbnRlcyBwb3IgYWdyZXNpw7NuLCBhc2VzaW5hdG8geSB2aW9sYWNpw7NuIGVuIGNhZGEgdW5vIGRlIGxvcyA1MCBlc3RhZG9zIGRlIEVFLlVVIGVuIDE5NzMuCgojIyA8c3BhbiBzdHlsZT0gIkNvbG9yOiBibHVlOiI+SW5zdGFsYXIgUGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hczwvc3Bhbj4KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI2luc3RhbGwucGFja2FnZXMoImNhcmV0IikjYWxnb3JpdG1vcyBkZSBhcHJlbmRpemFqZSBhdXRvbWF0aWNvCmxpYnJhcnkoY2FyZXQpCiNpbnN0YWxsLnBhY2thZ2VzKCJkYXRhc2V0cyIpI3BhcmEgdXNhciBsYSBiYXNlIGRlIGRhdG9zICJJcmlzIgpsaWJyYXJ5KGRhdGFzZXRzKQojaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpICNncsOhZmljYXMgY29uIG1lam9yIGRpc2XDsW8KbGlicmFyeShnZ3Bsb3QyKQojaW5zdGFsbC5wYWNrYWdlcygibGF0dGljZSIpICNDcmVhciBncsOhZmljb3MKbGlicmFyeShsYXR0aWNlKQojaW5zdGFsbC5wYWNrYWdlcygiRGF0YUV4cGxvcmVyIikgI0Fuw6FsaXNpcyBEZXNjcmlwdGl2bwpsaWJyYXJ5KERhdGFFeHBsb3JlcikKI2luc3RhbGwucGFja2FnZXMoImtlcm5sYWIiKSAjbcOpdG9kb3MgZGUgYXByZW5kaXphamUgYXV0b21hdGljbwpsaWJyYXJ5KGtlcm5sYWIpCiNpbnN0YWxsLnBhY2thZ2VzKCJyYW5kb21Gb3Jlc3QiKQpsaWJyYXJ5KHJhbmRvbUZvcmVzdCkKI2luc3RhbGwucGFja2FnZXMoImNsdXN0ZXIiKSAjIFBhcmEgYWdydXBhbWllbnRvcwpsaWJyYXJ5KGNsdXN0ZXIpCiNpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikgIyBQYXJhIGdyYWZpY2FyCmxpYnJhcnkoZ2dwbG90MikKI2luc3RhbGwucGFja2FnZXMoImZhY3RvZXh0cmEiKSAjIFZpc3VhbGl6YXIgQ2x1c3RlcnMKbGlicmFyeShmYWN0b2V4dHJhKQojaW5zdGFsbC5wYWNrYWdlcygiZGF0YS50YWJsZSIpICMgQ29uanVudG8gZGUgZGF0b3MgZ3JhbmRlcwpsaWJyYXJ5KGRhdGEudGFibGUpCmxpYnJhcnkocm5hdHVyYWxlYXJ0aCkKbGlicmFyeShybmF0dXJhbGVhcnRoZGF0YSkKbGlicmFyeShzZikKYGBgCgojIyA8c3BhbiBzdHlsZT0gIkNvbG9yOiByZWQ6Ij5JbXBvcnRhciBiYXNlIGRlIGRhdG9zPC9zcGFuPgpgYGB7cn0KZGYgPC0gZGF0YS5mcmFtZShVU0FycmVzdHMpCmBgYAoKYGBge3J9CiNjcmVhdGVfcmVwb3J0KGRmKQpwbG90X21pc3NpbmcoZGYpCnBsb3RfaGlzdG9ncmFtKGRmKQpwbG90X2NvcnJlbGF0aW9uKGRmKQpgYGAKCmBgYHtyfQpkYXRvc19lc2NhbGFkb3MgPC0gZGYKZGF0b3NfZXNjYWxhZG9zIDwtc2NhbGUoZGYpCmRhdG9zX2VzY2FsYWRvcyA8LSBzdWJzZXQoZGF0b3NfZXNjYWxhZG9zKQpgYGAKCmBgYHtyfQpncnVwb3MgPC0gNApzZWdtZW50b3MgPC0ga21lYW5zKGRhdG9zX2VzY2FsYWRvcywgZ3J1cG9zKQpgYGAKCmBgYHtyfQphc2lnbmFjaW9uIDwtIGNiaW5kKGRmLCBjbHVzdGVyID0gc2VnbWVudG9zJGNsdXN0ZXIpCmBgYAoKYGBge3J9CmZ2aXpfY2x1c3RlcihzZWdtZW50b3MsIGRhdGEgPSBkZikKYGBgCgpgYGB7cn0Kc2V0LnNlZWQoMTIzKQpvcHRpbWl6YWNpb24gPC1jbHVzR2FwKGRhdG9zX2VzY2FsYWRvcyxGVU49a21lYW5zLG5zdGFydD0xLEsubWF4PTEwKQpwbG90KG9wdGltaXphY2lvbiwgeGxhYj0iTsO6bWVybyBkZSBjbHVzdGVycyBLIiwgbWFpbj0gIk1ldG9kbyBkZSBsYSBzaWx1ZXRhIikKI2VsIGsgb3B0aW1vIGVzIGVsIGNvZWZpY2llbnRlIGRlIHNpbHVldGEgbWF4aW1vCmZ2aXpfbmJjbHVzdChkZixrbWVhbnMsbWV0aG9kPSJ3c3MiKSArCiAgZ2d0aXRsZSgiTWV0b2RvIGRlbCBjb2RvIikKI2VsIEsgw7NwdGltbyBlcyBlbCBjb2VmaWNpZW50ZSBkZSBsYSBzaWx1ZXRhIGRlbCBwdW50byBkZSBpbmZsYWNpw7NuCmBgYApgYGB7cn0KcHJvbWVkaW8gPC1hZ2dyZWdhdGUoYXNpZ25hY2lvbiwgYnk9bGlzdChhc2lnbmFjaW9uJGNsdXN0ZXIpLEZVTiA9IG1lYW4pCnByb21lZGlvCnRhYmxlKGFzaWduYWNpb24kY2x1c3RlcikKYXNpZ25hY2lvbiRjbHVzdGVyIDwtIGFzLmZhY3Rvcihhc2lnbmFjaW9uJGNsdXN0ZXIpCmBgYAoKCiMjIDxzcGFuIHN0eWxlID0iY29sb3I6IHB1cnBsZSI+IFBhcnRpciBsb3MgZGF0b3MgODAtMjAgPC9zcGFuPgpgYGB7cn0Kc2V0LnNlZWQoMTIzKQpyZW5nbG9uZXNfZW50cmVuYW1pZW50byA8LSBjcmVhdGVEYXRhUGFydGl0aW9uKGFzaWduYWNpb24kY2x1c3RlciwgcD0wLjgsIGxpc3Q9RkFMU0UpICMgZWwgODAlIGRlIGxvcyBkYXRvcyBpcmFuIGEgZW50cmVuYW1pZW50bwplbnRyZW5hbWllbnRvIDwtYXNpZ25hY2lvbltyZW5nbG9uZXNfZW50cmVuYW1pZW50bywgXQpwcnVlYmEgPC1hc2lnbmFjaW9uWy1yZW5nbG9uZXNfZW50cmVuYW1pZW50bywgXSAjbGUgcmVzdGFtb3MgbG9zIGRhdG9zIGRlIGVudHJlbmFtaWVudG8KCmBgYAoKYGBge3J9Cm1vZGVsbzEgPC0gdHJhaW4oY2x1c3RlciB+IC4sIGRhdGEgPSBhc2lnbmFjaW9uLCAKICAgICAgICAgICAgICAgICBtZXRob2Q9InN2bUxpbmVhciIsICNjYW1iaWFyCiAgICAgICAgICAgICAgICAgcHJlUHJvY2Vzcz1jKCJzY2FsZSIsImNlbnRlciIpLAogICAgICAgICAgICAgICAgIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2Q9ICJjdiIsIG51bWJlcj0xMCksCiAgICAgICAgICAgICAgICAgdHVuZUdyaWQ9IGRhdGEuZnJhbWUoQz0xKSAjY2FtYmlhciBoaXBlcnBhcsOhbWV0cm9zIAogICAgICAgICAgICAgICAgICkKCnJlc3VsdGFkb3NfZW50cmVuYW1pZW50bzEgPC1wcmVkaWN0KG1vZGVsbzEsYXNpZ25hY2lvbikKcmVzdWx0YWRvX3BydWViYTEgPC0gcHJlZGljdChtb2RlbG8xLCBwcnVlYmEpCgojTWF0cml6IGRlIENvbmZ1c2nDs24gZGVsIFJlc3VsdGFkbyBkZWwgRW50cmVuYW1pZW50byAKbWNyZTEgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb3NfZW50cmVuYW1pZW50bzEsIGFzaWduYWNpb24kY2x1c3RlcikKbWNyZTEKCiNNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlIGxhIFBydWViYSAKbWNycDEgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmExLCBwcnVlYmEkY2x1c3RlcikKbWNycDEKYGBgCg==