Entre los principales resultados investigativos sobre el rendimiento académico a nivel internacional, Santillan Wilson et al. (2022) encontraron una correlación positiva entre el desempeño académico de los estudiantes y el nivel académico de los cuidadores sin ser este el único factor influyente. En este sentido, Suleiman et al. (2024) advierten que la mayoría de las investigaciones existentes se basan en modelos analíticos simplificados, lo que impide capturar adecuadamente la dependencia mutua entre las variables familiares y académicas, así como los efectos de mediación y moderación que se presentan en redes complejas de interacción. Esta limitación y otras asociadas a la herramienta de análisis estadístico reduce la precisión en la identificación de los mecanismos que explican el modo en que los factores familiares repercuten en el desempeño escolar.
Rodríguez-Rodríguez y Guzmán (2021) también señalan la escasez de estudios que combinen variables no cognitivas del estudiante con variables sociofamiliares para explicar cómo afectan el rendimiento académico, especialmente en estudiantes caracrterizados con riesgo social; como insumo paara la formulación de estrategias preventivas sociales y familiares. En la misma línea, Martínez Chairez et al. (2020) subraya la necesidad de desarrollar investigaciones que permitan intervenir las relaciones entre escuela y familia para mejorar el rendimiento académico y de manera similar, en Ecuador Mera y Sanmartín (2024) afirman que factores personales y familiares asociados al estudiante influyen en su éxito académico y particularmente en el desarrollo de habilidades socioemocionales, por lo que profundizar en el impacto de los factores familiares resulta importante para comprender el fenómeno del rendimiento académico y brindar estrategias para gestionarlo desde los contextos educativos.
En el contexto Colombiano, Zalazar (2019) en su revisión de antecedentes identifica como una prioridad, indagar sobre la relación entre las habilidades socioemocionales de estudiantes y padres de familia como factores determinantes del rendimiento académico.Mientras que Rebolledo-Mejía (2021), proponen que futuras investigaciones incorporen al modelo de rendimiento académico, metodologías de enseñanza, rasgos de personalidad, estilos de aprendizaje y el proyecto de vida. Sin embargo, aunque se observa un interés por estudiar variables asociadas al estudiante para ampliar el modelo de rendimiento académico, es necesario comprender y fortalecer otros factores familiares y sociales, que afectan incluso las variables personales.
En el contexto local, existe una preocupación administrativa por la reprobación y la deserción como consecuencia del bajo desempeño, en ese sentido, la discusión se instala en la evaluación y las prácticas pedagógicas, pero no de manera integrada a factores familiares. Esta ausencia de evidencia empírica le dificulta a la institucionalidad la formulación de estrategias pedagógicas y de acompañamiento familiar, ajustadas a las realidades socioculturales de la comunidad educativa. Este hecho resulta relevante para la investigación, ya que los factores o variables sociofamiliares pueden llevar a un estudiante al fracaso escolar.
Por consiguiente, este estudio se centra en la comprensión de cómo los factores familiares, en sus diversas configuraciones, se relacionan con el rendimiento académico de los estudiantes de básica secundaria en este contexto institucional. Abordar este problema permitirá generar evidencia científica relevante para orientar acciones de apoyo familiar, fortalecer las prácticas educativas y contribuir al cierre de las brechas conceptuales y metodológicas identificadas en la literatura especializada. En consecuencia, se plantea como pregunta de investigación ¿Cuál es la relación entre el rendimiento académico y los factores familiares en estudiantes de básica secundaria de la institución educativa pública Gabriel Plazas del municipio de Villavieja en el departamento del Huila durante el primer semestre de 2025?
\(H_0\) :El grado de correlación entre los factores familiares y el rendimiento académico de los estudiantes de básica secundaria de la institución educativa Gabriel Plazas del municipio de Villavieja, departamento del Huila, durante el primer semestre de 2025, no es estadísticamente significativo.
\(H_1\): El grado de correlación entre los factores familiares y el rendimiento académico de los estudiantes de básica secundaria de la institución educativa Gabriel Plazas del municipio de Villavieja, departamento del Huila, durante el primer semestre de 2025, es estadísticamente significativo.
En esta investigación se prestende establecer el grado de correlación entre los factores familiares y el riesgo de reprobación. En este sentido, la variable dependiente es el riesgo de reprobación y las variables independientes estas asociadas a los factores familiares. Este hecho, muestra de entrada la necesidad de un modelo de regresión múltiple.
Riesgo de reprobación: Esta variable muestra el porcentaje de la valoración mínima de diferentes factores (personales y familiares) necesarios para aprobar las asignaturas del currículo en un periodo determinado.
En la tabla 1, se referencian las variables asociadas a cada factor sociofamiliar que afecta el rendimiento académico según la revisión de antecedentes.
Tabla 1
Variables de estudio
library(knitr)
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.5.3
tabla_variables <- data.frame(
Factor = c(
rep("Participación parental",5),
rep("Apoyo familiar",4),
rep("Formación socioemocional",3),
rep("Tiempo y relación en familia",4)
),
Variable = c(
"Motivadores personales",
"Eficacia parental",
"Mecanismos de participación",
"Percepciones del estudiante sobre los mecanismos de participación",
"Tipo de comunicación familia-escuela",
"Apoyo al contenido",
"Apoyo a la autonomía",
"Control parental",
"Frecuencia del apoyo",
"Apoyo emocional",
"Motivación al logro",
"Estimulación de la confianza",
"Tipos de familia",
"Estilos de crianza",
"Espacios de ocio en familia",
"Estrategias de comunicación familia-estudiante"
),
Codigo = c(
"Mp","Efp","Mpa","PMpa","Tcfes",
"Ac","Aau","Cp","Fa",
"Ae","Mol","Esc",
"Tf","Esc","Esof","Escfe"
)
)
tabla_variables %>%
kable(caption = "Tabla 1. Variables de estudio", align = "l") %>%
kable_styling(full_width = FALSE) %>%
collapse_rows(columns = 1, valign = "top")
| Factor | Variable | Codigo |
|---|---|---|
| Participación parental | Motivadores personales | Mp |
| Eficacia parental | Efp | |
| Mecanismos de participación | Mpa | |
| Percepciones del estudiante sobre los mecanismos de participación | PMpa | |
| Tipo de comunicación familia-escuela | Tcfes | |
| Apoyo familiar | Apoyo al contenido | Ac |
| Apoyo a la autonomía | Aau | |
| Control parental | Cp | |
| Frecuencia del apoyo | Fa | |
| Formación socioemocional | Apoyo emocional | Ae |
| Motivación al logro | Mol | |
| Estimulación de la confianza | Esc | |
| Tiempo y relación en familia | Tipos de familia | Tf |
| Estilos de crianza | Esc | |
| Espacios de ocio en familia | Esof | |
| Estrategias de comunicación familia-estudiante | Escfe |
Sin embargo, aún no tenemos datos reales sobre estas variables, por tanto se usará una base de datos similar con variables que denominamos de referencia para este ejecicio académico. Estas variables de referencia provienen del estudio: Key factors influencing students’ academic performance reportado por Suleiman et al,. (2024)
Exam_Score: o Nota de examen Esta variable muestra la valoración mínima de diferentes factores (personales y familiares) necesarios para aprobar las asignaturas del currículo en un periodo determinado.
Inicialmente se usará como varable independiente Hours_Studied u horas de estudio. Sin embargo, en el modelo múltiple se incorporaran las siguientes variables:
Hours_Studied: Horas de estudio.
Tutoring_Sessions: Sesiones de tutoria.
Internet_Access: Acceso a internet.
Nuestro modelo se ajusta a un modelo de regresión logístico, ya que la variable dependiente evalúa el riesgo de reprobar o no. Es decir, el modelo pretende predecir la probabilidad de reprobar o aprobar un currículo.
Hours_Studied: Horas de estudio. Esta variables es cuantitativa continua y se mide en horas.
Tutoring_Sessions: Sesiones de tutoria. Esta variable es cuantitativa y mide en horas las sesiones adicionales al horario escolar, dedicadas a estudiar para el exámen.
Internet_Access: Acceso a internet. Esta variable esta asociada a las herramientas y recursos a las que tiene acceso el estudiante, es una variable cualitativa nominal dicatomica.
# Cargar la base de datos
rdlogis <- read.csv("C:/modelosderegresion/Rendimiento.csv", header=TRUE, sep = ",")
head(rdlogis)
## Hours_Studied Attendance Parental_Involvement Access_to_Resources
## 1 23 84 Low High
## 2 19 64 Low Medium
## 3 24 98 Medium Medium
## 4 29 89 Low Medium
## 5 19 92 Medium Medium
## 6 19 88 Medium Medium
## Extracurricular_Activities Sleep_Hours Previous_Scores Motivation_Level
## 1 No 7 73 Low
## 2 No 8 59 Low
## 3 Yes 7 91 Medium
## 4 Yes 8 98 Medium
## 5 Yes 6 65 Medium
## 6 Yes 8 89 Medium
## Internet_Access Tutoring_Sessions Family_Income Teacher_Quality School_Type
## 1 Yes 0 Low Medium Public
## 2 Yes 2 Medium Medium Public
## 3 Yes 2 Medium Medium Public
## 4 Yes 1 Medium Medium Public
## 5 Yes 3 Medium High Public
## 6 Yes 3 Medium Medium Public
## Peer_Influence Physical_Activity Learning_Disabilities
## 1 Positive 3 No
## 2 Negative 4 No
## 3 Neutral 4 No
## 4 Negative 4 No
## 5 Neutral 4 No
## 6 Positive 3 No
## Parental_Education_Level Distance_from_Home Gender Exam_Score
## 1 High School Near Male 67
## 2 College Moderate Female 61
## 3 Postgraduate Near Male 74
## 4 High School Moderate Male 71
## 5 College Near Female 70
## 6 Postgraduate Near Male 71
# Tratamiento de valores centinela (999)
rdlogis$Hours_Studied[rdlogis$Hours_Studied == 999] <- NA
# Imputación por media
media_Hours_Studied <- mean(rdlogis$Hours_Studied, na.rm = TRUE)
rdlogis$Hours_Studied[is.na(rdlogis$Hours_Studied)] <- media_Hours_Studied
# Asegurar tipo numérico
rdlogis$Hours_Studied <- as.numeric(rdlogis$Hours_Studied)
Teniendo en cuenta que el modelo intenta predecir el riesgo de reprobación de un estudiante, se eligió la Ruta Logística, en este sentido, se Presentan las pruebas de independencia estadística (ej. Chi-Cuadrado) para las predictoras categóricas, o pruebas de diferencia de medias (ej. Prueba T de Student) para predictoras continuas.
# 1 = Riesgo (<65), 0 = No riesgo
rdlogis$Riesgo <- ifelse(rdlogis$Exam_Score < 65, 1, 0)
# Convertir a factor
rdlogis$Riesgo <- factor(rdlogis$Riesgo)
# Ver distribución
table(rdlogis$Riesgo)
##
## 0 1
## 5155 1452
Prueba t para las variables Independientes continuas
t_hours <- t.test(Hours_Studied ~ Riesgo, data = rdlogis)
t_hours
##
## Welch Two Sample t-test
##
## data: Hours_Studied by Riesgo
## t = 33.269, df = 2550.1, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
## 95 percent confidence interval:
## 4.900246 5.514065
## sample estimates:
## mean in group 0 mean in group 1
## 21.11969 15.91253
t_Tutoring_Sessions <- t.test(Tutoring_Sessions ~ Riesgo, data = rdlogis)
t_Tutoring_Sessions
##
## Welch Two Sample t-test
##
## data: Tutoring_Sessions by Riesgo
## t = 11.513, df = 2595.2, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
## 95 percent confidence interval:
## 0.3228821 0.4554395
## sample estimates:
## mean in group 0 mean in group 1
## 1.579243 1.190083
Hipótesis
\(H_0\) (nula): No hay diferencia en las horas de estudio entre los grupos
(\(μ_o = μ_1\))
\(H_1\) (alternativa): Sí hay diferencia
(\(μ₀ ≠ μ₁\))
el \(P-valor < 0.05\) indica que se rechaza \(H_0\) para concluir que si hay diferencia entre los que aprueban y reprueban en relación con las horas de estudio. De la misma manera ocurre con las sesiones de tutoria o Tutoring_Sessions, los estudiantes que aprueban tienen más sesiones de tutoría que los que reprueban.
# Asegurar factor
rdlogis$Internet_Access <- as.factor(rdlogis$Internet_Access)
tabla_internet <- table(rdlogis$Internet_Access, rdlogis$Riesgo)
tabla_internet
##
## 0 1
## No 357 142
## Yes 4798 1310
chisq.test(tabla_internet)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tabla_internet
## X-squared = 12.813, df = 1, p-value = 0.0003442
Se aplicó la prueba Chi-cuadrado de Pearson para evaluar la asociación entre el acceso a internet y el riesgo de bajo rendimiento académico. Los resultados evidencian una relación estadísticamente significativa (χ² = 12.813; p = 0.0003), lo que indica que ambas variables no son independientes. Se observa que los estudiantes sin acceso a internet presentan una mayor proporción de riesgo académico en comparación con aquellos que sí cuentan con este recurso.
Los resultados tambien indican que el riesgo académico:
Sin internet \[(\text{Bajo_rendimiento}) = \frac {142} {(357 + 142)} ≈ 28.5\%\] Con internet
\[(\text{Bajo_rendimiento}) = \frac {1310} {(4798 + 1310)} ≈ 21.5\%\]
modelo_riesgoreproba <- glm(Riesgo ~ Hours_Studied,
data = rdlogis,
family = binomial)
summary(modelo_riesgoreproba)
##
## Call:
## glm(formula = Riesgo ~ Hours_Studied, family = binomial, data = rdlogis)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.867575 0.113123 16.51 <2e-16 ***
## Hours_Studied -0.169496 0.006253 -27.11 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 6958.7 on 6606 degrees of freedom
## Residual deviance: 6035.9 on 6605 degrees of freedom
## AIC: 6039.9
##
## Number of Fisher Scoring iterations: 5
La ecuación del MRLS es:
\[\ln\left(\frac{P}{1-P}\right) = 1.867575 - 0.169496 \cdot (\text{Horas_estudio})\] Y la ecuación real de probabilidad (la Función Sigmoide) queda así: \[P(\text{Riesgo_Bajo_rendimiento}) = \frac{1}{1 + e^{-(1.8675 - 0.1695 \cdot \text{Horas_estudio})}}\] El Intercepto: (\(1.867\)) indica que el modelo estima que un estudiante con cero horas de estudio tendría una probabilidad alta de presentar bajo rendimiento académico, a partir de la ecuación \[p = \frac{e^{1.8676}}{1 + e^{1.8676}}≈ 86.6\%\].
Coeficiente \[\beta_1 X_1= -0.169496 \cdot \text{Horas_estudio}\]; indica en primer lugar que existe una relación inversa entre el riesgo de reprobación y las horas de estudio. Si aumentan las horas de estudio la probabilidad de reprobar disminuye.
Al cálcular los ODDS RATIO del coeficiente encontramos \[{e^{1.8676}= 0.844}\] en consecuencia \[1 - 0.844 = 0.156 = 15.6 \%\] Esto muestra que por cada hora de estudio para el examen, la probabilidad de reprobar el examen es de \(15.6 \%\)
Significancia estadística Como \(p-value < 2e-16\) se rechaza la hipotesis nula y se concluye que la variable Horas de estudio, es altamente significativa para el predecir el riesgo de tener rendimiento académico bajo.
Calidad del modelo El valor \(AIC: 6039.9\) servirá como base para la comparación con otros modelos.
Para evaluar qué tan bueno es nuestro modelo tomando decisiones, generamos predicciones de probabilidad y las comparamos con los datos reales usando una Matriz de Confusión
# 4. EVALUACIÓN DEL PODER PREDICTIVO
# 1. Generar probabilidades predichas para cada paciente
probabilidades <- predict(modelo_riesgoreproba, type = "response")
# 2. Convertir probabilidad en clasificación binaria (Punto de corte: 0.5 o 50%)
predicciones <- ifelse(probabilidades > 0.5, 1, 0)
# 3. Matriz de Confusión (CORREGIDA)
# Usamos modelo_riesgo$y para obtener exactamente los 1223 datos reales que uso el modelo
matriz_confusion <- table(Prediccion = predicciones, Real = modelo_riesgoreproba$y)
print(matriz_confusion)
## Real
## Prediccion 0 1
## 0 4919 1177
## 1 236 275
# 4. Cálculo de Precisión Global (Accuracy)
precision <- sum(diag(matriz_confusion)) / sum(matriz_confusion)
cat("La precisión global del modelo es:", round(precision * 100, 2), "%\n")
## La precisión global del modelo es: 78.61 %
# --- EXTRACCIÓN DE CUADRANTES PARA MÉTRICAS CLÍNICAS ---
# En R, la tabla se lee: tabla[Fila, Columna]
TN <- matriz_confusion[1, 1] # Verdadero Negativo (Real 0, Pred 0)
FN <- matriz_confusion[1, 2] # Falso Negativo (Real 1, Pred 0)
FP <- matriz_confusion[2, 1] # Falso Positivo (Real 0, Pred 1)
TP <- matriz_confusion[2, 2] # Verdadero Positivo (Real 1, Pred 1)
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.2
# 1. Se toma la matriz de confusión real que calculamos en el paso anterior
# (Asumiendo que ya corriste el código donde creaste 'matriz_confusion')
datos_reales <- as.data.frame(as.table(matriz_confusion))
colnames(datos_reales) <- c("Predicho", "Real", "Frecuencia")
# 2. Aseguramos que los niveles estén en el orden correcto (0=Aprobado, 1=Riesgo)
datos_reales$Predicho <- factor(ifelse(datos_reales$Predicho == 1, "Riesgo (1)", "Aprobado (0)"),
levels = c("Aprobado (0)", "Riesgo (1)"))
datos_reales$Real <- factor(ifelse(datos_reales$Real == 1, "Riesgo (1)", "Aprobado (0)"),
levels = c("Riesgo (1)", "Aprobado (0)")) # Invertido para el eje Y
# 3. Generamos el gráfico
ggplot(datos_reales, aes(x = Predicho, y = Real, fill = Frecuencia)) +
geom_tile(color = "black", linewidth = 1) +
geom_text(aes(label = Frecuencia), size = 8, fontface = "bold") +
scale_fill_gradient(low = "white", high = "#E74C3C") + # Usamos rojo para denotar riesgo
labs(title = "Matriz de Confusión: Modelo de Riesgo Reprobación",
subtitle = "Evaluación empírica sobre n = 6607 estudiantes",
x = "Predicción del Algoritmo",
y = "Realidad académica (Observada)") +
theme_minimal() +
theme(axis.text = element_text(size = 12, face = "bold"),
title = element_text(size = 14, face = "bold"),
legend.position = "none")
Verdaderos Negativos (4919): El modelo predijo que el estudiante Aprobaria el examen (nota mayor a 65) y, efectivamente, aprobaron ¡Excelente!
Falsos Positivos (236): El modelo predijo reprobación, pero el estudiante Aprobó.
Verdaderos Positivos (275): El modelo predijo que el estudiante reprobaba y el predijo la reprobación.
Falsos Negativos (1177): El modelo predijo Aprobado, pero en realidad reprobaron la asignatura.
\[ \text{Sensibilidad} = \frac{TP}{TP + FN} \]
\[ \text{Especificidad} = \frac{TN}{TN + FP} \]
\[ \text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN} \]
Se procede a evaluar el modelo empírico de riesgo de reprobación
(modelo_riesgoreproba), estableciendo un umbral de decisión
del 50% \((0.5)\).
# --- EXTRACCIÓN DE CUADRANTES PARA MÉTRICAS CLÍNICAS ---
# En R, la tabla se lee: tabla[Fila, Columna]
TN <- matriz_confusion[1, 1] # Verdadero Negativo (Real 0, Pred 0)
FN <- matriz_confusion[1, 2] # Falso Negativo (Real 1, Pred 0)
FP <- matriz_confusion[2, 1] # Falso Positivo (Real 0, Pred 1)
TP <- matriz_confusion[2, 2] # Verdadero Positivo (Real 1, Pred 1)
sensibilidad <- TP / (TP + FN)
especificidad <- TN / (TN + FP)
precision <- (TP + TN) / (TP + TN + FP + FN)
cat("Precision Global (Accuracy):", round(precision * 100, 2), "%\n")
## Precision Global (Accuracy): 78.61 %
cat("Sensibilidad (Exito en detectar riesgo):", round(sensibilidad * 100, 2), "%\n")
## Sensibilidad (Exito en detectar riesgo): 18.94 %
cat("Especificidad (Exito en descartar sanos):", round(especificidad * 100, 2), "%\n")
## Especificidad (Exito en descartar sanos): 95.42 %
Nuestro modelo solo tiene una predicisión del \(78.6\%\) por eso muestra que el algoritmo se equivocó 1177 veces en detectar el riesgo. Sin embargo, esto es coherente porque el rendimiento de un estudiante, más alla de aprobar una asignatura, depende de otros factorres asociados al estudiantes pero tambien al contexto, el currículo y los padres de familia o cuidadores. También, llama la atención el porcentaje bajo en la sencibilidad, es decir, en detectar a los estudiantes en riesgo de reprobación.
\[\ln\left(\frac{P}{1-P}\right) = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \beta_3 X_3\] \[P(Y=1|X) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X_1 + \beta_2 X_2 + \beta_3 X_3)}}\]
# Cargar la base de datos
rdlogis <- read.csv("C:/modelosderegresion/Rendimiento.csv", header=TRUE, sep = ",")
head(rdlogis)
## Hours_Studied Attendance Parental_Involvement Access_to_Resources
## 1 23 84 Low High
## 2 19 64 Low Medium
## 3 24 98 Medium Medium
## 4 29 89 Low Medium
## 5 19 92 Medium Medium
## 6 19 88 Medium Medium
## Extracurricular_Activities Sleep_Hours Previous_Scores Motivation_Level
## 1 No 7 73 Low
## 2 No 8 59 Low
## 3 Yes 7 91 Medium
## 4 Yes 8 98 Medium
## 5 Yes 6 65 Medium
## 6 Yes 8 89 Medium
## Internet_Access Tutoring_Sessions Family_Income Teacher_Quality School_Type
## 1 Yes 0 Low Medium Public
## 2 Yes 2 Medium Medium Public
## 3 Yes 2 Medium Medium Public
## 4 Yes 1 Medium Medium Public
## 5 Yes 3 Medium High Public
## 6 Yes 3 Medium Medium Public
## Peer_Influence Physical_Activity Learning_Disabilities
## 1 Positive 3 No
## 2 Negative 4 No
## 3 Neutral 4 No
## 4 Negative 4 No
## 5 Neutral 4 No
## 6 Positive 3 No
## Parental_Education_Level Distance_from_Home Gender Exam_Score
## 1 High School Near Male 67
## 2 College Moderate Female 61
## 3 Postgraduate Near Male 74
## 4 High School Moderate Male 71
## 5 College Near Female 70
## 6 Postgraduate Near Male 71
# 2. Tratamiento de Valores Centinela (999) e Imputación por Media
rdlogis$Hours_Studied[rdlogis$Hours_Studied == 999] <- NA
media_Hours_Studied <- mean(rdlogis$Hours_Studied, na.rm = TRUE)
rdlogis$Hours_Studied[is.na(rdlogis$Hours_Studied)] <- media_Hours_Studied
rdlogis$Hours_Studied <- as.numeric(rdlogis$Hours_Studied)
rdlogis$Tutoring_Sessions[rdlogis$Tutoring_Sessions == 999] <- NA
media_Tutoring_Sessions <- mean(rdlogis$Tutoring_Sessions, na.rm = TRUE)
rdlogis$Tutoring_Sessions[is.na(rdlogis$Tutoring_Sessions)] <- media_Tutoring_Sessions
rdlogis$Tutoring_Sessions <- as.numeric(rdlogis$Tutoring_Sessions)
# Extraemos estrictamente las variables dependientes que se quieren asociar al mmdelo, en este caso: las horas de estudio, las sesiones de tutoria, el acceso a internet y la participación en actividades extracurriculares.
datos_completos_lgmul<- subset(rdlogis, select = c(Exam_Score, Hours_Studied, Tutoring_Sessions, Internet_Access, Extracurricular_Activities))
# Eliminamos cualquier fila con datos faltantes (NAs)
datos_completos_lgmul <- na.omit(datos_completos_lgmul)
# 3. Creación de la Variable Dicotómica (Variable de Respuesta Y)
# 1 = Riesgo (reprobación: < 65 puntos), 0 = Aprobado
datos_completos_lgmul$Exam_Score <- ifelse(datos_completos_lgmul$Exam_Score < 65, 1, 0)
# Usamos las variables dicotomicas para que el modelo asuma un nivel basal de referencia
modelo_definitivolg <- glm(Exam_Score ~ Hours_Studied + Tutoring_Sessions + factor(Internet_Access) + factor(Extracurricular_Activities),
data = datos_completos_lgmul,
family = binomial(link = "logit"))
summary(modelo_definitivolg)
##
## Call:
## glm(formula = Exam_Score ~ Hours_Studied + Tutoring_Sessions +
## factor(Internet_Access) + factor(Extracurricular_Activities),
## family = binomial(link = "logit"), data = datos_completos_lgmul)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.11752 0.17451 17.864 < 2e-16 ***
## Hours_Studied -0.17675 0.00643 -27.488 < 2e-16 ***
## Tutoring_Sessions -0.34762 0.02936 -11.841 < 2e-16 ***
## factor(Internet_Access)Yes -0.44937 0.11619 -3.867 0.00011 ***
## factor(Extracurricular_Activities)Yes -0.39625 0.06598 -6.005 1.91e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 6958.7 on 6606 degrees of freedom
## Residual deviance: 5834.0 on 6602 degrees of freedom
## AIC: 5844
##
## Number of Fisher Scoring iterations: 5
# Distribución de la variable de interés
table(Riesgo = datos_completos_lgmul$Exam_Score)
## Riesgo
## 0 1
## 5155 1452
La ecuación real de probabilidad (la Función Sigmoide múltiple) queda así: \[P(\text{Bajo_rendimiento}) = \frac{1}{1 + e^{-(3.11752 - 0.17675 \cdot \text{Horas_estudio} - 0.34762 \cdot \text{Tutoring_Sessions} - 0.44937 \cdot \text{Internet_Accesss} - 0.39625 \cdot \text{Extracurricular})}}\] ## análisis de resultados del Modelo de Regresión Logístico Múltiple
Coeficeinte e intercepto
El Intercepto: (\(3.11752\)) indica que el modelo estima que un estudiante con cero horas de estudio tendría una probabilidad alta de presentar bajo rendimiento académico, a partir de la ecuación \[p = \frac{e^{3.11752}}{1 + e^{3.11752}}≈ 95.6\%\].
coeficientes Nuevamente el signo negativo de los coeficientes, indica que la relación es inversa: a medida que aumentan las horas de estudio, las sesiones de tutoria y además tiene acceso a internet y participa en actividades extracurriculares, disminuye el riesgo de reprobación (los log-odds).
Significancia estadística
Significancia (***): El \(p\text{-value}\) es \(<0\) en todos los variables analizadas: \(< 2e-16\), \(< 1.9e-9\) y \(< 0.0001\). Es decir, la probabilidad de que esta relación sea una coincidencia es prácticamente cero. En conclusión, Las horas de estudio, las sesiones de tutoria y tener acceso a internet y no participa en actividades extracurriculares son predictores definitivos del bajo rendimiento.
Calidad del modelo
El AIC del modelo lógistico múltiple es de: 5844 frente al AIC: 6039.9, indican que el modelo logístico múltiple describe de manera más adecuada el riesgo de bajo rendimiento académico.
Para evaluar qué tan bueno es nuestro modelo tomando decisiones, generamos predicciones de probabilidad y las comparamos con los datos reales usando una Matriz de Confusión
# 4. EVALUACIÓN DEL PODER PREDICTIVO DEL MODELO DE REGRESIÓN LOGISTICA MÚLTIPLE
# 1. Generar probabilidades predichas para cada paciente
probabilidadesmul <- predict(modelo_definitivolg, type = "response")
# 2. Convertir probabilidad en clasificación binaria (Punto de corte: 0.5 o 50%)
prediccionesmul <- ifelse(probabilidadesmul > 0.5, 1, 0)
# 3. Matriz de Confusión (CORREGIDA)
# Usamos modelo_riesgo$y para obtener exactamente los 1223 datos reales que uso el modelo
matriz_confusionlg0.5 <- table(Prediccion = prediccionesmul, Real = modelo_definitivolg$y)
print(matriz_confusionlg0.5)
## Real
## Prediccion 0 1
## 0 4910 1120
## 1 245 332
# 4. Cálculo de Precisión Global (Accuracy)
precisionmul <- sum(diag(matriz_confusionlg0.5)) / sum(matriz_confusionlg0.5)
cat("La precisión global del modelo es:", round(precision * 100, 2), "%\n")
## La precisión global del modelo es: 78.61 %
Hasta el momento se puede observar diferencias importantes entre el modelo logístico simple y el modelo logístico multiple. Por una parte, la precisión global en modelo logístico simple es 78.61% frente 79.34% en el modelos múltiple. Por otra parte, esta mejora tambien se confirma en el AIC. En el primer caso es 6039.9 mientras que en el múltiple es 5844.
# --- EXTRACCIÓN DE CUADRANTES PARA MÉTRICAS ---
# En R, la tabla se lee: tabla[Fila, Columna]
TN_mul0.5 <- matriz_confusionlg0.5[1, 1] # Verdadero Negativo (Real 0, Pred 0)
FN_mul0.5 <- matriz_confusionlg0.5[1, 2] # Falso Negativo (Real 1, Pred 0)
FP_mul0.5 <- matriz_confusionlg0.5[2, 1] # Falso Positivo (Real 0, Pred 1)
TP_mul0.5 <- matriz_confusionlg0.5[2, 2] # Verdadero Positivo (Real 1, Pred 1)
library(ggplot2)
# 1. Se toma la matriz de confusión real que calculamos en el paso anterior
# (Asumiendo que ya corriste el código donde creaste 'matriz_confusion')
datos_reales_mul <- as.data.frame(as.table(matriz_confusionlg0.5))
colnames(datos_reales_mul) <- c("Predicho", "Real", "Frecuencia")
# 2. Aseguramos que los niveles estén en el orden correcto (0=Aprobado, 1=Riesgo)
datos_reales_mul$Predicho <- factor(ifelse(datos_reales_mul$Predicho == 1, "Riesgo (1)", "Aprobado (0)"),
levels = c("Aprobado (0)", "Riesgo (1)"))
datos_reales_mul$Real <- factor(ifelse(datos_reales_mul$Real == 1, "Riesgo (1)", "Aprobado (0)"),
levels = c("Riesgo (1)", "Aprobado (0)")) # Invertido para el eje Y
# 3. Generamos el gráfico
ggplot(datos_reales_mul, aes(x = Predicho, y = Real, fill = Frecuencia)) +
geom_tile(color = "black", linewidth = 1) +
geom_text(aes(label = Frecuencia), size = 8, fontface = "bold") +
scale_fill_gradient(low = "white", high = "#E74C3C") + # Usamos rojo para denotar riesgo
labs(title = "Matriz de Confusión: Modelo de Riesgo Reprobación",
subtitle = "Evaluación empírica sobre n = 6607 estudiantes",
x = "Predicción del Algoritmo",
y = "Realidad académica (Observada)") +
theme_minimal() +
theme(axis.text = element_text(size = 12, face = "bold"),
title = element_text(size = 14, face = "bold"),
legend.position = "none")
Verdaderos Negativos (4910): El modelo predijo que el estudiante Aprobaria el examen (nota mayor a 65) y, efectivamente, aprobaron ¡Excelente!
Falsos Positivos (245): El modelo predijo reprobación, pero el estudiante Aprobó.
Verdaderos Positivos (332): El modelo predijo que el estudiante reprobaba y el efectivamente reprobaron.
Falsos Negativos (1120): El modelo predijo Aprobado, pero en realidad reprobaron la asignatura.
En terminós del problema de invesgación orientado a predecir estudiantes que reprobarian, los Los falsos negativos son de particular interes porque el número de posibles errores es muy alto. 1120 estudiantes son presentados por el modelo como aprobados cuando en realidad reprobarian, esto quiere decir que se pierde la posibilidad de acompañar a 1120 estudiantes que al reprobar podrian desertar del sistema escolar. Este hecho es preocupante a nivel laboral, social y educativo. A continuación confirmamos con las métricas derivadas el poder del modelo
# --- EXTRACCIÓN DE CUADRANTES PARA MÉTRICAS CLÍNICAS ---
# En R, la tabla se lee: tabla[Fila, Columna]
TN_mul0.5 <- matriz_confusionlg0.5[1, 1] # Verdadero Negativo (Real 0, Pred 0)
FN_mul0.5 <- matriz_confusionlg0.5[1, 2] # Falso Negativo (Real 1, Pred 0)
FP_mul0.5 <- matriz_confusionlg0.5[2, 1] # Falso Positivo (Real 0, Pred 1)
TP_mul0.5 <- matriz_confusionlg0.5[2, 2] # Verdadero Positivo (Real 1, Pred 1)
sensibilidad_0.5 <- TP_mul0.5 / (TP_mul0.5 + FN_mul0.5)
especificidad_0.5 <- TN_mul0.5 / (TN_mul0.5 + FP_mul0.5)
precision_0.5 <- (TP_mul0.5 + TN_mul0.5) / (TP_mul0.5 + TN_mul0.5 + FP_mul0.5 + FN_mul0.5)
cat("Precision Global (Accuracy):", round(precision_0.5 * 100, 2), "%\n")
## Precision Global (Accuracy): 79.34 %
cat("Sensibilidad (Exito en detectar riesgo):", round(sensibilidad_0.5 * 100, 2), "%\n")
## Sensibilidad (Exito en detectar riesgo): 22.87 %
cat("Especificidad (Exito en descartar sanos):", round(especificidad_0.5 * 100, 2), "%\n")
## Especificidad (Exito en descartar sanos): 95.25 %
Como se venia diciendo, La precisión global del 79.34 % y Especificidad (Exito en descartar sanos): 95.25 % son muy buenos para el modelo logistico múltiple, pero como nuestro enfoque es identificar a tiempo para prevenir reprobación y deserción, la Sensibilidad (Exito en detectar riesgo) del 22.87 % resulta baja. Por esta razón se calculará el área bajo la curva ROC (AUC) para evaluar la capacidad discriminante del modelo logístico. Este indicador resume el desempeño clasificatorio del modelo para todos los puntos de corte posibles, siendo menos sensible al desbalance de clases que la precisión global.
library(pROC)
## Warning: package 'pROC' was built under R version 4.5.3
## Type 'citation("pROC")' for a citation.
##
## Adjuntando el paquete: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
prob <- predict(modelo_definitivolg, type="response")
roc_obj <- roc(datos_completos_lgmul$Exam_Score, prob)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj, print.auc=TRUE)
auc(roc_obj)
## Area under the curve: 0.7729
En este caso particular, con corte 0.50 la sensibilidad fue baja, la AUC = 0.7729 mostró que el modelo sí ordena razonablemente bien los niveles de riesgo. Esto sugiere que el problema no era el modelo en sí, sino el umbral de clasificación utilizado. Por lo cual, se buscará un corte más adecuado.
coords(roc_obj, "best", ret=c("threshold","sensitivity","specificity","accuracy"))
## threshold sensitivity specificity accuracy
## threshold 0.2044439 0.7334711 0.6741028 0.68715
En sintesis el problema no se encuentra en el modelo precisamente, si no en el punto de corte para discriminar, en este caso se sugiere cambiar de 0.5 a 0.2044. Esto aumentaria la sencibilidad aunque podría disminuir Precision Global.
Para evaluar qué tan bueno es nuestro modelo tomando decisiones, generamos predicciones de probabilidad y las comparamos con los datos reales usando una Matriz de Confusión
# 4. EVALUACIÓN DEL PODER PREDICTIVO DEL MODELO
# 1. Probabilidades predichas
probabilidadesmul0.2 <- predict(modelo_definitivolg, type = "response")
# 2. Clasificación con nuevo punto de corte
prediccionesmul0.2 <- ifelse(probabilidadesmul0.2 > 0.2044, 1, 0)
# 3. Matriz de confusión
matriz_confusionlg0.2 <- table(
Prediccion = prediccionesmul0.2,
Real = modelo_definitivolg$y
)
print(matriz_confusionlg0.2)
## Real
## Prediccion 0 1
## 0 3475 387
## 1 1680 1065
# 4. Accuracy
precisionmul0.2 <- sum(diag(matriz_confusionlg0.2)) / sum(matriz_confusionlg0.2)
cat("La precisión global del modelo es:",
round(precisionmul0.2 * 100, 2), "%\n")
## La precisión global del modelo es: 68.71 %
# --- EXTRACCIÓN DE CUADRANTES PARA MÉTRICAS CLÍNICAS ---
# En R, la tabla se lee: tabla[Fila, Columna]
TN_mul0.2 <- matriz_confusionlg0.2[1, 1] # Verdadero Negativo (Real 0, Pred 0)
FN_mul0.2 <- matriz_confusionlg0.2[1, 2] # Falso Negativo (Real 1, Pred 0)
FP_mul0.2 <- matriz_confusionlg0.2[2, 1] # Falso Positivo (Real 0, Pred 1)
TP_mul0.2 <- matriz_confusionlg0.2[2, 2] # Verdadero Positivo (Real 1, Pred 1)
sensibilidad_0.2 <- TP_mul0.2 / (TP_mul0.2 + FN_mul0.2)
especificidad_0.2 <- TN_mul0.2 / (TN_mul0.2 + FP_mul0.2)
precision_0.2 <- (TP_mul0.2 + TN_mul0.2) / (TP_mul0.2 + TN_mul0.2 + FP_mul0.2 + FN_mul0.2)
cat("Precision Global (Accuracy):", round(precision_0.2 * 100, 2), "%\n")
## Precision Global (Accuracy): 68.71 %
cat("Sensibilidad (Exito en detectar riesgo):", round(sensibilidad_0.2 * 100, 2), "%\n")
## Sensibilidad (Exito en detectar riesgo): 73.35 %
cat("Especificidad (Exito en descartar sanos):", round(especificidad_0.2 * 100, 2), "%\n")
## Especificidad (Exito en descartar sanos): 67.41 %
# --- EXTRACCIÓN DE CUADRANTES PARA MÉTRICAS ---
# 1. Se toma la matriz de confusión real que calculamos en el paso anterior
# (Asumiendo que ya corriste el código donde creaste 'matriz_confusion')
datos_reales_mul0.2 <- as.data.frame(as.table(matriz_confusionlg0.2))
colnames(datos_reales_mul0.2) <- c("Predicho", "Real", "Frecuencia")
# 2. Aseguramos que los niveles estén en el orden correcto (0=Aprobado, 1=Riesgo)
datos_reales_mul0.2$Predicho <- factor(ifelse(datos_reales_mul0.2$Predicho == 1, "Riesgo (1)", "Aprobado (0)"),
levels = c("Aprobado (0)", "Riesgo (1)"))
datos_reales_mul0.2$Real <- factor(ifelse(datos_reales_mul0.2$Real == 1, "Riesgo (1)", "Aprobado (0)"),
levels = c("Riesgo (1)", "Aprobado (0)")) # Invertido para el eje Y
# 3. Generamos el gráfico
ggplot(datos_reales_mul0.2, aes(x = Predicho, y = Real, fill = Frecuencia)) +
geom_tile(color = "black", linewidth = 1) +
geom_text(aes(label = Frecuencia), size = 8, fontface = "bold") +
scale_fill_gradient(low = "white", high = "#E74C3C") + # Usamos rojo para denotar riesgo
labs(title = "Matriz de Confusión: Modelo de Riesgo Reprobación",
subtitle = "Evaluación empírica sobre n = 6607 estudiantes",
x = "Predicción del Algoritmo",
y = "Realidad académica (Observada)") +
theme_minimal() +
theme(axis.text = element_text(size = 12, face = "bold"),
title = element_text(size = 14, face = "bold"),
legend.position = "none")
La reducción del punto de corte de 0.50 a 0.2044 incrementó la sensibilidad del modelo de 22.87% a 73.35%, mejorando sustancialmente la detección de estudiantes en riesgo de reprobación. Aunque la precisión global descendió, el nuevo umbral resulta más pertinente para fines los preventivos más coherentes con la acción educativa. Aunque Precision Global (Accuracy) bajó a 68.71 %.
En conclusión el modelo logistico múltiple resulta más adecuado que el modelo logístico simple y mucho más que los modelos de regresión lineales, simple o múltiple. Sin embargo, se debe analizar con expertos si el modelo de regresión logístico múltiple es más adecuado con el punto de corte en 0.5 o en 0.2044. De manera a priorí y en relación con el proposito de la investigación, podemos decir que resulta mpas conveniente identificar más casos de riesgo de reprobación para activar planes de acción y evitar la deserción. Por eso el modelo con corte en 0.2044 puede ser adecuado, principalmente porque Falsos Negativos los predichos como Aprobado, pero que en realidad reprobaron la asignatura bajaron 1120 a 387.
En Cualquier caso, los modelos de regresión logística múltiple analizados hasta el momento solo alcanzan un porcentaje cercano al 80%, indicando que hay otras variables que influyen en el rendimiento académico. Una de nuestras hiposis es que los factores familiares aumentaria la presición del modelo. Ya que la participación del padre de familia y el estilo de crianza puede influir directamente en las variables asignadas al estudiante.
Considerar variables asociadas a factores familiares implica ampliar la base de datos, por lo cual actualmente se estan diseñando y validando nuevos instrumentos para complementar la base de datos. Esta actividad de completar la base de datos también se confirma si aplicamos la regla de Eventos por Variable.