Contexto

El conjunto de datos corresponde a un escenario académico de nivel superior. Cada registro representa a un estudiante y contiene información relacionada con su desempeño escolar, hábitos de estudio, actividades extraescolares, uso del tiempo, características demográficas y condiciones económicas.

Debido a que las variables son de tipo numérico y categórico, el conjunto resulta adecuado para aplicar clustering jerárquico con distancia de Gower.

Las variables del conjunto de datos:

El caso de estudio puede encontrar en el portal rpubs.com en https://rpubs.com/rpizarrog/1449170

Los datos pueden descargarse desde github.com en https://raw.githubusercontent.com/rpizarrog/Libro-Aprendizaje-Automatico.-Casos-de-Estudio-con-R-y-Python/refs/heads/main/datos/datos_estudiantes_superior_clustering_jerarquico_1000.csv

Las funciones se encuentran en PENDIENTE

Objetivo

Implementar modelo de agrupación de datos Clustering Jerárquico para identificar perfiles de estudiantes con características similares, los cuales pueden apoyar la toma de decisiones en tutorías, seguimiento académico, programas de becas, actividades deportivas, acompañamiento escolar y estrategias de permanencia.

Descripción

Cargar librerías

library(readr)        # Para conjuntos de datos
library(ggplot2)      # Gráficos
library(patchwork)    # Para tablas Word
library (psych)       # Para describir datos
library(scales)       # PAra graficos y escalas

library(cluster) # Distancia de Gower, agnes(), diana()
library(factoextra) # Visualización de dendrogramas 
library(ggplot2) # Gráficos generales 
library(dendextend) # Personalización de dendrogramas

Cargar funciones

url <- "../funciones/funciones para Clustering Jerarquico.R"# Local
# url <- "PENDIENTE" WEB
source(url)

Cargar datos

Se cargan los datos orioginales de los estudiantes quitando la primera y la última columna que no son de interés para el modelo y dejar en variable llamada datos; se visualzian los primeros y últimos registros y las primeras y últimas cuatros variables.

# url <- "../datos/datos_estudiantes_superior_clustering_jerarquico_1000.csv"  # Local
url <- "https://raw.githubusercontent.com/rpizarrog/Libro-Aprendizaje-Automatico.-Casos-de-Estudio-con-R-y-Python/refs/heads/main/datos/datos_estudiantes_superior_clustering_jerarquico_1000.csv" # WEB
datos_originales <- f_cargar_datos(url)
variables <- c("edad","genero","carrera","semestre","promedio","creditos","asistencia","estudio", "videojuegos","deporte","dormir", "trabajo", "ingresos","condicion", "modalidad", "extra_escolar", "seleccionado", "transporte","traslado", "internet", "tutorias", "beca")

datos <- datos_originales[,variables]
f_visualizar_head_tail_reducido_word(datos)

edad

genero

carrera

semestre

...

traslado

internet

tutorias

beca

20

Femenino

Civil

4

...

64

Bueno

NO

NO

18

Femenino

Administracion

1

...

27

Bueno

NO

NO

23

Femenino

Administracion

7

...

53

Limitado

SI

SI

23

Femenino

Sistemas

8

...

12

Bueno

NO

NO

18

Masculino

Mecatronica

5

...

38

Bueno

NO

SI

20

Femenino

Civil

6

...

9

Limitado

SI

NO

...

...

...

...

...

...

...

...

...

24

Masculino

Sistemas

2

...

10

Limitado

NO

NO

24

Femenino

Civil

7

...

43

Bueno

NO

NO

18

Femenino

Industrial

3

...

15

Bueno

NO

SI

21

Femenino

Mecatronica

6

...

62

Bueno

SI

NO

24

Femenino

Sistemas

7

...

37

Bueno

SI

SI

23

Femenino

Industrial

5

...

31

Regular

SI

NO

Estadísticos descriptivos

Se presentan los estadísticos descriptivos para las variables numéricas

variables_numericas <- c("edad","promedio","creditos","asistencia","estudio", "videojuegos","deporte","dormir", "trabajo", "ingresos")
f_describir_datos(datos[, variables_numericas])
## $describe
##             vars    n     mean      sd median  trimmed     mad  min   max range
## edad           1 1000    21.15    2.10     21    21.09    2.97   18    27     9
## promedio       2 1000    77.20    9.36     77    77.19   10.38   50   100    50
## creditos       3 1000   187.94   76.04    187   187.72   78.58    0   380   380
## asistencia     4 1000    81.50   10.85     82    82.01   11.86   41   100    59
## estudio        5 1000     9.64    5.22      9     9.27    4.45    0    29    29
## videojuegos    6 1000    10.42    7.69      8     9.59    5.93    0    35    35
## deporte        7 1000     3.71    2.88      3     3.43    2.97    0    16    16
## dormir         8 1000     6.52    1.11      7     6.57    1.48    4    10     6
## trabajo        9 1000    11.42   10.44      9    10.07   10.38    0    50    50
## ingresos      10 1000 17091.89 7531.45  16863 16861.87 7413.74 3000 47096 44096
##              skew kurtosis     se
## edad         0.23    -0.64   0.07
## promedio     0.03    -0.47   0.30
## creditos     0.04    -0.34   2.40
## asistencia  -0.44    -0.08   0.34
## estudio      0.68     0.34   0.17
## videojuegos  0.90    -0.01   0.24
## deporte      0.91     0.68   0.09
## dormir      -0.27    -0.25   0.04
## trabajo      0.97     0.26   0.33
## ingresos     0.38     0.22 238.17
## 
## $structure
## [1] "'data.frame':\t1000 obs. of  10 variables:\n $ edad       : num  20 18 23 23 18 20 24 23 18 19 ...\n $ promedio   : num  90 72 77 90 86 67 90 66 73 78 ...\n $ creditos   : num  133 36 255 278 206 257 12 259 377 133 ...\n $ asistencia : num  90 76 64 94 82 74 100 62 79 65 ...\n $ estudio    : num  16 7 2 17 12 2 25 5 9 12 ...\n $ videojuegos: num  5 7 21 8 4 10 1 17 16 8 ...\n $ deporte    : num  9 6 1 12 8 0 8 1 0 6 ...\n $ dormir     : num  8 7 6 7 8 6 7 4 4 6 ...\n $ trabajo    : num  0 19 34 9 13 27 0 26 12 27 ...\n $ ingresos   : num  16265 24195 10118 21557 18141 ..."

Las variables categóricas se hacen de tipo factor con la finalidad de conocer su frecuencia.

datos <- f_convertir_factor(datos)
f_summary_factores(datos)
##            genero              carrera    condicion        modalidad  
##  Femenino     :468   Administracion:196   Alta :152   Hibrida   :267  
##  Masculino    :511   Civil         :118   Baja :332   Presencial:592  
##  No especifica: 21   Electronica   :100   Media:516   Virtual   :141  
##                      Industrial    :187                               
##                      Mecatronica   :152                               
##                      Sistemas      :247                               
##       extra_escolar seleccionado     transporte      internet   tutorias
##  Arte        : 97   NO:775       Auto     :331   Bueno   :569   NO:627  
##  Cultural    : 78   SI:225       Bicicleta: 86   Limitado:107   SI:373  
##  Deporte     :173                Caminando:171   Regular :324           
##  Ninguna     :523                Publico  :412                          
##  Voluntariado:129                                                       
##                                                                         
##  beca    
##  NO:603  
##  SI:397  
##          
##          
##          
## 
resultado_frecuencias <- f_frecuencias(
  datos = datos, ncol=2)

resultado_frecuencias$grafico

Desarrollo

Interprtación del caso