El presente taller tiene como objetivo aplicar un modelo de regresión logística para analizar la relación entre el rendimiento académico de los estudiantes y su participación en actividades extracurriculares. Para ello, se utiliza la base de datos Student Performance Factor, que contiene variables relevantes sobre los estudiantes y su desempeño.
La variable categórica de interés es Extracurricular_Activities, que indica si el estudiante participa en actividades extracurriculares (“Sí” o “No”). La variable predictora es Exam_Score, que representa el puntaje obtenido en un examen académico.
Mediante la regresión logística se busca modelar la probabilidad de que un estudiante participe en actividades extracurriculares en función de su puntaje en el examen, lo cual puede ayudar a comprender mejor cómo influye el desempeño académico en la participación en este tipo de actividades.
Analizar, mediante regresión logística, la relación entre el puntaje en exámenes académicos y la participación de los estudiantes en actividades extracurriculares utilizando la base de datos Student Performance Factor.
La base de datos Student Performance Factor contiene información recopilada de un grupo de estudiantes, incluyendo diversas variables relacionadas con su desempeño académico, características personales, y participación en actividades extracurriculares.
database = read.csv("C:/Users/Daniel/Documents/Especializacion en Estadistica/Taller 1 Modelo de Regresion Lineal/StudentPerformanceFactors.csv")Para este taller, se seleccionaron únicamente dos variables relevantes para el análisis de regresión logística:
1 para estudiantes que participan en actividades
extracurriculares.0 para estudiantes que no participan.Posteriormente, se generó una nueva tabla con únicamente estas dos variables, lo que permitió enfocar el análisis exclusivamente en la relación entre el puntaje en el examen y la participación en actividades extracurriculares.
# Se recodifican los niveles No, Yes a 1 y 0
datos = database %>%
select(Extracurricular_Activities, Exam_Score) %>%
mutate(Extracurricular_Activities = recode(Extracurricular_Activities,
"No" = 0,
"Yes" = 1))| Exam_Score | Extracurricular_Activities |
|---|---|
| 67 | 0 |
| 61 | 0 |
| 74 | 1 |
| 71 | 1 |
| 70 | 1 |
| 71 | 1 |
| 67 | 1 |
| 66 | 1 |
| 69 | 0 |
| 72 | 1 |
En la Tabla 1 se muestra los primeros 10 registros de las variables seleccionadas para el análisis
Para analizar la relación entre el puntaje del examen y la participación en actividades extracurriculares, se ajustó un modelo de regresión logística con las siguientes características:
modelo_logistico <- glm(Extracurricular_Activities ~ Exam_Score, family = "binomial", data = datos)
summary(modelo_logistico)##
## Call:
## glm(formula = Extracurricular_Activities ~ Exam_Score, family = "binomial",
## data = datos)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.962511 0.452512 -4.337 1.44e-05 ***
## Exam_Score 0.035004 0.006732 5.200 2.00e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 8914 on 6606 degrees of freedom
## Residual deviance: 8886 on 6605 degrees of freedom
## AIC: 8890
##
## Number of Fisher Scoring iterations: 4
A continuación, se muestran los cálculos clave obtenidos del modelo de regresión logística, junto con la visualización de la curva de probabilidad ajustada.
p = predict(modelo_logistico, newdata = datos, type = "response")
datos$p = p
datos %>%
select( Extracurricular_Activities, Exam_Score, p) %>%
head(10) %>%
kable(caption = "Tabla 2. Primeros 10 registros de la base de datos con sus respectivas predicciones") %>%
kable_styling(position = "center")| Extracurricular_Activities | Exam_Score | p |
|---|---|---|
| 0 | 67 | 0.5945315 |
| 0 | 61 | 0.5430702 |
| 1 | 74 | 0.6519804 |
| 1 | 71 | 0.6277894 |
| 1 | 70 | 0.6195742 |
| 1 | 71 | 0.6277894 |
| 1 | 67 | 0.5945315 |
| 1 | 66 | 0.5860662 |
| 0 | 69 | 0.6112899 |
| 1 | 72 | 0.6359314 |
Estas probabilidades expuestas en la Tabla 2 representan la estimación del modelo sobre la probabilidad de que cada estudiante participe en actividades extracurriculares según su puntaje en el examen.
Por ejemplo, Para un estudiante con un puntaje de examen de 67, el modelo predice una probabilidad de 0.5945 (59.45%) de que participe en actividades extracurriculares. Sin embargo, en realidad, este estudiante no participa (Extracurricular_Activities = 0). Esto indica que aunque el modelo considera que es más probable que participe, el dato real es diferente, lo que puede ser normal en un modelo probabilístico.
odds = 1/(1-p)
datos$Odds = odds
datos %>%
select(Extracurricular_Activities, Exam_Score, p, Odds) %>%
head(10) %>%
kable(caption = "Tabla 3. Primeros 10 registros de la base de datos con sus respectivas probabilidades y Odds") %>%
kable_styling(position = "center")| Extracurricular_Activities | Exam_Score | p | Odds |
|---|---|---|---|
| 0 | 67 | 0.5945315 | 2.466283 |
| 0 | 61 | 0.5430702 | 2.188520 |
| 1 | 74 | 0.6519804 | 2.873401 |
| 1 | 71 | 0.6277894 | 2.686651 |
| 1 | 70 | 0.6195742 | 2.628633 |
| 1 | 71 | 0.6277894 | 2.686651 |
| 1 | 67 | 0.5945315 | 2.466283 |
| 1 | 66 | 0.5860662 | 2.415845 |
| 0 | 69 | 0.6112899 | 2.572611 |
| 1 | 72 | 0.6359314 | 2.746735 |
Los odds expresan la razón entre la probabilidad de éxito
(participar) y fracaso (no participar). Por ejemplo, para el estudiante
con un puntaje de examen de 67, el modelo predice una
probabilidad de participación en actividades extracurriculares de
0.5945.
Esto equivale a unos odds de 2.47, lo que significa
que:
La razón entre la probabilidad de que participe y de que no participe es de 2.47 a 1.
Es decir, el modelo estima que este estudiante es 2.47 veces más probable que participe a que no lo haga.
Sin embargo, este estudiante no participa realmente, lo que indica una posible falsa predicción positiva.
Log_odd= log(odds)
datos$Log_Odds=Log_odd
datos %>%
select(Extracurricular_Activities, Exam_Score, p, Odds, Log_Odds) %>%
head(10) %>%
kable(caption = "Tabla 4. Primeros 10 registros de la base de datos con sus respectivas probabilidades, odds y Log(odds) ") %>%
kable_styling(position = "center")| Extracurricular_Activities | Exam_Score | p | Odds | Log_Odds |
|---|---|---|---|---|
| 0 | 67 | 0.5945315 | 2.466283 | 0.9027120 |
| 0 | 61 | 0.5430702 | 2.188520 | 0.7832255 |
| 1 | 74 | 0.6519804 | 2.873401 | 1.0554964 |
| 1 | 71 | 0.6277894 | 2.686651 | 0.9882954 |
| 1 | 70 | 0.6195742 | 2.628633 | 0.9664641 |
| 1 | 71 | 0.6277894 | 2.686651 | 0.9882954 |
| 1 | 67 | 0.5945315 | 2.466283 | 0.9027120 |
| 1 | 66 | 0.5860662 | 2.415845 | 0.8820493 |
| 0 | 69 | 0.6112899 | 2.572611 | 0.9449215 |
| 1 | 72 | 0.6359314 | 2.746735 | 1.0104130 |
Los log-odds, o logaritmos naturales de los odds, son la escala lineal en la que el modelo estima la relación entre el puntaje del examen y la participación. En el modelo logístico, el predictor multiplica esta escala para modificar la probabilidad.
Para el estudiante con un puntaje en el examen de 67, el modelo de regresión logística estima una probabilidad de participación en actividades extracurriculares de aproximadamente 0.5945, lo que equivale a unos odds de 2.47 y un log-odds de 0.903. Esto significa que, en la escala lineal del modelo, este estudiante tiene una inclinación moderada a participar (log-odds positivo), ya que el valor está por encima de 0. Sin embargo, en la realidad el estudiante no participa (valor real = 0), por lo que el modelo se equivoca en su predicción, sobrestimando la probabilidad de participación.
A continuación, se visualiza los datos observados junto con la curva de probabilidad ajustada por el modelo de regresión logística:
ggplot(data = datos, aes(x = Exam_Score, y = Extracurricular_Activities)) +
geom_point(aes(color = as.factor(Extracurricular_Activities)), shape = 1) +
stat_function(fun = function(x){predict(modelo_logistico,
newdata = data.frame(Exam_Score = x),
type = "response")}) +
theme_bw() +
labs(title = "Regresion logistica",
y = "Probabilidad de Actividades Extracurriculares") +
theme(legend.position = "none")Figura 1. Relación entre el puntaje en el examen y la probabilidad estimada de participación en actividades extracurriculares.
La Figura 1 muestra el resultado de un modelo de regresión logística
donde se analiza la relación entre el puntaje en el examen
(Exam_Score) y la participación en actividades
extracurriculares (Extracurricular_Activities). Los puntos
en color representan las observaciones reales: en rojo los estudiantes
que no participan (valor 0) y en azul los que sí participan (valor 1).
La línea negra corresponde a la curva logística ajustada por el modelo,
la cual representa la probabilidad estimada de participación en función
del puntaje.
Se observa una pendiente positiva en la curva, lo que indica que a mayor puntaje en el examen, mayor es la probabilidad estimada de que un estudiante participe en actividades extracurriculares. Aunque los datos originales son binarios, el modelo estima una probabilidad continua entre 0 y 1, permitiendo clasificar o interpretar el comportamiento de los estudiantes según su desempeño. Por ejemplo, con puntajes bajos (~50–65) la probabilidad de participación se sitúa por debajo de 0.6, mientras que con puntajes altos (~90–100) se aproxima a 0.8.
Intercepto
(Estimate = -1.9625):
Representa el logaritmo de los odds (log-odds) de que un estudiante
participe en actividades extracurriculares cuando su puntaje en el
examen es 0. Aunque este valor no es realista en la
práctica, sirve como punto de referencia matemático para el
modelo.
Exam_Score
(Estimate = 0.0350):
Indica que por cada punto adicional en el examen, el
log-odds de participar en actividades extracurriculares aumenta
en 0.035 unidades, manteniendo constantes las demás
variables.
Por lo tanto la ecuación del modelo logístico queda de la siguiente manera: \[ \text{Logit(p)} = -1.9625 + 0.0350 * \text{Exam_Score} \]
Se calcula el odds ratio (OR) para interpretar de manera más intuitiva este coeficiente:
## [1] 1.035624
\[ \text{OR} = e^{0.0350} \approx 1.035624 \] Esto significa que por cada punto adicional en el examen, la probabilidad de que un estudiante participe en actividades extracurriculares aumenta en un 3.6%, manteniendo todo lo demás constante.
Indica la variabilidad o incertidumbre en la estimación de cada coeficiente; valores bajos sugieren que la estimación es precisa. En este caso, ambos coeficientes tienen errores estándar pequeños, lo que respalda la confiabilidad de las estimaciones.
se calcula como el cociente entre el coeficiente estimado y su error
estándar, y evalúa si el coeficiente es significativamente distinto de
cero. Valores absolutos altos del estadístico z indican evidencia
estadística suficiente para rechazar la hipótesis nula. Aquí, tanto el
intercepto como el coeficiente de Exam_Score presentan
valores z elevados (-4.337 y 5.200 respectivamente), lo que implica que
ambos son estadísticamente significativos.
El valor p del intercepto es 1.44e-05 y
el de Exam_Score es 2.00e-07, ambos
menores a 0.001. Esto indica que ambos
coeficientes son estadísticamente significativos con un nivel
de confianza superior al 99.9%. Por tanto, hay
evidencia suficiente para afirmar que el puntaje en el examen tiene un
efecto sobre la probabilidad de participar en actividades
extracurriculares.
Null deviance: 8914
Este valor representa la desviación del modelo sin predictores, es
decir, únicamente con el intercepto. Indica qué tan mal se ajusta un
modelo que no incluye ninguna variable explicativa. En este caso, una
null deviance de 8914 sugiere un nivel alto de error al no incorporar
información adicional.
Residual deviance: 8886
Al incluir el predictor Exam_Score, la desviación residual
se reduce a 8886. La diferencia entre la null deviance y la residual
deviance es de 28 unidades, lo cual representa una
mejora estadísticamente significativa, aunque
modesta en términos de ajuste. Esto indica que
Exam_Score explica una parte de la variabilidad en la
participación en actividades extracurriculares, pero no toda.
AIC (Criterio de Información de Akaike):
8890
El AIC es una métrica que penaliza la complejidad del modelo. El valor
de 8890 indica el compromiso entre buen ajuste y
simplicidad del modelo. Aunque este valor no se interpreta de forma
absoluta, sirve para comparar entre modelos: si se
ajustaran otros modelos con más predictores, se preferiría aquel con el
AIC más bajo, siempre que no se sobreajuste.
Una vez ajustado el modelo de regresión logística con la variable Exam_Score como predictor, se calcularon las probabilidades de que un estudiante participe en actividades extracurriculares. Estas probabilidades se transformaron en clases predichas usando un umbral de 0.5. Es decir, si la probabilidad era mayor o igual a 0.5, se clasificó como “sí participa (1)”, y si no, como “no participa (0)”.
predicciones <- ifelse( p >= 0.5, 1, 0)
datos$predicciones= predicciones
datos %>%
select(Extracurricular_Activities, predicciones) %>%
head(10) %>%
kable(caption = "Tabla 5. Predicciones del modelo de regresión logística para los primeros 10 registros, con clasificación basada en un umbral de 0.5.. ") %>%
kable_styling(position = "center")| Extracurricular_Activities | predicciones |
|---|---|
| 0 | 1 |
| 0 | 1 |
| 1 | 1 |
| 1 | 1 |
| 1 | 1 |
| 1 | 1 |
| 1 | 1 |
| 1 | 1 |
| 0 | 1 |
| 1 | 1 |
En la Tabla 5 el primer registro, el valor observado de la variable Extracurricular_Activities es 0, lo cual indica que el estudiante no participa en actividades extracurriculares. No obstante, el modelo predijo un valor de 1, clasificándolo erróneamente como participante. Este tipo de error se conoce como falso positivo y puede influir en la calidad de las decisiones que se tomen a partir del modelo.
Una vez realizadas las predicciones utilizando el modelo de regresión logística, se procedió a evaluar su desempeño mediante la construcción de una matriz de confusión. Esta matriz compara los valores predichos por el modelo con los valores reales de la variable de interés (Extracurricular_Activities).
# Matriz de confusion
matriz_confusion <- table(Real = datos$Extracurricular_Activities, Predicho = datos$predicciones)
# Convertir a data frame para graficar
conf_df <- as.data.frame(matriz_confusion)
names(conf_df) <- c("Predicho", "Real", "Frecuencia")
# Gráfico de calor
ggplot(conf_df, aes(x = Real, y = Predicho, fill = Frecuencia)) +
geom_tile(color = "white") +
geom_text(aes(label = Frecuencia), size = 6, color = "black") +
scale_fill_gradient(low = "white", high = "steelblue") +
labs(
title = "Matriz de confusión",
x = "Clase real",
y = "Clase predicha"
) +
theme_minimal()Figura 2. Matriz de confusion en un grafico de calor.
En la Figura 2 se presenta la matriz de confusión en forma de gráfico de calor, la cual permite evaluar el desempeño del modelo de regresión logística. Se observa que el modelo predijo correctamente 3938 casos como clase 0 (estudiantes que no participan en actividades extracurriculares), pero solo logró identificar correctamente 2 casos como clase 1 (estudiantes que sí participan). Además, cometió 2667 errores al predecir clase 0 cuando en realidad era clase 1, lo que evidencia una alta tasa de falsos negativos. No se presentaron falsos positivos.
Estos resultados indican que el modelo tiene un sesgo importante
hacia la clase mayoritaria, lo que puede deberse a un desbalance de
clases o a la poca capacidad predictiva de la variable
Exam_Score usada como única regresora. Por tanto, se
recomienda ajustar el umbral de clasificación o incorporar más variables
explicativas para mejorar la capacidad del modelo de identificar
correctamente ambas clases.
Para comenzar a calcular y conocer las métricas del modelo debemos primero extraer los VP (Verdaderos Positivos) casos positivos correctamente clasificados, VN (Verdadero Negativo) casos positivos incorrectamente clasificados como negativos, FP (Falsos Positivos) casos negativos incorrectamente clasificados como positivos y FN (Falsos Negativos) casos positivos incorrectamente clasificados como negativos.
# Extraer valores de la matriz
VP = matriz_confusion["1", "1"]
VN = matriz_confusion["0", "0"]
FP = matriz_confusion["0", "1"]
FN = matriz_confusion["1", "0"]A continuación, se presentan las métricas de evaluación del modelo de regresión logística, las cuales permiten analizar el rendimiento del modelo al predecir la participación en actividades extracurriculares según el puntaje en el examen.
## [1] 0.5963372
El modelo acierta aproximadamente el 59.6% de las veces. Esto indica un desempeño moderado, pero no necesariamente confiable si las clases están desbalanceadas.
## [1] 1
El modelo tiene una sensibilidad perfecta, es decir, identifica correctamente todos los estudiantes que sí participan en actividades extracurriculares (sin falsos negativos).
## [1] 0.0007493443
El valor de especificidad es extremadamente bajo, lo que indica que el modelo casi no logra identificar correctamente a los estudiantes que no participan en actividades extracurriculares. La gran mayoría de los casos negativos reales son clasificados incorrectamente como positivos.
## [1] 0.596215
La precisión nos dice que, de todos los casos que el modelo predice como participantes en actividades extracurriculares, solo el 59.6% realmente lo son. Esto refleja la existencia de muchos falsos positivos.
## [1] 0.7470359
Esta métrica es una media armónica entre precisión y sensibilidad. En este caso, un valor de 0.7470 indica un equilibrio moderado, pero más inclinado hacia la sensibilidad, lo que es consistente con la alta tasa de verdaderos positivos.
El modelo muestra una relación positiva entre el Exam_Score y la probabilidad de participar en actividades extracurriculares. Por cada punto adicional en el puntaje del examen, los log-odds de participación aumentan en aproximadamente 0.035, lo que equivale a un incremento cercano al 3.6% en los odds de participación.
Tanto el intercepto como el coeficiente de Exam_Score son estadísticamente significativos (p < 0.001), lo que indica que existe evidencia suficiente para afirmar que el puntaje del examen tiene un efecto real sobre la probabilidad de participar en actividades extracurriculares.
La matriz de confusión muestra una alta proporción de falsos negativos, lo que sugiere que el modelo tiene dificultades para predecir correctamente los casos positivos (participación). El modelo tiende a favorecer la clase mayoritaria (no participación), lo cual limita su utilidad práctica como herramienta de clasificación.
Aunque la deviance disminuye de 8914 (modelo nulo) a 8886 (modelo ajustado), esta reducción es modesta. El AIC del modelo (8890) sugiere que el modelo es simple, pero no particularmente eficiente en términos de ajuste y predicción.
Un modelo basado únicamente en el puntaje del examen no captura adecuadamente la complejidad del fenómeno. Se recomienda incorporar otras variables relevantes como el género, nivel socioeconómico, tipo de institución, motivación personal, entre otras, para mejorar la capacidad explicativa y predictiva del modelo.
Un modelo con alta tasa de falsos negativos puede subestimar la participación real en actividades extracurriculares, lo cual puede llevar a una planificación inadecuada de recursos. Es fundamental considerar la inclusión de más predictores y/o ajustar el umbral de clasificación para mejorar la utilidad del modelo en contextos reales.