Universidad CES: Un Camino a la Excelencia

1. Preparación de la base de datos para la presentación de informes

En todo proyecto relacionado con la ciencia de datos es fundamental la preparación de la base de datos con el fin de que se encuentre en óptimas condiciones en cuanto a calidad, disponibilidad y orden. En todo proyecto de ciencia de datos, la preparación de la data consume más del 80% del tiempo, sin embargo una vez que se ha depurada y automatizado la limpieza de la data los análisis se hacen casi al instante y el tiempo restante se destina a la representación estadística y analítica de los datos.

En esta ocasión aprenderemos cuatro pasos para la depuración de datos:

  1. Apertura de los datos: se puede hacer a carpetas alojadas en el PC, carpetas de google Drive o de OneDrive, dando los debidos permisos de acceso

  2. Calidad del dato: Identificación de la naturaleza de las variables y coerción de las variables que no presentan una naturaleza correcta.

  3. Identificación de datos atípicos: esto incluye también la toma de decisión respecto al quehacer según el dato

  4. Aplicación de modelos de imputación de datos: en este caso utilizaremos

  • Imputación con la Media
  • Imputación por Regresión
  • Imputación por Regresión Estocástica
  • Imputación Múltiple
  • Imputación de datos utilizando KNN

Al final se harán las debidas validaciones con el fin de establecer cuál es el mejor método de imputación de los datos.

Iniciemos:

1.1. Apertura de los datos

La apertura de datos en un proyecto de ciencia de datos es crucial, especialmente cuando se emplea un software como R, que ofrece un ecosistema robusto para el análisis y visualización de datos. En un entorno de ciencia de datos, la disponibilidad de datos abiertos promueve la transparencia, la reproducibilidad y la colaboración entre investigadores y profesionales de diversas disciplinas. Al trabajar con datos accesibles, cualquier miembro de la comunidad científica puede revisar y validar los análisis, identificando posibles errores y mejorando la calidad del trabajo final.

El software R es especialmente ventajoso en este contexto, ya que cuenta con paquetes y herramientas diseñados para manipular, analizar y visualizar grandes volúmenes de datos. Paquetes como tidyverse y data.table simplifican la limpieza y transformación de datos abiertos, mientras que ggplot2 permite crear visualizaciones informativas y personalizadas. Además, R facilita la integración con repositorios de datos abiertos y APIs, agilizando el acceso a fuentes de datos actualizadas en tiempo real.

La apertura de datos también favorece la innovación, ya que los científicos y analistas de datos pueden construir modelos predictivos y algoritmos avanzados basados en datos accesibles, contribuyendo al avance de la ciencia y el desarrollo de soluciones prácticas. Al utilizar R en un entorno de datos abiertos, los equipos de ciencia de datos pueden desarrollar proyectos que son fácilmente reproducibles y comprensibles por la comunidad, mejorando la calidad y alcance de los análisis y alentando la creación de conocimiento compartido que beneficia a toda la sociedad.

1.2. Verificación de los datos

La verificación de los datos consistió en identificar la naturaleza de las variables. Aquellas variables numéricas que fueron identificadas como caracteres se han coercionado para que se conviertan en numéricas. Igualmente si aparecieron variables numéricas que son caracter o factor se coercionaron a su naturaleza original. Se usó la función summary para identificar la naturaleza y tener un pequeño análisis descriptivo de cada una de ellas. A continuación en la Tabla 1 se presenta la visualización de los resultados.

Tabla 1: representación de la base de datos depurada

1.3. Verificación de datos atípicos

Para la identificación de datos atípicos vamos a utilizar diferentes técnicas que nos permitirán saber cuáles datos debemos diagnósticar en relación a la tendencia de los datos. En ese sentido exploraremos el test de Grubb´s, el test de Dixon y las distancias de Mahalanobis.

Sin embargo, estos test requieren del cumplimento de algunos supuestos como el de normalidad, por tanto es recomendable que para las variables cuantitativas presentemos el histogrma de frecuencias y el test de Anderso-Darling para establecer la normalidad de la variable.

Sin embargo la manera más objetiva de determinar si una variable distribuye de manera normal es utilizando un test de hipótesis. En este caso utilizaremos la prueba de Kolmogorov-Smirnov para establecer si la distribución cumple o no con el criterio de normalidad

Para establecer la normalidad, la variable Peso presentó el valor-P de Kolmogorov-Smirnov igual a 1.4571455^{-10} con lo cuál se confirma la no normalidad de la variable. Del mismo modo para la variable Edad el Valor-P de Kolmogorov fue de 0, lo que implica el no cumplimiento de la normalidad. Al analizar los valores de P de Kolmogorov para las otras variables todas presentan valores menores a 0.05.

Sin embargo probaremos cada uno de los test con los datos para confirmar lo dicho.

a) Test de Grubbs

## 
##  Grubbs test for one outlier
## 
## data:  data$Edad
## G = 5.54886, U = 0.97901, p-value = 1.794e-05
## alternative hypothesis: highest value 54 is an outlier
## 
##  Grubbs test for one outlier
## 
## data:  data$Peso
## G = 4.68014, U = 0.98471, p-value = 0.001891
## alternative hypothesis: highest value 120 is an outlier
## 
##  Grubbs test for one outlier
## 
## data:  data$Estatura
## G = 3.32208, U = 0.99245, p-value = 0.6403
## alternative hypothesis: lowest value 1.38 is an outlier
## 
##  Grubbs test for one outlier
## 
## data:  data$IMC
## G = 5.40480, U = 0.97954, p-value = 3.989e-05
## alternative hypothesis: highest value 40.0091449474165 is an outlier
## 
##  Grubbs test for one outlier
## 
## data:  data$Mat.Cursadas
## G = 3.05850, U = 0.99368, p-value = 1
## alternative hypothesis: lowest value 1 is an outlier
## 
##  Grubbs test for one outlier
## 
## data:  data$Promedio.Sem
## G = 9.67618, U = 0.89911, p-value < 2.2e-16
## alternative hypothesis: lowest value 0 is an outlier
## 
##  Grubbs test for one outlier
## 
## data:  data$Prom.Acum
## G = 6.35047, U = 0.95519, p-value = 6.081e-08
## alternative hypothesis: lowest value 0 is an outlier

b) Test de Dixon para 20 datos

Este test se utiliza para distribuciones de datos continuos no mayores a 30 datos y se sugiere que la distribución de datos sea lo más parecido a la normal

## 
##  Dixon test for outliers
## 
## data:  subdat$IMC
## Q = 0.47322, p-value = 0.1027
## alternative hypothesis: highest value 29.0253113198714 is an outlier
## 
##  Dixon test for outliers
## 
## data:  subdat$IMC
## Q = 0.21606, p-value = 0.8575
## alternative hypothesis: lowest value 19.2841490138787 is an outlier

En este caso no es posible utilizar este test, aunque hacemos el ejemplo para la variable IMC en los primeros 20 registros.

c) Aplicación del test de Rosner

Este test sirve para identificar multiples datos atípicos en distribuciones de datos medianas y grandes. Asume que cuando se eliminen los datos atípicos la distribución de datos será aproximadamente normal. En el caso propio de este estudio puede ser más adecuado que el Test de Dixon y el de Grubbs por la naturaleza de los datos. (Recuerden que se puede hacer para todas las variables)

A continuación se presentan los valores atípicos relacionados en la variable Edad por el test de Rosner:

## # A tibble: 58 x 29
##    Tiempo              Semestre Asignatura      Dia.Clase Hora.Clase Sexo   Edad
##    <dttm>                 <dbl> <chr>           <chr>     <chr>      <chr> <dbl>
##  1 2016-02-09 08:20:47    12016 Estadística.I   Martes    5:00pm     Feme~    36
##  2 2019-03-05 20:56:40    12019 Bioestadística~ Jueves    10:00am    Feme~    38
##  3 2020-02-14 11:14:01    22018 Estadística.I   Miércoles 7:00pm     Masc~    36
##  4 2021-02-05 19:28:57    12021 Estadística.I   Viernes   7:00pm     Masc~    37
##  5 2023-04-26 19:43:52    12023 Analítica 1-IU~ Miércoles 7:00pm     Masc~    43
##  6 2024-02-24 11:41:10    12024 Caracterizació~ Miércoles 8:00pm     Feme~    44
##  7 2016-02-08 19:52:31    12016 Estadística.II  Sábado    7:00am     Feme~    37
##  8 2016-02-12 20:50:51    12016 Estadística.II  Sábado    7:00am     Feme~    42
##  9 2016-02-13 12:16:00    12016 Estadística.II  Sábado    7:00am     Feme~    36
## 10 2016-02-24 16:50:05    12016 Estadística.I   Jueves    10:00am    Masc~    38
## # i 48 more rows
## # i 22 more variables: Est.Civil <chr>, Rep.Asign. <chr>, Peso <dbl>,
## #   Estatura <dbl>, IMC <dbl>, Cons.Clinica <chr>, Trabajas <chr>, Hnos. <dbl>,
## #   Carrera <chr>, Level <dbl>, Mat.Cursadas <dbl>, Mpio.Resid. <chr>,
## #   Rural.Urbano <chr>, Col.Egreso <chr>, Tipo.Colegio <chr>,
## #   Ubic.Colegio <chr>, Med.Transp. <chr>, Estrato <dbl>, Tiene.Beca. <chr>,
## #   Promedio.Sem <dbl>, Prom.Acum <dbl>, Perdio <lgl>
## [1] 58
## 
## Results of Outlier Test
## -------------------------
## 
## Test Method:                     Rosner's Test for Outliers
## 
## Hypothesized Distribution:       Normal
## 
## Data:                            data$Edad
## 
## Number NA/NaN/Inf's Removed:     16
## 
## Sample Size:                     1469
## 
## Test Statistics:                 R.1 = 5.548862
##                                  R.2 = 5.078847
##                                  R.3 = 4.947326
##                                  R.4 = 4.630889
##                                  R.5 = 4.666774
##                                  R.6 = 4.520939
## 
## Test Statistic Parameter:        k = 6
## 
## Alternative Hypothesis:          Up to 6 observations are not
##                                  from the same Distribution.
## 
## Type I Error:                    5%
## 
## Number of Outliers Detected:     6
## 
##   i   Mean.i     SD.i Value Obs.Num    R.i+1 lambda.i+1 Outlier
## 1 0 22.33220 5.707080    54    1442 5.548862   4.133224    TRUE
## 2 1 22.31063 5.648796    51    1434 5.078847   4.133061    TRUE
## 3 2 22.29107 5.600789    50    1223 4.947326   4.132899    TRUE
## 4 3 22.27217 5.555700    48    1427 4.630889   4.132736    TRUE
## 5 4 22.25461 5.516742    48    1429 4.666774   4.132573    TRUE
## 6 5 22.23702 5.477397    47    1461 4.520939   4.132410    TRUE

c) Aplicación de distancias de Mahalanobis

Es un método que se utiliza para la identificación de datos atípicos. El principio del método consiste en establecer cuáles son los puntos u observaciones más apartadas del centro de gravedad de la distribución de datos. Esta técnica es gráfica y no requiere el cumplimiento estricto de supuestos como la normalidad, la homocedasticidad de los residuales y la independencia. Asi mismo permite el uso de múltiples variables de respuesta e identifica los outliers considerando diferentes categorias asociadas a una variable cualitativa.

El método hace parte del paquete StatR de RWizard y el manual del paquete para ver las funciones y la explicación analítica puede ser consultado en Manual de StatR.

1.4. Imputación de datos para modelado

A continuación se explorara diferentes tipos de métodos para la imputación de datos. La imputación es fundamental para el modelado explicativo y predictivo del fenómeno a estudiar. No se recomienda que la información contenida en la caracterización o linea base de la población (Tabla 1) se haga con bases de datos imputadas, puesto que se corre el riesgo de sesgar los resultados y estos pueden no ser una copia exacta la muestra o población estudiada.

La imputación es importante porque en el análisis multivariado si hace falta un dato de un individuo en una variable, toda la información de ese individuo en el análisis multivariado se pierde.

Los métodos de imputación que se considerarán en este desarrollo son:

a) Imputación con la media b) Imputación por regresión c) Imputación por regresión estocástica d) Imputación múltible e) Imputación por KNN

La idea es aplicar todos los métodos de imputación y de acuerdo a los resultados de la validación determinar cuál de las técnicas presenta los mejores resultados.

a) Imputación con la media

La imputación por la media es una técnica simple para manejar valores perdidos en un conjunto de datos, reemplazándolos con el valor promedio de la variable correspondiente. Por ejemplo, si una columna de datos numéricos tiene valores faltantes, estos se sustituyen por la media de los valores conocidos en esa columna. Esta técnica es fácil de aplicar y rápida de ejecutar, lo que la hace útil en situaciones donde se requiere una solución inmediata.

Sin embargo, la imputación por la media presenta limitaciones, ya que reduce la variabilidad de la variable imputada y puede distorsionar las relaciones entre variables. Como resultado, los análisis posteriores pueden ser menos precisos. A pesar de sus limitaciones, es una opción popular en situaciones exploratorias o cuando el porcentaje de datos faltantes es bajo.

b) Imputación con regresión

La imputación por regresión es una técnica para manejar valores perdidos en un conjunto de datos, utilizando la relación entre variables observadas para estimar los valores faltantes. En este método, se ajusta un modelo de regresión con las variables disponibles, considerando la variable con datos faltantes como dependiente y las demás como predictoras. A partir de este modelo, se predicen los valores faltantes en función de las relaciones observadas.

Este enfoque permite preservar las relaciones lineales entre las variables, asegurando que los datos imputados sean consistentes con el patrón observado. Sin embargo, una limitación es que, al imputar valores predichos directamente, la técnica tiende a subestimar la variabilidad de los datos, ya que no introduce error aleatorio. Aun así, la imputación por regresión es útil en situaciones donde se busca conservar patrones de relación y es común en análisis estadísticos y modelos predictivos.

c) Imputación por regresión estocástica

La imputación por regresión estocástica es una técnica avanzada para manejar valores faltantes en los datos, donde se busca preservar tanto las relaciones lineales entre variables como la variabilidad en los datos imputados. A diferencia de la regresión estándar, que simplemente ajusta una línea de tendencia a los datos observados para imputar valores, la imputación por regresión estocástica introduce un componente aleatorio en el proceso de predicción. Esto permite que los valores imputados reflejen la variabilidad natural del conjunto de datos, evitando la subestimación de la varianza.

El proceso de imputación por regresión estocástica se realiza en varios pasos. Primero, se ajusta un modelo de regresión con las observaciones completas, utilizando la variable con datos faltantes como dependiente y las variables disponibles como predictoras. A continuación, se utiliza este modelo para predecir el valor faltante, pero en lugar de imputar directamente la predicción, se añade un error aleatorio basado en la distribución de los residuos del modelo original. Esto genera un valor imputado que no es determinístico, sino que varía en cada imputación, emulando la incertidumbre inherente a los datos.

La principal ventaja de esta técnica es que conserva la estructura de correlación y la variabilidad del conjunto de datos, ofreciendo imputaciones más realistas. Es especialmente útil en el contexto de imputaciones múltiples, donde se pueden generar varios conjuntos de datos completos para realizar análisis estadísticos robustos.

Sin embargo, esta técnica requiere supuestos de normalidad y puede ser compleja de implementar en grandes conjuntos de datos debido a la necesidad de múltiples modelos de regresión y la generación de errores aleatorios. Aun así, la imputación por regresión estocástica es una herramienta poderosa en situaciones donde la precisión y la preservación de las relaciones entre variables son esenciales para el análisis.

c) Imputación por KNN

La imputación por K-nearest neighbors (KNN) es una técnica de aprendizaje supervisado utilizada para manejar valores perdidos en un conjunto de datos. Su propósito es estimar estos valores faltantes tomando como referencia observaciones similares, en lugar de simplemente eliminar las observaciones incompletas o sustituirlas con valores promedio. Este método es especialmente útil cuando los datos no están distribuidos de manera uniforme y el patrón de datos faltantes puede afectar el análisis y los resultados.

Concepto de KNN Imputation El método KNN funciona identificando los “k” vecinos más cercanos de una observación que contiene datos faltantes y utiliza los valores de estos vecinos para imputar el valor perdido. La proximidad entre las observaciones se determina calculando la distancia entre ellas, siendo la distancia euclidiana la más común. Por ejemplo, si una observación tiene un valor faltante en una característica particular, KNN busca las “k” observaciones más similares en el conjunto de datos y calcula un valor promedio (o moda para datos categóricos) de los vecinos para sustituir el valor perdido.

2. Análisis estadístico de los datos

En esta sección plantearemos una estrategia de análisis de datos partiendo desde el análisis descriptivo bivariado, luego plantearemos una serie de hipótesis relaciondas con las variables de interés y la distribución de la misma (-análisis inferencial-), luego iniciaremos con el análisis multivariado para terminar con sendos modelos explicativos y predictivos.

2.1. Análisis descriptivo de los datos

a) Análisis descriptivo

Iniciaremos con el análisis bivariado, comparando las variables cuantitativas con las variables cualitativas. Para ello lo primero que utilizamos son gráficos de cajas y bigotes para representar la relación entre las variables. Luego planteamos las pruebas de hipótesis que permiten establecer si esa variable afecta o no el Rendimiento académico de los estudiantes, la cuál es nuestra variable de interés.

Figura 7: análisis de cajas y bigotes para el Dia de la Clase, el semestre, el sexo y el estado civil en función del promedio académico. El valor-P de Kuskall y Wallis para el Dia de la clase fue de 0.5432806, para la consideración clinica fue de 0.0020835, para el Sexo fue de 0.0211875 y para el estado civil fue de 0.0508359

b) Análisis de relación entre variables cuantitativas

Para este análisis relacionaremos todas las variables cuantitativas con la variable de respuesta, que en este caso es el promedio semestral de los estudiantes universitarios. Para ello se recomienda el uso de una matriz de correlación de Spearman entre todas las variables.

2.2. Modelos predictivos del Rendimiento Académico

Para predecir el rendimiento académico de los estudiantes universitarios se hará uso de diferentes tipos de modelo. El primero de ellos será la regresión multiple, pára ello se programará el modelo y se haran las validaciones asociadas a si el modelo es adecuado o no para predecir.

a) Modelo de regresión múltiple

##  [1] "Tiempo"       "Semestre"     "Asignatura"   "Dia.Clase"    "Hora.Clase"  
##  [6] "Sexo"         "Edad"         "Est.Civil"    "Rep.Asign."   "Peso"        
## [11] "Estatura"     "IMC"          "Cons.Clinica" "Trabajas"     "Hnos."       
## [16] "Carrera"      "Level"        "Mat.Cursadas" "Mpio.Resid."  "Rural.Urbano"
## [21] "Col.Egreso"   "Tipo.Colegio" "Ubic.Colegio" "Med.Transp."  "Estrato"     
## [26] "Tiene.Beca."  "Promedio.Sem" "Prom.Acum"    "Perdio"

Una manera elegante de ver el efecto de cada una de las variables sobre el rendimiento académico utilizando un modelo de regresión múltiple consiste en proponer un particionamiento jerarquico. A continuación presentaremos el particionamiento jerárquico:

Para determinar si el modelo es adecuado para generar predicciones, es importante estimar los indicadores de ajuste y predicción del modelo lineal. En este caso estimaremos la homocedasticidad, la normalidad de los residuales, la independencia y la autocorrelación entre las variables independientes bajo el criterio de varianza inflada.

b) Modelo de regresión logístisca

Este es un modelo lineal generalizado que permite estimar las variables asociadas con el bajo Rendimiento Académico de los estudiantes de varias cohortes de ingreso. En este primer ejercicio estimaremos la regresión logística utilizando las variables que eventualmente tendrian un efecto significativo sobre el hecho de haber tenido bajo RA y aquellos que no lo tuvieron.

##    [1] 1 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0
##   [38] 0 0 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
##   [75] 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
##  [112] 0 0 1 0 1 0 1 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 0
##  [149] 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 1 0 1 0 0 1 1 1 1 1 0
##  [186] 1 1 1 1 1 0 1 0 1 1 0 1 0 1 0 0 1 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0
##  [223] 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1 1 1 1 0 1 1 0 1 0 0 0 0 1 0 1 0 0 0 1 1
##  [260] 0 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0 0 0 0 1 1 1 0 0 0 1 1 0 1 0 1 0 0 0 1 1
##  [297] 0 0 1 1 1 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 0
##  [334] 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 1 1 0 1 0 0 0 1 1 0 0 1 0
##  [371] 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
##  [408] 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
##  [445] 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 1 1 0 0 1 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 0 0
##  [482] 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
##  [519] 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1
##  [556] 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
##  [593] 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0
##  [630] 1 1 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
##  [667] 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
##  [704] 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0
##  [741] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1
##  [778] 1 1 0 1 1 0 1 1 1 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 0 1
##  [815] 0 0 0 1 1 1 0 1 1 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1
##  [852] 1 0 1 1 1 0 1 1 1 0 1 1 1 0 0 1 1 0 1 1 1 0 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1
##  [889] 1 1 0 1 1 1 0 1 1 0 1 0 0 1 0 0 1 0 0 1 1 0 1 0 0 0 0 0 1 0 1 1 1 1 1 0 0
##  [926] 0 0 1 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 0 0 1 1 0 0 0 0 0 1
##  [963] 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 1 0 1 0 0
## [1000] 0 1 0 0 1 0 1 1 0 0 0 0 0 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 1 0 0 1 0 0 0 0
## [1037] 1 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 1 1 1 0 0 0 1 1 0 1 1 1 0 1 0 1 0 0 0 0 0
## [1074] 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0
## [1111] 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 1 1 1 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1
## [1148] 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 0
## [1185] 1 0 0 0 0 1 1 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 0 1 0 0 0 1 1
## [1222] 0 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 1 0 0 0 1 1 1 0 0 1 0 1 0 1 1 0 0 1
## [1259] 0 1 0 1 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0
## [1296] 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 0
## [1333] 0 1 0 1 1 0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 1 0 0 0
## [1370] 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 1 1 1 0 0 0 0 1 0
## [1407] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
## [1444] 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
## [1481] 0 0 0 0 0
## Warning: package 'caret' was built under R version 4.3.3
## Warning: package 'lattice' was built under R version 4.3.0
## Start:  AIC=1079.82
## Perdio ~ Semestre + Sexo + Edad + Cons.Clinica + Trabajas + Level + 
##     Mat.Cursadas + Rural.Urbano + Tipo.Colegio + Med.Transp. + 
##     Estrato + Tiene.Beca.
## 
##                Df Deviance    AIC
## - Cons.Clinica  5   1035.4 1073.4
## - Tiene.Beca.   1   1032.0 1078.0
## - Rural.Urbano  1   1032.0 1078.0
## - Edad          1   1032.1 1078.1
## - Tipo.Colegio  1   1032.6 1078.6
## - Med.Transp.   5   1041.0 1079.0
## - Sexo          1   1033.2 1079.2
## <none>              1031.8 1079.8
## - Estrato       1   1033.8 1079.8
## - Level         1   1036.6 1082.6
## - Mat.Cursadas  1   1037.9 1083.9
## - Semestre      1   1047.4 1093.4
## - Trabajas      4   1062.7 1102.7
## 
## Step:  AIC=1073.36
## Perdio ~ Semestre + Sexo + Edad + Trabajas + Level + Mat.Cursadas + 
##     Rural.Urbano + Tipo.Colegio + Med.Transp. + Estrato + Tiene.Beca.
## 
##                Df Deviance    AIC
## - Rural.Urbano  1   1035.5 1071.5
## - Tiene.Beca.   1   1035.6 1071.6
## - Edad          1   1035.8 1071.8
## - Tipo.Colegio  1   1036.0 1072.0
## - Med.Transp.   5   1044.7 1072.7
## - Sexo          1   1036.8 1072.8
## - Estrato       1   1037.2 1073.2
## <none>              1035.4 1073.4
## - Level         1   1040.0 1076.0
## - Mat.Cursadas  1   1041.3 1077.3
## - Semestre      1   1050.7 1086.7
## - Trabajas      4   1065.8 1095.8
## 
## Step:  AIC=1071.48
## Perdio ~ Semestre + Sexo + Edad + Trabajas + Level + Mat.Cursadas + 
##     Tipo.Colegio + Med.Transp. + Estrato + Tiene.Beca.
## 
##                Df Deviance    AIC
## - Tiene.Beca.   1   1035.7 1069.7
## - Edad          1   1035.9 1069.9
## - Tipo.Colegio  1   1036.1 1070.1
## - Med.Transp.   5   1044.7 1070.7
## - Sexo          1   1036.8 1070.8
## - Estrato       1   1037.2 1071.2
## <none>              1035.5 1071.5
## - Level         1   1040.1 1074.1
## - Mat.Cursadas  1   1041.5 1075.5
## - Semestre      1   1050.7 1084.7
## - Trabajas      4   1065.9 1093.9
## 
## Step:  AIC=1069.73
## Perdio ~ Semestre + Sexo + Edad + Trabajas + Level + Mat.Cursadas + 
##     Tipo.Colegio + Med.Transp. + Estrato
## 
##                Df Deviance    AIC
## - Edad          1   1036.2 1068.2
## - Tipo.Colegio  1   1036.5 1068.5
## - Sexo          1   1036.9 1068.9
## - Med.Transp.   5   1045.1 1069.1
## - Estrato       1   1037.4 1069.4
## <none>              1035.7 1069.7
## - Level         1   1040.3 1072.3
## - Mat.Cursadas  1   1042.2 1074.2
## - Semestre      1   1051.4 1083.4
## - Trabajas      4   1065.9 1091.9
## 
## Step:  AIC=1068.19
## Perdio ~ Semestre + Sexo + Trabajas + Level + Mat.Cursadas + 
##     Tipo.Colegio + Med.Transp. + Estrato
## 
##                Df Deviance    AIC
## - Tipo.Colegio  1   1036.9 1066.9
## - Sexo          1   1037.4 1067.4
## - Med.Transp.   5   1045.7 1067.7
## - Estrato       1   1037.7 1067.7
## <none>              1036.2 1068.2
## - Level         1   1040.7 1070.7
## - Mat.Cursadas  1   1043.5 1073.5
## - Semestre      1   1051.7 1081.7
## - Trabajas      4   1070.7 1094.7
## 
## Step:  AIC=1066.93
## Perdio ~ Semestre + Sexo + Trabajas + Level + Mat.Cursadas + 
##     Med.Transp. + Estrato
## 
##                Df Deviance    AIC
## - Estrato       1   1038.0 1066.0
## - Sexo          1   1038.1 1066.1
## - Med.Transp.   5   1046.5 1066.5
## <none>              1036.9 1066.9
## - Level         1   1041.4 1069.4
## - Mat.Cursadas  1   1044.7 1072.7
## - Semestre      1   1052.3 1080.3
## - Trabajas      4   1072.8 1094.8
## 
## Step:  AIC=1066.01
## Perdio ~ Semestre + Sexo + Trabajas + Level + Mat.Cursadas + 
##     Med.Transp.
## 
##                Df Deviance    AIC
## - Sexo          1   1039.2 1065.2
## - Med.Transp.   5   1047.2 1065.2
## <none>              1038.0 1066.0
## - Level         1   1042.0 1068.0
## - Mat.Cursadas  1   1045.5 1071.5
## - Semestre      1   1053.7 1079.7
## - Trabajas      4   1074.0 1094.0
## 
## Step:  AIC=1065.19
## Perdio ~ Semestre + Trabajas + Level + Mat.Cursadas + Med.Transp.
## 
##                Df Deviance    AIC
## <none>              1039.2 1065.2
## - Med.Transp.   5   1049.6 1065.6
## - Level         1   1043.8 1067.8
## - Mat.Cursadas  1   1047.8 1071.8
## - Semestre      1   1054.1 1078.1
## - Trabajas      4   1074.9 1092.9
## 
## Call:  glm(formula = Perdio ~ Semestre + Trabajas + Level + Mat.Cursadas + 
##     Med.Transp., family = binomial, data = train_data)
## 
## Coefficients:
##                   (Intercept)                       Semestre  
##                    -6.553e-01                      5.810e-05  
##          TrabajasMedio.tiempo                     TrabajasNo  
##                    -2.133e-01                     -1.515e-01  
##               TrabajasPartime        TrabajasTiempo.completo  
##                     1.252e-01                     -1.275e+00  
##                         Level                   Mat.Cursadas  
##                     7.702e-02                     -1.443e-01  
##          Med.Transp.Caminando    Med.Transp.Carro.particular  
##                     1.091e-01                      3.096e-01  
##               Med.Transp.Moto              Med.Transp.Remoto  
##                     4.925e-01                     -1.299e+01  
## Med.Transp.Transporte.publico  
##                    -9.980e-02  
## 
## Degrees of Freedom: 841 Total (i.e. Null);  829 Residual
## Null Deviance:       1103 
## Residual Deviance: 1039  AIC: 1065
## [1] TRUE
##      Tiempo                       Semestre      Asignatura       
##  Min.   :2016-02-03 12:08:44   Min.   :12016   Length:1485       
##  1st Qu.:2016-03-17 22:59:46   1st Qu.:12016   Class :character  
##  Median :2017-08-24 12:31:19   Median :12019   Mode  :character  
##  Mean   :2018-07-04 19:34:33   Mean   :15816                     
##  3rd Qu.:2020-07-31 19:02:23   3rd Qu.:22017                     
##  Max.   :2024-08-21 19:31:06   Max.   :22025                     
##                                                                  
##   Dia.Clase          Hora.Clase            Sexo                Edad     
##  Length:1485        Length:1485        Length:1485        Min.   :10.0  
##  Class :character   Class :character   Class :character   1st Qu.:18.0  
##  Mode  :character   Mode  :character   Mode  :character   Median :20.0  
##                                                           Mean   :22.3  
##                                                           3rd Qu.:25.0  
##                                                           Max.   :54.0  
##                                                                         
##   Est.Civil          Rep.Asign.             Peso           Estatura    
##  Length:1485        Length:1485        Min.   : 35.00   Min.   :1.380  
##  Class :character   Class :character   1st Qu.: 55.00   1st Qu.:1.600  
##  Mode  :character   Mode  :character   Median : 63.00   Median :1.680  
##                                        Mean   : 64.44   Mean   :1.675  
##                                        3rd Qu.: 72.00   3rd Qu.:1.740  
##                                        Max.   :120.00   Max.   :1.940  
##                                                                        
##       IMC        Cons.Clinica         Trabajas             Hnos.       
##  Min.   :15.23   Length:1485        Length:1485        Min.   : 0.000  
##  1st Qu.:20.76   Class :character   Class :character   1st Qu.: 1.000  
##  Median :22.49   Mode  :character   Mode  :character   Median : 2.000  
##  Mean   :22.86                                         Mean   : 1.797  
##  3rd Qu.:24.61                                         3rd Qu.: 2.000  
##  Max.   :40.01                                         Max.   :14.000  
##                                                        NA's   :20      
##    Carrera              Level         Mat.Cursadas    Mpio.Resid.       
##  Length:1485        Min.   : 1.000   Min.   : 1.000   Length:1485       
##  Class :character   1st Qu.: 2.000   1st Qu.: 5.000   Class :character  
##  Mode  :character   Median : 3.000   Median : 6.000   Mode  :character  
##                     Mean   : 3.484   Mean   : 5.856                     
##                     3rd Qu.: 4.000   3rd Qu.: 7.000                     
##                     Max.   :12.000   Max.   :10.000                     
##                     NA's   :9        NA's   :2                          
##  Rural.Urbano        Col.Egreso        Tipo.Colegio       Ubic.Colegio      
##  Length:1485        Length:1485        Length:1485        Length:1485       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##  Med.Transp.           Estrato    Tiene.Beca.         Promedio.Sem 
##  Length:1485        Min.   :1.0   Length:1485        Min.   :0.00  
##  Class :character   1st Qu.:2.0   Class :character   1st Qu.:3.70  
##  Mode  :character   Median :3.0   Mode  :character   Median :3.85  
##                     Mean   :2.7                      Mean   :3.84  
##                     3rd Qu.:3.0                      3rd Qu.:4.00  
##                     Max.   :5.0                      Max.   :4.80  
##                                                                    
##    Prom.Acum         Perdio        Edad_imp        Peso_imp      
##  Min.   :0.000   Min.   :0.0000   Mode :logical   Mode :logical  
##  1st Qu.:3.700   1st Qu.:0.0000   FALSE:1469      FALSE:1435     
##  Median :3.900   Median :0.0000   TRUE :16        TRUE :50       
##  Mean   :3.858   Mean   :0.3024                                  
##  3rd Qu.:4.100   3rd Qu.:1.0000                                  
##  Max.   :5.000   Max.   :1.0000                                  
##                                                                  
##  Estatura_imp     IMC_imp        Estrato_imp     Promedio.Sem_imp
##  Mode :logical   Mode :logical   Mode :logical   Mode :logical   
##  FALSE:1463      FALSE:1430      FALSE:1485      FALSE:930       
##  TRUE :22        TRUE :55                        TRUE :555       
##                                                                  
##                                                                  
##                                                                  
##                                                                  
##  Prom.Acum_imp  
##  Mode :logical  
##  FALSE:902      
##  TRUE :583      
##                 
##                 
##                 
## 
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max.      NA's 
## 0.0000005 0.2441080 0.3424542 0.3520128 0.4398035 0.7313301         3
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0  92  24
##          1 122  56
##                                          
##                Accuracy : 0.5034         
##                  95% CI : (0.4448, 0.562)
##     No Information Rate : 0.7279         
##     P-Value [Acc > NIR] : 1              
##                                          
##                   Kappa : 0.0939         
##                                          
##  Mcnemar's Test P-Value : 9.925e-16      
##                                          
##             Sensitivity : 0.4299         
##             Specificity : 0.7000         
##          Pos Pred Value : 0.7931         
##          Neg Pred Value : 0.3146         
##              Prevalence : 0.7279         
##          Detection Rate : 0.3129         
##    Detection Prevalence : 0.3946         
##       Balanced Accuracy : 0.5650         
##                                          
##        'Positive' Class : 0              
## 

Por último vamos a generar varios modelos predictivos que me permitan predecir si un estudiante tiene riesgo de perder o no una asignatura cob base en los datos utilizados.

## 
## Attaching package: 'e1071'
## The following objects are masked from 'package:PerformanceAnalytics':
## 
##     kurtosis, skewness
## The following objects are masked from 'package:EnvStats':
## 
##     kurtosis, skewness
##    [1] Si Si No Si No Si Si No No No No No No No No No No No Si No No No No Si
##   [25] No No No No No Si No No No No No No No No No Si Si Si No No No No No No
##   [49] No No Si Si No No No No No No No No No No No No No No No No No No No No
##   [73] No No Si No Si No No No No No No No No No No No No No No No No No No No
##   [97] No No No No No No No No No No No No No No No No No Si No Si No Si Si Si
##  [121] Si No No No No No Si Si No No No No No No No No No No No No Si Si No No
##  [145] No Si Si No No Si No No No No No No No No No No No No No No Si Si No No
##  [169] No Si No No Si No Si No Si No No Si Si Si Si Si No Si Si Si Si Si No Si
##  [193] No Si Si No Si No Si No No Si Si No No No Si No No Si No No No Si No No
##  [217] No No No No No No No No No No No No Si No No No No Si Si No No No Si Si
##  [241] Si Si No Si Si No Si No No No No Si No Si No No No Si Si No Si No No Si
##  [265] No No Si No No Si Si Si No Si Si No No No No Si Si Si No No No Si Si No
##  [289] Si No Si No No No Si Si No No Si Si Si Si No Si No No Si No No No No Si
##  [313] No No No No No No Si Si No Si No No No No No No No No Si No No Si No No
##  [337] Si No No No No No No No No No Si No Si No No No No No No Si Si Si Si No
##  [361] Si No No No Si Si No No Si No No Si No No No No Si No No No No Si No No
##  [385] No No Si No No No No No Si Si Si No No No No No No No No No No No No No
##  [409] No No No Si No No No No No No Si Si No No No Si No No No No No No No No
##  [433] No No No No No No No Si Si No No No No No Si No No No No No Si Si No No
##  [457] No Si No Si Si No No Si No No Si No No No No Si No No No Si No Si No No
##  [481] No No No No No No No Si No No No No No No No No No No No No No No No No
##  [505] No No No Si No No No No No No No No No No No No No No No No No No No No
##  [529] Si No No Si Si No No Si No No No Si Si Si No No No No No No No No No No
##  [553] No Si Si Si No No Si No No No No Si No No No No No No No No No No No No
##  [577] No No No Si No No No No No No No No No No No No No No No No No No No No
##  [601] Si No No No No No No No No Si No No No No No Si Si No No No No No No No
##  [625] No Si No No No Si Si No No No No No Si No No Si No Si No No No No No No
##  [649] No No No No No No No No No No No No No No No Si Si No No No No No No No
##  [673] No No Si No No No Si Si No No No No No No Si No No No No No No No No No
##  [697] Si No No No No No No No No No Si No No No No No No No No No No No Si No
##  [721] No Si No No No No Si No No Si No No Si No No No No No Si No No No No No
##  [745] No No No No No No No No No No Si No No No No No Si No Si Si Si Si No No
##  [769] No Si No Si Si Si Si No Si Si Si No Si Si No Si Si Si Si Si Si No No Si
##  [793] Si No Si Si Si Si Si Si Si No No Si Si No No Si No Si No No No Si No No
##  [817] No Si Si Si No Si Si No Si No Si No Si Si Si No No No Si No Si Si Si Si
##  [841] Si Si Si Si Si Si Si No No Si Si Si No Si Si Si No Si Si Si No Si Si Si
##  [865] No No Si Si No Si Si Si No No Si Si Si Si Si No Si Si No Si Si Si Si Si
##  [889] Si Si No Si Si Si No Si Si No Si No No Si No No Si No No Si Si No Si No
##  [913] No No No No Si No Si Si Si Si Si No No No No Si No No No Si Si Si No No
##  [937] Si Si Si Si Si Si Si Si Si No Si No Si No Si No No No Si Si No No No No
##  [961] No Si Si No No No No No No No No No No No No No No No No No No No No No
##  [985] No No No Si No Si No No No Si Si No Si No No No Si No No Si No Si Si No
## [1009] No No No No Si Si Si Si No Si Si Si Si No No Si Si Si No No Si No No Si
## [1033] No No No No Si No No Si No No No No No No No Si Si No No No Si Si Si No
## [1057] No No Si Si No Si Si Si No Si No Si No No No No No No No No No No No No
## [1081] No No No Si No Si No No No No No No Si Si No No No No No No No Si Si Si
## [1105] Si No No No No No No Si No No Si Si No No No Si Si Si No Si Si Si Si Si
## [1129] Si No Si No Si Si No No No No No No No No No No No Si Si No No No No No
## [1153] No Si No Si No No No No Si No No Si No No Si No No No No Si Si Si Si No
## [1177] Si No Si No Si No Si No Si No No No No Si Si Si No No Si Si No Si No No
## [1201] No No No No No No Si Si No Si Si Si Si Si No Si No No No Si Si No No Si
## [1225] No No No No No No Si No No Si No Si No No Si No Si No No No Si Si Si No
## [1249] No Si No Si No Si Si No No Si No Si No Si No Si No No Si No No No Si No
## [1273] No No No No No No No No No No No Si No No Si No No No No No No No No No
## [1297] No Si No No No No Si No No No No Si No No Si Si No No No No Si No No No
## [1321] Si No No Si No No No No Si No Si No No Si No Si Si No Si Si Si No No No
## [1345] No No No No No Si No No No No No No Si Si Si Si No No No No No Si No No
## [1369] No Si Si Si No No No No No No No No Si No No No No No Si Si No No No Si
## [1393] No No No Si No Si Si Si No No No No Si No No No No No No No No No No No
## [1417] No No No No Si No No No No No Si Si No No No No No No No No Si No No No
## [1441] No No No No No No No No No No No No Si No No No No No No No No No No No
## [1465] No No No No No No No Si No No No No No No No No No No No No No
## Levels: No Si
## # weights:  101
## initial  value 391.876290 
## final  value 390.262625 
## converged
## Setting levels: control = No, case = Si
## Setting direction: controls < cases
## Setting levels: control = No, case = Si
## Warning in roc.default(real, pred): Deprecated use a matrix as predictor.
## Unexpected results may be produced, please pass a numeric vector.
## Setting direction: controls < cases
## Setting levels: control = No, case = Si
## Setting direction: controls < cases
## Setting levels: control = No, case = Si
## Setting direction: controls > cases

## Setting levels: control = No, case = Si
## Setting direction: controls < cases
## Setting levels: control = No, case = Si
## Setting direction: controls > cases
## Setting direction: controls < cases
## Warning in roc.default(test$Perdio, pred_nn, levels = c("No", "Si")):
## Deprecated use a matrix as predictor. Unexpected results may be produced,
## please pass a numeric vector.
## Setting direction: controls < cases
## Setting direction: controls < cases
## Setting direction: controls > cases
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## i Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.