Regresión lineal con variables categóricas

César Córdova

4/5/2021

Introducción

Para el ejercicio de clase, vamos a especificar mejor del modelo de regresión lineal múltiple para explicar las horas de trabajo doméstico. Para ello, vamos a incluir el estado civil del encuestado (P22). Sin embargo, para evitar tener pocas observaciones en algunas de lca categorias, vamos a recodificar la variable.

En esta lección utilizaremos los datos de la encuesta nacional sobre roles de género realizada por el IOP - PUCP en el 2012.

La base de datos, ficha técnica y cuestionario pueden descargase desde el siguiente enlace: BD Genero 2012

https://www.dropbox.com/s/dy9o26c1nl1sxql/GENERO_IOP_2012.zip?dl=0

Cargar paquetes


library(foreign)
library(stargazer)

Cargar data de SPSS (“sav”)


genero12 <- read.spss("IOP_1212_01_B.sav", to.data.frame = T , use.value.labels = T)

Exploración de data


names(genero12)
##   [1] "NRO"     "SEXO"    "GEDAD"   "EDAD"    "P1"      "P2"      "P3A"    
##   [8] "P3B"     "P3C"     "P3D"     "P4A"     "P4B"     "P4C"     "P5"     
##  [15] "P6A"     "P6B"     "P6C"     "P6D"     "P6E"     "P7A"     "P7B"    
##  [22] "P8A"     "P8B"     "P9A"     "P9B"     "P9C"     "P9D"     "P9E"    
##  [29] "P9F"     "P10"     "P10A"    "P11"     "P12"     "P13A"    "P13B"   
##  [36] "P14"     "P15"     "P16"     "P17"     "P18A"    "P18B"    "P18C"   
##  [43] "P18D"    "P19A"    "P19B"    "P20"     "P21"     "P22"     "P22A"   
##  [50] "P23"     "P24"     "P25"     "P26"     "P27"     "P28A"    "P28B"   
##  [57] "P29"     "P30"     "P31A"    "P31B"    "P31C"    "P31D"    "P31E"   
##  [64] "P31F"    "P32"     "P33A"    "P33B"    "P33C"    "P33D"    "P34"    
##  [71] "P35A"    "P35B"    "P35C"    "P35D"    "P35E"    "P35F"    "P35G"   
##  [78] "P36"     "P37"     "P38"     "P39"     "P40"     "P41"     "P42"    
##  [85] "P43"     "P44"     "P44A"    "P44B"    "P44C"    "P45A"    "P45B"   
##  [92] "P46A"    "P46B"    "P47"     "P48"     "P48A"    "P48B"    "P48C"   
##  [99] "P49"     "P50A"    "P50B"    "P50C"    "P50D"    "P50E"    "P50F"   
## [106] "P50G"    "P50H"    "P51A"    "P51B"    "P51C"    "P51D"    "P51E"   
## [113] "P51F"    "P51G"    "P51H"    "P51I"    "P51J"    "P51K"    "P52A"   
## [120] "P52B"    "P52C"    "P52D"    "P52E"    "P52F"    "P52G"    "P53A"   
## [127] "P53B"    "P53C"    "P53D"    "P53E"    "P53F"    "P53G"    "P54A"   
## [134] "P54B"    "P54C"    "P54D"    "P54E"    "P55A"    "P55B"    "P55C"   
## [141] "P55D"    "P55E"    "P55F"    "P56"     "P57"     "P58"     "P59A"   
## [148] "P59B"    "P59C"    "P59D"    "P59E"    "P59F"    "P59G"    "P59H"   
## [155] "P59I"    "P60A"    "P60B"    "P60C"    "P60D"    "P60E"    "P60F"   
## [162] "P61A"    "P61B"    "P61C"    "P61D"    "P61E"    "P62A"    "P62B"   
## [169] "P62C"    "P63A"    "P63B"    "P63C"    "P64A"    "P64B"    "P64C"   
## [176] "P64D"    "P64E"    "P64F"    "P64G"    "P64H"    "P65A"    "P65B"   
## [183] "P65C"    "P65D"    "P65E"    "P65F"    "P65G"    "P65H"    "P66A"   
## [190] "P66B"    "P67A"    "P67B"    "P67C"    "P68"     "P69"     "P70"    
## [197] "P71"     "P72"     "P72A"    "P73"     "P73A"    "P74"     "P75"    
## [204] "P76"     "P77"     "P78"     "P79"     "P80"     "P81A"    "P81B"   
## [211] "P81C"    "P81D"    "P81E"    "P82"     "P87"     "P89"     "P90"    
## [218] "P92"     "Región"  "Ambito"  "TOTALA"  "DOMINIO" "NSEGrup" "sumaNSE"
## [225] "NSE"

Ejercicio 1: Factores del trabajo doméstico

De qué pedende de que una persona realiza más horas de trabajo doméstico

El objetivo del primer ejercicio es calcular un modelo de regresión lineal múltiple para dar cuenta de la cantidad de horas de trabajo doméstico que realizan las personas (P19A).

En este caso, vamos a partir de un modelo que considera como variables explicativas del modelo a los factores sociodemográficos: edad (“EDAD”), sexo (“SEXO”) y NSE de la persona (“NSEGrup”).

En este caso, vamos a introducir las variables de manera escalonada para evaluar si existen posibles problemas de colinealidad.

Cálculo de modelos 1, 2 y 3


modelo1 <- lm(P19A ~ EDAD, genero12)

modelo2 <- lm(P19A ~ EDAD + SEXO, genero12)

modelo3 <- lm(P19A ~ EDAD + SEXO + NSEGrup, genero12)

Preguntas


Formato


stargazer(modelo1, modelo2, modelo3, type = "text",
          omit.stat=c("ser","f"), 
          model.numbers = FALSE, object.names = TRUE,
          star.cutoffs = c(0.05, 0.01, 0.001))
## 
## ============================================
##                    Dependent variable:      
##              -------------------------------
##                           P19A              
##               modelo1    modelo2    modelo3 
## --------------------------------------------
## EDAD           0.080*    0.096**    0.089*  
##               (0.040)    (0.037)    (0.036) 
##                                             
## SEXOFemenino            18.644***  18.566***
##                          (1.141)    (1.136) 
##                                             
## NSEGrupC                            -0.565  
##                                     (1.601) 
##                                             
## NSEGrupD/E                          3.718*  
##                                     (1.461) 
##                                             
## Constant     20.073***   9.921***  8.600*** 
##               (1.695)    (1.654)    (1.980) 
##                                             
## --------------------------------------------
## Observations   1,201      1,201      1,201  
## R2             0.003      0.185      0.194  
## Adjusted R2    0.002      0.184      0.191  
## ============================================
## Note:          *p<0.05; **p<0.01; ***p<0.001
genero12$NSEGrup <- relevel(genero12$NSEGrup, ref = "D/E")

Ejercicio 2: ampliación de modelo

Para el ejercicio propuesto a la clase, vamos a especificar mejor el modelo de regresión lineal múltiple de las horas de trabajo doméstico.

En este caso, vamos a incluir el estado civil del encuestado (P22). Sin embargo, para evitar tener pocas observaciones en algunas de lca categorias, vamos a recodificar la variable.

Exploración de la variable categórica P22

Primero, vamos a explorar cómo está codificada la variable P22.


table(genero12$P22)
## 
##     Casado/a  Conviviente      Viudo/a Divorciado/a   Separado/a    Soltero/a 
##          401          305           49           13           71          364

Luego, la convertimos a numérica para facilitar la recodificación:

genero12$P22.n <- as.numeric(genero12$P22)

table(genero12$P22.n)
## 
##   1   2   3   4   5   6 
## 401 305  49  13  71 364

Realizamos la recodificación con las funciones básicas del R.


genero12$P22.r[genero12$P22.n < 3] <- 1

genero12$P22.r[genero12$P22.n > 2] <- 2

table(genero12$P22.r)
## 
##   1   2 
## 706 497

Finalmente, la convertimos nuevamente a factor - objeto que refleja mejor la naturaleza de la variable - y le colocamos las etiquetas pertinentes.


genero12$P22.f <- factor(genero12$P22.r, labels = c("Pareja", "No pareja"))

Calculo de modelo

Ahora, volvemos a calcular el modelo con la nueva variable independiente categórica recodificada:


modelo4 <- lm(P19A ~ EDAD + SEXO + NSEGrup + P22.f, genero12)

modelo5 <- lm(P19A ~ SEXO + NSEGrup + P22.f, genero12)

Formato


stargazer(modelo1, modelo2, modelo3, modelo4 , type = "text",
          omit.stat=c("ser","f"), 
          model.numbers = FALSE, object.names = TRUE,
          star.cutoffs = c(0.05, 0.01, 0.001))
## 
## ======================================================
##                          Dependent variable:          
##                ---------------------------------------
##                                 P19A                  
##                 modelo1   modelo2   modelo3   modelo4 
## ------------------------------------------------------
## EDAD            0.080*    0.096**   0.089*     0.044  
##                 (0.040)   (0.037)   (0.036)   (0.038) 
##                                                       
## SEXOFemenino             18.644*** 18.566*** 18.399***
##                           (1.141)   (1.136)   (1.131) 
##                                                       
## NSEGrupA/B                                    -3.037* 
##                                               (1.464) 
##                                                       
## NSEGrupC                            -0.565   -3.857** 
##                                     (1.601)   (1.324) 
##                                                       
## NSEGrupD/E                          3.718*            
##                                     (1.461)           
##                                                       
## P22.fNo pareja                               -4.622***
##                                               (1.217) 
##                                                       
## Constant       20.073*** 9.921***  8.600***  15.784***
##                 (1.695)   (1.654)   (1.980)   (1.990) 
##                                                       
## ------------------------------------------------------
## Observations     1,201     1,201     1,201     1,201  
## R2               0.003     0.185     0.194     0.203  
## Adjusted R2      0.002     0.184     0.191     0.200  
## ======================================================
## Note:                    *p<0.05; **p<0.01; ***p<0.001

Preguntas sobre el modelo 4

Verficando los supuesto del modelo

Vamos a calcular un quinto modelo en donde no consideramos a la variable cuantitativa “edad”. Luego, vamos a evaluar los supuestos del modelo.


library(ggfortify)

autoplot(modelo4)

autoplot(modelo5)


Parte 2

En esta parte vamos a calcular un modelo que considere como variable dependiente al ingreso mensual promedio de los trabajadores dependientes en el Perú. En este caso, para iniciar vamos a considerar como variables independientes al nivel educativo, sexo de la persona y región de residencia.

Datos

Los datos para la parte dos se pueden encontrar en el siguiente link:

https://www.dropbox.com/sh/0l2wi6eg3g912j4/AAC4toYSFJDTb2gQQD-24bPda?dl=0

Carga de data


load("trabaj_dep.Rdata")

Modelos de regresión con efecto independiente de sexo

Desarrolle las siguientes preguntas:


mod1.0 <- lm(ing_mes ~ nivedu, data = trabaj_dep)

mod1.1 <- lm(ing_mes ~ nivedu + sexo, data = trabaj_dep)

También podemos cambiar la categoría de referencia:


trabaj_dep$sexo <- relevel(trabaj_dep$sexo, ref = "Mujer")

Luego, volvemos a pedir el modelo:


mod1.2 <- lm(ing_mes ~ nivedu + sexo, data = trabaj_dep)

Desarrolle las siguientes preguntas:

Formato


# Tabla con los modelos
stargazer(mod1.0, mod1.1, mod1.2, type = "text",
omit.stat=c("ser","f"),
model.numbers = FALSE, object.names = TRUE,
star.cutoffs = c(0.05, 0.01, 0.001))
## 
## ==============================================
##                     Dependent variable:       
##              ---------------------------------
##                           ing_mes             
##                mod1.0     mod1.1      mod1.2  
## ----------------------------------------------
## nivedu       125.331*** 131.040***  131.040***
##               (1.560)     (1.534)    (1.534)  
##                                               
## sexoMujer               -231.318***           
##                           (6.885)             
##                                               
## sexoHombre                          231.318***
##                                      (6.885)  
##                                               
## Constant     200.706*** 260.620***   29.302*  
##               (10.756)   (10.661)    (11.683) 
##                                               
## ----------------------------------------------
## Observations   23,837     23,837      23,837  
## R2             0.213       0.249      0.249   
## Adjusted R2    0.213       0.249      0.249   
## ==============================================
## Note:            *p<0.05; **p<0.01; ***p<0.001

Modelos de regresión con efecto independiente de sexo y región

Desarrolle las siguientes preguntas:


mod1.3 <- lm(ing_mes ~ nivedu + sexo + region, data = trabaj_dep)

Formato


# Tabla con los modelos
stargazer(mod1.0, mod1.1, mod1.2, mod1.3, type = "text",
omit.stat=c("ser","f"),
model.numbers = FALSE, object.names = TRUE,
star.cutoffs = c(0.05, 0.01, 0.001))
## 
## ==========================================================
##                           Dependent variable:             
##               --------------------------------------------
##                                 ing_mes                   
##                 mod1.0     mod1.1      mod1.2     mod1.3  
## ----------------------------------------------------------
## nivedu        125.331*** 131.040***  131.040*** 127.946***
##                (1.560)     (1.534)    (1.534)    (1.529)  
##                                                           
## sexoMujer                -231.318***                      
##                            (6.885)                        
##                                                           
## sexoHombre                           231.318*** 234.403***
##                                       (6.885)    (6.819)  
##                                                           
## regionSierra                                    -90.809***
##                                                  (8.335)  
##                                                           
## regionSelva                                     -47.417***
##                                                  (9.697)  
##                                                           
## regionLima M.                                   130.899***
##                                                  (9.857)  
##                                                           
## Constant      200.706*** 260.620***   29.302*   59.680*** 
##                (10.756)   (10.661)    (11.683)   (12.428) 
##                                                           
## ----------------------------------------------------------
## Observations    23,837     23,837      23,837     23,837  
## R2              0.213       0.249      0.249      0.264   
## Adjusted R2     0.213       0.249      0.249      0.263   
## ==========================================================
## Note:                        *p<0.05; **p<0.01; ***p<0.001

Modelos de regresión con efecto independiente e interactivos

Antes de calcular los modelos interactivos, vamos a volver a cambiar la categoría de referencia (solo para practicar el procedimiento).


trabaj_dep$sexo <- relevel(trabaj_dep$sexo, ref = "Hombre")

Luego, utilizamos el símbolo "*" para calcular la interacción entre las variables:


mod1.4 <- lm(ing_mes ~ nivedu * sexo + region, data = trabaj_dep)

# Tabla con los modelos
stargazer(mod1.0, mod1.1, mod1.2, mod1.3, mod1.4, type = "text",
omit.stat=c("ser","f"),
model.numbers = FALSE, object.names = TRUE,
star.cutoffs = c(0.05, 0.01, 0.001))
## 
## =========================================================================
##                                    Dependent variable:                   
##                  --------------------------------------------------------
##                                          ing_mes                         
##                    mod1.0     mod1.1      mod1.2     mod1.3     mod1.4   
## -------------------------------------------------------------------------
## nivedu           125.331*** 131.040***  131.040*** 127.946*** 114.937*** 
##                   (1.560)     (1.534)    (1.534)    (1.529)     (2.129)  
##                                                                          
## sexoMujer                   -231.318***                       -409.322***
##                               (6.885)                          (21.079)  
##                                                                          
## sexoHombre                              231.318*** 234.403***            
##                                          (6.885)    (6.819)              
##                                                                          
## regionSierra                                       -90.809*** -90.302*** 
##                                                     (8.335)     (8.322)  
##                                                                          
## regionSelva                                        -47.417*** -47.218*** 
##                                                     (9.697)     (9.682)  
##                                                                          
## regionLima M.                                      130.899*** 132.484*** 
##                                                     (9.857)     (9.843)  
##                                                                          
## nivedu:sexoMujer                                               26.598*** 
##                                                                 (3.034)  
##                                                                          
## Constant         200.706*** 260.620***   29.302*   59.680***  375.882*** 
##                   (10.756)   (10.661)    (11.683)   (12.428)   (14.779)  
##                                                                          
## -------------------------------------------------------------------------
## Observations       23,837     23,837      23,837     23,837     23,837   
## R2                 0.213       0.249      0.249      0.264       0.266   
## Adjusted R2        0.213       0.249      0.249      0.263       0.266   
## =========================================================================
## Note:                                       *p<0.05; **p<0.01; ***p<0.001