En un modelo de regresión múltiple de mínimos cuadrados ordinarios (OLS), la variable dependiente es una variable numérica o cuantitativa. Sin embargo, las variables independientes pueden ser tanto numéricas como categóricas.
Las variables categóricas pueden ser:
Cuando se incluye una variable categórica en un modelo de regresión, se la representa a través de una o más “dummy variables”, dependiendo del número de categorías que tenga.
Para explorar este tema, vamos a utilizar la información del Módulo 5 de la ENAHO 2017 sobre empleo e ingresos de los miembros del hogar. Específicamente utilizaremos los datos correspondientes a la ocupación principal de los trabajadores dependientes.
En PAIDEIA pueden descargar las bases de datos.
En este ejemplo, tomaremos como variable depediente (Y) el ingreso mensual bruto del trabajador dependiente en su ocupación principal. Nuestra primera variable independiente será el nivel educativo del trabajador.
\[\widehat{ing\_mes} = b_0 + {b_1}nivedu\]
\[\widehat{ing\_mes} = b_0 + {b_1}nivedu\]
##
## ==========================================
## Dependent variable:
## -----------------------------
## ing_mes
## mod1.0
## ------------------------------------------
## nivedu 125.331***
## (1.560)
##
## Constant 200.706***
## (10.756)
##
## ------------------------------------------
## Observations 23,837
## R2 0.213
## Adjusted R2 0.213
## ==========================================
## Note: *p<0.05; **p<0.01; ***p<0.001
El modelo mod1.0 tiene un \(R^2\) algo bajo. Veamos si es posible incluir alguna variable independiente adicional.
Sabemos que existe una brecha de género en los ingresos de los trabajadores. Veamos si el ingreso del trabajador tambiém tiene algún tipo de asociación con el sexo del mismo.
En el siguiente diagrama de dispersión vemos la relación entre el ingreso y el nivel educativo, diferenciando (por color) a los hombres y las mujeres. La línea representa nuestro modelo mod1.0
En el diagrama anterior se observa que los puntos rojos, que represetan a los hombres, son más frecuentes encima de la recta de regresión que por debajo de ella, lo que indicaría que los hombres tienden a tener ingresos mayores a los de las mujeres.
Vamos a introducir en el modelo al sexo como una variable categórica - dicotómica con efecto independiente aditivo:
\[\widehat{ing\_mes} = b_0 + {b_1}nivedu + {b_2}sexo\] En este caso, la variable sexo será procesada de la siguiente manera: \(sexo = 0\): Hombres; \(sexo = 1\): Mujeres.
En tal sentido si el trabajador es un hombre (\(sexo = 0\)), el modelo de regresión sería:
Por otro lado si el trabajador es una mujer (\(sexo = 1\)), entonces el modelo de regresión sería:
Como se aprecia, en este caso, la variable sexo afecta la intersección del modelo.
##
## ===========================================
## Dependent variable:
## ------------------------------
## ing_mes
## mod1.0 mod1.1
## -------------------------------------------
## nivedu 125.331*** 131.040***
## (1.560) (1.534)
##
## sexoMujer -231.318***
## (6.885)
##
## Constant 200.706*** 260.620***
## (10.756) (10.661)
##
## -------------------------------------------
## Observations 23,837 23,837
## R2 0.213 0.249
## Adjusted R2 0.213 0.249
## ===========================================
## Note: *p<0.05; **p<0.01; ***p<0.001
A partir del modelo anterior tendríamos:
Si sexo = Hombre
Si sexo = Mujer
Como se aprecia, en el caso de las mujeres se aprecia una brecha de -231.32 soles de ingreso mensual respecto de los hombres.
Por ejemplo, de acuerdo con el modelo, podemos comparar los ingresos de hombres y mujeres, unos con secundaria completa y otros con universitaria completa. En estos casos los ingresos mensuales esperados serían:
# Hombre con secundaria completa:
new.data1 <- data.frame(nivedu = c(6), sexo = "Hombre")
predict(mod1.1, newdata = new.data1)
## 1
## 1046.861
# Mujer con secundaria completa:
new.data2 <- data.frame(nivedu = c(6), sexo = "Mujer")
predict(mod1.1, newdata = new.data2)
## 1
## 815.5423
# Hombre con universitaria completa:
new.data3 <- data.frame(nivedu = c(10), sexo = "Hombre")
predict(mod1.1, newdata = new.data3)
## 1
## 1571.021
# Mujer con universitaria completa:
new.data4 <- data.frame(nivedu = c(10), sexo = "Mujer")
predict(mod1.1, newdata = new.data4)
## 1
## 1339.703
En el caso de un modelo con variables categóricas politómicas se procede de manera similar. Por ejemplo si vamos a incluir la variable región como variable dependiente, tendríamos:
Ello daría como resultado 4 ecuaciones, una por región, tomando en consideración la región “Costa” como región de referencia.
##
## ===============================================
## Dependent variable:
## ---------------------------------
## ing_mes
## mod1.0 mod1.1 mod1.2
## -----------------------------------------------
## nivedu 125.331*** 131.040*** 122.258***
## (1.560) (1.534) (1.558)
##
## sexoMujer -231.318***
## (6.885)
##
## regionSierra -90.013***
## (8.539)
##
## regionSelva -48.851***
## (9.934)
##
## regionLima M. 123.917***
## (10.096)
##
## Constant 200.706*** 260.620*** 233.926***
## (10.756) (10.661) (11.624)
##
## -----------------------------------------------
## Observations 23,837 23,837 23,837
## R2 0.213 0.249 0.227
## Adjusted R2 0.213 0.249 0.227
## ===============================================
## Note: *p<0.05; **p<0.01; ***p<0.001
# Costa con secundaria completa:
new.data1 <- data.frame(nivedu = c(6), region = "Costa")
predict(mod1.2, newdata = new.data1)
## 1
## 967.4745
# Sierra con secundaria completa:
new.data2 <- data.frame(nivedu = c(6), region = "Sierra")
predict(mod1.2, newdata = new.data2)
## 1
## 877.4618
# Selva con secundaria completa::
new.data3 <- data.frame(nivedu = c(10), region = "Selva")
predict(mod1.2, newdata = new.data3)
## 1
## 1407.656
# Lima con secundaria completa::
new.data3 <- data.frame(nivedu = c(10), region = "Lima M.")
predict(mod1.2, newdata = new.data3)
## 1
## 1580.424
En el modelo mod1.2, la categoría de referencia es la “Costa”. Podemos cambiar de categoría de referencia para las comparaciones sin afectar los estadísticos del modelo. En el modelo mod1.3b la categoría de referencia es “Lima Metropolitana”
##
## ===============================================
## Dependent variable:
## ---------------------------------
## ing_mes
## mod1.0 mod1.2 mod1.2b
## -----------------------------------------------
## nivedu 125.331*** 122.258*** 122.258***
## (1.560) (1.558) (1.558)
##
## regionCosta -123.917***
## (10.096)
##
## regionSierra -90.013*** -213.930***
## (8.539) (10.612)
##
## regionSelva -48.851*** -172.769***
## (9.934) (11.801)
##
## regionLima M. 123.917***
## (10.096)
##
## Constant 200.706*** 233.926*** 357.843***
## (10.756) (11.624) (13.780)
##
## -----------------------------------------------
## Observations 23,837 23,837 23,837
## R2 0.213 0.227 0.227
## Adjusted R2 0.213 0.227 0.227
## ===============================================
## Note: *p<0.05; **p<0.01; ***p<0.001
##
## ===========================================================
## Dependent variable:
## ---------------------------------------------
## ing_mes
## mod1.0 mod1.1 mod1.2 mod1.3
## -----------------------------------------------------------
## nivedu 125.331*** 131.040*** 122.258*** 127.946***
## (1.560) (1.534) (1.558) (1.529)
##
## sexoMujer -231.318*** -234.403***
## (6.885) (6.819)
##
## regionSierra -90.013*** -90.809***
## (8.539) (8.335)
##
## regionSelva -48.851*** -47.417***
## (9.934) (9.697)
##
## regionLima M. 123.917*** 130.899***
## (10.096) (9.857)
##
## Constant 200.706*** 260.620*** 233.926*** 294.083***
## (10.756) (10.661) (11.624) (11.481)
##
## -----------------------------------------------------------
## Observations 23,837 23,837 23,837 23,837
## R2 0.213 0.249 0.227 0.264
## Adjusted R2 0.213 0.249 0.227 0.263
## ===========================================================
## Note: *p<0.05; **p<0.01; ***p<0.001
Supongamos que en vez de proponer que la variable sexo tiene un efecto aditivo en el ingreso, independiente respecto del nivel educativo, trabajemos con la hipótesis de que existe una interacción entre la variable sexo y el nivel educativo.
En este segundo caso, la hipótesis plantea que el efecto de la educación en el ingreso será diferente según el sexo del trabajador, por lo tanto el coeficiente de la variable categórica afectaría la pendiente en vez de la constante de la ecuación.
En el caso de un efecto independiente, la ecuación que ya hemos visto es:
\[\widehat{ing\_mes} = b_0 + {b_1}nivedu + {b_2}Sexo\]
En el caso de un efecto interactivo, la ecuación sería:
\[\widehat{ing\_mes} = b_0 + {b_1}nivedu + {b_2}sexo*nivedu \]
##
## ===================================================
## Dependent variable:
## ---------------------------------
## ing_mes
## mod1.0 mod1.1 mod1.4
## ---------------------------------------------------
## nivedu 125.331*** 131.040***
## (1.560) (1.534)
##
## sexoMujer -231.318***
## (6.885)
##
## nivedu:sexoHombre 144.077***
## (1.665)
##
## nivedu:sexoMujer 115.261***
## (1.572)
##
## Constant 200.706*** 260.620*** 160.848***
## (10.756) (10.661) (10.662)
##
## ---------------------------------------------------
## Observations 23,837 23,837 23,837
## R2 0.213 0.249 0.240
## Adjusted R2 0.213 0.249 0.240
## ===================================================
## Note: *p<0.05; **p<0.01; ***p<0.001
Podemos estimar otro modelo de regresión que contenga ambos supuestos.
Supuesto de efecto independiente: independientemente del nivel educativo, los hombres y las mujeres parten de distintas bases de ingreso, menores en el caso de las mujeres. Aquí tendremos dos intersecciones.
Supuesto de efecto interactivo: el efecto de la educación en los ingresos no es el mismo en el caso de los hombres y las mujeres. Las pendientes de hombres y mujeres serán distintas.
\[\widehat{ing\_mes} = b_0 + {b_1}nivedu + {b_2}sexo + {b_3}sexo*nivedu \]
##
## ===============================================================
## Dependent variable:
## ---------------------------------------------
## ing_mes
## mod1.0 mod1.1 mod1.4 mod1.5
## ---------------------------------------------------------------
## nivedu 125.331*** 131.040*** 118.437***
## (1.560) (1.534) (2.141)
##
## sexoMujer -231.318*** -401.049***
## (6.885) (21.286)
##
## nivedu:sexoHombre 144.077***
## (1.665)
##
## nivedu:sexoMujer 115.261*** 25.812***
## (1.572) (3.064)
##
## Constant 200.706*** 260.620*** 160.848*** 340.286***
## (10.756) (10.661) (10.662) (14.238)
##
## ---------------------------------------------------------------
## Observations 23,837 23,837 23,837 23,837
## R2 0.213 0.249 0.240 0.251
## Adjusted R2 0.213 0.249 0.240 0.251
## ===============================================================
## Note: *p<0.05; **p<0.01; ***p<0.001
# Paquetes y datos
library(stargazer)
library(ggplot2)
load("trabaj_dep.rda")
# Modelos de regresión
mod1.0 <- lm(ing_mes ~ nivedu, data = trabaj_dep)
mod1.1 <- lm(ing_mes ~ nivedu + sexo, data = trabaj_dep)
mod1.2 <- lm(ing_mes ~ nivedu + region, data = trabaj_dep)
mod1.3 <- lm(ing_mes ~ nivedu + sexo + region, data = trabaj_dep)
mod1.4 <- lm(ing_mes ~ nivedu : sexo, data = trabaj_dep)
mod1.5 <- lm(ing_mes ~ nivedu * sexo, data = trabaj_dep)
# Cambiar la categoría de referencia para modelo mod1.2b
trabaj_dep$region <- relevel(trabaj_dep$region, ref = "Lima M.")
mod1.2b <- lm(ing_mes ~ nivedu + region, data = trabaj_dep)
trabaj_dep$region <- relevel(trabaj_dep$region, ref = "Costa")
# Tabla con los modelos
stargazer(mod1.0, mod1.1, mod1.2, mod1.3, mod1.3b, mod1.4, mod1.5, type = "text",
omit.stat=c("ser","f"),
model.numbers = FALSE, object.names = TRUE,
star.cutoffs = c(0.05, 0.01, 0.001))
# Gráficos de los modelos
fit1.0 <- predict(mod1.0)
dataf.0 <- cbind(trabaj_dep, fit1.0)
ggplot(data = dataf.0, aes(x=nivedu, y=ing_mes, color = sexo)) +
geom_point() + geom_line(aes(y=fit1.0))
fit1.1 <- predict(mod1.1)
dataf.1 <- cbind(trabaj_dep, fit1.1)
ggplot(dataf.1, aes(x=nivedu, y=ing_mes, color = sexo)) +
geom_point() + geom_line(aes(y=fit1.1))
fit1.2 <- predict(mod1.2)
dataf2 <- cbind(trabaj_dep, fit1.2)
ggplot(dataf2, aes(x=nivedu, y=ing_mes, color = region)) +
geom_point() + geom_line(aes(y=fit1.2))
fit1.4 <- predict(mod1.4)
dataf4 <- cbind(trabaj_dep, fit1.4)
ggplot(dataf4, aes(x=nivedu, y=ing_mes, color = sexo)) +
geom_point() + geom_line(aes(y=fit1.4))
fit1.5 <- predict(mod1.5)
dataf5 <- cbind(trabaj_dep, fit1.5)
ggplot(dataf5, aes(x=nivedu, y=ing_mes, color = sexo)) +
geom_point() + geom_line(aes(y=fit1.5))