Cargamos las librerias a utilizar

#############################################library(dplyr) # for data manipulation
library(caret) # for model-building
library(DMwR)  # for smote implementation
library(purrr) # for functional programming (map)
library(pROC)
library(knitr)
library(qgraph)
library(nortest)
library(magrittr)
library(dplyr) 
library(tidyr) 
library(e1071)
library(OneR) 
library(tidyverse)  # data manipulation and visualization
library(ggplot2)    # plot arrangement
library(gridExtra)  # plot arrangement
library(caret)
library(ggplot2)
library(FactoMineR)
library(factoextra)
library(modes)      # MODA  VER EL COMPORTAMIENTO GENERAL DE LA INF
library(randomForest)
#CARGAS DATOS PARA TRABAJAR MODELO PREDICTIVO
############################################
ruta <- 'C:/Users/Jhampier/Google Drive/Maestria/TESIS DE MAESTRIA/Proyecto'
setwd('C:/Users/Jhampier/Google Drive/Maestria/TESIS DE MAESTRIA/Proyecto')
#ruta <- 'C:/Users/jtapiasu/Google Drive/Maestria/TESIS DE MAESTRIA/Proyecto'
#setwd('C:/Users/jtapiasu/Google Drive/Maestria/TESIS DE MAESTRIA/Proyecto')
#C:\Users\Administrador\Desktop
#ruta <- 'C:/Users/Administrador/Desktop'
#setwd('C:/Users/Administrador/Desktop')

#Leer el conjunto de datos del archivo CSV
DataSetUprivada <-  read.table(paste(ruta, "/DataSetUprivadaBinarizadaSinRuidoFuturo.csv",sep=""),header=TRUE,sep=";",stringsAsFactors = FALSE)  ## dec="."  es separador decimal
##########################################################
########## 2 COMPRESION DE DATOS Y 3 PREPARACIÓN DE DATOS#####
##########################################################
str(DataSetUprivada)
'data.frame':   35693 obs. of  28 variables:
 $ CodAlumno                     : chr  "20000062092012-1" "20000062092012-2" "20000062092013-1" "20000062092013-2" ...
 $ SemestresEstudiadosAcum       : int  1 2 3 4 1 2 3 4 1 2 ...
 $ CantCursosLlevadosAcum        : int  7 15 22 29 6 13 20 28 6 11 ...
 $ CursosLlevadosFueraCarreraAcum: int  1 2 3 4 1 2 3 4 1 2 ...
 $ AvgSinAplzAcum                : chr  "10,52" "11,47" "11,41" "11,34" ...
 $ AvgConAplzAcum                : chr  "10,76" "11,59" "11,44" "11,46" ...
 $ CantCursosAplzAcum            : int  1 1 2 3 2 3 4 6 1 1 ...
 $ SumCredTeoAcum                : int  15 30 44 58 14 27 40 56 12 21 ...
 $ SumCredPraAcum                : int  7 14 21 28 6 13 20 27 6 11 ...
 $ edad                          : int  20 20 21 21 20 20 21 21 34 35 ...
 $ SEXO                          : chr  "M" "M" "M" "M" ...
 $ AvgVezMatriAcum               : chr  "1,14" "1,13" "1,09" "1,07" ...
 $ CarreraProfesional            : chr  "INGENIERIA AGRONOMICA" "INGENIERIA AGRONOMICA" "INGENIERIA AGRONOMICA" "INGENIERIA AGRONOMICA" ...
 $ MODALIDAD_INGRESO             : chr  "Primeros Puestos" "Primeros Puestos" "Primeros Puestos" "Primeros Puestos" ...
 $ ANIO_INGRESO                  : int  2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 ...
 $ UBIG_NACIMIENTO               : chr  "JOSE LUIS BUSTAMANTE Y RIVERO" "JOSE LUIS BUSTAMANTE Y RIVERO" "JOSE LUIS BUSTAMANTE Y RIVERO" "JOSE LUIS BUSTAMANTE Y RIVERO" ...
 $ UBIG_RESIDENCIA               : chr  "JOSE LUIS BUSTAMANTE Y RIVERO" "JOSE LUIS BUSTAMANTE Y RIVERO" "JOSE LUIS BUSTAMANTE Y RIVERO" "JOSE LUIS BUSTAMANTE Y RIVERO" ...
 $ TIPO_VIVIENDA                 : chr  "CASA" "CASA" "CASA" "CASA" ...
 $ GradoInstruccionPapa          : chr  "SUPERIOR UNIV. INCOMPLETA" "SUPERIOR UNIV. INCOMPLETA" "SUPERIOR UNIV. INCOMPLETA" "SUPERIOR UNIV. INCOMPLETA" ...
 $ ProfesionPapa                 : chr  "OTROS" "OTROS" "OTROS" "OTROS" ...
 $ OcupacionPapa                 : chr  "EMPRESARIO" "EMPRESARIO" "EMPRESARIO" "EMPRESARIO" ...
 $ GradoInstruccionMama          : chr  "SUPERIOR TECNICA INCOMPLETA" "SUPERIOR TECNICA INCOMPLETA" "SUPERIOR TECNICA INCOMPLETA" "SUPERIOR TECNICA INCOMPLETA" ...
 $ ProfesionMama                 : chr  "OTROS" "OTROS" "OTROS" "OTROS" ...
 $ OcupacionMama                 : chr  "EMPLEADO" "EMPLEADO" "EMPLEADO" "EMPLEADO" ...
 $ CantCursosAnulados            : int  1 1 1 1 0 0 0 0 0 0 ...
 $ categoria                     : chr  "CONTINUA" "CONTINUA" "CONTINUA" "EGRESADO" ...
 $ categoriaBinarizada           : int  0 0 0 0 0 0 0 1 0 0 ...
 $ ProbabDesercion               : chr  "14,24" "10,24" "6,61" "5,87" ...
View(DataSetUprivada)

########################################################
## DIMENSIONES - CANTIDAD DE FILAS Y VARIABLES(COLUMNAS)
nrow(DataSetUprivada)#[1] 35693
[1] 35693
ncol(DataSetUprivada)#[1] 27 -1 de categoria(var categorica)
[1] 28
colnames(DataSetUprivada)#Nombres de Variables
 [1] "CodAlumno"                      "SemestresEstudiadosAcum"       
 [3] "CantCursosLlevadosAcum"         "CursosLlevadosFueraCarreraAcum"
 [5] "AvgSinAplzAcum"                 "AvgConAplzAcum"                
 [7] "CantCursosAplzAcum"             "SumCredTeoAcum"                
 [9] "SumCredPraAcum"                 "edad"                          
[11] "SEXO"                           "AvgVezMatriAcum"               
[13] "CarreraProfesional"             "MODALIDAD_INGRESO"             
[15] "ANIO_INGRESO"                   "UBIG_NACIMIENTO"               
[17] "UBIG_RESIDENCIA"                "TIPO_VIVIENDA"                 
[19] "GradoInstruccionPapa"           "ProfesionPapa"                 
[21] "OcupacionPapa"                  "GradoInstruccionMama"          
[23] "ProfesionMama"                  "OcupacionMama"                 
[25] "CantCursosAnulados"             "categoria"                     
[27] "categoriaBinarizada"            "ProbabDesercion"               
##NOMBRES Y TIPOS DE DATOS DE LAS COLUMNAS
sapply(DataSetUprivada, mode)
                     CodAlumno        SemestresEstudiadosAcum 
                   "character"                      "numeric" 
        CantCursosLlevadosAcum CursosLlevadosFueraCarreraAcum 
                     "numeric"                      "numeric" 
                AvgSinAplzAcum                 AvgConAplzAcum 
                   "character"                    "character" 
            CantCursosAplzAcum                 SumCredTeoAcum 
                     "numeric"                      "numeric" 
                SumCredPraAcum                           edad 
                     "numeric"                      "numeric" 
                          SEXO                AvgVezMatriAcum 
                   "character"                    "character" 
            CarreraProfesional              MODALIDAD_INGRESO 
                   "character"                    "character" 
                  ANIO_INGRESO                UBIG_NACIMIENTO 
                     "numeric"                    "character" 
               UBIG_RESIDENCIA                  TIPO_VIVIENDA 
                   "character"                    "character" 
          GradoInstruccionPapa                  ProfesionPapa 
                   "character"                    "character" 
                 OcupacionPapa           GradoInstruccionMama 
                   "character"                    "character" 
                 ProfesionMama                  OcupacionMama 
                   "character"                    "character" 
            CantCursosAnulados                      categoria 
                     "numeric"                    "character" 
           categoriaBinarizada                ProbabDesercion 
                     "numeric"                    "character" 
summary(DataSetUprivada)#PODEMOS OBSERVAR EN EL POWER 
  CodAlumno         SemestresEstudiadosAcum CantCursosLlevadosAcum
 Length:35693       Min.   : 1.000          Min.   : 1.00         
 Class :character   1st Qu.: 2.000          1st Qu.:11.00         
 Mode  :character   Median : 4.000          Median :20.00         
                    Mean   : 4.187          Mean   :23.17         
                    3rd Qu.: 6.000          3rd Qu.:33.00         
                    Max.   :12.000          Max.   :81.00         
 CursosLlevadosFueraCarreraAcum AvgSinAplzAcum     AvgConAplzAcum    
 Min.   : 1.000                 Length:35693       Length:35693      
 1st Qu.: 2.000                 Class :character   Class :character  
 Median : 4.000                 Mode  :character   Mode  :character  
 Mean   : 4.306                                                      
 3rd Qu.: 6.000                                                      
 Max.   :18.000                                                      
 CantCursosAplzAcum SumCredTeoAcum  SumCredPraAcum       edad       
 Min.   : 0.000     Min.   :  1.0   Min.   : 0.00   Min.   : 14.00  
 1st Qu.: 1.000     1st Qu.: 27.0   1st Qu.: 7.00   1st Qu.: 18.00  
 Median : 3.000     Median : 50.0   Median :15.00   Median : 20.00  
 Mean   : 5.247     Mean   : 59.4   Mean   :17.78   Mean   : 20.55  
 3rd Qu.: 8.000     3rd Qu.: 85.0   3rd Qu.:25.00   3rd Qu.: 22.00  
 Max.   :48.000     Max.   :200.0   Max.   :80.00   Max.   :113.00  
     SEXO           AvgVezMatriAcum    CarreraProfesional MODALIDAD_INGRESO 
 Length:35693       Length:35693       Length:35693       Length:35693      
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
  ANIO_INGRESO  UBIG_NACIMIENTO    UBIG_RESIDENCIA    TIPO_VIVIENDA     
 Min.   :2009   Length:35693       Length:35693       Length:35693      
 1st Qu.:2011   Class :character   Class :character   Class :character  
 Median :2012   Mode  :character   Mode  :character   Mode  :character  
 Mean   :2012                                                           
 3rd Qu.:2014                                                           
 Max.   :2017                                                           
 GradoInstruccionPapa ProfesionPapa      OcupacionPapa     
 Length:35693         Length:35693       Length:35693      
 Class :character     Class :character   Class :character  
 Mode  :character     Mode  :character   Mode  :character  
                                                           
                                                           
                                                           
 GradoInstruccionMama ProfesionMama      OcupacionMama      CantCursosAnulados
 Length:35693         Length:35693       Length:35693       Min.   : 0.0000   
 Class :character     Class :character   Class :character   1st Qu.: 0.0000   
 Mode  :character     Mode  :character   Mode  :character   Median : 0.0000   
                                                            Mean   : 0.2907   
                                                            3rd Qu.: 0.0000   
                                                            Max.   :16.0000   
  categoria         categoriaBinarizada ProbabDesercion   
 Length:35693       Min.   :0.0000      Length:35693      
 Class :character   1st Qu.:0.0000      Class :character  
 Mode  :character   Median :0.0000      Mode  :character  
                    Mean   :0.0773                        
                    3rd Qu.:0.0000                        
                    Max.   :1.0000                        
summary(DataSetUprivada$CarreraProfesional)#PODEMOS OBSERVAR EN EL POWER 
   Length     Class      Mode 
    35693 character character 
########################################################
###########  PREPARACIÓN DE DATA POR VARIABLES  ########
########################################################
###Converision para tipo de dato correcto
DataSetUPRIVADAFRMTO <-transform(DataSetUprivada, 
                                 SEXO = as.factor(as.character(SEXO)),
                                 CarreraProfesional = as.factor(as.character(CarreraProfesional)),
                                 MODALIDAD_INGRESO = as.factor(as.character(MODALIDAD_INGRESO)),
                                 UBIG_NACIMIENTO = as.factor(as.character(UBIG_NACIMIENTO)),
                                 UBIG_RESIDENCIA = as.factor(as.character(UBIG_RESIDENCIA)),
                                 TIPO_VIVIENDA = as.factor(as.character(TIPO_VIVIENDA)),
                                 GradoInstruccionPapa = as.factor(as.character(GradoInstruccionPapa)),
                                 ProfesionPapa = as.factor(as.character(ProfesionPapa)),
                                 OcupacionPapa = as.factor(as.character(OcupacionPapa)),
                                 GradoInstruccionMama = as.factor(as.character(GradoInstruccionMama)),
                                 ProfesionMama = as.factor(as.character(ProfesionMama)),
                                 OcupacionMama = as.factor(as.character(OcupacionMama))
                                 ,categoriaBinarizada = as.factor(as.character(categoriaBinarizada))
)
DataSetUPRIVADAFRMTO[,'AvgSinAplzAcum'] <- as.numeric(sub(",", ".",  DataSetUPRIVADAFRMTO[,'AvgSinAplzAcum']
                                                          , fixed = TRUE))
DataSetUPRIVADAFRMTO[,'AvgConAplzAcum'] <- as.numeric(sub(",", ".",  DataSetUPRIVADAFRMTO[,'AvgConAplzAcum']
                                                          , fixed = TRUE))
DataSetUPRIVADAFRMTO[,'AvgVezMatriAcum'] <- as.numeric(sub(",", ".",  DataSetUPRIVADAFRMTO[,'AvgVezMatriAcum']
                                                           , fixed = TRUE))
DataSetUPRIVADAFRMTO[,'ProbabDesercion'] <- as.numeric(sub(",", ".",  DataSetUPRIVADAFRMTO[,'ProbabDesercion']
                                                           , fixed = TRUE))
##sapply(DataSetUPRIVADAFRMTO, mode)

ListVar.Categ <-    c('SEXO','CarreraProfesional','MODALIDAD_INGRESO'
                      ,'UBIG_NACIMIENTO','UBIG_RESIDENCIA','TIPO_VIVIENDA'
                      ,'GradoInstruccionPapa','ProfesionPapa','OcupacionPapa'
                      ,'GradoInstruccionMama','ProfesionMama','OcupacionMama')    # 12

Var.Objetivo      <- c('categoriaBinarizada')  #c('categoria')                                             # 1
ListVar.Continuas <- c('SemestresEstudiadosAcum'
                       ,'CantCursosLlevadosAcum'
                       ,'CursosLlevadosFueraCarreraAcum'
                       ,'AvgSinAplzAcum','AvgConAplzAcum'
                       ,'CantCursosAplzAcum'
                       ,'SumCredTeoAcum'
                       ,'SumCredPraAcum'
                       ,'edad'
                       #T#,'AvgVezMatriAcum'
                       ,'ANIO_INGRESO'
                       #T#,'CantCursosAnulados'                                     # 12
                       ,'ProbabDesercion'
)
Var.Identificacion <- c('CodAlumno')                                            # 1
Var.TodasUprivada <- c(ListVar.Categ ,ListVar.Continuas , Var.Objetivo)

##############################################################################
#  ###ORDENAMOS EL DATASET CRONOLOGICAMENTE
############################################################################
###  ANTES
View(DataSetUPRIVADAFRMTO)

TotalFilas <- nrow(DataSetUPRIVADAFRMTO)  #35687
SortUltimaFila=vector(mode='numeric', length=TotalFilas)
SortUltimaFila2=vector(mode='numeric', length=TotalFilas)
##Obtendremos las variables dle codigod el alumno para ordenar el dataset
NuevoDataSetUPRIVADAFRMTO = data.frame(DataSetUPRIVADAFRMTO, SortUltimaFila,SortUltimaFila2)
View(NuevoDataSetUPRIVADAFRMTO)
summary(NuevoDataSetUPRIVADAFRMTO)
  CodAlumno         SemestresEstudiadosAcum CantCursosLlevadosAcum
 Length:35693       Min.   : 1.000          Min.   : 1.00         
 Class :character   1st Qu.: 2.000          1st Qu.:11.00         
 Mode  :character   Median : 4.000          Median :20.00         
                    Mean   : 4.187          Mean   :23.17         
                    3rd Qu.: 6.000          3rd Qu.:33.00         
                    Max.   :12.000          Max.   :81.00         
                                                                  
 CursosLlevadosFueraCarreraAcum AvgSinAplzAcum  AvgConAplzAcum 
 Min.   : 1.000                 Min.   : 0.00   Min.   : 0.00  
 1st Qu.: 2.000                 1st Qu.: 8.91   1st Qu.: 9.36  
 Median : 4.000                 Median :10.63   Median :11.06  
 Mean   : 4.306                 Mean   :10.54   Mean   :10.84  
 3rd Qu.: 6.000                 3rd Qu.:12.32   3rd Qu.:12.52  
 Max.   :18.000                 Max.   :19.66   Max.   :19.66  
                                                               
 CantCursosAplzAcum SumCredTeoAcum  SumCredPraAcum       edad        SEXO     
 Min.   : 0.000     Min.   :  1.0   Min.   : 0.00   Min.   : 14.00   F: 9994  
 1st Qu.: 1.000     1st Qu.: 27.0   1st Qu.: 7.00   1st Qu.: 18.00   M:25699  
 Median : 3.000     Median : 50.0   Median :15.00   Median : 20.00            
 Mean   : 5.247     Mean   : 59.4   Mean   :17.78   Mean   : 20.55            
 3rd Qu.: 8.000     3rd Qu.: 85.0   3rd Qu.:25.00   3rd Qu.: 22.00            
 Max.   :48.000     Max.   :200.0   Max.   :80.00   Max.   :113.00            
                                                                              
 AvgVezMatriAcum                                             CarreraProfesional
 Min.   :1.000   INGENIERIA INDUSTRIAL                                :8791    
 1st Qu.:1.000   INGENIERIA MECANICA, MECANICA-ELECTRICA Y MECATRONICA:8528    
 Median :1.000   INGENIERIA DE SISTEMAS                               :4537    
 Mean   :1.138   INGENIERIA ELECTRONICA                               :3699    
 3rd Qu.:1.170   MEDICINA VETERINARIA Y ZOOTECNIA                     :3124    
 Max.   :4.000   INGENIERIA DE MINAS                                  :3119    
                 (Other)                                              :3895    
                   MODALIDAD_INGRESO  ANIO_INGRESO    UBIG_NACIMIENTO 
 Tercer Examen General      :8524    Min.   :2009   AREQUIPA  :21072  
 Segundo Examen General     :6259    1st Qu.:2011   PAUCARPATA: 1444  
 Primer Examen General      :5818    Median :2012   JULIACA   :  869  
 Centro Preuniversitario III:3417    Mean   :2012   YANAHUARA :  707  
 Centro Preuniversitario I  :2962    3rd Qu.:2014   ILO       :  701  
 Centro Preuniversitario II :2962    Max.   :2017   MOLLENDO  :  655  
 (Other)                    :5751                   (Other)   :10245  
                      UBIG_RESIDENCIA       TIPO_VIVIENDA  
 JOSE LUIS BUSTAMANTE Y RIVERO: 5274   CASA        :29859  
 CERRO COLORADO               : 3949   DEPARTAMENTO: 5484  
 AREQUIPA                     : 3931   VECINDAD    :  350  
 PAUCARPATA                   : 3272                       
 CAYMA                        : 2701                       
 YANAHUARA                    : 2381                       
 (Other)                      :14185                       
                GradoInstruccionPapa                   ProfesionPapa  
 SECUNDARIA COMPLETA      :7703      OTROS                    :13173  
 SUPERIOR UNIV. COMPLETA  :6279      PROFESION ...            : 6469  
 SUPERIOR TECNICA COMPLETA:5469      CONTADOR                 : 2238  
 GRADUADO UNIVERSITARIO   :4493      ADMINISTRADOR DE EMPRESAS: 1550  
 SUPERIOR UNIV. INCOMPLETA:4372      PROFESOR                 : 1479  
 NIVEL EDUCATIVO ...      :1770      ABOGADO                  : 1313  
 (Other)                  :5607      (Other)                  : 9471  
               OcupacionPapa                    GradoInstruccionMama
 EMPLEADO             :10711   SECUNDARIA COMPLETA        :8926     
 OTRO                 : 5305   SUPERIOR UNIV. COMPLETA    :6048     
 OCUPACION ...        : 3028   SUPERIOR TECNICA COMPLETA  :5695     
 MICROEMPRESARIO      : 2396   GRADUADO UNIVERSITARIO     :4726     
 FF. POLICIALES       : 2185   SUPERIOR UNIV. INCOMPLETA  :3464     
 CONDUCTOR DE VEHICULO: 2182   EST. SUP. NO UNIVERSITARIOS:1674     
 (Other)              : 9886   (Other)                    :5160     
                   ProfesionMama                 OcupacionMama  
 OTROS                    :13518   AMA DE CASA          :14746  
 PROFESION ...            : 5909   EMPLEADO             : 8825  
 ENFERMERA                : 2976   OTRO                 : 3767  
 PROFESOR                 : 2966   COMERCIANTE MINORISTA: 2208  
 CONTADOR                 : 2400   OCUPACION ...        : 1576  
 ADMINISTRADOR DE EMPRESAS:  871   MICROEMPRESARIO      : 1558  
 (Other)                  : 7053   (Other)              : 3013  
 CantCursosAnulados  categoria         categoriaBinarizada ProbabDesercion 
 Min.   : 0.0000    Length:35693       0:32934             Min.   : 0.000  
 1st Qu.: 0.0000    Class :character   1: 2759             1st Qu.: 5.190  
 Median : 0.0000    Mode  :character                       Median : 5.870  
 Mean   : 0.2907                                           Mean   : 7.729  
 3rd Qu.: 0.0000                                           3rd Qu.:10.240  
 Max.   :16.0000                                           Max.   :14.240  
                                                                           
 SortUltimaFila SortUltimaFila2
 Min.   :0      Min.   :0      
 1st Qu.:0      1st Qu.:0      
 Median :0      Median :0      
 Mean   :0      Mean   :0      
 3rd Qu.:0      3rd Qu.:0      
 Max.   :0      Max.   :0      
                               
NuevoDataSetUPRIVADAFRMTO$SortUltimaFila=as.numeric(  substr(NuevoDataSetUPRIVADAFRMTO$CodAlumno, 11, 14))
NuevoDataSetUPRIVADAFRMTO$SortUltimaFila2=as.numeric(  substr(NuevoDataSetUPRIVADAFRMTO$CodAlumno, 16, 17))

###ORDENAMOS EL DATA SET
SortNuevoDataSetUPRIVADAFRMTO <- NuevoDataSetUPRIVADAFRMTO[order(NuevoDataSetUPRIVADAFRMTO$SortUltimaFila,NuevoDataSetUPRIVADAFRMTO$SortUltimaFila2),] 
View(SortNuevoDataSetUPRIVADAFRMTO)
SortNuevoDataSetUPRIVADAFRMTO$SortUltimaFila <- NULL ##ELIMINARNOS LAS FILAS DE ORDENAMIENTO
SortNuevoDataSetUPRIVADAFRMTO$SortUltimaFila2 <- NULL ##ELIMINARNOS LAS FILAS DE ORDENAMIENTO

##Reemplamos en el dataset que se trabajarn los modelos
DataSetUPRIVADAFRMTO<-SortNuevoDataSetUPRIVADAFRMTO

Observamos el DATASET ordenado cronologicamente

# Resultado DESPUES
View(DataSetUPRIVADAFRMTO)   #### EL NUEVO DATA SET SE ENCUENTRA ORDENADO CRONOLOGICAMENTE
ncol(DataSetUPRIVADAFRMTO)
[1] 28

Configuración para el modelo de entrenamiento

summary(DataSetUPRIVADAFRMTO$CarreraProfesional)
                                INGENIERIA AGRONOMICA 
                                                  952 
                     INGENIERIA AGRONOMICA Y AGRICOLA 
                                                  551 
                  INGENIERIA DE INDUSTRIA ALIMENTARIA 
                                                 2392 
                                  INGENIERIA DE MINAS 
                                                 3119 
                               INGENIERIA DE SISTEMAS 
                                                 4537 
                               INGENIERIA ELECTRONICA 
                                                 3699 
                                INGENIERIA INDUSTRIAL 
                                                 8791 
INGENIERIA MECANICA, MECANICA-ELECTRICA Y MECATRONICA 
                                                 8528 
                     MEDICINA VETERINARIA Y ZOOTECNIA 
                                                 3124 
DataSetUPRIVADAFRMTO.RF <-DataSetUPRIVADAFRMTO[,Var.TodasUprivada]  %>%  filter(gsub("^\\s+|\\s+$", "",CarreraProfesional) =="INGENIERIA DE SISTEMAS" ) %>%  droplevels
#Para que las variables se visualicen correctamente
for (variable in ListVar.Categ) {  levels(DataSetUPRIVADAFRMTO.RF[,variable]) }
nrow(DataSetUPRIVADAFRMTO.RF)
[1] 4537
summary(DataSetUPRIVADAFRMTO.RF$CarreraProfesional)
INGENIERIA DE SISTEMAS 
                  4537 
DataSetUPRIVADAFRMTO.RF$CarreraProfesional <- NULL


# configurar función de control para Training
ctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 10, summaryFunction = twoClassSummary, classProbs = TRUE)

DataSetUPRIVADAFRMTO.RF$categoriaBinarizada <- as.character(DataSetUPRIVADAFRMTO.RF$categoriaBinarizada)
DataSetUPRIVADAFRMTO.RF$categoriaBinarizada[DataSetUPRIVADAFRMTO.RF$categoriaBinarizada == "0"] <- "C0"### LOS QUE CONTINUAN
DataSetUPRIVADAFRMTO.RF$categoriaBinarizada[DataSetUPRIVADAFRMTO.RF$categoriaBinarizada == "1"] <- "C1"### LOS DESERTORES
DataSetUPRIVADAFRMTO.RF$categoriaBinarizada <- factor(DataSetUPRIVADAFRMTO.RF$categoriaBinarizada)

LUEGO DE ORDENAR PROCEDEMOS A ENTRENAR EL MODELO

####################################################
####PODEMOS OBSERVAR EL DESBALANCEO DE LAS CLASES 
100*prop.table(table(DataSetUPRIVADAFRMTO.RF$categoriaBinarizada))

       C0        C1 
91.117479  8.882521 
summary(DataSetUPRIVADAFRMTO.RF$categoriaBinarizada)
  C0   C1 
4134  403 
##calculamos las filas para el entrenamiento
TotalFilas <- nrow(DataSetUPRIVADAFRMTO.RF)
#####Se tomara el 50% de las de la data para entremiento y el otro 50% sera para TEST
TrainFilas <- round(TotalFilas*0.5)  

##VEMOS EL DATASET QUE SE UTILIZARA PARA ENTRENAR
View(DataSetUPRIVADAFRMTO.RF)

AQUI SE APLICAN LOS MODELOS Y SE MUESTRA SUS MATRICES DE CONFUSIÓN COMO REFERENCIA

##DENIFIMOS LOS NODOS DE ENTRENAMIENTP
x_trainRF <- DataSetUPRIVADAFRMTO.RF[ (1:TrainFilas),]
y_trainRF <- DataSetUPRIVADAFRMTO.RF[ (1:TrainFilas),'categoriaBinarizada']
##### DATOS PARA ENTRENAMIENTO
View(x_trainRF)
x_testRF <- DataSetUPRIVADAFRMTO.RF[ ((TrainFilas+1):TotalFilas),]
y_testRF <- DataSetUPRIVADAFRMTO.RF[((TrainFilas+1):TotalFilas),'categoriaBinarizada']
## configurarmos un paramtro de RamdomForest para tunear el modelo.
##### DATOS PARA TESTING
View(x_testRF)

tunegrid <- expand.grid(.mtry = c(sqrt(ncol(DataSetUPRIVADAFRMTO.RF))))

orig_fit <- caret::train(categoriaBinarizada ~ ., data = x_trainRF,verbose = FALSE    
                  , method = "rf", metric = "ROC", tuneGrid = tunegrid
                  , trControl = ctrl)
summary(y_testRF)
  C0   C1 
2061  208 
mc_PredictOrigTuneGrid<- table(predict(orig_fit,x_testRF),y_testRF)
mc_PredictOrigTuneGrid
    y_testRF
       C0   C1
  C0 2061  203
  C1    0    5
cm_originalRF1 <- confusionMatrix(predict(orig_fit,x_testRF), y_testRF)
cm_originalRF1$byClass
         Sensitivity          Specificity       Pos Pred Value 
          1.00000000           0.02403846           0.91033569 
      Neg Pred Value            Precision               Recall 
          1.00000000           0.91033569           1.00000000 
                  F1           Prevalence       Detection Rate 
          0.95306358           0.90832966           0.90832966 
Detection Prevalence    Balanced Accuracy 
          0.99779639           0.51201923 
#########################################################
#########################################################
# Create model weights (they sum to one)

model_weights <- ifelse(x_trainRF$categoriaBinarizada == "C0",
                        (1/table(x_trainRF$categoriaBinarizada)[1]) * 0.5,
                        (1/table(x_trainRF$categoriaBinarizada)[2]) * 0.5)
summary(model_weights)
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
0.0002412 0.0002412 0.0002412 0.0004409 0.0002412 0.0025641 
# Use the same seed to ensure same cross-validation splits
ctrl$seeds <- orig_fit$control$seeds

# Build weighted model
weighted_fit <- train(categoriaBinarizada ~ .,
                      data = x_trainRF,
                      method = "rf",
                      verbose = FALSE,
                      weights = model_weights,
                      metric = "ROC",
                      tuneGrid = tunegrid,
                      trControl = ctrl)
summary(y_testRF)
  C0   C1 
2061  208 
mc_PredictWeightTuneGrid<- table(predict(weighted_fit,x_testRF),y_testRF)
mc_PredictWeightTuneGrid
    y_testRF
       C0   C1
  C0 2061  203
  C1    0    5
cm_WeightRF1 <- confusionMatrix(predict(weighted_fit,x_testRF), y_testRF)
cm_WeightRF1$byClass
         Sensitivity          Specificity       Pos Pred Value 
          1.00000000           0.02403846           0.91033569 
      Neg Pred Value            Precision               Recall 
          1.00000000           0.91033569           1.00000000 
                  F1           Prevalence       Detection Rate 
          0.95306358           0.90832966           0.90832966 
Detection Prevalence    Balanced Accuracy 
          0.99779639           0.51201923 
# Build down-sampled model
ctrl$sampling <- "down"
down_fit <- train(categoriaBinarizada ~ .,
                  data = x_trainRF,
                  method = "rf",
                  verbose = FALSE,
                  tuneGrid = tunegrid,
                  metric = "ROC",
                  trControl = ctrl)

summary(y_testRF)
  C0   C1 
2061  208 
mc_PredictDownTuneGrid<- table(predict(down_fit,x_testRF),y_testRF)
mc_PredictDownTuneGrid
    y_testRF
       C0   C1
  C0 1825   97
  C1  236  111
cm_DownRF1 <- confusionMatrix(predict(down_fit,x_testRF), y_testRF)
cm_DownRF1$byClass
         Sensitivity          Specificity       Pos Pred Value 
           0.8850073            0.5336538            0.9495055 
      Neg Pred Value            Precision               Recall 
           0.3189655            0.9495055            0.8850073 
                  F1           Prevalence       Detection Rate 
           0.9161226            0.9083297            0.8038784 
Detection Prevalence    Balanced Accuracy 
           0.8466285            0.7093306 
# Build up-sampled model
ctrl$sampling <- "up"
up_fit <- train(categoriaBinarizada ~ .,
                data = x_trainRF,
                method = "rf",
                verbose = FALSE,
                metric = "ROC",
                tuneGrid = tunegrid,
                trControl = ctrl)

summary(y_testRF)
  C0   C1 
2061  208 
mc_PredictUpTuneGrid<- table(predict(up_fit,x_testRF),y_testRF)
mc_PredictUpTuneGrid
    y_testRF
       C0   C1
  C0 1894  111
  C1  167   97
cm_UpRF1 <- confusionMatrix(predict(up_fit,x_testRF), y_testRF)
cm_UpRF1$byClass
         Sensitivity          Specificity       Pos Pred Value 
           0.9184862            0.4615385            0.9441397 
      Neg Pred Value            Precision               Recall 
           0.3636364            0.9441397            0.9184862 
                  F1           Prevalence       Detection Rate 
           0.9311363            0.9083297            0.8342882 
Detection Prevalence    Balanced Accuracy 
           0.8836492            0.6900123 
# Build smote model
ctrl$sampling <- "smote"
smote_fit <- train(categoriaBinarizada ~ .,
                   data = x_trainRF,
                   method = "rf",
                   verbose = FALSE,
                   metric = "ROC",
                   tuneGrid = tunegrid,
                   trControl = ctrl)
summary(y_testRF)
  C0   C1 
2061  208 
mc_PredictSmoteTuneGrid<- table(predict(smote_fit,x_testRF),y_testRF)
mc_PredictSmoteTuneGrid
    y_testRF
       C0   C1
  C0 2046  186
  C1   15   22
cm_SmoteRF1 <- confusionMatrix(predict(smote_fit,x_testRF), y_testRF)
cm_SmoteRF1$byClass
         Sensitivity          Specificity       Pos Pred Value 
           0.9927220            0.1105769            0.9170775 
      Neg Pred Value            Precision               Recall 
           0.6052632            0.9170775            0.9927220 
                  F1           Prevalence       Detection Rate 
           0.9534017            0.9083297            0.9017188 
Detection Prevalence    Balanced Accuracy 
           0.9832525            0.5516495 
#################### #################### #################### 
#################### NUEVOS
ctrl <- trainControl(method = "repeatedcv",            number = 10,       repeats = 10,   verboseIter = FALSE)

# summary( DataSetUPRIVADAFRMTO.RF$categoriaBinarizada)
# summary(x_trainRF$categoriaBinarizada)
# summary(x_testRF$categoriaBinarizada)

set.seed(5627)
model_rf <- caret::train(categoriaBinarizada ~ .,                         data = x_trainRF,
                         method = "rf",                  preProcess = c("scale", "center"),
                         trControl = ctrl)



mc_original<- table(predict(model_rf,x_testRF), y_testRF)
mc_original
    y_testRF
       C0   C1
  C0 2038  157
  C1   23   51
cm_original <- confusionMatrix(predict(model_rf,x_testRF), y_testRF)
cm_original
Confusion Matrix and Statistics

          Reference
Prediction   C0   C1
        C0 2038  156
        C1   23   52
                                          
               Accuracy : 0.9211          
                 95% CI : (0.9092, 0.9319)
    No Information Rate : 0.9083          
    P-Value [Acc > NIR] : 0.01749         
                                          
                  Kappa : 0.3352          
                                          
 Mcnemar's Test P-Value : < 2e-16         
                                          
            Sensitivity : 0.9888          
            Specificity : 0.2500          
         Pos Pred Value : 0.9289          
         Neg Pred Value : 0.6933          
             Prevalence : 0.9083          
         Detection Rate : 0.8982          
   Detection Prevalence : 0.9669          
      Balanced Accuracy : 0.6194          
                                          
       'Positive' Class : C0              
                                          
ctrl$sampling <- "down"
set.seed(5627)
model_rf_under <- caret::train(categoriaBinarizada ~ .,                         data = x_trainRF,
                         method = "rf",                  preProcess = c("scale", "center"),
                         trControl = ctrl)



mc_originalUnder<- table(predict(model_rf_under,x_testRF), y_testRF)
mc_originalUnder
    y_testRF
       C0   C1
  C0 1422   52
  C1  639  156
cm_originalUnder <- confusionMatrix(predict(model_rf_under,x_testRF), y_testRF)
cm_originalUnder
Confusion Matrix and Statistics

          Reference
Prediction   C0   C1
        C0 1421   53
        C1  640  155
                                          
               Accuracy : 0.6946          
                 95% CI : (0.6752, 0.7135)
    No Information Rate : 0.9083          
    P-Value [Acc > NIR] : 1               
                                          
                  Kappa : 0.1916          
                                          
 Mcnemar's Test P-Value : <2e-16          
                                          
            Sensitivity : 0.6895          
            Specificity : 0.7452          
         Pos Pred Value : 0.9640          
         Neg Pred Value : 0.1950          
             Prevalence : 0.9083          
         Detection Rate : 0.6263          
   Detection Prevalence : 0.6496          
      Balanced Accuracy : 0.7173          
                                          
       'Positive' Class : C0              
                                          
ctrl$sampling <- "up"
set.seed(5627)
model_rf_over <- caret::train(categoriaBinarizada ~ .,                         data = x_trainRF,
                               method = "rf",                  preProcess = c("scale", "center"),
                               trControl = ctrl)



mc_originalOver<- table(predict(model_rf_over,x_testRF), y_testRF)
mc_originalOver
    y_testRF
       C0   C1
  C0 1995  152
  C1   66   56
cm_originalOver <- confusionMatrix(predict(model_rf_over,x_testRF), y_testRF)
cm_originalOver
Confusion Matrix and Statistics

          Reference
Prediction   C0   C1
        C0 1997  152
        C1   64   56
                                         
               Accuracy : 0.9048         
                 95% CI : (0.892, 0.9166)
    No Information Rate : 0.9083         
    P-Value [Acc > NIR] : 0.7339         
                                         
                  Kappa : 0.2941         
                                         
 Mcnemar's Test P-Value : 3.227e-09      
                                         
            Sensitivity : 0.9689         
            Specificity : 0.2692         
         Pos Pred Value : 0.9293         
         Neg Pred Value : 0.4667         
             Prevalence : 0.9083         
         Detection Rate : 0.8801         
   Detection Prevalence : 0.9471         
      Balanced Accuracy : 0.6191         
                                         
       'Positive' Class : C0             
                                         
ctrl$sampling <- "smote"
set.seed(5627)
model_rf_smote <- caret::train(categoriaBinarizada ~ .,                         data = x_trainRF,
                              method = "rf",                  preProcess = c("scale", "center"),
                              trControl = ctrl)

mc_originalSmote<- table(predict(model_rf_smote,x_testRF), y_testRF)
mc_originalSmote
    y_testRF
       C0   C1
  C0 2061  208
  C1    0    0
cm_originalSmote <- confusionMatrix(predict(model_rf_smote,x_testRF), y_testRF)
cm_originalSmote
Confusion Matrix and Statistics

          Reference
Prediction   C0   C1
        C0 2061  208
        C1    0    0
                                          
               Accuracy : 0.9083          
                 95% CI : (0.8957, 0.9199)
    No Information Rate : 0.9083          
    P-Value [Acc > NIR] : 0.5185          
                                          
                  Kappa : 0               
                                          
 Mcnemar's Test P-Value : <2e-16          
                                          
            Sensitivity : 1.0000          
            Specificity : 0.0000          
         Pos Pred Value : 0.9083          
         Neg Pred Value :    NaN          
             Prevalence : 0.9083          
         Detection Rate : 0.9083          
   Detection Prevalence : 1.0000          
      Balanced Accuracy : 0.5000          
                                          
       'Positive' Class : C0              
                                          
###PRUEBA
ccmodelBayes <-  caret::train(categoriaBinarizada ~ .,  data=x_trainRF,'nb')
mc_ccmodelBayesCaret<- table(predict(ccmodelBayes,x_testRF), y_testRF)
mc_ccmodelBayesCaret
    y_testRF
       C0   C1
  C0 2061  208
  C1    0    0
cm_ccmodelBayesCaret <- confusionMatrix(predict(ccmodelBayes,x_testRF), y_testRF)
cm_ccmodelBayesCaret$byClass
         Sensitivity          Specificity       Pos Pred Value 
           1.0000000            0.0000000            0.9083297 
      Neg Pred Value            Precision               Recall 
                 NaN            0.9083297            1.0000000 
                  F1           Prevalence       Detection Rate 
           0.9519630            0.9083297            0.9083297 
Detection Prevalence    Balanced Accuracy 
           1.0000000            0.5000000 
##### NAIVE BAYES  ########
x_trainRF$categoriaBinarizada <- NULL
x_testRF$categoriaBinarizada <- NULL
###CON CARET
library(e1071)
modelBayes <-  caret::train(x_trainRF,y_trainRF,'nb')
mc_modelBayesCaret<- table(predict(modelBayes,x_testRF), y_testRF)
mc_modelBayesCaret
    y_testRF
       C0   C1
  C0 1692  124
  C1  369   84
cm_modelBayesCaret <- confusionMatrix(predict(modelBayes,x_testRF), y_testRF)
cm_modelBayesCaret$byClass
         Sensitivity          Specificity       Pos Pred Value 
           0.8209607            0.4038462            0.9317181 
      Neg Pred Value            Precision               Recall 
           0.1854305            0.9317181            0.8209607 
                  F1           Prevalence       Detection Rate 
           0.8728398            0.9083297            0.7457030 
Detection Prevalence    Balanced Accuracy 
           0.8003526            0.6124034 
classificadorBayesiano <- naiveBayes(x_trainRF,y_trainRF)
mc_originalBayesiano<- table(predict(classificadorBayesiano,x_testRF), y_testRF)
mc_originalBayesiano
    y_testRF
       C0   C1
  C0 1855  116
  C1  206   92
cm_originalBayesiano <- confusionMatrix(predict(classificadorBayesiano,x_testRF), y_testRF)
cm_originalBayesiano
Confusion Matrix and Statistics

          Reference
Prediction   C0   C1
        C0 1855  116
        C1  206   92
                                         
               Accuracy : 0.8581         
                 95% CI : (0.843, 0.8722)
    No Information Rate : 0.9083         
    P-Value [Acc > NIR] : 1              
                                         
                  Kappa : 0.2866         
                                         
 Mcnemar's Test P-Value : 7.057e-07      
                                         
            Sensitivity : 0.9000         
            Specificity : 0.4423         
         Pos Pred Value : 0.9411         
         Neg Pred Value : 0.3087         
             Prevalence : 0.9083         
         Detection Rate : 0.8175         
   Detection Prevalence : 0.8687         
      Balanced Accuracy : 0.6712         
                                         
       'Positive' Class : C0             
                                         
View(x_trainRF)



#################################################################################################################
################################### RESUMEN DE RESULTADOS #######################################################
# #################################################################################################################
# View(x_trainRF)
# View(y_trainRF)
# View(x_testRF)
# View(y_testRF)
# summary(x_testRF)
# summary(y_testRF)
# mc_originalBayesiano
models <- list(    originalRF1 = orig_fit,
                   WeightRF1 = weighted_fit,
                   DownRF1     = down_fit,
                   UpRF1       = up_fit,
                   SmoteRF1    = smote_fit,
                   original    = model_rf,
                   originalUnder  = model_rf_under,
                   originalOver = model_rf_over,
                   originalSmote = model_rf_smote,
                   ccmodelBayesCaret =   ccmodelBayes,
                   modelBayesCaret =   modelBayes,
                   originalBayesiano = classificadorBayesiano
                   )


# resampling <- resamples(models)
# bwplot(resampling)

library(dplyr)
comparison <- data.frame(model = names(models),                         Sensitivity = rep(NA, length(models)),
                         Specificity = rep(NA, length(models)),         Precision = rep(NA, length(models)),
                         Recall = rep(NA, length(models)),              F1 = rep(NA, length(models)))

for (name in names(models)) {
  switch(name, 
         originalRF1={rowModel<- 1},
         WeightRF1  ={rowModel<- 2},
         DownRF1    ={rowModel<- 3},
         UpRF1      ={rowModel<- 4},  #smote
         SmoteRF1   ={rowModel<- 5},  #Bayesiano
         original     ={rowModel<- 6},
         originalUnder   ={rowModel<- 7},
         originalOver  ={rowModel<- 8},
         originalSmote = {rowModel<- 9},
         ccmodelBayesCaret = {rowModel<- 10},
         modelBayesCaret = {rowModel<- 11},
         originalBayesiano = {rowModel<- 12}
  )
  model <- get(paste0("cm_", name))
  comparison[rowModel,'Precision' ] <-model$byClass["Precision"]
  comparison[rowModel,'Sensitivity' ] <-model$byClass["Sensitivity"]
  comparison[rowModel,'Specificity' ] <-model$byClass["Specificity"] ## IMPORTANTE
  comparison[rowModel,'Recall' ] <-model$byClass["Recall"]
  comparison[rowModel,'F1' ] <-model$byClass["F1"]
}
comparison