Notas Markov

Introduccion

El análisis de calificaciones de alumnos utilizando cadenas de Markov permite modelar y comprender cómo los estudiantes progresan en su desempeño a lo largo de diferentes evaluaciones. En este caso, consideraremos un sistema en el que las calificaciones se registran en tres exámenes consecutivos, y el modelo asume que el desempeño de un alumno en un examen depende únicamente del examen anterior, cumpliendo la propiedad de Markov.

Planteamiento del problema

El desempeño académico de los estudiantes es un aspecto fundamental para evaluar la efectividad de los procesos de enseñanza y aprendizaje. Sin embargo, identificar patrones en el progreso o retroceso de las calificaciones a lo largo de diferentes evaluaciones puede ser un desafío debido a la variabilidad inherente en el desempeño de los alumnos.

En este contexto, se plantea la necesidad de un enfoque sistemático para analizar cómo evolucionan las calificaciones de los estudiantes en una serie de tres exámenes consecutivos. Específicamente, se busca responder la siguiente pregunta:

  • ¿Qué probabilidades tiene un estudiante de mejorar, mantener o disminuir su desempeño en el siguiente examen?

  • ¿Cómo se pueden interpretar estos patrones para apoyar la toma de decisiones educativas?

Responder estas preguntas es clave para entender los factores que influyen en el rendimiento académico y diseñar estrategias que mejoren la calidad educativa.

Justificación

El análisis de las calificaciones utilizando cadenas de Markov es un enfoque poderoso porque permite modelar el progreso académico de forma dinámica, tomando en cuenta únicamente el estado actual (el examen más reciente), lo que simplifica considerablemente el análisis. Este modelo no solo es matemáticamente riguroso, sino que también tiene aplicaciones prácticas en el ámbito educativo, tales como:

  1. Identificación de tendencias académicas: Al modelar las probabilidades de transición entre diferentes niveles de calificación, los docentes y administradores pueden identificar tendencias en el rendimiento, como la mejora constante o el riesgo de estancamiento.

  2. Planeación de intervenciones personalizadas: Los resultados del modelo pueden ser utilizados para implementar estrategias específicas para grupos de estudiantes con mayor probabilidad de presentar un bajo desempeño en exámenes futuros.

  3. Optimización de recursos educativos: Comprender cómo evolucionan las calificaciones puede ayudar a las instituciones educativas a asignar recursos de manera más efectiva, enfocándose en aquellos estudiantes o materias con mayor necesidad de apoyo.

Este estudio contribuye al campo de la educación al proporcionar una metodología estadística que no solo describe los patrones de aprendizaje, sino que también sugiere intervenciones basadas en evidencia para mejorar el desempeño académico.

Enlace de la base de datos:

https://www.kaggle.com/datasets/fundal/students-annual-score-in-history-geography-subject?resource=download

library(readxl)
Warning: package 'readxl' was built under R version 4.2.2
notas_markov <- read_excel("Copia de notas_markov.xlsx")
head(notas_markov)
# A tibble: 6 × 6
  `EXAMEN 1` `EXAMEN 2` `EXAMEN 3` `Clasificación E1` `Clasificación E2`
       <dbl>      <dbl>      <dbl> <chr>              <chr>             
1       93.8       86.2       86.2 Excelente          Excelente         
2       81.2       56.2       71.2 Bueno              Aceptable         
3       58.8       45         50   Aceptable          Insuficiente      
4       87.5       76.2       81.2 Excelente          Bueno             
5       83.8       93.8       88.8 Bueno              Excelente         
6       36.2       62.5       75   Deficiente         Aceptable         
# ℹ 1 more variable: `Clasificación E3` <chr>

Calificacion de los examenes 1 y 2

library(markovchain)
Warning: package 'markovchain' was built under R version 4.2.3
Package:  markovchain
Version:  0.9.5
Date:     2023-09-24 09:20:02 UTC
BugReport: https://github.com/spedygiorgio/markovchain/issues
# Crear la tabla de transición y mostrarla

tabla_transicion <- table(notas_markov$"Clasificación E1", notas_markov$"Clasificación E2")
print(tabla_transicion)
              
               Aceptable Bueno Deficiente Excelente Insuficiente
  Aceptable           20     3         32         3           12
  Bueno               20    12          5         8            3
  Deficiente           3     0        289         0            9
  Excelente            3     8          0        11            0
  Insuficiente         9     0        104         0           62
# Calcular la matriz de transición y mostrarla

matriz_transicion <- prop.table(tabla_transicion, 1)

print(matriz_transicion)
              
                 Aceptable       Bueno  Deficiente   Excelente Insuficiente
  Aceptable    0.285714286 0.042857143 0.457142857 0.042857143  0.171428571
  Bueno        0.416666667 0.250000000 0.104166667 0.166666667  0.062500000
  Deficiente   0.009966777 0.000000000 0.960132890 0.000000000  0.029900332
  Excelente    0.136363636 0.363636364 0.000000000 0.500000000  0.000000000
  Insuficiente 0.051428571 0.000000000 0.594285714 0.000000000  0.354285714

Grafico de Probabilidades de Transición entre Calificaciones

library(ggplot2)
Warning: package 'ggplot2' was built under R version 4.2.3
# Convertir la matriz en un formato largo para ggplot2
matriz_transicion_df <- as.data.frame(as.table(matriz_transicion))

# Crear el heatmap
ggplot(matriz_transicion_df, aes(Var1, Var2, fill = Freq)) +
  geom_tile(color = "white") +
  scale_fill_gradient(low = "white", high = "steelblue") +
  labs(x = "Examen 1", y = "Examen 2", fill = "Probabilidad") +
  ggtitle("Grafico de Probabilidades de Transición entre Calificaciones")

Calcular la probabilidad de permanecer en el mismo estado

diagonal <- diag(matriz_transicion)
cambio <- rowSums(matriz_transicion) - diagonal

# Crear un data frame para el gráfico de barras
retencion_cambio <- data.frame(
  Clasificacion = rownames(matriz_transicion),
  Retencion = diagonal,
  Cambio = cambio
)

# Graficar
ggplot(retencion_cambio, aes(x = Clasificacion)) +
  geom_bar(aes(y = Retencion, fill = "Retención"), stat = "identity", position = "dodge") +
  geom_bar(aes(y = Cambio, fill = "Cambio"), stat = "identity", position = "dodge") +
  labs(y = "Probabilidad", fill = "Tipo", title = "Probabilidades de Retención y Cambio por Clasificación") +
  theme_minimal()

Calificacion de los examenes 2 y 3

# Crear la tabla de transición 
tabla_transicion_E2_E3 <- table(notas_markov$"Clasificación E2", notas_markov$"Clasificación E3")

# Mostrarla
print(tabla_transicion_E2_E3)
              
               Aceptable Bueno Deficiente Excelente Insuficiente
  Aceptable           12    16          8        10            9
  Bueno                7    10          0         6            0
  Deficiente          16     3        347         2           62
  Excelente            3     4          1        13            1
  Insuficiente        12     5         22         0           47
# Calcular la matriz de transición y convertirla a matriz

matriz_transicion_E2_E3 <- as.matrix(prop.table(tabla_transicion_E2_E3, 1))

# Mostrar la matriz de transición
print(matriz_transicion_E2_E3)
              
                 Aceptable       Bueno  Deficiente   Excelente Insuficiente
  Aceptable    0.218181818 0.290909091 0.145454545 0.181818182  0.163636364
  Bueno        0.304347826 0.434782609 0.000000000 0.260869565  0.000000000
  Deficiente   0.037209302 0.006976744 0.806976744 0.004651163  0.144186047
  Excelente    0.136363636 0.181818182 0.045454545 0.590909091  0.045454545
  Insuficiente 0.139534884 0.058139535 0.255813953 0.000000000  0.546511628

Grafica de Probabilidades de Transición

library(ggplot2)

# Convertir la matriz de transición a formato largo para ggplot2
matriz_transicion_E2_E3_df <- as.data.frame(as.table(matriz_transicion_E2_E3))

# Crear el heatmap
ggplot(matriz_transicion_E2_E3_df, aes(Var1, Var2, fill = Freq)) +
  geom_tile(color = "white") +
  scale_fill_gradient(low = "white", high = "steelblue") +
  labs(x = "Examen 2", y = "Examen 3", fill = "Probabilidad") +
  ggtitle("Grafica de Probabilidades de Transición entre E2 y E3")

# Calcular la probabilidad de permanecer en el mismo estado (diagonal)
diagonal_E2_E3 <- diag(matriz_transicion_E2_E3)
cambio_E2_E3 <- rowSums(matriz_transicion_E2_E3) - diagonal_E2_E3

# Crear un data frame para el gráfico de barras
retencion_cambio_E2_E3 <- data.frame(
  Clasificacion = rownames(matriz_transicion_E2_E3),
  Retencion = diagonal_E2_E3,
  Cambio = cambio_E2_E3
)

# Graficar
ggplot(retencion_cambio_E2_E3, aes(x = Clasificacion)) +
  geom_bar(aes(y = Retencion, fill = "Retención"), stat = "identity", position = "dodge") +
  geom_bar(aes(y = Cambio, fill = "Cambio"), stat = "identity", position = "dodge") +
  labs(y = "Probabilidad", fill = "Tipo", title = "Probabilidades de Retención y Cambio entre E2 y E3") +
  theme_minimal()

Calificacion de los examenes 1 y 3

library(markovchain)

# Crear la tabla de transición y mostrarla
tabla_transicion_E1_E3 <- table(notas_markov$"Clasificación E1", notas_markov$"Clasificación E3")

print(tabla_transicion_E1_E3)
              
               Aceptable Bueno Deficiente Excelente Insuficiente
  Aceptable           19    11         24         4           12
  Bueno               12    15          2        16            3
  Deficiente           6     1        274         0           20
  Excelente            3     8          0        11            0
  Insuficiente        10     3         78         0           84
# Calcular la matriz de transición y mostrarla
matriz_transicion_E1_E3 <- prop.table(tabla_transicion_E1_E3, 1)

print(matriz_transicion_E1_E3)
              
                 Aceptable       Bueno  Deficiente   Excelente Insuficiente
  Aceptable    0.271428571 0.157142857 0.342857143 0.057142857  0.171428571
  Bueno        0.250000000 0.312500000 0.041666667 0.333333333  0.062500000
  Deficiente   0.019933555 0.003322259 0.910299003 0.000000000  0.066445183
  Excelente    0.136363636 0.363636364 0.000000000 0.500000000  0.000000000
  Insuficiente 0.057142857 0.017142857 0.445714286 0.000000000  0.480000000

Grafica de Probabilidades de Transición entre examen 1 y examen 3

library(ggplot2)

# Convertir la matriz de transición a formato largo para ggplot2
matriz_transicion_E1_E3_df <- as.data.frame(as.table(matriz_transicion_E1_E3))

# Crear el heatmap
ggplot(matriz_transicion_E1_E3_df, aes(Var1, Var2, fill = Freq)) +
  geom_tile(color = "white") +
  scale_fill_gradient(low = "white", high = "steelblue") +
  labs(x = "Examen 1", y = "Examen 3", fill = "Probabilidad") +
  ggtitle("Grafica de Probabilidades de Transición entre E1 y E3")

# Calcular la probabilidad de permanecer en el mismo estado (diagonal)
diagonal_E1_E3 <- diag(matriz_transicion_E1_E3)
cambio_E1_E3 <- rowSums(matriz_transicion_E1_E3) - diagonal_E1_E3

# Crear un data frame para el gráfico de barras
retencion_cambio_E1_E3 <- data.frame(
  Clasificacion = rownames(matriz_transicion_E1_E3),
  Retencion = diagonal_E1_E3,
  Cambio = cambio_E1_E3
)

# Graficar
ggplot(retencion_cambio_E1_E3, aes(x = Clasificacion)) +
  geom_bar(aes(y = Retencion, fill = "Retención"), stat = "identity", position = "dodge") +
  geom_bar(aes(y = Cambio, fill = "Cambio"), stat = "identity", position = "dodge") +
  labs(y = "Probabilidad", fill = "Tipo", title = "Probabilidades de Retención y Cambio entre E1 y E3") +
  theme_minimal()

Predicciones

matriz_transicion_E1_E4 <- matriz_transicion %*% matriz_transicion %*% matriz_transicion 
print(matriz_transicion_E1_E4)
              
                Aceptable        Bueno Deficiente    Excelente Insuficiente
  Aceptable    0.06876128 0.0295656226  0.7821243 0.0319195187   0.08762928
  Bueno        0.15900019 0.0979114550  0.5353775 0.1056450408   0.10206579
  Deficiente   0.01574285 0.0008601767  0.9373346 0.0008828285   0.04517958
  Excelente    0.23649591 0.1958010064  0.2708815 0.2157390229   0.08108254
  Insuficiente 0.02815759 0.0030169646  0.8809484 0.0031338477   0.08474320
matriz_transicion_E2_E4 <- matriz_transicion_E2_E3 %*% matriz_transicion_E2_E3
print(matriz_transicion_E2_E4)
              
                Aceptable      Bueno Deficiente  Excelente Insuficiente
  Aceptable    0.18917949 0.23353968 0.19923890 0.22367330   0.15436863
  Bueno        0.23430143 0.32500430 0.05612648 0.32290772   0.06166008
  Deficiente   0.06102202 0.02871654 0.69371995 0.01508714   0.20145435
  Excelente    0.17370037 0.22911865 0.09500288 0.42160919   0.08056890
  Insuficiente 0.13391471 0.09942871 0.36653719 0.04172665   0.35839274
# Instalar e importar las librerías necesarias
library(ggplot2)
library(reshape2)

# Convertir las matrices a formato largo para ggplot
P_12_melted <- melt(matriz_transicion)
P_23_melted <- melt(matriz_transicion_E2_E3)
P_13_melted <- melt(matriz_transicion_E1_E3)

# Graficar las tres matrices de transición
ggplot(P_12_melted, aes(Var1, Var2, fill=value)) + 
  geom_tile() + 
  labs(title="Matriz de Transición entre Examen 1 y Examen 2") +
  scale_fill_gradient(low="white", high="blue")

ggplot(P_23_melted, aes(Var1, Var2, fill=value)) + 
  geom_tile() + 
  labs(title="Matriz de Transición entre Examen 2 y Examen 3") +
  scale_fill_gradient(low="white", high="blue")

ggplot(P_13_melted, aes(Var1, Var2, fill=value)) + 
  geom_tile() + 
  labs(title="Matriz de Transición entre Examen 1 y Examen 3") +
  scale_fill_gradient(low="white", high="blue")

# Función para calcular la distancia de Kullback-Leibler entre dos matrices
kl_divergence <- function(P1, P2) {
  # Aplanar las matrices
  P1_flat <- as.vector(P1)
  P2_flat <- as.vector(P2)
  
  # Eliminar valores cero para evitar log(0)
  P1_flat[P1_flat == 0] <- 1e-10
  P2_flat[P2_flat == 0] <- 1e-10
  
  # Calcular la divergencia de Kullback-Leibler
  sum(P1_flat * log(P1_flat / P2_flat))
}

# Comparar las matrices
kl_12_23 <- kl_divergence(matriz_transicion, matriz_transicion_E2_E3)
kl_12_13 <- kl_divergence(matriz_transicion, matriz_transicion_E1_E3)
kl_23_13 <- kl_divergence(matriz_transicion_E2_E3, matriz_transicion_E1_E3)

# Imprimir las distancias
cat("Divergencia KL entre P_12 y P_23: ", kl_12_23, "\n")
Divergencia KL entre P_12 y P_23:  4.382355 
cat("Divergencia KL entre P_12 y P_13: ", kl_12_13, "\n")
Divergencia KL entre P_12 y P_13:  0.2934809 
cat("Divergencia KL entre P_23 y P_13: ", kl_23_13, "\n")
Divergencia KL entre P_23 y P_13:  2.383536 

Preguntas de probabilidad.

Matriz de transición del examen 1 al 2.

  1. ¿Cuál es la probabilidad de que un estudiante con calificación Aceptable en el Examen 1 pase a una calificación de Deficiente en el Examen 2?

La probabilidad es del 0.457, esto quiere decir que hay un 45.7% de probabilidad de que un estudiante con nota aceptable en el primer examen saque una calificación deficiente en el segundo.

  1. ¿Qué probabilidad tiene un estudiante con calificación Excelente en el Examen 1 de mantenerse en la categoría de Excelente en el Examen 2?

     La probabilidad es 0.50, esto quiere decir que hay un 50% de probabilidad de un estudiante de mantenerse en una calificación excelente para un segundo examen.

3.      Si un estudiante obtuvo una calificación de Insuficiente en el Examen 1, ¿cuál es la probabilidad de que pase a Deficiente en el Examen 2?

     La probabilidad es 0.5943, hay un 59.43% de probabilidad de que un estudiante que obtuvo una calificación deficiente en el primer examen baje a deficiente en el segundo.

4.      ¿Cuál es la probabilidad de que un estudiante con calificación Deficiente en el Examen 1 continúe en Deficiente en el Examen 2?

     La probabilidad es 0.9601, esto quiere decir que hay 96.01% de que los estudiantes que obtuvieron una calificación deficiente en el primer examen 1 obtengan la misma calificación en el segundo examen.

5.      Si un estudiante está en la categoría de Aceptable en el Examen 1, ¿qué probabilidad tiene de mejorar a la categoría de Excelente en el Examen 2?

     La probabilidad es 0.0429, hay una probabilidad de 4.29% de que un estudiante que obtuvo una calificación aceptable saque una nota excelente en el segundo examen.

Matriz de transición del examen 1 y 3.

1.      ¿Cuál es la probabilidad de que un estudiante con calificación Aceptable en el Examen 1 obtenga una calificación Deficiente en el Examen 3?

     La probabilidad es 0.3429, hay una probabilidad del 34.29% de que un estudiante con calificación aceptable en el primer examen baje a deficiente en el tercero.

2.      ¿Qué probabilidad tiene un estudiante con calificación Excelente en el Examen 1 de permanecer en la categoría de Excelente en el Examen 3?

     La probabilidad es 0.5, la probabilidad de que un estudiante con nota excelente en el primer examen se mantenga en excelente en un tercero es de 50%.

3.      Si un estudiante obtuvo una calificación de Insuficiente en el Examen 1, ¿cuál es la probabilidad de que pase a Deficiente en el Examen 3?

     La probabilidad es 0.4457, hay una probabilidad del 44.57% de que un estudiante con nota insuficiente el examen 1 baje a deficiente en el tercer examen.

4.      ¿Cuál es la probabilidad de que un estudiante con calificación Deficiente en el Examen 1 continúe en Deficiente en el Examen 3?

     La probabilidad es 0.9103, la probabilidad es del 91.03% de que un estudiante con calificación deficiente en el examen 1 se mantenga para un examen 3.

5.      Si un estudiante está en la categoría de Aceptable en el Examen 1, ¿qué probabilidad tiene de mejorar a la categoría de Excelente en el Examen 3?

     La probabilidad es 0.0571, la probabilidad es del 5.71%.

Matriz de transición del examen 2 al 3.

1.      ¿Cuál es la probabilidad de que un estudiante con calificación Aceptable en el Examen 2 obtenga una calificación de Bueno en el Examen 3?

     La probabilidad es 0.2909 o 29.09%.

2.      ¿Qué probabilidad tiene un estudiante con calificación Excelente en el Examen 2 de permanecer en la categoría de Excelente en el Examen 3?

     La probabilidad es 0.5909 o 59.09%.

3.      Si un estudiante obtuvo una calificación de Insuficiente en el Examen 2, ¿cuál es la probabilidad de que pase a Deficiente en el Examen 3?

     La probabilidad es 0.2558 o 25.58%.

4.      Dado que un estudiante obtuvo calificación de Bueno en el Examen 2, ¿cuál es la probabilidad de que permanezca en Bueno en el Examen 3?

     La probabilidad es 0.4348 o 43.48%.

5.      ¿Cuál es la probabilidad de que un estudiante con calificación Deficiente en el Examen 2 continúe en Deficiente en el Examen 3?

     La probabilidad es 0.8070 o 80.7%.

6.      Si un estudiante está en la categoría de Aceptable en el Examen 2, ¿qué probabilidad tiene de mejorar a la categoría de Excelente en el Examen 3?

     La probabilidad es 0.1818 o 18.18%.

Matriz de transición de tres pasos del examen 1 al 4.

1.      ¿Cuál es la probabilidad de que un estudiante con calificación Aceptable en el Examen 1 tenga una calificación Deficiente en el Examen 4?

     La probabilidad es 0.7821 o 78.21%.

2.      Dado que un estudiante obtuvo la calificación de Excelente en el Examen 1, ¿cuál es la probabilidad de que mantenga la calificación de Excelente en el Examen 4?

     La probabilidad es 0.2157 o 21.57%.

3.      Si un estudiante comenzó con la calificación de Bueno en el Examen 1, ¿cuál es la probabilidad de que termine con una calificación Insuficiente en el Examen 4?

     La probabilidad es 0.1021 o 10.21%.

4.      ¿Cuál es la probabilidad de que un estudiante que estaba en la categoría de Deficiente en el Examen 1 siga en la misma categoría en el Examen 4?

     La probabilidad es 0.9373 o 93.73%.

5.      ¿Qué probabilidad tiene un estudiante con calificación Insuficiente en el Examen 1 de mejorar a la calificación de Bueno en el Examen 4?

    La probabilidad es 0.0030 o 0.30%.

Matriz de transición de examen 2 en dos pasos al 4.

1.      ¿Cuál es la probabilidad de que un estudiante que obtuvo una calificación Bueno en el examen 2, obtenga una calificación Excelente en el examen 4?

     La probabilidad es 0.3229 o 32.29%

2.      Si un estudiante tiene una calificación Deficiente en el examen 2, ¿cuál es la probabilidad de que obtenga una calificación Insuficiente en el examen 4?

     La probabilidad es 0.2014 o 20.14%

3.      ¿Cuál es la probabilidad de que un estudiante que obtuvo Aceptable en el examen 2, obtenga Excelente en el examen 4?

     La probabilidad es 0.2237 o 22.37%.

4.      Dado que un estudiante tiene una calificación Excelente en el examen 2, ¿cuál es la probabilidad de que su calificación en el examen 4 sea Bueno?

     La probabilidad es del 0.2291 0 22.91%

5.      Si un estudiante obtuvo Insuficiente en el examen 2, ¿cuál es la probabilidad de que en el examen 4 obtenga Deficiente?

     La probabilidad es del 0.3665 o 36.65%.