Este análisis tiene como objetivo construir un modelo de regresión múltiple para predecir el Puntaje Global en las pruebas Saber 11. Utilizaremos información proporcionada por el Ministerio de Educación, que incluye variables demográficas, socioeconómicas y de desempeño académico. El análisis se llevará a cabo en R Markdown y será publicado en RPubs.
library(MASS)
library(corrplot)
## corrplot 0.95 loaded
library(readxl)
library(ggplot2)
# Leer los datos
Datos <- read_excel("Datos_Modelo_de_Regresion_Lineal_Multiple.xlsx", na = "-")
# Seleccionar columnas relevantes
Datos <- subset(Datos, select = c(
ESTU_GENERO, ESTU_TIENEETNIA, ESTU_DEPTO_RESIDE,
FAMI_ESTRATOVIVIENDA, COLE_NATURALEZA, COLE_CALENDARIO,
PUNT_LECTURA_CRITICA, PUNT_MATEMATICAS, PUNT_C_NATURALES,
PUNT_SOCIALES_CIUDADANAS, PUNT_INGLES, PUNT_GLOBAL
))
# Inspeccionar estructura de los datos
str(Datos)
## tibble [199 × 12] (S3: tbl_df/tbl/data.frame)
## $ ESTU_GENERO : chr [1:199] "M" "M" "M" "M" ...
## $ ESTU_TIENEETNIA : chr [1:199] "No" "No" "No" "Si" ...
## $ ESTU_DEPTO_RESIDE : chr [1:199] "MAGDALENA" "BOGOTÃ\u0081" "BOLIVAR" "BOGOTÃ\u0081" ...
## $ FAMI_ESTRATOVIVIENDA : chr [1:199] "Estrato 3" "Estrato 3" "Estrato 1" "Estrato 3" ...
## $ COLE_NATURALEZA : chr [1:199] "OFICIAL" "NO OFICIAL" "OFICIAL" "OFICIAL" ...
## $ COLE_CALENDARIO : chr [1:199] "A" "A" "A" "A" ...
## $ PUNT_LECTURA_CRITICA : num [1:199] 47 60 66 62 63 49 76 57 62 68 ...
## $ PUNT_MATEMATICAS : num [1:199] 48 65 57 54 57 29 70 65 62 66 ...
## $ PUNT_C_NATURALES : num [1:199] 37 54 41 61 55 41 70 63 66 63 ...
## $ PUNT_SOCIALES_CIUDADANAS: num [1:199] 30 59 74 73 57 41 68 66 39 77 ...
## $ PUNT_INGLES : num [1:199] 54 63 64 53 52 35 72 60 63 51 ...
## $ PUNT_GLOBAL : num [1:199] 208 299 299 309 288 198 355 313 288 336 ...
summary(Datos)
## ESTU_GENERO ESTU_TIENEETNIA ESTU_DEPTO_RESIDE FAMI_ESTRATOVIVIENDA
## Length:199 Length:199 Length:199 Length:199
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## COLE_NATURALEZA COLE_CALENDARIO PUNT_LECTURA_CRITICA PUNT_MATEMATICAS
## Length:199 Length:199 Min. :26.00 Min. :23.00
## Class :character Class :character 1st Qu.:44.00 1st Qu.:42.00
## Mode :character Mode :character Median :54.00 Median :52.00
## Mean :52.13 Mean :51.03
## 3rd Qu.:60.00 3rd Qu.:61.00
## Max. :77.00 Max. :77.00
## PUNT_C_NATURALES PUNT_SOCIALES_CIUDADANAS PUNT_INGLES PUNT_GLOBAL
## Min. :23.0 Min. :21.0 Min. : 24.00 Min. :132.0
## 1st Qu.:40.5 1st Qu.:35.0 1st Qu.: 37.00 1st Qu.:204.5
## Median :49.0 Median :45.0 Median : 48.00 Median :243.0
## Mean :48.9 Mean :46.1 Mean : 48.68 Mean :247.4
## 3rd Qu.:57.0 3rd Qu.:55.0 3rd Qu.: 59.00 3rd Qu.:292.0
## Max. :74.0 Max. :77.0 Max. :100.00 Max. :366.0
# Convertir variables categóricas a factores
Datos$ESTU_GENERO <- as.factor(Datos$ESTU_GENERO)
Datos$ESTU_TIENEETNIA <- as.factor(Datos$ESTU_TIENEETNIA)
Datos$ESTU_DEPTO_RESIDE <- as.factor(Datos$ESTU_DEPTO_RESIDE)
Datos$FAMI_ESTRATOVIVIENDA <- as.factor(Datos$FAMI_ESTRATOVIVIENDA)
Datos$COLE_NATURALEZA <- as.factor(Datos$COLE_NATURALEZA)
Datos$COLE_CALENDARIO <- as.factor(Datos$COLE_CALENDARIO)
# Eliminar filas con valores faltantes
Datos_clean <- na.omit(Datos)
# Gráfico de barras para variables categóricas
categoricas <- c("ESTU_GENERO", "ESTU_TIENEETNIA", "FAMI_ESTRATOVIVIENDA", "COLE_NATURALEZA", "COLE_CALENDARIO")
for (var in categoricas) {
print(ggplot(Datos_clean, aes_string(var)) +
geom_bar(fill = "steelblue") +
theme_minimal() +
labs(title = paste("Distribución de", var), x = var, y = "Frecuencia"))
}
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Gráficos de dispersión para variables numéricas
numeric_vars <- c("PUNT_LECTURA_CRITICA", "PUNT_MATEMATICAS", "PUNT_C_NATURALES",
"PUNT_SOCIALES_CIUDADANAS", "PUNT_INGLES", "PUNT_GLOBAL")
for (var in numeric_vars[-length(numeric_vars)]) {
print(ggplot(Datos_clean, aes_string(x = var, y = "PUNT_GLOBAL")) +
geom_point(alpha = 0.5, color = "darkred") +
theme_minimal() +
labs(title = paste("Relación entre", var, "y Puntaje Global"),
x = var, y = "Puntaje Global"))
}
# Seleccionar solo variables numéricas
numeric_data <- subset(Datos_clean, select = c(
PUNT_LECTURA_CRITICA, PUNT_MATEMATICAS,
PUNT_C_NATURALES, PUNT_SOCIALES_CIUDADANAS,
PUNT_INGLES, PUNT_GLOBAL
))
# Matriz de correlación
cor_matrix <- cor(numeric_data, method = "pearson")
corrplot(round(cor_matrix, 3), type = "lower")
# Modelo inicial
modelo.lineal <- lm(PUNT_GLOBAL ~ ., data = Datos_clean)
summary(modelo.lineal)
##
## Call:
## lm(formula = PUNT_GLOBAL ~ ., data = Datos_clean)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.61117 -0.17823 -0.00135 0.20946 0.59566
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.126591 0.192322 0.658 0.51143
## ESTU_GENEROM 0.109047 0.072370 1.507 0.13402
## ESTU_TIENEETNIASi 0.014411 0.077313 0.186 0.85239
## ESTU_DEPTO_RESIDEARAUCA 0.065001 0.203870 0.319 0.75031
## ESTU_DEPTO_RESIDEATLANTICO -0.196208 0.129286 -1.518 0.13127
## ESTU_DEPTO_RESIDEBOGOTÃ\u0081 -0.076761 0.131868 -0.582 0.56140
## ESTU_DEPTO_RESIDEBOLIVAR -0.156297 0.135507 -1.153 0.25062
## ESTU_DEPTO_RESIDEBOYACA 0.070826 0.227565 0.311 0.75607
## ESTU_DEPTO_RESIDECASANARE -0.282042 0.229299 -1.230 0.22067
## ESTU_DEPTO_RESIDECAUCA -0.308032 0.183148 -1.682 0.09473 .
## ESTU_DEPTO_RESIDECESAR -0.058768 0.143419 -0.410 0.68258
## ESTU_DEPTO_RESIDECHOCO -0.103888 0.201470 -0.516 0.60688
## ESTU_DEPTO_RESIDECORDOBA -0.136741 0.136943 -0.999 0.31967
## ESTU_DEPTO_RESIDECUNDINAMARCA -0.299649 0.143181 -2.093 0.03810 *
## ESTU_DEPTO_RESIDEHUILA -0.336642 0.186266 -1.807 0.07277 .
## ESTU_DEPTO_RESIDELA GUAJIRA -0.413004 0.157937 -2.615 0.00986 **
## ESTU_DEPTO_RESIDEMAGDALENA -0.159045 0.144253 -1.103 0.27204
## ESTU_DEPTO_RESIDEMETA -0.082537 0.178834 -0.462 0.64511
## ESTU_DEPTO_RESIDENORTE SANTANDER -0.100329 0.170591 -0.588 0.55736
## ESTU_DEPTO_RESIDEQUINDIO 0.095260 0.301105 0.316 0.75218
## ESTU_DEPTO_RESIDESAN ANDRES -0.395191 0.325178 -1.215 0.22621
## ESTU_DEPTO_RESIDESANTANDER -0.146427 0.144357 -1.014 0.31210
## ESTU_DEPTO_RESIDESUCRE -0.101082 0.146086 -0.692 0.49008
## ESTU_DEPTO_RESIDEVALLE -0.220915 0.158203 -1.396 0.16471
## FAMI_ESTRATOVIVIENDAEstrato 2 0.046162 0.061683 0.748 0.45544
## FAMI_ESTRATOVIVIENDAEstrato 3 0.077922 0.071443 1.091 0.27721
## FAMI_ESTRATOVIVIENDAEstrato 4 -0.045525 0.083214 -0.547 0.58516
## FAMI_ESTRATOVIVIENDAEstrato 5 0.087011 0.138977 0.626 0.53224
## FAMI_ESTRATOVIVIENDASin Estrato 0.116818 0.099185 1.178 0.24080
## COLE_NATURALEZAOFICIAL 0.028854 0.058738 0.491 0.62399
## COLE_CALENDARIOOTRO 0.013259 0.308584 0.043 0.96579
## PUNT_LECTURA_CRITICA 1.147945 0.003632 316.065 < 2e-16 ***
## PUNT_MATEMATICAS 1.156401 0.003372 342.900 < 2e-16 ***
## PUNT_C_NATURALES 1.148460 0.003710 309.546 < 2e-16 ***
## PUNT_SOCIALES_CIUDADANAS 1.158027 0.002726 424.817 < 2e-16 ***
## PUNT_INGLES 0.386877 0.002784 138.981 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2705 on 146 degrees of freedom
## Multiple R-squared: 1, Adjusted R-squared: 1
## F-statistic: 1.994e+05 on 35 and 146 DF, p-value: < 2.2e-16
# Selección de variables con Stepwise
modelo.step <- stepAIC(modelo.lineal, direction = "both")
## Start: AIC=-444.04
## PUNT_GLOBAL ~ ESTU_GENERO + ESTU_TIENEETNIA + ESTU_DEPTO_RESIDE +
## FAMI_ESTRATOVIVIENDA + COLE_NATURALEZA + COLE_CALENDARIO +
## PUNT_LECTURA_CRITICA + PUNT_MATEMATICAS + PUNT_C_NATURALES +
## PUNT_SOCIALES_CIUDADANAS + PUNT_INGLES
##
## Df Sum of Sq RSS AIC
## - ESTU_DEPTO_RESIDE 21 1.7 12.4 -459.42
## - FAMI_ESTRATOVIVIENDA 5 0.3 11.0 -449.40
## - COLE_CALENDARIO 1 0.0 10.7 -446.04
## - ESTU_TIENEETNIA 1 0.0 10.7 -446.00
## - COLE_NATURALEZA 1 0.0 10.7 -445.74
## <none> 10.7 -444.04
## - ESTU_GENERO 1 0.2 10.8 -443.23
## - PUNT_INGLES 1 1413.3 1424.0 444.41
## - PUNT_C_NATURALES 1 7010.9 7021.6 734.80
## - PUNT_LECTURA_CRITICA 1 7309.3 7320.0 742.37
## - PUNT_MATEMATICAS 1 8603.1 8613.8 772.00
## - PUNT_SOCIALES_CIUDADANAS 1 13204.6 13215.3 849.89
##
## Step: AIC=-459.42
## PUNT_GLOBAL ~ ESTU_GENERO + ESTU_TIENEETNIA + FAMI_ESTRATOVIVIENDA +
## COLE_NATURALEZA + COLE_CALENDARIO + PUNT_LECTURA_CRITICA +
## PUNT_MATEMATICAS + PUNT_C_NATURALES + PUNT_SOCIALES_CIUDADANAS +
## PUNT_INGLES
##
## Df Sum of Sq RSS AIC
## - FAMI_ESTRATOVIVIENDA 5 0.2 12.6 -466.01
## - ESTU_TIENEETNIA 1 0.0 12.4 -461.42
## - COLE_NATURALEZA 1 0.0 12.4 -461.13
## - COLE_CALENDARIO 1 0.0 12.4 -460.83
## <none> 12.4 -459.42
## - ESTU_GENERO 1 0.2 12.6 -458.33
## + ESTU_DEPTO_RESIDE 21 1.7 10.7 -444.04
## - PUNT_INGLES 1 1656.9 1669.2 431.33
## - PUNT_C_NATURALES 1 7577.3 7589.6 706.96
## - PUNT_LECTURA_CRITICA 1 8150.5 8162.9 720.21
## - PUNT_MATEMATICAS 1 9710.1 9722.5 752.03
## - PUNT_SOCIALES_CIUDADANAS 1 14192.5 14204.9 821.03
##
## Step: AIC=-466.01
## PUNT_GLOBAL ~ ESTU_GENERO + ESTU_TIENEETNIA + COLE_NATURALEZA +
## COLE_CALENDARIO + PUNT_LECTURA_CRITICA + PUNT_MATEMATICAS +
## PUNT_C_NATURALES + PUNT_SOCIALES_CIUDADANAS + PUNT_INGLES
##
## Df Sum of Sq RSS AIC
## - ESTU_TIENEETNIA 1 0.0 12.6 -467.94
## - COLE_NATURALEZA 1 0.0 12.6 -467.65
## - COLE_CALENDARIO 1 0.0 12.6 -467.41
## <none> 12.6 -466.01
## - ESTU_GENERO 1 0.3 12.9 -463.75
## + FAMI_ESTRATOVIVIENDA 5 0.2 12.4 -459.42
## + ESTU_DEPTO_RESIDE 21 1.6 11.0 -449.40
## - PUNT_INGLES 1 1732.2 1744.8 429.39
## - PUNT_C_NATURALES 1 7758.8 7771.4 701.26
## - PUNT_LECTURA_CRITICA 1 8260.1 8272.7 712.64
## - PUNT_MATEMATICAS 1 10573.4 10586.0 757.52
## - PUNT_SOCIALES_CIUDADANAS 1 14541.6 14554.2 815.46
##
## Step: AIC=-467.94
## PUNT_GLOBAL ~ ESTU_GENERO + COLE_NATURALEZA + COLE_CALENDARIO +
## PUNT_LECTURA_CRITICA + PUNT_MATEMATICAS + PUNT_C_NATURALES +
## PUNT_SOCIALES_CIUDADANAS + PUNT_INGLES
##
## Df Sum of Sq RSS AIC
## - COLE_NATURALEZA 1 0.0 12.6 -469.63
## - COLE_CALENDARIO 1 0.0 12.6 -469.32
## <none> 12.6 -467.94
## + ESTU_TIENEETNIA 1 0.0 12.6 -466.01
## - ESTU_GENERO 1 0.3 12.9 -465.75
## + FAMI_ESTRATOVIVIENDA 5 0.2 12.4 -461.42
## + ESTU_DEPTO_RESIDE 21 1.6 11.0 -451.37
## - PUNT_INGLES 1 1733.3 1745.9 427.50
## - PUNT_C_NATURALES 1 7758.8 7771.4 699.27
## - PUNT_LECTURA_CRITICA 1 8295.1 8307.7 711.41
## - PUNT_MATEMATICAS 1 10820.2 10832.8 759.71
## - PUNT_SOCIALES_CIUDADANAS 1 14836.4 14849.0 817.11
##
## Step: AIC=-469.63
## PUNT_GLOBAL ~ ESTU_GENERO + COLE_CALENDARIO + PUNT_LECTURA_CRITICA +
## PUNT_MATEMATICAS + PUNT_C_NATURALES + PUNT_SOCIALES_CIUDADANAS +
## PUNT_INGLES
##
## Df Sum of Sq RSS AIC
## - COLE_CALENDARIO 1 0.0 12.7 -471.13
## <none> 12.6 -469.63
## + COLE_NATURALEZA 1 0.0 12.6 -467.94
## + ESTU_TIENEETNIA 1 0.0 12.6 -467.65
## - ESTU_GENERO 1 0.3 12.9 -467.60
## + FAMI_ESTRATOVIVIENDA 5 0.2 12.4 -463.13
## + ESTU_DEPTO_RESIDE 21 1.6 11.0 -453.03
## - PUNT_INGLES 1 1840.6 1853.3 436.37
## - PUNT_C_NATURALES 1 7837.7 7850.3 699.10
## - PUNT_LECTURA_CRITICA 1 8327.0 8339.7 710.11
## - PUNT_MATEMATICAS 1 10820.1 10832.8 757.71
## - PUNT_SOCIALES_CIUDADANAS 1 14893.8 14906.4 815.81
##
## Step: AIC=-471.13
## PUNT_GLOBAL ~ ESTU_GENERO + PUNT_LECTURA_CRITICA + PUNT_MATEMATICAS +
## PUNT_C_NATURALES + PUNT_SOCIALES_CIUDADANAS + PUNT_INGLES
##
## Df Sum of Sq RSS AIC
## <none> 12.7 -471.13
## + COLE_CALENDARIO 1 0.0 12.6 -469.63
## + COLE_NATURALEZA 1 0.0 12.6 -469.32
## + ESTU_TIENEETNIA 1 0.0 12.7 -469.17
## - ESTU_GENERO 1 0.3 13.0 -468.98
## + FAMI_ESTRATOVIVIENDA 5 0.2 12.4 -464.67
## + ESTU_DEPTO_RESIDE 21 1.7 11.0 -455.03
## - PUNT_INGLES 1 1840.6 1853.3 434.37
## - PUNT_C_NATURALES 1 7840.6 7853.3 697.17
## - PUNT_LECTURA_CRITICA 1 8328.1 8340.8 708.13
## - PUNT_MATEMATICAS 1 11031.7 11044.4 759.23
## - PUNT_SOCIALES_CIUDADANAS 1 14921.0 14933.7 814.14
summary(modelo.step)
##
## Call:
## lm(formula = PUNT_GLOBAL ~ ESTU_GENERO + PUNT_LECTURA_CRITICA +
## PUNT_MATEMATICAS + PUNT_C_NATURALES + PUNT_SOCIALES_CIUDADANAS +
## PUNT_INGLES, data = Datos_clean)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.52395 -0.19009 0.00755 0.20073 0.54314
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.057527 0.117209 -0.491 0.6242
## ESTU_GENEROM 0.132128 0.065790 2.008 0.0461 *
## PUNT_LECTURA_CRITICA 1.147868 0.003383 339.288 <2e-16 ***
## PUNT_MATEMATICAS 1.157342 0.002964 390.497 <2e-16 ***
## PUNT_C_NATURALES 1.148964 0.003490 329.209 <2e-16 ***
## PUNT_SOCIALES_CIUDADANAS 1.158049 0.002550 454.146 <2e-16 ***
## PUNT_INGLES 0.386784 0.002425 159.507 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.269 on 175 degrees of freedom
## Multiple R-squared: 1, Adjusted R-squared: 1
## F-statistic: 1.177e+06 on 6 and 175 DF, p-value: < 2.2e-16
# Análisis de residuos
par(mfrow = c(2, 2))
plot(modelo.step)
# Coeficientes del modelo final
coef(modelo.step)
## (Intercept) ESTU_GENEROM PUNT_LECTURA_CRITICA
## -0.05752675 0.13212847 1.14786825
## PUNT_MATEMATICAS PUNT_C_NATURALES PUNT_SOCIALES_CIUDADANAS
## 1.15734231 1.14896380 1.15804947
## PUNT_INGLES
## 0.38678408