Práctica 6.2 Predictores categóricos

Materiales de la sesión del 21 May 2021

Índice

Objetivo de la práctica

Es esta práctica vamos a aprender a trabajar e interpretar predictores categóricos en la regresión.

Hasta ahora hemos trabajado solamente con predictores a los que asumimos un nivel de medición continua (es decir, al menos intervalar). ¿Qué sucede con predictores donde se asume un distinto nivel de medición, como nominal u ordinal? En general este tipo de predictores requiere una interpretación y tratamiento distinto que los predictores continuos.

Existen dos tipos de predictores categóricos: dicotómicos (dummys) y ordinales.

Predictores dicotómicos

Las variables dicotómicas son aquellas variables nominales u ordinales que poseen solo dos categorías de respuesta, por ejemplo hombre/mujer, sano/enfermo, deportista/sedentario.

La inclusión de estas variables en un modelo de regresión no requiere un tratamiento especial, solo hay que considerar que su interpretación tiene un sentido distinto. A continuación, veremos un ejemplo respecto a cómo predictores categóricos (de dos o más niveles) permiten modelar el Estatus Social Subjetivo

Librerías

pacman::p_load(dplyr, #manipulacion de datos
               sjPlot, #tablas
               summarytools, #estadisticos descriptivos
               fastDummies, # Crear variable dummy
               sjlabelled, #etiquetas variables
               coefplot # graficos de coeficientes
               )

Datos

Primero, se cargará la base de datos

load(url("https://multivariada.netlify.app/assignment/data/proc/ELSOC_ess.RData")) # Cargar base de datos

Los datos a utilizar corresponden a la base de datos ELSOC 2018 que incluye una muestra de 3784 mujeres y hombres adultos entre 18 y 75 años.

Variables

  • [ess]: “Estatus Social Subjetivo: Donde se ubicaria ud. en la sociedad chilena” (0 = el nivel mas bajo; 10 = el nivel mas alto)

  • [edcine]: ¿Cuál es su nivel educacional? Indique el tipo de estudio actual (si estudia actualmente) o el último tipo aprobado (si no estudia actualmente) - CINE 2011 (UNESCO).

  • [edad]: ¿Cuáles su edad? (años cumplidos).

view_df(elsoc_18,encoding = "")
Data frame: elsoc_18
ID Name Label Values Value Labels
1 ess Estatus Social Subjetivo 0
1
2
3
4
5
6
7
8
9
10
0 El nivel mas bajo
1
2
3
4
5
6
7
8
9
10 El nivel mas alto
2 sexo Sexo (1=Mujer) 0
1
Hombre
Mujer
3 edad Edad range: 18-90
4 edcine Educación 1
2
3
4
5
Primaria incompleta menos
Primaria y secundaria baja
Secundaria alta
Terciaria ciclo corto
Terciaria y Postgrado

Explorar base de datos

A partir de la siguiente tabla se obtienen estadísticos descriptivos que luego serán relevantes para la interpretación de nuestros modelos.

view(dfSummary(elsoc_18, headings = FALSE, method = "render"))
No Variable Label Stats / Values Freqs (% of Valid) Graph Valid Missing
1 ess [numeric] Estatus Social Subjetivo Mean (sd) : 4.4 (1.6) min < med < max: 0 < 5 < 10 IQR (CV) : 1 (0.4) 11 distinct values 3703 (100.0%) 0 (0.0%)
2 sexo [numeric] Sexo (1=Mujer) Min : 0 Mean : 0.4 Max : 1
0:2277(61.5%)
1:1426(38.5%)
3703 (100.0%) 0 (0.0%)
3 edad [numeric] Edad Mean (sd) : 47 (15.5) min < med < max: 18 < 47 < 90 IQR (CV) : 25 (0.3) 70 distinct values 3703 (100.0%) 0 (0.0%)
4 edcine [numeric] Educación Mean (sd) : 3.2 (1.2) min < med < max: 1 < 3 < 5 IQR (CV) : 1 (0.4)
1:442(11.9%)
2:365(9.9%)
3:1589(42.9%)
4:592(16.0%)
5:715(19.3%)
3703 (100.0%) 0 (0.0%)

Generated by summarytools 0.9.9 (R version 4.0.2)
2021-05-31

Relación entre variables

Visualizar la asociación entre variables puede ser informativo. Sin embargo, en ocasiones es necesario prestar mayor atención al tipo de gráfico que utilizamos para esto. Por ejemplo, veamos un scatter de Estatus social Subjetivo \(Y_\text{estatus}\) con sexo como independiente \(X_\text{sexo}\) para comparar sus distribuciones y sus pendientes

plot_scatter(data = elsoc_18,x = sexo,y = ess,fit.grps = "lm")

El scatterplot no es muy informativo debido a que nuestra variable independiente solamente posee dos niveles, de modo tal que la distribución de Estatus Social Subjetivo se separa en dos grandes grupos. Por esta razón, una alternativa para visualizar la distribución es elaborar un gráfico de cajas para ambas categorías:

plot_grpfrq(var.cnt = elsoc_18$ess,var.grp = elsoc_18$sexo,type = "box")

En este sentido, al tener solamente dos niveles en los valores de la variable X: 0 (Hombre) y 1 (Mujer). Obtenemos solamente dos medias condicionales.

Entonces, si calculamos el promedio simple para Estatus Social Subjetivo por sexo tenemos:

elsoc_18 %>%
  group_by(sexo) %>%
  summarise(mean_ess=mean(ess,na.rm = T))
## # A tibble: 2 x 2
##    sexo mean_ess
##   <dbl>    <dbl>
## 1     0     4.34
## 2     1     4.47

Segun esto el promedio para las mujeres es de 4.47 puntos en la escala de Estatus Social Subjetivo, mientras para los hombres es de 4.34.

Realizando ahora la regresión:

reg1<-lm(ess ~ sexo, data=elsoc_18)
sjPlot::tab_model(list(reg1), show.ci=FALSE, p.style = "stars",string.pred = "Predictores", string.est = "β",digits = 3,
                  dv.labels = c("Modelo 1"))
  Modelo 1
Predictores β
(Intercept) 4.339 ***
Sexo(1=Mujer) 0.133 *
Observations 3703
R2 / R2 adjusted 0.002 / 0.001
  • p<0.05   ** p<0.01   *** p<0.001

Entonces:

\[\widehat{Y}_\text{estatus} = 4.339 + \beta_1 \times \text{Sexo} + \epsilon \] Tenemos que las mujeres (Sexo = 1) tienen un promedio 0.133 puntos más alto que los hombres (Sexo = 0) en la escala de estatus social subjetivo. En este caso, el grupo de los hombres corresponde a la categoría de referencia.

Por lo tanto, ¿cuál es la predicción de estatus social subjetivo para la variable sexo?

Para el caso de los hombres tenemos:

\[\widehat{Y}_\text{estatus} = 4.339 + 0.133 \times 0 = 4.339\] En cambio, para las mujeres tenemos:

\[\widehat{Y}_\text{estatus} = 4.339 + 0.133 \times 1 = 4.472\]

Entonces cuando calculamos el promedio de Estatus social Subjetivo \(Y_\text{estatus}\) para hombre (\(X_\text{sexo=0}\)) mujer (\(X_\text{sexo=1}\)), podemos observar que son los mismos valores que nos entrega la estimación de la regresión simple empleando Sexo como predictor de Estatus Social Subjetivo. Es decir:

  • Al ingresar un regresor dicotómico en regresión simple lo que se obtiene es una estimación de la diferencia de promedios de ambas categorías en relación a la variable dependiente -en regresión múltiple esta diferencia se ajusta o controla por la presencia de otras variables, por ejemplo:
reg2<-lm(ess ~ sexo+edad, data=elsoc_18)
sjPlot::tab_model(list(reg1,reg2), show.ci=FALSE, p.style = "stars",string.pred = "Predictores", string.est = "β",digits = 3,
                  dv.labels = c("Modelo 1", "Modelo 2"))
  Modelo 1 Modelo 2
Predictores β β
(Intercept) 4.339 *** 4.602 ***
Sexo(1=Mujer) 0.133 * 0.126 *
Edad -0.006 ***
Observations 3703 3703
R2 / R2 adjusted 0.002 / 0.001 0.005 / 0.004
  • p<0.05   ** p<0.01   *** p<0.001

\[\widehat{Y}_\text{estatus} = 4.602 + 0.126 \times \text{Sexo} + -0.006 \times \text{Edad} + \epsilon \] Al controlar por la edad de las personas, las mujeres tienen un promedio 0.126 más alto que el de los hombres en la escala de Estatus Social Subjetivo. Vemos que, en comparación con el Modelo 1, la diferencia en el promedio de estatus subjetivo de mujeres respecto de hombres se ajusta al incorporar la edad. En este sentido, ¿por qué la diferencia en el promedio de estatus subjetivo entre mujeres y hombres puede verse afectada por la edad?. Revisemos el promedio de Edad para hombres y mujeres:

elsoc_18 %>%
  group_by(sexo) %>%
  summarise(mean_ess=mean(edad,na.rm = T))
## # A tibble: 2 x 2
##    sexo mean_ess
##   <dbl>    <dbl>
## 1     0     47.5
## 2     1     46.3

Esta información nos permite observar que los hombres tienen un promedio de edad de 1.2 años mayor que el de las mujeres. En este sentido, lo que vemos es que la diferencia promedio de estatus subjetivo entre hombres y mujeres disminuye de 0.136 a 0.126, es decir, se ajusta al considerar (controlar por) la edad de las personas.

Predictores con más de una categoría

Una de las características de estatus más importante es el nivel educacional de las personas. En este sentido, el nivel educacional puede considerarse como una variable contínua (p.ej: años de educación) o categórica (nivel/grado educacional), lo cual depende no solo de la distribución empírica de la variable sino que también del criterio de quien investiga.

Para este ejercicio consideraremos la variable educación en base a las categorías de la Clasificación Internacional Normalizada de la Educación (UNESCO). La cual posee 5 niveles:

sjmisc::frq(x = elsoc_18$edcine,show.na = F)
## 
## Educación (x) <numeric>
## # total N=3703  valid N=2988  mean=3.21  sd=1.21
## 
## Value |                      Label |    N | Raw % | Valid % | Cum. %
## --------------------------------------------------------------------
##     1 |  Primaria incompleta menos |  442 | 11.94 |   11.94 |  11.94
##     2 | Primaria y secundaria baja |  365 |  9.86 |    9.86 |  21.79
##     3 |            Secundaria alta | 1589 | 42.91 |   42.91 |  64.70
##     4 |      Terciaria ciclo corto |  592 | 15.99 |   15.99 |  80.69
##     5 |      Terciaria y Postgrado |  715 | 19.31 |   19.31 | 100.00

Y se distribuye de esta manera:

plot_frq(data = elsoc_18$edcine)

Para poder incluir esta variable en la regresión como categórica en R la manera más simple es definirla como un factor. Primero necesitamos conocer la estructura de la variable, ya que puede venir previamente definida como factor:

class(elsoc_18$edcine)
## [1] "numeric"
str(elsoc_18$edcine)
##  num [1:3703] 2 3 3 4 3 3 3 4 5 2 ...
##  - attr(*, "labels")= Named num [1:5] 1 2 3 4 5
##   ..- attr(*, "names")= chr [1:5] "Primaria incompleta menos" "Primaria y secundaria baja" "Secundaria alta" "Terciaria ciclo corto" ...
##  - attr(*, "label")= chr "Educación"

Vemos que al emplear class, R nos indica que edcine es una variable numérica con 5 valores distintos. Además, al correr str se nos indica que dichos valores numéricos poseen atributos en forma de etiquetas (labels). Entonces, si estimamos la regresión con la variable tal cual como está, obtenemos lo siguiente:

reg3<- lm(ess~edcine,data = elsoc_18)
sjPlot::tab_model(list(reg3), show.ci=FALSE, p.style = "stars",string.pred = "Predictores", string.est = "β",digits = 3,
                  dv.labels = c("Modelo 3"))
  Modelo 3
Predictores β
(Intercept) 3.329 ***
Educación 0.331 ***
Observations 3703
R2 / R2 adjusted 0.064 / 0.064
  • p<0.05   ** p<0.01   *** p<0.001

El coeficiente de regresión nos indica que por cada nivel adicional de educación, hay un aumento de 0.331 puntos en la escala de estatus social subjetivo. Sin embargo, dada la naturaleza de nuestra variable, decir “por cada nivel educacional” es poco informativo, por lo tanto la manera más adecuada de utilizar nuestra variable en la estimación de una regresión es transformarla en un factor empleando la función as_factor() De la librería sjlabelled .

elsoc_18$edcine<- as_factor(elsoc_18$edcine)

Nota: en R existe la función as.factor(), sin embargo, en esa ocasión usamos as_factor() debido a que es compatible los vectores numéricos etiquetados y nos permite matener todos los atributos de las variables, tales como las etiquetas de variable y valores.

Teniendo nuestra variable transformada a factor, estimamos nuevamente la regresión:

reg4 <- lm(ess~edcine,data = elsoc_18)
sjPlot::tab_model(list(reg3,reg4), show.ci=FALSE, p.style = "stars",string.pred = "Predictores", string.est = "β",digits = 3,
                  dv.labels = c("Modelo 3","Modelo 4"))
  Modelo 3 Modelo 4
Predictores β β
(Intercept) 3.329 *** 3.794 ***
Educación 0.331 ***
Educación: Primaria y
secundaria baja
0.151
Educación: Secundaria
alta
0.476 ***
Educación: Terciaria
ciclo corto
0.811 ***
Educación: Terciaria y
Postgrado
1.279 ***
Observations 3703 3703
R2 / R2 adjusted 0.064 / 0.064 0.066 / 0.065
  • p<0.05   ** p<0.01   *** p<0.001

Interpretación

Al igual que en el modelo empleando Educación como variable continua, el modelo con Educación categórica muestra que a medida que aumenta el nivel educacional, el promedio de estatus subjetivo tiende a ser más alto. Por otro lado, en este caso la categoría de referencia es Primaria Incompleta o menos. Entonces:

El promedio en la escala de Estatus Social subjetivo para el grupo con educación Primaria y Secundaria baja es 0.151 puntos más alto con respecto a las personas con educación Primaria Incompleta o menos.

El promedio en la escala de Estatus Social subjetivo para el grupo con educación Secundaria Alta es 0.476 más alto con respecto a las personas con educación Primaria Incompleta o menos.

El promedio en la escala de Estatus Social subjetivo para el grupo con educación Terciaria ciclo corto es 0.811 más alto con respecto a las personas con educación Primaria Incompleta o menos.

El promedio en la escala de Estatus Social subjetivo para el grupo con educación Terciaria y Postgrado es de 1.279 más alto con respecto a las personas con educación Primaria Incompleta o menos.

  • Alternativamente es posible cambiar la categoría de referencia. Por ejemplo, si quisieramos que la referencia fuera el nivel educativo más alto “Terciaria y Postgrado” (5) debemos usar relevel(edcine, ref =5):
reg4.1 <- lm(ess~relevel(edcine,ref=5),data = elsoc_18)
summary(reg4.1)
## 
## Call:
## lm(formula = ess ~ relevel(edcine, ref = 5), data = elsoc_18)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.0727 -0.7941  0.0548  0.7300  6.2059 
## 
## Coefficients:
##                           Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                5.07273    0.05710  88.833  < 2e-16 ***
## relevel(edcine, ref = 5)1 -1.27861    0.09239 -13.839  < 2e-16 ***
## relevel(edcine, ref = 5)2 -1.12752    0.09823 -11.479  < 2e-16 ***
## relevel(edcine, ref = 5)3 -0.80275    0.06876 -11.674  < 2e-16 ***
## relevel(edcine, ref = 5)4 -0.46800    0.08485  -5.516 3.71e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.527 on 3698 degrees of freedom
## Multiple R-squared:  0.06634,    Adjusted R-squared:  0.06533 
## F-statistic: 65.69 on 4 and 3698 DF,  p-value: < 2.2e-16

Variables dummy

La manera tradicional de incluir predictores categóricos de más de dos niveles (variable politómica) es a través de las denominadas variables dummy. Tal como vimos en el ejemplo anterior, se incluyen n-1 categorías en el modelo dado que siempre se mantiene una como categoría de referencia.

Para explorar nuestra base de datos, usaremos la función head() que nos mostrará las primeras 6 filas de nuestra base de datos para observar la variable Educación.

head(elsoc_18)
##   ess sexo edad edcine
## 1   9    0   66      2
## 2   5    0   62      3
## 3   5    0   28      3
## 4   5    1   53      4
## 5   5    1   63      3
## 6   5    0   56      3

Para la construcción de las variables dummy, usaremos la función dummy_cols() de la librería fastDummies. En el argumento select_columns, le indicamos cuál es la variable que usaremos para construir las variables dummy:

library(fastDummies)
elsoc_18 <- dummy_cols(elsoc_18,select_columns = "edcine")

Revisamos nuestra base de datos:

head(elsoc_18)
##   ess sexo edad edcine edcine_1 edcine_2 edcine_3 edcine_4 edcine_5
## 1   9    0   66      2        0        1        0        0        0
## 2   5    0   62      3        0        0        1        0        0
## 3   5    0   28      3        0        0        1        0        0
## 4   5    1   53      4        0        0        0        1        0
## 5   5    1   63      3        0        0        1        0        0
## 6   5    0   56      3        0        0        1        0        0

Tal como se estimó en el modelo anterior, ahora lo que haremos es seleccionar cada dummy para las categorías 2, 3, 4 y 5 de la variable edcine. Esto implica que el nivel 1 (Primaria incompleta o menos) será la categoría de referencia.

reg5 <- lm(ess~edcine_2+edcine_3+edcine_4+edcine_5,data = elsoc_18)
sjPlot::tab_model(list(reg4, reg5), show.ci=FALSE, p.style = "stars",string.pred = "Predictores", string.est = "β",digits = 3,
                  dv.labels = c("Modelo 4","Modelo 5"))
  Modelo 4 Modelo 5
Predictores β β
(Intercept) 3.794 *** 3.794 ***
Educación: Primaria y
secundaria baja
0.151
Educación: Secundaria
alta
0.476 ***
Educación: Terciaria
ciclo corto
0.811 ***
Educación: Terciaria y
Postgrado
1.279 ***
edcine 2 0.151
edcine 3 0.476 ***
edcine 4 0.811 ***
edcine 5 1.279 ***
Observations 3703 3703
R2 / R2 adjusted 0.066 / 0.065 0.066 / 0.065
  • p<0.05   ** p<0.01   *** p<0.001

Si observamos la tabla de arriba, vemos que las estimaciones para el modelo 4 y 5 son idénticas. La única diferencia es que en el Modelo 5 empleamos dummies para cada categoría en vez de utilizar la variable como un factor.

Video Tutorial

Documento presentación

Foro práctica 6.2