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
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.
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
url <- "../funciones/funciones para Clustering Jerarquico.R"# Local
# url <- "PENDIENTE" WEB
source(url)
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 |
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