Tema: Educación en México
La educación siempre ha sido importante para el desarrollo, pero ha adquirido mayor relevancia en el mundo de hoy que vive profundas transformaciones, motivadas en parte por el vertiginoso avance de la ciencia y sus aplicaciones, así como por el no menos acelerado desarrollo de los medios y las tecnologías de la información. En México, más 4 millones de niños, niñas y adolescentes no asisten a la escuela, mientras que 600 mil más están en riesgo de dejarla por diversos factores como la falta de recursos, la lejanía de las escuelas y la violencia. Además, los niños y niñas que sí van a la escuela tienen un aprovechamiento bajo de los contenidos impartidos en la educación básica obligatoria.
Importación de datos
setwd("~/estadistica")
library(readxl)
library(tidyverse)## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.3 v purrr 0.3.4
## v tibble 3.0.5 v dplyr 1.0.4
## v tidyr 1.1.2 v stringr 1.4.0
## v readr 1.4.0 v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(prettydoc)
library(readr)
library(DT)
library(pacman)
p_load("base64enc","htmltools","mime","xfun","prettydoc","readr","knitr","DT","dplyr","ggplot2","plotly","gganimate","gifski","scales", "MASS", "class")tasa <- read.csv("EducacionTasa.csv") Tabla de datos
datatable(tasa)REGRESION LINEAL MÚLTIPLE
La regresión lineal múltiple permite generar un modelo lineal en el que el valor de la variable dependiente o respuesta (Y ) se determina a partir de un conjunto de variables independientes llamadas predictores (X1 , X2 , X3 …). Es una extensión de la regresión lineal simple, por lo que es fundamental comprender esta última. Los modelos de regresión múltiple pueden emplearse para predecir el valor de la variable dependiente o para evaluar la influencia que tienen los predictores sobre ella (esto último se debe que analizar con cautela para no malinterpretar causa-efecto).
Los modelos lineales múltiples siguen la siguiente ecuación:
\(Y_{i}=(\beta_{0}+\beta_{1}X_{1i}+\beta_{2}X_{2i}+\cdots+\beta_{n}X_{ni})+e_{i}\)
β0 es la ordenada en el origen, el valor de la variable dependiente Y cuando todos los predictores son cero.
βi : es el efecto promedio que tiene el incremento en una unidad de la variable predictora Xi sobre la variable dependiente Y , manteniéndose constantes el resto de variables. Se conocen como coeficientes parciales de regresión.
ei: es el residuo o error, la diferencia entre el valor observado y el estimado por el modelo.
Es importante tener en cuenta que la magnitud de cada coeficiente parcial de regresión depende de las unidades en las que se mida la variable predictora a la que corresponde, por lo que su magnitud no está asociada con la importancia de cada predictor. Para poder determinar qué impacto tienen en el modelo cada una de las variables, se emplean los coeficientes parciales estandarizados, que se obtienen al estandarizar (sustraer la media y dividir entre la desviación estándar) las variables predictoras previo ajustes
Analizar relación entre variables.
- Matriz de Coeficientes de correlacion
round( cor( x = tasa, method = "pearson"), 3)## periodo preescolar primaria secundaria
## periodo 1.000 0.969 0.430 0.979
## preescolar 0.969 1.000 0.342 0.958
## primaria 0.430 0.342 1.000 0.397
## secundaria 0.979 0.958 0.397 1.000
La variable con más correlación al periodo es secundaria, después preescolar y primaria es la menos correlacionada.
- Distribucion de los datos
library(psych)##
## Attaching package: 'psych'
## The following objects are masked from 'package:scales':
##
## alpha, rescale
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
multi.hist(x = tasa, dcol = c("blue", "red"), dlty = c("dotted", "solid"),
main = "")library(GGally)## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
ggpairs(tasa, lower = list(continuous = "smooth"),
diag = list(continuous = "barDiag"), axisLabels = "none")## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Generar el modelo.
modelo <- lm(periodo ~ preescolar + primaria + secundaria, data = tasa )
summary(modelo)##
## Call:
## lm(formula = periodo ~ preescolar + primaria + secundaria, data = tasa)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.4727 -0.5926 -0.1704 0.3847 4.2634
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.902e+03 3.135e+01 60.663 < 2e-16 ***
## preescolar 2.762e-01 7.622e-02 3.624 0.00136 **
## primaria 6.100e-01 3.248e-01 1.878 0.07257 .
## secundaria 3.620e-01 7.744e-02 4.674 9.5e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.407 on 24 degrees of freedom
## Multiple R-squared: 0.974, Adjusted R-squared: 0.9707
## F-statistic: 299.7 on 3 and 24 DF, p-value: < 2.2e-16
El modelo tiene una R2 de 0.9707, lo que significa que es capaz de explicar el 97.07% de la variabilidad con respecto al periodo.
Seleciconar los mejores predictores
step(object = modelo, direction = "both", trace = 1)## Start: AIC=22.8
## periodo ~ preescolar + primaria + secundaria
##
## Df Sum of Sq RSS AIC
## <none> 47.507 22.803
## - primaria 1 6.982 54.489 24.642
## - preescolar 1 25.991 73.498 33.021
## - secundaria 1 43.253 90.760 38.928
##
## Call:
## lm(formula = periodo ~ preescolar + primaria + secundaria, data = tasa)
##
## Coefficients:
## (Intercept) preescolar primaria secundaria
## 1901.7270 0.2762 0.6100 0.3620
El mejor modelo resultante del proceso de selección ha sido:
modelo <- (lm(periodo ~ preescolar + primaria + secundaria , data = tasa))
summary(modelo)##
## Call:
## lm(formula = periodo ~ preescolar + primaria + secundaria, data = tasa)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.4727 -0.5926 -0.1704 0.3847 4.2634
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.902e+03 3.135e+01 60.663 < 2e-16 ***
## preescolar 2.762e-01 7.622e-02 3.624 0.00136 **
## primaria 6.100e-01 3.248e-01 1.878 0.07257 .
## secundaria 3.620e-01 7.744e-02 4.674 9.5e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.407 on 24 degrees of freedom
## Multiple R-squared: 0.974, Adjusted R-squared: 0.9707
## F-statistic: 299.7 on 3 and 24 DF, p-value: < 2.2e-16
Es recomendable mostrar el intervalo de confianza para cada uno de los coeficientes parciales de regresión:
confint(lm(periodo ~ preescolar + primaria + secundaria , data = tasa))## 2.5 % 97.5 %
## (Intercept) 1837.02597028 1966.4279299
## preescolar 0.11888242 0.4335133
## primaria -0.06035506 1.2804508
## secundaria 0.20215479 0.5217972
Validación de condiciones para la regresión múltiple lineal
preescolar <- tasa$preescolar
primaria <- tasa$primaria
secundaria <- tasa$secundaria
library(gridExtra)##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
plot1 <- ggplot(data = tasa, aes(preescolar, modelo$residuals)) +
geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
theme_bw()
plot2 <- ggplot(data = tasa, aes(primaria, modelo$residuals)) +
geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
theme_bw()
plot3 <- ggplot(data = tasa, aes(secundaria, modelo$residuals)) +
geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
theme_bw()
grid.arrange(plot1, plot2, plot3)## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Distribución normal de los residuos:
qqnorm(modelo$residuals)
qqline(modelo$residuals)shapiro.test(modelo$residuals)##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 0.9172, p-value = 0.0296
ggplot(data = tasa, aes(modelo$fitted.values, modelo$residuals)) +
geom_point() +
geom_smooth(color = "firebrick", se = FALSE) +
geom_hline(yintercept = 0) +
theme_bw()## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
library(lmtest)## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
bptest(modelo)##
## studentized Breusch-Pagan test
##
## data: modelo
## BP = 9.6099, df = 3, p-value = 0.02219
library(corrplot)## corrplot 0.84 loaded
corrplot(cor(dplyr::select(tasa, preescolar, primaria, secundaria)),
method = "number", tl.col = "black")Análisis de Inflación de Varianza (VIF):
library(car)## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:psych':
##
## logit
## The following object is masked from 'package:dplyr':
##
## recode
## The following object is masked from 'package:purrr':
##
## some
vif(modelo)## preescolar primaria secundaria
## 12.269817 1.210629 12.852609
Autocorrelación
library(car)
dwt(modelo, alternative = "two.sided")## lag Autocorrelation D-W Statistic p-value
## 1 0.6979585 0.2184569 0
## Alternative hypothesis: rho != 0
Identificación de posibles valores atípicos o influyentes
library(dplyr)
tasa$studentized_residual <- rstudent(modelo)
ggplot(data = tasa, aes(x = predict(modelo), y = abs(studentized_residual))) +
geom_hline(yintercept = 3, color = "grey", linetype = "dashed") +
# se identifican en rojo observaciones con residuos estandarizados absolutos > 3
geom_point(aes(color = ifelse(abs(studentized_residual) > 3, 'red', 'black'))) +
scale_color_identity() +
labs(title = "Distribución de los residuos studentized",
x = "predicción modelo") +
theme_bw() + theme(plot.title = element_text(hjust = 0.5))which(abs(tasa$studentized_residual) > 3)## [1] 28
summary(influence.measures(modelo))## Potentially influential observations of
## lm(formula = periodo ~ preescolar + primaria + secundaria, data = tasa) :
##
## dfb.1_ dfb.prsc dfb.prmr dfb.scnd dffit cov.r cook.d hat
## 12 0.05 0.10 -0.05 -0.09 -0.13 1.53_* 0.00 0.23
## 22 0.22 -0.11 -0.22 0.11 -0.25 1.68_* 0.02 0.31
## 28 0.46 0.57 -0.48 -0.21 1.49_* 0.14_* 0.33 0.11
Se identificó un valor atípico
influencePlot(modelo)## StudRes Hat CookD
## 12 -0.2317985 0.2321800 0.0042286
## 17 -2.0499516 0.1668568 0.1856338
## 22 -0.3765087 0.3120615 0.0166723
## 28 4.1775021 0.1131396 0.3302242
Conclusión
La regresión lineal múltiple permite generar un modelo lineal en el que el valor de la variable dependiente o respuesta (Y) se determina a partir de un conjunto de variables independientes llamadas predictores (X1, X2, X3…). Es una extensión de la regresión lineal simple. Los modelos de regresión múltiple pueden emplearse para predecir el valor de la variable dependiente o para evaluar la influencia que tienen los predictores sobre ella.