Regresión lineal múltiple

El siguiente trabajo realizará un análisis de regresión múltiple teniendo en cuenta los resultados obtenidos por los estudiantes en las pruebas ICFES realizadas en el año 2019 en la capital de nuestro país, Bogotá. Miraremos un poco cómo fue el desempeño en las diferentes materias evaluadas.

Importamos la base de datos

Como lo mencioné anteriormente, mi análisis se enfocará en los resultados obtenidos en Bogotá. Es de mi interés conocer cómo es el desempeño de los estudiantes de la capital de nuestro país.

Este es el código correspondiente al archivo de Excel al cual posteriormente le realizaré un análisis de regresión lineal múltiple, un análisis de normalidad y un análisis de regresión.

knitr::opts_chunk$set(echo = TRUE)
library(readxl)
icfes_bogota <- read_excel("icfes bogota.xlsx", 
    col_types = c("text", "date", "text", 
        "text", "numeric", "text", "text", 
        "text", "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "text", "numeric", 
        "numeric"))

Análisis de regresión lineal múltiple

library(dplyr)  # Cargamos la librería dplyr para manipulación de datos

# Seleccionamos de la base de datos 'icfes_bogota' solo las variables numéricas
var_int <- icfes_bogota %>% select_if(is.numeric) 

matriz_correlacion <- cor(var_int, use = "complete.obs")
library(corrplot)

# Generamos la matriz de correlación.
corrplot(matriz_correlacion, method = "circle", type = "full", 
         col = colorRampPalette(c("blue", "blue", "white"))(100), 
         tl.col = "black", tl.cex = 0.4, 
         addCoef.col = "black", 
         number.cex = 0.1) 

# Ajustamos un modelo de regresión lineal múltiple, donde:
#   - PUNT_GLOBAL es la variable dependiente (lo que queremos predecir)
#   - Las demás variables son las predictoras
rlm <- lm(PUNT_GLOBAL ~ PUNT_LECTURA_CRITICA + PUNT_MATEMATICAS + PUNT_C_NATURALES + PUNT_SOCIALES_CIUDADANAS + PUNT_INGLES, data = var_int)

# Obtenemos un resumen del modelo ajustado, incluyendo coeficientes, significancia, R-cuadrado, etc.
summary(rlm)
## 
## Call:
## lm(formula = PUNT_GLOBAL ~ PUNT_LECTURA_CRITICA + PUNT_MATEMATICAS + 
##     PUNT_C_NATURALES + PUNT_SOCIALES_CIUDADANAS + PUNT_INGLES, 
##     data = var_int)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.53663 -0.21900  0.00371  0.20022  0.49946 
## 
## Coefficients:
##                          Estimate Std. Error t value Pr(>|t|)    
## (Intercept)              0.133823   0.129904    1.03    0.305    
## PUNT_LECTURA_CRITICA     1.150057   0.003910  294.15   <2e-16 ***
## PUNT_MATEMATICAS         1.156045   0.003688  313.47   <2e-16 ***
## PUNT_C_NATURALES         1.153027   0.004577  251.93   <2e-16 ***
## PUNT_SOCIALES_CIUDADANAS 1.153317   0.003272  352.53   <2e-16 ***
## PUNT_INGLES              0.385254   0.002477  155.51   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2821 on 158 degrees of freedom
## Multiple R-squared:      1,  Adjusted R-squared:      1 
## F-statistic: 1.06e+06 on 5 and 158 DF,  p-value: < 2.2e-16

Para este análisis, he decidido tomar el puntaje global como mi variable respuesta y las otras variables como las que lo determinan, porque variables como PUNT_LECTURA_CRITICA, PUNT_MATEMATICAS, etc., representan posibles factores explicativos que influyen en PUNT_GLOBAL.

Conclusión:

El análisis de regresión lineal múltiple muestra que todas las variables predictoras (PUNT_LECTURA_CRITICA, PUNT_MATEMATICAS, PUNT_C_NATURALES, PUNT_SOCIALES_CIUDADANAS y PUNT_INGLES) tienen un impacto positivo y significativo en el PUNT_GLOBAL, siendo PUNT_INGLES la que tiene el menor efecto relativo. El modelo tiene un ajuste perfecto (R² = 1) y un error estándar residual bajo (0.2821), lo que indica una excelente capacidad predictiva. En general, los resultados confirman que los puntajes en las diferentes áreas evaluadas son factores clave para explicar el puntaje global.

Optimización del Modelo de Regresión

var_int=step(rlm, direction="both", trace=2)
## Start:  AIC=-409.21
## PUNT_GLOBAL ~ PUNT_LECTURA_CRITICA + PUNT_MATEMATICAS + PUNT_C_NATURALES + 
##     PUNT_SOCIALES_CIUDADANAS + PUNT_INGLES
## 
##                            Df Sum of Sq    RSS     AIC
## <none>                                    12.6 -409.21
## - PUNT_INGLES               1    1924.4 1937.0  414.92
## - PUNT_C_NATURALES          1    5050.5 5063.0  572.50
## - PUNT_LECTURA_CRITICA      1    6885.1 6897.7  623.21
## - PUNT_MATEMATICAS          1    7819.2 7831.7  644.04
## - PUNT_SOCIALES_CIUDADANAS  1    9889.0 9901.6  682.50

Conclusión:

El modelo de regresión optimizado confirma que todas las variables predictoras contribuyen significativamente a explicar la variabilidad del puntaje global, ya que eliminar cualquiera de ellas incrementaría notablemente el RSS (residual sum of squares) y el AIC, lo que indicaría un ajuste mucho peor del modelo. Esto refuerza la importancia de incluir todas las variables seleccionadas para mantener la precisión del modelo.

Análisis de normalidad

qqnorm(resid(rlm),
       main = "QQ-Plot: Análisis puntaje global",
       xlab = "Materias evaluadas",     # Etiqueta del eje X
       ylab = "Puntaje global", # Etiqueta del eje Y
       col = "yellow", pch = 19)
qqline(resid(rlm), col = "purple", lwd = 2)

Conclusión:

El QQ-Plot muestra que los residuos del modelo de regresión se alinean bastante bien con la línea diagonal, especialmente en el rango central, lo que sugiere que los residuos siguen aproximadamente una distribución normal. Sin embargo, hay ligeras desviaciones en los extremos, lo que podría indicar posibles outliers o valores extremos. En general, el supuesto de normalidad parece cumplirse razonablemente.

Gráfico de dispersión

plot(rlm$fitted.values, var_int$PUNT_GLOBAL,
     main = "Gráfico de dispersión",
     xlab = "Puntajes de las materias",
     ylab = "Puntaje global",
     col = "yellow", pch = 19)
abline(0, 1, col = "purple", lwd = 2)

Conclusión:

El gráfico de dispersión muestra la relación entre los puntajes globales y los puntajes de las materias evaluadas. A simple vista, no se observa un patrón claro de asociación lineal entre ambas variables, lo que podría indicar que otros factores o interacciones complejas también influyen en el puntaje global.