Clase 25 mayo

Author

Emily Montaño y Liliana Romero

ANÁLISIS DE REGRESIÓN MÚLTIPLE CON VARIABLE DEPENDIENTE DICOTÓMICA

Este estudio tiene como propósito aplicar técnicas de análisis de regresión múltiple con una variable dependiente dicotómica, empleando los modelos logit y probit, para determinar los factores que inciden en la probabilidad de que una mujer ecuatoriana experimente depresión postparto. Con base en una base de datos específica, se analizan variables como el nivel de ingresos del hogar, años de educación, edad, cantidad de hijos, etnia y área geográfica de residencia. Se utilizan avanzadas herramientas estadísticas en R para ajustar los modelos, interpretar los hallazgos y evaluar su precisión mediante indicadores como los efectos marginales, la curva ROC y la matriz de confusión. Este análisis no solo facilita una comprensión más profunda de los factores determinantes de la depresión postparto, sino que también demuestra la aplicación de modelos econométricos en estudios sociales y de salud.

setwd("C:/Users/H P/Desktop/Carpetas/EMY/ESTUDIOS/Maestria en Economia y Dirección de empresa/Business Analytics/Tareas Business Analytics/Clase 25 mayo BA")

Instalar paquetes si es necesario

install.packages(“MASS”) # Para modelo probit install.packages(“car”) # Para pruebas estadísticas install.packages(“margins”) # Para calcular efectos marginales install.packages(“pROC”) # Para curva ROC install.packages(“ggplot2”) # Para visualización install.packages(“caret”) # Para matriz de confusión install.packages(“ggplot”) # Para visualización

Cargar librerías library(MASS) library(car) library(margins) library(pROC) library(ggplot2) library(ggplot) library(caret) library(haven)

Datos

Leer los datos (ajustar la ruta del archivo)

library(haven)
data <- read_dta("Data1_R.dta")
View(data)

Ver las primeras filas de la base de datos

head(data)
# A tibble: 6 × 50
  area       empleo          region   edad t_hijos nac_vivo_murieron mortinato_2
  <dbl+lbl>  <dbl+lbl>       <dbl+l> <dbl>   <dbl> <dbl+lbl>         <dbl+lbl>  
1 1 [Urbano] 1 [Trabajó al … 1 [Sie…    19       1 0 [No]            0 [No]     
2 1 [Urbano] 0 [No trabajó]  1 [Sie…    23       1 0 [No]            0 [No]     
3 1 [Urbano] 1 [Trabajó al … 1 [Sie…    38       5 0 [No]            0 [No]     
4 1 [Urbano] 0 [No trabajó]  1 [Sie…    18       1 0 [No]            0 [No]     
5 1 [Urbano] 0 [No trabajó]  1 [Sie…    21       1 0 [No]            0 [No]     
6 1 [Urbano] 1 [Trabajó al … 1 [Sie…    22       1 0 [No]            0 [No]     
# ℹ 43 more variables: depresion_pp <dbl+lbl>, intensidad_dpp <dbl+lbl>,
#   etnia <dbl+lbl>, f2_s2_216_1 <dbl+lbl>, f2_s2_216_2 <dbl>,
#   f2_s2_218_1_a <dbl+lbl>, tiempo_dpp <dbl+lbl>, f2_s5_504a_1 <dbl+lbl>,
#   f2_s5_504b_1 <dbl+lbl>, f2_s5_504c_1 <dbl+lbl>, f2_s5_504d_1 <dbl+lbl>,
#   f2_s5_504e_1 <dbl+lbl>, f2_s5_504f_1 <dbl+lbl>, f2_s5_504g_1 <dbl+lbl>,
#   f2_s5_504h_1 <dbl+lbl>, f2_s5_504i_1 <dbl+lbl>, f2_s5_504j_1 <dbl+lbl>,
#   f2_s5_504k_1 <dbl+lbl>, est_civil <dbl+lbl>, q_usted <dbl+lbl>, …

Revisar estructura de los datos

str(data)

##Ejemplo 1: Modelos con variable dependiente dicotómica

Modelos logit y probit

Ajustar el modelo logit

modelo_logit <- glm(depresion_pp ~ lingrl + anios_esc + edad + t_hijos + etnia + area, 
                    data = data, family = binomial(link = "logit"))

Ajustar el modelo probit

modelo_probit <- glm(depresion_pp ~ lingrl + anios_esc + edad + t_hijos + etnia + area, 
                     data = data, family = binomial(link = "probit"))

Resumen modelo Logit

summary(modelo_logit)

Call:
glm(formula = depresion_pp ~ lingrl + anios_esc + edad + t_hijos + 
    etnia + area, family = binomial(link = "logit"), data = data)

Coefficients:
              Estimate Std. Error z value Pr(>|z|)    
(Intercept) -2.3377859  0.1015521 -23.021  < 2e-16 ***
lingrl       0.0006157  0.0071763   0.086   0.9316    
anios_esc   -0.0078052  0.0049109  -1.589   0.1120    
edad         0.0333503  0.0032243  10.344  < 2e-16 ***
t_hijos      0.0391392  0.0189765   2.063   0.0392 *  
etnia        0.3502255  0.0605997   5.779  7.5e-09 ***
area         0.1089295  0.0425378   2.561   0.0104 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 17346  on 16450  degrees of freedom
Residual deviance: 17105  on 16444  degrees of freedom
AIC: 17119

Number of Fisher Scoring iterations: 4

Análisis - El ingreso y los años de escolaridad no son estadísticamente significativos, por lo que no ayudan a explicar que las mujeres ecuatorianas sufran de depresión post parto. - La edad es estadísticamente significativa, lo que se traduce a que las mujeres con mayor edad tienen probabilidad de sufrir de depresión postparto. - El número de hijos representa significancia estadística, es decir, a medidad que aumenta el número de hijos incrementa la probabilidad de que las mujeres sufran de depresión postparto. - La etinia es estadísticamente significativa, siendo las mujeres indigenes las que tienen mayor probabilidad de sufrir de depresión postparto. - Las mujeres del área rural tienen mayor probabilidad de sufrir de depresión postparto, en comparación a las mujeres del área urbana.

Resumen modelo

summary(modelo_probit)

Call:
glm(formula = depresion_pp ~ lingrl + anios_esc + edad + t_hijos + 
    etnia + area, family = binomial(link = "probit"), data = data)

Coefficients:
              Estimate Std. Error z value Pr(>|z|)    
(Intercept) -1.401e+00  5.852e-02 -23.942  < 2e-16 ***
lingrl       3.942e-05  4.170e-03   0.009  0.99246    
anios_esc   -4.481e-03  2.861e-03  -1.566  0.11733    
edad         1.958e-02  1.890e-03  10.363  < 2e-16 ***
t_hijos      2.334e-02  1.123e-02   2.078  0.03774 *  
etnia        2.078e-01  3.585e-02   5.796  6.8e-09 ***
area         6.431e-02  2.452e-02   2.623  0.00872 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 17346  on 16450  degrees of freedom
Residual deviance: 17103  on 16444  degrees of freedom
AIC: 17117

Number of Fisher Scoring iterations: 4

Comparar AIC y BIC de ambos modelos

El criterio de información de Akaike (AIC) es un método matemático para evaluar el ajuste de un modelo a los datos a partir de los cuales se generó.

El criterio de Información Bayesiano (BIC) es una medida de bondad de ajuste de un modelo estadístico, y es a muenudo utilizado como un criterio para para la selección de modelos entre un conjunto finito de modelos.

Comparar AIC de los modelos

aic_logit <- AIC(modelo_logit)
aic_probit <- AIC(modelo_probit)

Comparar BIC de los modelos

bic_logit <- BIC(modelo_logit)
bic_probit <- BIC(modelo_probit)

Mostrar resultados

cat("AIC Logit:", aic_logit, " | AIC Probit:", aic_probit, "\n")
AIC Logit: 17119.38  | AIC Probit: 17117.13 

El criterio más bajo es del modelo probit

cat("BIC Logit:", bic_logit, " | BIC Probit:", bic_probit, "\n")
BIC Logit: 17173.34  | BIC Probit: 17171.09 

Conclusión: El modelo con menor AIC/BIC es el preferido, ya que tiene mejor ajuste, es decir el modelo probit

Calcular efectos marginales para Logit

library(margins)
marg_logit <- margins(modelo_logit)
summary(marg_logit)
    factor     AME     SE       z      p   lower  upper
 anios_esc -0.0013 0.0008 -1.5897 0.1119 -0.0029 0.0003
      area  0.0184 0.0072  2.5619 0.0104  0.0043 0.0325
      edad  0.0056 0.0005 10.4239 0.0000  0.0046 0.0067
     etnia  0.0592 0.0102  5.7944 0.0000  0.0392 0.0793
    lingrl  0.0001 0.0012  0.0858 0.9316 -0.0023 0.0025
   t_hijos  0.0066 0.0032  2.0632 0.0391  0.0003 0.0129

Análisis

  • Los años de escolaridad y el ingreso no son estadísticamente significativos, por lo que no ayudan a explicar que las mujeres ecuatorianas sufran de depresión post parto.
  • E área al ser una varible estadísticamente significativa, nos explica que las mujeres del área rural tien un 1,84% más probabilidad de sufrir depresión post parto.
  • En base a la edad, un año adicional en las mujeres ecuatorianas en promedio aumenta la probabilidad en un 0,56% de sufrir depresión post parto.
  • Una mujer indigena tienen 5,92% de probabilidad de sufrir depresión post parto.
  • A medida que aumenta el número de hijos, aumenta la probabilidad en un 0,66% de que padezcan de depresión post parto.

Calcular efectos marginales para Probit

marg_probit <- margins(modelo_probit)
summary(marg_probit)
    factor     AME     SE       z      p   lower  upper
 anios_esc -0.0013 0.0008 -1.5664 0.1173 -0.0029 0.0003
      area  0.0188 0.0072  2.6238 0.0087  0.0047 0.0328
      edad  0.0057 0.0005 10.4392 0.0000  0.0046 0.0068
     etnia  0.0606 0.0104  5.8096 0.0000  0.0402 0.0811
    lingrl  0.0000 0.0012  0.0095 0.9925 -0.0024 0.0024
   t_hijos  0.0068 0.0033  2.0783 0.0377  0.0004 0.0132

Análisis

  • Los años de escolaridad y el ingreso no son estadísticamente significativos, por lo que no ayudan a explicar que las mujeres ecuatorianas sufran de depresión post parto.
  • E área al ser una varible estadísticamente significativa, nos explica que las mujeres del área rural tien un 1,88% más probabilidad de sufrir depresión post parto.
  • En base a la edad, un año adicional en las mujeres ecuatorianas en promedio aumenta la probabilidad en un 0,57% de sufrir depresión post parto.
  • Una mujer indigena tienen 6,06% de probabilidad de sufrir depresión post parto.
  • A medida que aumenta el número de hijos, aumenta la probabilidad en un 0,68% de que padezcan de depresión post parto.

Para el modelo logit podemos calcular la matriz de confusión

  1. Obtener predicciones del modelo logit
pred_logit <- ifelse(predict(modelo_logit, type = "response") > 0.5, 1, 0)

Crear matriz de confusión

conf_matrix <- table(Predicho = pred_logit, Real = data$depresion_pp)

Mostrar matriz de confusión

print(conf_matrix)
        Real
Predicho     0     1
       0 12828  3623

Calcular exactitud

exactitud <- sum(diag(conf_matrix)) / sum(conf_matrix)
cat("Exactitud del modelo logit:", exactitud, "\n")
Exactitud del modelo logit: 0.7797702 

Las variables consideradas para explicar la probabilidad de que las mujeres con depresión post parto ocurra, de acuerdo al modelo logit es del 77,98%

Calcular la curva ROC para el modelo logit (ayuda a ver con cuanta exactitud el modelo está prediciendo los resultados)

library(pROC)
Type 'citation("pROC")' for a citation.

Adjuntando el paquete: 'pROC'
The following objects are masked from 'package:stats':

    cov, smooth, var
roc_logit <- roc(data$depresion_pp, predict(modelo_logit, type = "response"))
Setting levels: control = 0, case = 1
Setting direction: controls < cases

Graficar la curva ROC

library(ggplot2)
ggplot() +
  geom_line(aes(x = roc_logit$specificities, y = roc_logit$sensitivities), color = "blue") +
  geom_abline(linetype = "dashed", color = "red") + 
  labs(title = "Curva ROC - Modelo Logit",
       x = "1 - Especificidad",
       y = "Sensibilidad") +
  theme_minimal()

Mostrar el área bajo la curva (AUC)

auc_logit <- auc(roc_logit)
cat("Área bajo la curva (AUC) - Modelo Logit:", auc_logit, "\n")
Área bajo la curva (AUC) - Modelo Logit: 0.5836005 

Curva ROC: Muestra el rendimiento del modelo en diferentes umbrales de clasificación. AUC > 0.7 indica un buen modelo predictivo.

##TAREA

modelo logit 2

control_prenatal <- (data$f2_s4b_406_)

control_postparto <- (data$c_posparto)

atencion <- ifelse(data$f2_s5_504a_1 == 3, 1, 0)
data$atencion <- ifelse(data$f2_s5_504a_1 == 3, 1, 0)

tiempo_atencion <- ifelse(data$f2_s5_504f_1 == 3, 1, 0)
data$tiempo_atencion <- ifelse(data$f2_s5_504f_1 == 3, 1, 0)

dispon_medico <- ifelse(data$f2_s5_504c_1 == 3, 1, 0)
data$dispon_medico <- ifelse(data$f2_s5_504c_1 == 3, 1, 0)

privacidad <- ifelse(data$f2_s5_504d_1 == 3, 1, 0)
data$privacidad <- ifelse(data$f2_s5_504d_1 == 3, 1, 0)

inf_salud <- ifelse(data$f2_s5_504j_1 == 3, 1, 0)
data$inf_salud <- ifelse(data$f2_s5_504j_1 == 3, 1, 0)

respeto_cultura <- ifelse(data$f2_s5_504k_1 == 3, 1, 0)
data$respeto_cultura <- ifelse(data$f2_s5_504k_1 == 3, 1, 0)

pierden_embar_antesmes5 <- (data$f2_s2_216_1)

experiencia_medico <- ifelse(data$f2_s5_504b_1 == 3, 1, 0)
data$experiencia_medico <- ifelse(data$f2_s5_504b_1 == 3, 1, 0)

vesimenta_parto <- ifelse(data$f2_s5_504i_1_1 == 3, 1, 0)
Warning: Unknown or uninitialised column: `f2_s5_504i_1_1`.
data$vesimenta_parto <- ifelse(data$f2_s5_504i_1 == 3, 1, 0)

limpieza <- ifelse(data$f2_s5_504h_1 == 3, 1, 0)
data$limpieza <- ifelse(data$f2_s5_504h_1 == 3, 1, 0)

comodidad <- ifelse(data$f2_s5_504e_1 == 3, 1, 0)
data$comodidad <- ifelse(data$f2_s5_504e_1 == 3, 1, 0)

horario_atencion <- ifelse(data$f2_s5_504g_1 == 3, 1, 0)
data$horario_atencion <- ifelse(data$f2_s5_504g_1 == 3, 1, 0)
modelo_logit2 <- glm(depresion_pp ~ lingrl + anios_esc + edad + t_hijos + etnia + area + planf + control_prenatal + control_postparto + q_usted + q_pareja + atencion + tiempo_atencion +lugar + dispon_medico + privacidad + form_parto + est_civil + inf_salud + nac_vivo_murieron + respeto_cultura + empleo + pierden_embar_antesmes5 + experiencia_medico + vesimenta_parto + limpieza + comodidad + horario_atencion,  
                    data = data, family = binomial(link = "logit"))

Resumen modelo Logit 2

summary(modelo_logit2)

Call:
glm(formula = depresion_pp ~ lingrl + anios_esc + edad + t_hijos + 
    etnia + area + planf + control_prenatal + control_postparto + 
    q_usted + q_pareja + atencion + tiempo_atencion + lugar + 
    dispon_medico + privacidad + form_parto + est_civil + inf_salud + 
    nac_vivo_murieron + respeto_cultura + empleo + pierden_embar_antesmes5 + 
    experiencia_medico + vesimenta_parto + limpieza + comodidad + 
    horario_atencion, family = binomial(link = "logit"), data = data)

Coefficients:
                         Estimate Std. Error z value Pr(>|z|)    
(Intercept)             -0.431522   0.215055  -2.007 0.044796 *  
lingrl                  -0.030396   0.013070  -2.326 0.020042 *  
anios_esc                0.001995   0.005220   0.382 0.702269    
edad                     0.029285   0.003521   8.317  < 2e-16 ***
t_hijos                 -0.005505   0.020178  -0.273 0.784997    
etnia                    0.360579   0.064460   5.594 2.22e-08 ***
area                     0.063345   0.044211   1.433 0.151912    
planf                   -0.384450   0.114805  -3.349 0.000812 ***
control_prenatal        -0.077185   0.114501  -0.674 0.500248    
control_postparto        0.048465   0.041053   1.181 0.237784    
q_usted                 -0.194123   0.096553  -2.011 0.044374 *  
q_pareja                -0.088752   0.070532  -1.258 0.208279    
atencion                -0.152857   0.091487  -1.671 0.094760 .  
tiempo_atencion         -0.060062   0.081173  -0.740 0.459344    
lugar                    0.096742   0.049058   1.972 0.048612 *  
dispon_medico            0.043998   0.089209   0.493 0.621870    
privacidad              -0.126724   0.085383  -1.484 0.137759    
form_parto              -0.238219   0.041857  -5.691 1.26e-08 ***
est_civil                0.022485   0.044337   0.507 0.612059    
inf_salud               -0.286371   0.095454  -3.000 0.002699 ** 
nac_vivo_murieron        1.539399   0.092925  16.566  < 2e-16 ***
respeto_cultura          0.035085   0.107849   0.325 0.744938    
empleo                   0.207893   0.072530   2.866 0.004153 ** 
pierden_embar_antesmes5 -0.619897   0.050336 -12.315  < 2e-16 ***
experiencia_medico      -0.001895   0.095347  -0.020 0.984140    
vesimenta_parto         -0.196707   0.092282  -2.132 0.033041 *  
limpieza                 0.374246   0.105259   3.555 0.000377 ***
comodidad                0.085717   0.089113   0.962 0.336103    
horario_atencion         0.058253   0.091849   0.634 0.525932    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 17346  on 16450  degrees of freedom
Residual deviance: 16338  on 16422  degrees of freedom
AIC: 16396

Number of Fisher Scoring iterations: 4

Análisis

El modelo logaritmico identificó varios factores asociados significativamente a la depresión posparto, los que son mayor edad, pertenecer a grupos idigenas, la falta de planificación familiar,el no querer haber quedado embarazada, haber perdido un recién nacido, la forma de parto, el empleo, la falta de limpieza, la información de salud de la madre y la perdida de embarazos antes del quinto mes estuvieron asociados a mayor riesgo de depresión.

calcular la matriz de confusión logit 2

  1. Obtener predicciones del modelo logit
pred_logit2 <- ifelse(predict(modelo_logit2, type = "response") > 0.5, 1, 0)

Crear matriz de confusión

conf_matrix2 <- table(Predicho = pred_logit2, Real = data$depresion_pp)

Mostrar matriz de confusión

print(conf_matrix2)
        Real
Predicho     0     1
       0 12617  3349
       1   211   274

Calcular exactitud

exactitud2 <- sum(diag(conf_matrix2)) / sum(conf_matrix2)
cat("Exactitud del modelo logit2:", exactitud, "\n")
Exactitud del modelo logit2: 0.7797702 

Las variables consideradas para explicar la probabilidad de que las mujeres con depresión post parto ocurra, de acuerdo al modelo logit es del 77,98%

Calcular la curva ROC para el modelo logit 2 (ayuda a ver con cuanta exactitud el modelo está prediciendo los resultados)

library(pROC)
roc_logit2 <- roc(data$depresion_pp, predict(modelo_logit2, type = "response"))
Setting levels: control = 0, case = 1
Setting direction: controls < cases

Graficar la curva ROC

library(ggplot2)
ggplot() +
  geom_line(aes(x = roc_logit2$specificities, y = roc_logit2$sensitivities), color = "blue") +
  geom_abline(linetype = "dashed", color = "red") + 
  labs(title = "Curva ROC - Modelo Logit2",
       x = "1 - Especificidad",
       y = "Sensibilidad") +
  theme_minimal()

Mostrar el área bajo la curva (AUC)

auc_logit2 <- auc(roc_logit2)
cat("Área bajo la curva (AUC) - Modelo Logit2:", auc_logit2, "\n")
Área bajo la curva (AUC) - Modelo Logit2: 0.6646416 

Alimplementar más variables se logro un mayor rendimiento en el modelo, en el que AUC paso de 0,58 a 0,66, mucho más cerca a 0,7

Conclusión El análisis realizado revela que variables como la edad, la falta de planificación familiar,el no querer haber quedado embarazada, si los hijos han nacido vivos o muertos y el área de residencia tienen una relación estadísticamente significativa con la probabilidad de que una mujer padezca depresión postparto. Por otro lado, factores como el ingreso económico y los años de educación no presentan una influencia determinante en los modelos estimados. Tanto el modelo logit como el probit ofrecen resultados consistentes, y su evaluación a través de herramientas como la curva ROC y la matriz de confusión muestra un sólido desempeño predictivo. Este ejercicio evidencia la utilidad de los modelos de regresión con variables dependientes dicotómicas en el estudio de fenómenos sociales complejos, aportando información clave para la formulación de políticas públicas enfocadas en la salud mental.