Teoría

El paquete CARET (Classification And REgression Training) es un paquete integral con una amplia variedad de algoritmos para el aprendizaje automático.

Instalar paquetes y llamar librerías

# install.packages("ggplot2") # Gráficas
library(ggplot2)
# install.packages("lattice") # Crear gráficos
library(lattice)
# install.packages("caret") # Algoritmos de aprendizaje automático
library(caret)
# install.packages("DataExplorer") # Análisis Exploratorio
library(DataExplorer)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

Leer la base de datos

df <- read.csv("C:\\Users\\lucia\\Downloads\\M1_data.csv", stringsAsFactors = FALSE)
df <- na.omit(df) # para evitar problemas de longitudes diferentes

# Variable objetivo en factor
df$m1_purchase <- as.factor(df$m1_purchase)

# (opcional) asegurar que columnas tipo texto sean factor
df <- df %>%
mutate(across(where(is.character), as.factor))

Entender la base de datos

summary(df)
##  trust_apple interest_computers  age_computer   user_pcmac appleproducts_count
##  No : 19     Min.   :2.000      Min.   :0.000   Apple:86   Min.   :0.000      
##  Yes:114     1st Qu.:3.000      1st Qu.:1.000   Hp   : 1   1st Qu.:1.000      
##              Median :4.000      Median :3.000   Other: 1   Median :3.000      
##              Mean   :3.812      Mean   :2.827   PC   :45   Mean   :2.609      
##              3rd Qu.:5.000      3rd Qu.:5.000              3rd Qu.:4.000      
##              Max.   :5.000      Max.   :9.000              Max.   :8.000      
##                                                                               
##  familiarity_m1 f_batterylife      f_price          f_size      f_multitasking
##  No :75         Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :2.00  
##  Yes:58         1st Qu.:4.000   1st Qu.:3.000   1st Qu.:2.000   1st Qu.:4.00  
##                 Median :5.000   Median :4.000   Median :3.000   Median :4.00  
##                 Mean   :4.526   Mean   :3.872   Mean   :3.158   Mean   :4.12  
##                 3rd Qu.:5.000   3rd Qu.:5.000   3rd Qu.:4.000   3rd Qu.:5.00  
##                 Max.   :5.000   Max.   :5.000   Max.   :5.000   Max.   :5.00  
##                                                                               
##     f_noise      f_performance      f_neural       f_synergy    
##  Min.   :1.000   Min.   :2.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:3.000   1st Qu.:4.000   1st Qu.:2.000   1st Qu.:3.000  
##  Median :4.000   Median :5.000   Median :3.000   Median :4.000  
##  Mean   :3.729   Mean   :4.398   Mean   :3.165   Mean   :3.466  
##  3rd Qu.:5.000   3rd Qu.:5.000   3rd Qu.:4.000   3rd Qu.:4.000  
##  Max.   :5.000   Max.   :5.000   Max.   :5.000   Max.   :5.000  
##                                                                 
##  f_performanceloss m1_consideration m1_purchase    gender     age_group    
##  Min.   :1.000     Min.   :1.000    No :45      Female:61   Min.   : 1.00  
##  1st Qu.:3.000     1st Qu.:3.000    Yes:88      Male  :72   1st Qu.: 2.00  
##  Median :4.000     Median :4.000                            Median : 2.00  
##  Mean   :3.376     Mean   :3.609                            Mean   : 2.97  
##  3rd Qu.:4.000     3rd Qu.:5.000                            3rd Qu.: 3.00  
##  Max.   :5.000     Max.   :5.000                            Max.   :10.00  
##                                                                            
##   income_group                   status               domain  
##  Min.   :1.00   Employed            :41   IT & Technology:33  
##  1st Qu.:1.00   Retired             : 1   Marketing      :21  
##  Median :2.00   Self-Employed       : 5   Business       :14  
##  Mean   :2.97   Student             :84   Engineering    : 7  
##  3rd Qu.:4.00   Student ant employed: 1   Finance        : 7  
##  Max.   :7.00   Unemployed          : 1   Science        : 7  
##                                           (Other)        :44
str(df)
## 'data.frame':    133 obs. of  22 variables:
##  $ trust_apple        : Factor w/ 2 levels "No","Yes": 1 2 2 2 2 2 2 1 2 2 ...
##  $ interest_computers : int  4 2 5 2 4 3 3 3 4 5 ...
##  $ age_computer       : int  8 4 6 6 4 1 2 0 2 0 ...
##  $ user_pcmac         : Factor w/ 4 levels "Apple","Hp","Other",..: 4 4 4 1 1 1 1 4 1 1 ...
##  $ appleproducts_count: int  0 1 0 4 7 2 7 0 6 7 ...
##  $ familiarity_m1     : Factor w/ 2 levels "No","Yes": 1 1 1 1 2 1 1 1 2 2 ...
##  $ f_batterylife      : int  5 5 3 4 5 5 4 5 4 5 ...
##  $ f_price            : int  4 5 4 3 3 5 3 5 4 3 ...
##  $ f_size             : int  3 5 2 3 3 4 4 4 3 5 ...
##  $ f_multitasking     : int  4 3 4 4 4 4 5 4 4 5 ...
##  $ f_noise            : int  4 4 1 4 4 5 5 3 4 5 ...
##  $ f_performance      : int  2 5 4 4 5 5 5 3 4 5 ...
##  $ f_neural           : int  2 2 2 4 3 5 3 2 3 3 ...
##  $ f_synergy          : int  1 2 2 4 4 4 3 2 3 5 ...
##  $ f_performanceloss  : int  1 4 2 3 4 2 2 3 4 5 ...
##  $ m1_consideration   : int  1 2 4 2 4 2 3 1 5 5 ...
##  $ m1_purchase        : Factor w/ 2 levels "No","Yes": 2 1 2 1 2 1 2 1 2 2 ...
##  $ gender             : Factor w/ 2 levels "Female","Male": 2 2 2 1 2 1 2 2 2 2 ...
##  $ age_group          : int  2 2 2 2 5 2 6 2 8 4 ...
##  $ income_group       : int  2 3 2 2 7 2 7 2 7 6 ...
##  $ status             : Factor w/ 6 levels "Employed","Retired",..: 4 1 4 4 1 4 1 4 1 1 ...
##  $ domain             : Factor w/ 22 levels "Administration & Public Services",..: 21 10 13 3 12 17 13 22 13 12 ...
plot_missing(df)
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## ℹ The deprecated feature was likely used in the DataExplorer package.
##   Please report the issue at
##   <https://github.com/boxuancui/DataExplorer/issues>.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

plot_histogram(df)

# correlación sólo con numéricas (si no, puede salir en blanco o error)
df_num <- df %>% select(where(is.numeric))
if(ncol(df_num) > 1) plot_correlation(df_num)

# Preparación

y <- df$m1_purchase
x_raw <- df %>% select(-m1_purchase)

# Crear dummies ANTES de partir para evitar "new levels" en prueba
dmy <- dummyVars(~ ., data = x_raw, fullRank = TRUE)
x <- predict(dmy, newdata = x_raw) %>% as.data.frame()

Partir la base de datos

set.seed(123)
renglones_entrenamiento <- createDataPartition(y, p = 0.8, list = FALSE)

x_entrenamiento <- x[renglones_entrenamiento, ]
x_prueba <- x[-renglones_entrenamiento, ]

y_entrenamiento <- y[renglones_entrenamiento]
y_prueba <- y[-renglones_entrenamiento]

Distintos tipos de Métodos para Modelar

SVM: Support Vector Machine o Máquina de Vectores de Soporte. Hay varios subtipos: Lineal (svmLinear), Radial (svmRadial), Polinómico (svmPoly), etc. Árbol de Decisión: rpart Redes Neuronales: nnet Random Forest o Bosques Aleatorios: rf

Modelo 1. SVM Lineal

modelo1 <- train(
  x = x_entrenamiento, y = y_entrenamiento,
  method = "svmLinear",
  preProcess = c("scale", "center"),
  trControl = trainControl(method="cv", number=10),
  tuneGrid = data.frame(C=1)
)
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Agriculture, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Student ant employed, status.Unemployed,
## domain.Communication , domain.Realestate, domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Law, domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retail, domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Consulting , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Logistics, domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
resultado_entrenamiento1 <- predict(modelo1, x_entrenamiento)
resultado_prueba1 <- predict(modelo1, x_prueba)

mcre1 <- confusionMatrix(resultado_entrenamiento1, y_entrenamiento)
mcrp1 <- confusionMatrix(resultado_prueba1, y_prueba)

mcre1
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No  30   4
##        Yes  6  67
##                                           
##                Accuracy : 0.9065          
##                  95% CI : (0.8348, 0.9543)
##     No Information Rate : 0.6636          
##     P-Value [Acc > NIR] : 4.281e-09       
##                                           
##                   Kappa : 0.7878          
##                                           
##  Mcnemar's Test P-Value : 0.7518          
##                                           
##             Sensitivity : 0.8333          
##             Specificity : 0.9437          
##          Pos Pred Value : 0.8824          
##          Neg Pred Value : 0.9178          
##              Prevalence : 0.3364          
##          Detection Rate : 0.2804          
##    Detection Prevalence : 0.3178          
##       Balanced Accuracy : 0.8885          
##                                           
##        'Positive' Class : No              
## 
mcrp1
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No   3   6
##        Yes  6  11
##                                           
##                Accuracy : 0.5385          
##                  95% CI : (0.3337, 0.7341)
##     No Information Rate : 0.6538          
##     P-Value [Acc > NIR] : 0.9231          
##                                           
##                   Kappa : -0.0196         
##                                           
##  Mcnemar's Test P-Value : 1.0000          
##                                           
##             Sensitivity : 0.3333          
##             Specificity : 0.6471          
##          Pos Pred Value : 0.3333          
##          Neg Pred Value : 0.6471          
##              Prevalence : 0.3462          
##          Detection Rate : 0.1154          
##    Detection Prevalence : 0.3462          
##       Balanced Accuracy : 0.4902          
##                                           
##        'Positive' Class : No              
## 

Modelo 2. SVM Radial

modelo2 <- train(
  x = x_entrenamiento, y = y_entrenamiento,
  method = "svmRadial",
  preProcess = c("scale", "center"),
  trControl = trainControl(method="cv", number=10),
  tuneGrid = data.frame(sigma=1, C=1)
)
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Unemployed, domain.Agriculture, domain.Communication ,
## domain.Logistics, domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Law, domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retail, domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Student ant employed, status.Unemployed, domain.Communication ,
## domain.Realestate, domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Consulting , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Economics, domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
resultado_entrenamiento2 <- predict(modelo2, x_entrenamiento)
resultado_prueba2 <- predict(modelo2, x_prueba)

mcre2 <- confusionMatrix(resultado_entrenamiento2, y_entrenamiento)
mcrp2 <- confusionMatrix(resultado_prueba2, y_prueba)

mcre2
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No  34   0
##        Yes  2  71
##                                           
##                Accuracy : 0.9813          
##                  95% CI : (0.9341, 0.9977)
##     No Information Rate : 0.6636          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9576          
##                                           
##  Mcnemar's Test P-Value : 0.4795          
##                                           
##             Sensitivity : 0.9444          
##             Specificity : 1.0000          
##          Pos Pred Value : 1.0000          
##          Neg Pred Value : 0.9726          
##              Prevalence : 0.3364          
##          Detection Rate : 0.3178          
##    Detection Prevalence : 0.3178          
##       Balanced Accuracy : 0.9722          
##                                           
##        'Positive' Class : No              
## 
mcrp2
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No   0   0
##        Yes  9  17
##                                           
##                Accuracy : 0.6538          
##                  95% CI : (0.4433, 0.8279)
##     No Information Rate : 0.6538          
##     P-Value [Acc > NIR] : 0.589398        
##                                           
##                   Kappa : 0               
##                                           
##  Mcnemar's Test P-Value : 0.007661        
##                                           
##             Sensitivity : 0.0000          
##             Specificity : 1.0000          
##          Pos Pred Value :    NaN          
##          Neg Pred Value : 0.6538          
##              Prevalence : 0.3462          
##          Detection Rate : 0.0000          
##    Detection Prevalence : 0.0000          
##       Balanced Accuracy : 0.5000          
##                                           
##        'Positive' Class : No              
## 

Modelo 3. SVM Polinómico

modelo3 <- train(
  x = x_entrenamiento, y = y_entrenamiento,
  method = "svmPoly",
  preProcess = c("scale", "center"),
  trControl = trainControl(method="cv", number=10),
  tuneGrid = data.frame(degree=1, scale=1, C=1)
)
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Realestate, domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Self-Employed, status.Student ant employed, status.Unemployed,
## domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Consulting , domain.Retail,
## domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Logistics, domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Agriculture, domain.Communication , domain.Law,
## domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
resultado_entrenamiento3 <- predict(modelo3, x_entrenamiento)
resultado_prueba3 <- predict(modelo3, x_prueba)

mcre3 <- confusionMatrix(resultado_entrenamiento3, y_entrenamiento)
mcrp3 <- confusionMatrix(resultado_prueba3, y_prueba)

mcre3
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No  30   4
##        Yes  6  67
##                                           
##                Accuracy : 0.9065          
##                  95% CI : (0.8348, 0.9543)
##     No Information Rate : 0.6636          
##     P-Value [Acc > NIR] : 4.281e-09       
##                                           
##                   Kappa : 0.7878          
##                                           
##  Mcnemar's Test P-Value : 0.7518          
##                                           
##             Sensitivity : 0.8333          
##             Specificity : 0.9437          
##          Pos Pred Value : 0.8824          
##          Neg Pred Value : 0.9178          
##              Prevalence : 0.3364          
##          Detection Rate : 0.2804          
##    Detection Prevalence : 0.3178          
##       Balanced Accuracy : 0.8885          
##                                           
##        'Positive' Class : No              
## 
mcrp3
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No   3   6
##        Yes  6  11
##                                           
##                Accuracy : 0.5385          
##                  95% CI : (0.3337, 0.7341)
##     No Information Rate : 0.6538          
##     P-Value [Acc > NIR] : 0.9231          
##                                           
##                   Kappa : -0.0196         
##                                           
##  Mcnemar's Test P-Value : 1.0000          
##                                           
##             Sensitivity : 0.3333          
##             Specificity : 0.6471          
##          Pos Pred Value : 0.3333          
##          Neg Pred Value : 0.6471          
##              Prevalence : 0.3462          
##          Detection Rate : 0.1154          
##    Detection Prevalence : 0.3462          
##       Balanced Accuracy : 0.4902          
##                                           
##        'Positive' Class : No              
## 

Modelo 4. Árbol de Decisión

modelo4 <- train(
  x = x_entrenamiento, y = y_entrenamiento,
  method = "rpart",
  preProcess = c("scale", "center"),
  trControl = trainControl(method="cv", number=10),
  tuneLength = 10
)
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Logistics, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retail, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Student ant employed, status.Unemployed,
## domain.Communication , domain.Realestate, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Agriculture, domain.Communication , domain.Law,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Consulting , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
resultado_entrenamiento4 <- predict(modelo4, x_entrenamiento)
resultado_prueba4 <- predict(modelo4, x_prueba)

mcre4 <- confusionMatrix(resultado_entrenamiento4, y_entrenamiento)
mcrp4 <- confusionMatrix(resultado_prueba4, y_prueba)

mcre4
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No  17   2
##        Yes 19  69
##                                           
##                Accuracy : 0.8037          
##                  95% CI : (0.7158, 0.8742)
##     No Information Rate : 0.6636          
##     P-Value [Acc > NIR] : 0.0010139       
##                                           
##                   Kappa : 0.5025          
##                                           
##  Mcnemar's Test P-Value : 0.0004803       
##                                           
##             Sensitivity : 0.4722          
##             Specificity : 0.9718          
##          Pos Pred Value : 0.8947          
##          Neg Pred Value : 0.7841          
##              Prevalence : 0.3364          
##          Detection Rate : 0.1589          
##    Detection Prevalence : 0.1776          
##       Balanced Accuracy : 0.7220          
##                                           
##        'Positive' Class : No              
## 
mcrp4
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No   4   6
##        Yes  5  11
##                                           
##                Accuracy : 0.5769          
##                  95% CI : (0.3692, 0.7665)
##     No Information Rate : 0.6538          
##     P-Value [Acc > NIR] : 0.8485          
##                                           
##                   Kappa : 0.0892          
##                                           
##  Mcnemar's Test P-Value : 1.0000          
##                                           
##             Sensitivity : 0.4444          
##             Specificity : 0.6471          
##          Pos Pred Value : 0.4000          
##          Neg Pred Value : 0.6875          
##              Prevalence : 0.3462          
##          Detection Rate : 0.1538          
##    Detection Prevalence : 0.3846          
##       Balanced Accuracy : 0.5458          
##                                           
##        'Positive' Class : No              
## 

Modelo 5. Redes Neuronales

modelo5 <- train(
  x = x_entrenamiento, y = y_entrenamiento,
  method = "nnet",
  preProcess = c("scale", "center"),
  trControl = trainControl(method="cv", number=10),
  trace = FALSE
)
## Warning in preProcess.default(method = c("scale", "center"), x =
## structure(list(: These variables have zero variances: user_pcmac.Other,
## status.Retired, status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Student ant employed, status.Unemployed, domain.Communication ,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Student ant employed, status.Unemployed, domain.Communication ,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Student ant employed, status.Unemployed, domain.Communication ,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Student ant employed, status.Unemployed, domain.Communication ,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Student ant employed, status.Unemployed, domain.Communication ,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Student ant employed, status.Unemployed, domain.Communication ,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Student ant employed, status.Unemployed, domain.Communication ,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Student ant employed, status.Unemployed, domain.Communication ,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Student ant employed, status.Unemployed, domain.Communication ,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retail, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retail, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retail, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retail, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retail, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retail, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retail, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retail, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retail, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Realestate, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Realestate, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Realestate, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Realestate, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Realestate, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Realestate, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Realestate, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Realestate, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Realestate, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Agriculture, domain.Communication , domain.Consulting
## , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Agriculture, domain.Communication , domain.Consulting
## , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Agriculture, domain.Communication , domain.Consulting
## , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Agriculture, domain.Communication , domain.Consulting
## , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Agriculture, domain.Communication , domain.Consulting
## , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Agriculture, domain.Communication , domain.Consulting
## , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Agriculture, domain.Communication , domain.Consulting
## , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Agriculture, domain.Communication , domain.Consulting
## , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Agriculture, domain.Communication , domain.Consulting
## , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Logistics, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Logistics, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Logistics, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Logistics, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Logistics, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Logistics, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Logistics, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Logistics, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Logistics, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Law, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Law, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Law, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Law, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Law, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Law, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Law, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Law, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Law, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
resultado_entrenamiento5 <- predict(modelo5, x_entrenamiento)
resultado_prueba5 <- predict(modelo5, x_prueba)

mcre5 <- confusionMatrix(resultado_entrenamiento5, y_entrenamiento)
mcrp5 <- confusionMatrix(resultado_prueba5, y_prueba)

mcre5
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No  32   2
##        Yes  4  69
##                                           
##                Accuracy : 0.9439          
##                  95% CI : (0.8819, 0.9791)
##     No Information Rate : 0.6636          
##     P-Value [Acc > NIR] : 3.021e-12       
##                                           
##                   Kappa : 0.8727          
##                                           
##  Mcnemar's Test P-Value : 0.6831          
##                                           
##             Sensitivity : 0.8889          
##             Specificity : 0.9718          
##          Pos Pred Value : 0.9412          
##          Neg Pred Value : 0.9452          
##              Prevalence : 0.3364          
##          Detection Rate : 0.2991          
##    Detection Prevalence : 0.3178          
##       Balanced Accuracy : 0.9304          
##                                           
##        'Positive' Class : No              
## 
mcrp5
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No   4   6
##        Yes  5  11
##                                           
##                Accuracy : 0.5769          
##                  95% CI : (0.3692, 0.7665)
##     No Information Rate : 0.6538          
##     P-Value [Acc > NIR] : 0.8485          
##                                           
##                   Kappa : 0.0892          
##                                           
##  Mcnemar's Test P-Value : 1.0000          
##                                           
##             Sensitivity : 0.4444          
##             Specificity : 0.6471          
##          Pos Pred Value : 0.4000          
##          Neg Pred Value : 0.6875          
##              Prevalence : 0.3462          
##          Detection Rate : 0.1538          
##    Detection Prevalence : 0.3846          
##       Balanced Accuracy : 0.5458          
##                                           
##        'Positive' Class : No              
## 

Modelo 6. Bosques Aleatorios

# mtry no puede ser mayor que el número de columnas
p <- ncol(x_entrenamiento)
mtry_vals <- unique(pmin(c(2,4,6), p))
tgrid_rf <- expand.grid(mtry = mtry_vals)

modelo6 <- train(
  x = x_entrenamiento, y = y_entrenamiento,
  method = "rf",
  preProcess = c("scale", "center"),
  trControl = trainControl(method="cv", number=10),
  tuneGrid = tgrid_rf
)
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Student ant employed, status.Unemployed, domain.Communication ,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Student ant employed, status.Unemployed, domain.Communication ,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Student ant employed, status.Unemployed, domain.Communication ,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Agriculture, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Agriculture, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Agriculture, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Realestate, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Realestate, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Realestate, domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Hp, user_pcmac.Other,
## status.Retired, status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Consulting , domain.Retail,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Consulting , domain.Retail,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Consulting , domain.Retail,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Law, domain.Logistics,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Law, domain.Logistics,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Law, domain.Logistics,
## domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: user_pcmac.Other, status.Retired,
## status.Unemployed, domain.Communication , domain.Retired
resultado_entrenamiento6 <- predict(modelo6, x_entrenamiento)
resultado_prueba6 <- predict(modelo6, x_prueba)

mcre6 <- confusionMatrix(resultado_entrenamiento6, y_entrenamiento)
mcrp6 <- confusionMatrix(resultado_prueba6, y_prueba)

mcre6
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No  34   0
##        Yes  2  71
##                                           
##                Accuracy : 0.9813          
##                  95% CI : (0.9341, 0.9977)
##     No Information Rate : 0.6636          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9576          
##                                           
##  Mcnemar's Test P-Value : 0.4795          
##                                           
##             Sensitivity : 0.9444          
##             Specificity : 1.0000          
##          Pos Pred Value : 1.0000          
##          Neg Pred Value : 0.9726          
##              Prevalence : 0.3364          
##          Detection Rate : 0.3178          
##    Detection Prevalence : 0.3178          
##       Balanced Accuracy : 0.9722          
##                                           
##        'Positive' Class : No              
## 
mcrp6
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No   4   3
##        Yes  5  14
##                                           
##                Accuracy : 0.6923          
##                  95% CI : (0.4821, 0.8567)
##     No Information Rate : 0.6538          
##     P-Value [Acc > NIR] : 0.4267          
##                                           
##                   Kappa : 0.2828          
##                                           
##  Mcnemar's Test P-Value : 0.7237          
##                                           
##             Sensitivity : 0.4444          
##             Specificity : 0.8235          
##          Pos Pred Value : 0.5714          
##          Neg Pred Value : 0.7368          
##              Prevalence : 0.3462          
##          Detection Rate : 0.1538          
##    Detection Prevalence : 0.2692          
##       Balanced Accuracy : 0.6340          
##                                           
##        'Positive' Class : No              
## 

Tabla de Resultados

resultados <- data.frame(
  "svmLinear" = c(mcre1$overall["Accuracy"], mcrp1$overall["Accuracy"]),
  "svmRadial" = c(mcre2$overall["Accuracy"], mcrp2$overall["Accuracy"]),
  "svmPoly"   = c(mcre3$overall["Accuracy"], mcrp3$overall["Accuracy"]),
  "rpart"     = c(mcre4$overall["Accuracy"], mcrp4$overall["Accuracy"]),
  "nnet"      = c(mcre5$overall["Accuracy"], mcrp5$overall["Accuracy"]),
  "rf"        = c(mcre6$overall["Accuracy"], mcrp6$overall["Accuracy"])
)
rownames(resultados) <- c("Precisión de entrenamiento", "Precisión de prueba")
resultados
##                            svmLinear svmRadial   svmPoly     rpart      nnet
## Precisión de entrenamiento 0.9065421 0.9813084 0.9065421 0.8037383 0.9439252
## Precisión de prueba        0.5384615 0.6538462 0.5384615 0.5769231 0.5769231
##                                   rf
## Precisión de entrenamiento 0.9813084
## Precisión de prueba        0.6923077

Conclusiones

Los modelos mostraron diferencias importantes entre precisión de entrenamiento y precisión de prueba, lo que nos muestra cierto nivel de sobreajuste en algunos casos. Aunque SVM Radial y Random Forest alcanzaron altas precisiones en entrenamiento (cercanas al 98%), su desempeño disminuyó en datos de prueba. El modelo con mejor capacidad de generalización fue Random Forest, al tener la mayor precisión en prueba (69.23%), seguido por SVM Radial (65.38%). En conclusión, el modelo más recomendable para esta base de datos es Random Forest, ya que ofrece el mejor equilibrio entre rendimiento y capacidad predictiva en datos nuevos.

LS0tDQp0aXRsZTogInN2bSAtIE0xIg0KYXV0aG9yOiAiRGVsaWEgTHVjw61hIFNlcm5hIFRyZXZpw7FvIEEwMDg0MDYyNyINCmRhdGU6ICIyMDI2LTAzLTAyIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdGhlbWU6IHlldGkNCi0tLQ0KPGNlbnRlcj4NCiFbXShodHRwczovL2h0dHAyLm1sc3RhdGljLmNvbS9EX1FfTlBfOTA5NTE3LU1MQTc0MzI4MDE4ODI1XzAxMjAyNC1PLndlYnApDQo8L2NlbnRlcj4NCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gVGVvcsOtYSA8L3NwYW4+DQpFbCBwYXF1ZXRlICoqQ0FSRVQgKENsYXNzaWZpY2F0aW9uIEFuZCBSRWdyZXNzaW9uIFRyYWluaW5nKSoqIGVzIHVuDQpwYXF1ZXRlIGludGVncmFsIGNvbiB1bmEgYW1wbGlhIHZhcmllZGFkIGRlIGFsZ29yaXRtb3MgcGFyYSBlbCBhcHJlbmRpemFqZQ0KYXV0b23DoXRpY28uDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gSW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hcyA8L3NwYW4+DQpgYGB7cn0NCiMgaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpICMgR3LDoWZpY2FzDQpsaWJyYXJ5KGdncGxvdDIpDQojIGluc3RhbGwucGFja2FnZXMoImxhdHRpY2UiKSAjIENyZWFyIGdyw6FmaWNvcw0KbGlicmFyeShsYXR0aWNlKQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJjYXJldCIpICMgQWxnb3JpdG1vcyBkZSBhcHJlbmRpemFqZSBhdXRvbcOhdGljbw0KbGlicmFyeShjYXJldCkNCiMgaW5zdGFsbC5wYWNrYWdlcygiRGF0YUV4cGxvcmVyIikgIyBBbsOhbGlzaXMgRXhwbG9yYXRvcmlvDQpsaWJyYXJ5KERhdGFFeHBsb3JlcikNCmxpYnJhcnkoZHBseXIpDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWUiPiBMZWVyIGxhIGJhc2UgZGUgZGF0b3MgPC9zcGFuPg0KYGBge3J9DQpkZiA8LSByZWFkLmNzdigiQzpcXFVzZXJzXFxsdWNpYVxcRG93bmxvYWRzXFxNMV9kYXRhLmNzdiIsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCmRmIDwtIG5hLm9taXQoZGYpICMgcGFyYSBldml0YXIgcHJvYmxlbWFzIGRlIGxvbmdpdHVkZXMgZGlmZXJlbnRlcw0KDQojIFZhcmlhYmxlIG9iamV0aXZvIGVuIGZhY3Rvcg0KZGYkbTFfcHVyY2hhc2UgPC0gYXMuZmFjdG9yKGRmJG0xX3B1cmNoYXNlKQ0KDQojIChvcGNpb25hbCkgYXNlZ3VyYXIgcXVlIGNvbHVtbmFzIHRpcG8gdGV4dG8gc2VhbiBmYWN0b3INCmRmIDwtIGRmICU+JQ0KbXV0YXRlKGFjcm9zcyh3aGVyZShpcy5jaGFyYWN0ZXIpLCBhcy5mYWN0b3IpKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gRW50ZW5kZXIgbGEgYmFzZSBkZSBkYXRvcyA8L3NwYW4+DQpgYGB7cn0NCnN1bW1hcnkoZGYpDQpzdHIoZGYpDQoNCnBsb3RfbWlzc2luZyhkZikNCnBsb3RfaGlzdG9ncmFtKGRmKQ0KDQojIGNvcnJlbGFjacOzbiBzw7NsbyBjb24gbnVtw6lyaWNhcyAoc2kgbm8sIHB1ZWRlIHNhbGlyIGVuIGJsYW5jbyBvIGVycm9yKQ0KZGZfbnVtIDwtIGRmICU+JSBzZWxlY3Qod2hlcmUoaXMubnVtZXJpYykpDQppZihuY29sKGRmX251bSkgPiAxKSBwbG90X2NvcnJlbGF0aW9uKGRmX251bSkNCmBgYA0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWUiPiBQcmVwYXJhY2nDs24gPC9zcGFuPg0KYGBge3J9DQp5IDwtIGRmJG0xX3B1cmNoYXNlDQp4X3JhdyA8LSBkZiAlPiUgc2VsZWN0KC1tMV9wdXJjaGFzZSkNCg0KIyBDcmVhciBkdW1taWVzIEFOVEVTIGRlIHBhcnRpciBwYXJhIGV2aXRhciAibmV3IGxldmVscyIgZW4gcHJ1ZWJhDQpkbXkgPC0gZHVtbXlWYXJzKH4gLiwgZGF0YSA9IHhfcmF3LCBmdWxsUmFuayA9IFRSVUUpDQp4IDwtIHByZWRpY3QoZG15LCBuZXdkYXRhID0geF9yYXcpICU+JSBhcy5kYXRhLmZyYW1lKCkNCmBgYA0KDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gUGFydGlyIGxhIGJhc2UgZGUgZGF0b3MgPC9zcGFuPg0KYGBge3J9DQpzZXQuc2VlZCgxMjMpDQpyZW5nbG9uZXNfZW50cmVuYW1pZW50byA8LSBjcmVhdGVEYXRhUGFydGl0aW9uKHksIHAgPSAwLjgsIGxpc3QgPSBGQUxTRSkNCg0KeF9lbnRyZW5hbWllbnRvIDwtIHhbcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8sIF0NCnhfcHJ1ZWJhIDwtIHhbLXJlbmdsb25lc19lbnRyZW5hbWllbnRvLCBdDQoNCnlfZW50cmVuYW1pZW50byA8LSB5W3Jlbmdsb25lc19lbnRyZW5hbWllbnRvXQ0KeV9wcnVlYmEgPC0geVstcmVuZ2xvbmVzX2VudHJlbmFtaWVudG9dDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWUiPiBEaXN0aW50b3MgdGlwb3MgZGUgTcOpdG9kb3MgcGFyYSBNb2RlbGFyIDwvc3Bhbj4NClNWTTogU3VwcG9ydCBWZWN0b3IgTWFjaGluZSBvIE3DoXF1aW5hIGRlIFZlY3RvcmVzIGRlIFNvcG9ydGUuIEhheSB2YXJpb3Mgc3VidGlwb3M6IExpbmVhbCAoc3ZtTGluZWFyKSwgUmFkaWFsIChzdm1SYWRpYWwpLCBQb2xpbsOzbWljbyAoc3ZtUG9seSksIGV0Yy4gw4FyYm9sIGRlIERlY2lzacOzbjogcnBhcnQgUmVkZXMgTmV1cm9uYWxlczogbm5ldA0KUmFuZG9tIEZvcmVzdCBvIEJvc3F1ZXMgQWxlYXRvcmlvczogcmYNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWUiPiBNb2RlbG8gMS4gU1ZNIExpbmVhbCA8L3NwYW4+DQpgYGB7cn0NCm1vZGVsbzEgPC0gdHJhaW4oDQogIHggPSB4X2VudHJlbmFtaWVudG8sIHkgPSB5X2VudHJlbmFtaWVudG8sDQogIG1ldGhvZCA9ICJzdm1MaW5lYXIiLA0KICBwcmVQcm9jZXNzID0gYygic2NhbGUiLCAiY2VudGVyIiksDQogIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2Q9ImN2IiwgbnVtYmVyPTEwKSwNCiAgdHVuZUdyaWQgPSBkYXRhLmZyYW1lKEM9MSkNCikNCg0KcmVzdWx0YWRvX2VudHJlbmFtaWVudG8xIDwtIHByZWRpY3QobW9kZWxvMSwgeF9lbnRyZW5hbWllbnRvKQ0KcmVzdWx0YWRvX3BydWViYTEgPC0gcHJlZGljdChtb2RlbG8xLCB4X3BydWViYSkNCg0KbWNyZTEgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvMSwgeV9lbnRyZW5hbWllbnRvKQ0KbWNycDEgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmExLCB5X3BydWViYSkNCg0KbWNyZTENCm1jcnAxDQpgYGANCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gTW9kZWxvIDIuIFNWTSBSYWRpYWwgPC9zcGFuPg0KYGBge3J9DQptb2RlbG8yIDwtIHRyYWluKA0KICB4ID0geF9lbnRyZW5hbWllbnRvLCB5ID0geV9lbnRyZW5hbWllbnRvLA0KICBtZXRob2QgPSAic3ZtUmFkaWFsIiwNCiAgcHJlUHJvY2VzcyA9IGMoInNjYWxlIiwgImNlbnRlciIpLA0KICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kPSJjdiIsIG51bWJlcj0xMCksDQogIHR1bmVHcmlkID0gZGF0YS5mcmFtZShzaWdtYT0xLCBDPTEpDQopDQoNCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvMiA8LSBwcmVkaWN0KG1vZGVsbzIsIHhfZW50cmVuYW1pZW50bykNCnJlc3VsdGFkb19wcnVlYmEyIDwtIHByZWRpY3QobW9kZWxvMiwgeF9wcnVlYmEpDQoNCm1jcmUyIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzIsIHlfZW50cmVuYW1pZW50bykNCm1jcnAyIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhMiwgeV9wcnVlYmEpDQoNCm1jcmUyDQptY3JwMg0KYGBgDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZSI+IE1vZGVsbyAzLiBTVk0gUG9saW7Ds21pY28gPC9zcGFuPg0KYGBge3J9DQptb2RlbG8zIDwtIHRyYWluKA0KICB4ID0geF9lbnRyZW5hbWllbnRvLCB5ID0geV9lbnRyZW5hbWllbnRvLA0KICBtZXRob2QgPSAic3ZtUG9seSIsDQogIHByZVByb2Nlc3MgPSBjKCJzY2FsZSIsICJjZW50ZXIiKSwNCiAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZD0iY3YiLCBudW1iZXI9MTApLA0KICB0dW5lR3JpZCA9IGRhdGEuZnJhbWUoZGVncmVlPTEsIHNjYWxlPTEsIEM9MSkNCikNCg0KcmVzdWx0YWRvX2VudHJlbmFtaWVudG8zIDwtIHByZWRpY3QobW9kZWxvMywgeF9lbnRyZW5hbWllbnRvKQ0KcmVzdWx0YWRvX3BydWViYTMgPC0gcHJlZGljdChtb2RlbG8zLCB4X3BydWViYSkNCg0KbWNyZTMgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvMywgeV9lbnRyZW5hbWllbnRvKQ0KbWNycDMgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmEzLCB5X3BydWViYSkNCg0KbWNyZTMNCm1jcnAzDQpgYGANCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gTW9kZWxvIDQuIMOBcmJvbCBkZSBEZWNpc2nDs24gPC9zcGFuPg0KYGBge3J9DQptb2RlbG80IDwtIHRyYWluKA0KICB4ID0geF9lbnRyZW5hbWllbnRvLCB5ID0geV9lbnRyZW5hbWllbnRvLA0KICBtZXRob2QgPSAicnBhcnQiLA0KICBwcmVQcm9jZXNzID0gYygic2NhbGUiLCAiY2VudGVyIiksDQogIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2Q9ImN2IiwgbnVtYmVyPTEwKSwNCiAgdHVuZUxlbmd0aCA9IDEwDQopDQoNCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvNCA8LSBwcmVkaWN0KG1vZGVsbzQsIHhfZW50cmVuYW1pZW50bykNCnJlc3VsdGFkb19wcnVlYmE0IDwtIHByZWRpY3QobW9kZWxvNCwgeF9wcnVlYmEpDQoNCm1jcmU0IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzQsIHlfZW50cmVuYW1pZW50bykNCm1jcnA0IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhNCwgeV9wcnVlYmEpDQoNCm1jcmU0DQptY3JwNA0KYGBgDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZSI+IE1vZGVsbyA1LiBSZWRlcyBOZXVyb25hbGVzIDwvc3Bhbj4NCmBgYHtyfQ0KbW9kZWxvNSA8LSB0cmFpbigNCiAgeCA9IHhfZW50cmVuYW1pZW50bywgeSA9IHlfZW50cmVuYW1pZW50bywNCiAgbWV0aG9kID0gIm5uZXQiLA0KICBwcmVQcm9jZXNzID0gYygic2NhbGUiLCAiY2VudGVyIiksDQogIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2Q9ImN2IiwgbnVtYmVyPTEwKSwNCiAgdHJhY2UgPSBGQUxTRQ0KKQ0KDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzUgPC0gcHJlZGljdChtb2RlbG81LCB4X2VudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhNSA8LSBwcmVkaWN0KG1vZGVsbzUsIHhfcHJ1ZWJhKQ0KDQptY3JlNSA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG81LCB5X2VudHJlbmFtaWVudG8pDQptY3JwNSA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTUsIHlfcHJ1ZWJhKQ0KDQptY3JlNQ0KbWNycDUNCmBgYA0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWUiPiBNb2RlbG8gNi4gQm9zcXVlcyBBbGVhdG9yaW9zIDwvc3Bhbj4NCmBgYHtyfQ0KIyBtdHJ5IG5vIHB1ZWRlIHNlciBtYXlvciBxdWUgZWwgbsO6bWVybyBkZSBjb2x1bW5hcw0KcCA8LSBuY29sKHhfZW50cmVuYW1pZW50bykNCm10cnlfdmFscyA8LSB1bmlxdWUocG1pbihjKDIsNCw2KSwgcCkpDQp0Z3JpZF9yZiA8LSBleHBhbmQuZ3JpZChtdHJ5ID0gbXRyeV92YWxzKQ0KDQptb2RlbG82IDwtIHRyYWluKA0KICB4ID0geF9lbnRyZW5hbWllbnRvLCB5ID0geV9lbnRyZW5hbWllbnRvLA0KICBtZXRob2QgPSAicmYiLA0KICBwcmVQcm9jZXNzID0gYygic2NhbGUiLCAiY2VudGVyIiksDQogIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2Q9ImN2IiwgbnVtYmVyPTEwKSwNCiAgdHVuZUdyaWQgPSB0Z3JpZF9yZg0KKQ0KDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzYgPC0gcHJlZGljdChtb2RlbG82LCB4X2VudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhNiA8LSBwcmVkaWN0KG1vZGVsbzYsIHhfcHJ1ZWJhKQ0KDQptY3JlNiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG82LCB5X2VudHJlbmFtaWVudG8pDQptY3JwNiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTYsIHlfcHJ1ZWJhKQ0KDQptY3JlNg0KbWNycDYNCmBgYA0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWUiPiBUYWJsYSBkZSBSZXN1bHRhZG9zIDwvc3Bhbj4NCmBgYHtyfQ0KcmVzdWx0YWRvcyA8LSBkYXRhLmZyYW1lKA0KICAic3ZtTGluZWFyIiA9IGMobWNyZTEkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDEkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQogICJzdm1SYWRpYWwiID0gYyhtY3JlMiRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwMiRvdmVyYWxsWyJBY2N1cmFjeSJdKSwNCiAgInN2bVBvbHkiICAgPSBjKG1jcmUzJG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnAzJG92ZXJhbGxbIkFjY3VyYWN5Il0pLA0KICAicnBhcnQiICAgICA9IGMobWNyZTQkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDQkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQogICJubmV0IiAgICAgID0gYyhtY3JlNSRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwNSRvdmVyYWxsWyJBY2N1cmFjeSJdKSwNCiAgInJmIiAgICAgICAgPSBjKG1jcmU2JG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnA2JG92ZXJhbGxbIkFjY3VyYWN5Il0pDQopDQpyb3duYW1lcyhyZXN1bHRhZG9zKSA8LSBjKCJQcmVjaXNpw7NuIGRlIGVudHJlbmFtaWVudG8iLCAiUHJlY2lzacOzbiBkZSBwcnVlYmEiKQ0KcmVzdWx0YWRvcw0KYGBgDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZSI+IENvbmNsdXNpb25lcyA8L3NwYW4+DQpMb3MgbW9kZWxvcyBtb3N0cmFyb24gZGlmZXJlbmNpYXMgaW1wb3J0YW50ZXMgZW50cmUgcHJlY2lzacOzbiBkZSBlbnRyZW5hbWllbnRvIHkgcHJlY2lzacOzbiBkZSBwcnVlYmEsIGxvIHF1ZSBub3MgbXVlc3RyYSBjaWVydG8gbml2ZWwgZGUgc29icmVhanVzdGUgZW4gYWxndW5vcyBjYXNvcy4gQXVucXVlIFNWTSBSYWRpYWwgeSBSYW5kb20gRm9yZXN0IGFsY2FuemFyb24gYWx0YXMgcHJlY2lzaW9uZXMgZW4gZW50cmVuYW1pZW50byAoY2VyY2FuYXMgYWwgOTglKSwgc3UgZGVzZW1wZcOxbyBkaXNtaW51ecOzIGVuIGRhdG9zIGRlIHBydWViYS4gRWwgbW9kZWxvIGNvbiBtZWpvciBjYXBhY2lkYWQgZGUgZ2VuZXJhbGl6YWNpw7NuIGZ1ZSBSYW5kb20gRm9yZXN0LCBhbCB0ZW5lciBsYSBtYXlvciBwcmVjaXNpw7NuIGVuIHBydWViYSAoNjkuMjMlKSwgc2VndWlkbyBwb3IgU1ZNIFJhZGlhbCAoNjUuMzglKS4gRW4gY29uY2x1c2nDs24sIGVsIG1vZGVsbyBtw6FzIHJlY29tZW5kYWJsZSBwYXJhIGVzdGEgYmFzZSBkZSBkYXRvcyBlcyBSYW5kb20gRm9yZXN0LCB5YSBxdWUgb2ZyZWNlIGVsIG1lam9yIGVxdWlsaWJyaW8gZW50cmUgcmVuZGltaWVudG8geSBjYXBhY2lkYWQgcHJlZGljdGl2YSBlbiBkYXRvcyBudWV2b3MuDQo=