library(haven)
data <- read_dta("Data1_R.dta")
View(data)Clase 25 mayo
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)
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
- 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
- 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.