The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
library(MASS)
Adjuntando el paquete: 'MASS'
The following object is masked from 'package:dplyr':
select
library(car)
Cargando paquete requerido: carData
Adjuntando el paquete: 'car'
The following object is masked from 'package:dplyr':
recode
library(margins)library(pROC)
Type 'citation("pROC")' for a citation.
Adjuntando el paquete: 'pROC'
The following objects are masked from 'package:stats':
cov, smooth, var
library(caret)
Cargando paquete requerido: ggplot2
Cargando paquete requerido: lattice
1. Cargar los datos
# Establecer directorio (ajusta si es necesario)setwd("C:/Users/alexd/Desktop/MAESTRIA/BUSINESS/CLASE 25 DE MAYO/31/05/2025")# Leer la base de datosdatos <-read_dta("Data1_R.dta")
2. Crear variables binarias adicionales
datos <- datos %>%mutate(depresion_pp =ifelse(depresion_pp %in%c("Sí", "Si", 1), 1,ifelse(depresion_pp %in%c("No", 0), 0, NA)),depresion_pp =as.factor(depresion_pp),medico =ifelse(f2_s5_504c_1 ==3, 1, 0) )# Confirmar que hay dos niveles en la variable dependienteprint(table(datos$depresion_pp, useNA ="always"))
Call:
glm(formula = depresion_pp ~ lingrl + anios_esc + edad + t_hijos +
medico, family = binomial(link = "logit"), data = datos)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.072883 0.107131 -19.349 < 2e-16 ***
lingrl 0.001690 0.007154 0.236 0.813269
anios_esc -0.007664 0.004803 -1.596 0.110542
edad 0.032996 0.003212 10.273 < 2e-16 ***
t_hijos 0.045775 0.018880 2.425 0.015329 *
medico -0.191655 0.051822 -3.698 0.000217 ***
---
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: 17126 on 16445 degrees of freedom
AIC: 17138
Number of Fisher Scoring iterations: 4
Análisis: El modelo muestra qué variables influyen significativamente en la probabilidad de tener depresión postparto. Los coeficientes nos permiten identificar si aumentan o disminuyen dicha probabilidad, y la significancia estadística se refleja en los valores-p asociados.
Análisis: Los efectos marginales muestran el cambio promedio en la probabilidad de depresión por cada unidad adicional de una variable, manteniendo las demás constantes. Es recomendable multiplicar los resultados por 100 para expresarlos en términos porcentuales.
5. Matriz de confusión y exactitud
predicciones <-ifelse(predict(modelo_final, type ="response") >0.5, 1, 0)conf_matrix <-table(Predicho = predicciones, Real =as.numeric(as.character(datos$depresion_pp)))conf_matrix
Real
Predicho 0 1
0 12828 3623
exactitud <-sum(diag(conf_matrix)) /sum(conf_matrix)cat("Exactitud del modelo:", round(exactitud, 4))
Exactitud del modelo: 0.7798
Análisis: La matriz de confusión permite evaluar cuántas predicciones fueron correctas. La exactitud general del modelo indica qué porcentaje del total fue clasificado correctamente.
6. Curva ROC y AUC
library(pROC)# Convertir a valores binarios explícitosroc_logit <-roc(as.numeric(as.character(datos$depresion_pp)), predict(modelo_final, type ="response"))
Setting levels: control = 0, case = 1
Setting direction: controls < cases
auc_valor <-auc(roc_logit)cat("AUC del modelo logit robusto:", round(auc_valor, 4))
AUC del modelo logit robusto: 0.58
# Gráfico de la curva ROCplot(roc_logit, col ="blue", lwd =2, main ="Curva ROC - Modelo Logit Robustecido")abline(a =0, b =1, lty =2, col ="red")
Análisis: El AUC (Área Bajo la Curva) mide la capacidad predictiva del modelo. Valores cercanos a 1 indican excelente discriminación entre los casos con y sin depresión; valores cercanos a 0.5 indican que el modelo no predice mejor que el azar.
7. Comparar AIC y BIC entre modelos logit y probit
# Conclusión de comparaciónif (aic_probit < aic_logit) {cat("El criterio más bajo es del modelo probit\n")} else {cat("El criterio más bajo es del modelo logit\n")}
El criterio más bajo es del modelo probit
if (bic_probit < bic_logit) {cat("Conclusión: El modelo con menor AIC/BIC es el preferido, es decir el modelo probit")} else {cat("Conclusión: El modelo con menor AIC/BIC es el preferido, es decir el modelo logit")}
Conclusión: El modelo con menor AIC/BIC es el preferido, es decir el modelo probit
Análisis: Tanto AIC como BIC penalizan la complejidad del modelo. Si un modelo tiene menor AIC y BIC, indica que se ajusta mejor a los datos sin sobreajustar. Esta comparación permite elegir entre modelos que tienen diferente estructura pero explican el mismo fenómeno.
8. Efectos marginales y matriz para Probit (comparativo)
# Efectos marginales para modelo logitmarg_logit <-margins(modelo_final)summary(marg_logit)
# Matriz de confusión para modelo logitpred_logit <-ifelse(predict(modelo_final, type ="response") >0.5, 1, 0)conf_matrix_logit <-table(Predicho = pred_logit, Real =as.numeric(as.character(datos$depresion_pp)))print(conf_matrix_logit)
Real
Predicho 0 1
0 12828 3623
Análisis: Al comparar los efectos marginales de logit y probit podemos evaluar si las estimaciones son consistentes entre ambos. Aunque sus magnitudes cambian por la escala del modelo, las direcciones y significancia suelen coincidir si los modelos están bien especificados.
9. Conclusión
El modelo logit incluye variables relevantes como ingresos, escolaridad, edad, número de hijos y acceso a servicios de salud. Se eliminaron variables constantes que generaban colinealidad. Se validó la presencia de dos niveles en la variable dependiente antes de aplicar la curva ROC. El AUC y la exactitud indican si este modelo es predictivamente robusto. Además, se compararon los modelos logit y probit con base en criterios de información (AIC y BIC), eligiendo el que presente menor valor como el de mejor ajuste. Finalmente, se calcularon los efectos marginales de ambos modelos y se evaluó la capacidad predictiva del logit mediante matriz de confusión.