Business Analytics

Regresión Lineal y Múltiple

Author

Wilson H. Guamán L.

Published

May 24, 2025

1 Librerias usadas

ver código
suppressWarnings(suppressPackageStartupMessages(library(dplyr)))   
suppressWarnings(suppressPackageStartupMessages(library(ggplot2)))
suppressWarnings(suppressPackageStartupMessages(library(haven)))
suppressWarnings(suppressPackageStartupMessages(library(ggcorrplot))) 
suppressWarnings(suppressPackageStartupMessages(library(ggcorrplot)))
suppressWarnings(suppressPackageStartupMessages(library(car)))
suppressWarnings(suppressPackageStartupMessages(library(foreign))) 
suppressWarnings(suppressPackageStartupMessages(library(msm)))
suppressWarnings(suppressPackageStartupMessages(library(knitr)))
suppressWarnings(suppressPackageStartupMessages(library(kableExtra)))
suppressWarnings(suppressPackageStartupMessages(library(broom)))
suppressWarnings(suppressPackageStartupMessages(library(reshape2)))
suppressWarnings(suppressPackageStartupMessages(library(MASS)))
suppressWarnings(suppressPackageStartupMessages(library(car)))
suppressWarnings(suppressPackageStartupMessages(library(margins)))
suppressWarnings(suppressPackageStartupMessages(library(pROC)))
suppressWarnings(suppressPackageStartupMessages(library(caret)))
suppressWarnings(suppressPackageStartupMessages(library(haven)))

2 Cargar la base de datos

ver código
list.files("C:/Users/USUARIO 2020/Documents/Maestria_EDE_2/Mod_09_Busnicess_Analityc/BA_U1/Clase_04_25_05", pattern = "\\.dta$")
[1] "Data1_R (2).dta"
ver código
library(haven)
ruta2 <- "C:/Users/USUARIO 2020/Documents/Maestria_EDE_2/Mod_09_Busnicess_Analityc/BA_U1/Clase_04_25_05/Data1_R (2).dta"
data18 <- read_dta(ruta2)
ver código
head(data18)
# 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>, …

3 Modelos Probabilisticos

3.1 Modelo de LOGISTICO

ver código
# Ajustar el modelo logit
modelo_logit <- glm(depresion_pp ~ lingrl + anios_esc + edad + t_hijos + etnia + area, data = data18, family = binomial(link = "logit"))
summary(modelo_logit)

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

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

3.2 Modelo PROBABILISTICO

ver código
# Ajustar el modelo probit
modelo_probit <- glm(depresion_pp ~ lingrl + anios_esc + edad + t_hijos + etnia + area, data = data18, family = binomial(link = "probit"))
summary(modelo_probit)

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

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

3.3 Estadísticos AIC y BIC para 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.

3.3.1 Estadístico AIC

3.3.1.1 Para el Modelo Logistico :

ver código
aic_logit <- AIC(modelo_logit)
print(aic_logit)
[1] 17119.38

3.3.1.2 Para el Modelo Probabilistico:

ver código
aic_probit <- AIC(modelo_probit)
print(aic_probit)
[1] 17117.13

3.3.2 Estadistico BIC (Bayesiano)

3.3.2.1 Para el modelo Logistico:

ver código
bic_logit <- BIC(modelo_logit)
print(bic_logit)
[1] 17173.34

3.3.2.2 Para el modelo Probabilistico:

ver código
bic_probit <- BIC(modelo_probit)
print(bic_probit)
[1] 17171.09

3.3.3 Elección del mejor crieterio estadístico

3.3.3.1 Bajo el criterio AIC:

ver código
cat("AIC Logit:", aic_logit, " | AIC Probit:", aic_probit, "\n")
AIC Logit: 17119.38  | AIC Probit: 17117.13 
ver código
#El criterio más bajo es del modelo probit

3.3.3.2 Bajo el criterio BIC:

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

Bajo el criterio del BIC el probit es el mejor, porq tiene menor valor

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

3.4 Cálculo de efectos marginales para LOGIT

ver código
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
ver código
##Análisis (multiplicar *100)
  • Los años de escolaridad y el ingreso no son estadisticamente significativos, es decir no ayudan a explicar la probabilidad de que las mujeres ecuatorianas padescan de depresión post-parto.

  • EL área al ser una variable estadisticamente significativa, explican de las mujeres del area rural poseen el 1.84% de probabilidad de sufrir depresión post-parto

  • Edad, un año adicional en las mujeres ecuatorianas en promedio aumenta la probabilidad en 0.56% de sufrir depresión post-parto.

  • Una mujer indigena tiene mayor probabilidad de sufrir depresión post-parto (alrededor del 6.37%) .

  • A medida que aumenta la cantidad de hijos la probabilidad de tener depresión post-parto en 0.66%.

3.5 Cálculo de la matriz de confusión para LOGIT

ver código
#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 = data18$depresion_pp)
# Mostrar matriz de confusión
print(conf_matrix)
        Real
Predicho     0     1
       0 12828  3623
ver código
# 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%. Es decir, hay el 22.02% de variables que aun me pueden explicar el modelo.

3.6 Calcular la curva ROC para el modelo logit

ver código
roc_logit <- roc(data18$depresion_pp, predict(modelo_logit, type = "response"))
Setting levels: control = 0, case = 1
Setting direction: controls < cases
ver código
# Graficar la curva ROC
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()

ver código
# 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.

ver código
medico <- ifelse(data18$f2_s5_504c_1 == 3, 1, 0)
ver código
table(data18$f2_s5_504c_1)

    1     2     3 
  405  2008 14038 
ver código
data18$medico <- ifelse(data18$f2_s5_504c_1 == 3, 1, 0)

4 ———————— TAREA ————————

4.1 MODELO DE REGRESIÓN LOGISTICA

4.1.1 Descripción de las variables:

Variable dependiente:

depresion_pp: Indicador de depresión posparto (1 = Sí, 0 = No).

Variables independientes:

  • lingrl: Logaritmo del ingreso laboral de la mujer.

  • anios_esc: Años de escolaridad de la mujer.

  • edad: Edad de la mujer.

  • t_hijos: Total de hijos/as que viven en casa.

  • c_pospartoSI: Si la mujer tuvo control médico después del parto (1 = Sí, 0 = No).

  • etniaIndigena: Pertenencia étnica (1 = Indígena, 0 = Otra).

  • áreaurbano: Zona de residencia (1 = Urbana, 0 = Rural).

  • q_usted_tener el hijo: Si la mujer deseaba tener el hijo (1 = Sí, 0 = No).

  • q_pareja_terner el hijo: Si la pareja deseaba tener el hijo (1 = Sí, 0 = No).

  • f2_s4b_406_no: Control médico prenatal (1 = Sí, 0 = No).

  • f2_s2_216_1_no: Pérdida del hijo después del 5to mes de embarazo (1 = Sí, 0 = No).

  • regionx2: Pertencer a la región Costa (1 = Sí, 0 = No).

  • form_partoNormal: Tipo de parto (1 = Normal, 0 = Cesárea u otro).

  • nac_vivo_murieronSi: Si tuvo hijos/as que nacieron vivos y luego murieron (1 = Sí, 0 = No).

  • medico_malo: Calidad de la atención médica percibida (1 = Mala, 0 = Buena).

  • planfSi: Si la mujer planificó el embarazo (1 = Sí, 0 = No).

  • est_civilCasada: Estado civil (1 = Casada, 0 = Otra situación).

4.1.2 Estimación del modelo LOGISTICO:

El modelo logit muestra que varias variables tienen una influencia estadísticamente significativa sobre la probabilidad del evento bajo estudio (presencia de depresión posparto). En particular, la edad de la madre tiene un coeficiente positivo y altamente significativo, lo que indica que, a mayor edad, aumentan los log-odds de experimentar el evento. De manera similar, pertenecer a un grupo étnico (ser mujer indigena) y vivir en ciertas áreas geográficas (área rural) incrementan significativamente las probabilidades del evento.

Por el contrario, variables como haber recibido atención médica (medico), residir en la región 2 (no pertenecero a la Región Costa), el tipo de parto (form_parto), planificación familiar (planf) y la variable pérdida de un hijo (f2_s2_216_1) muestran coeficientes negativos y altamente significativos. Esto sugiere que estas condiciones o características reducen las probabilidades (log-odds) del evento, lo que podría interpretarse como factores protectores o asociados a menor riesgo.

Un hallazgo notable es el fuerte efecto positivo de la variable “nac_vivo_murieron” (nacieron vivos y luego murieron), que sugiere que las mujeres que han perdido hijos vivos tienen una probabilidad significativamente mayor de experimentar el evento en cuestión. Esta asociación es la más pronunciada en el modelo.

Finalmente, otras variables como nivel educativo, estado civil, número de hijos y opinión de la pareja no resultaron estadísticamente significativas, por lo que no se puede concluir que tengan un impacto sistemático sobre las probabilidades del evento, al menos dentro del marco de este modelo.

ver código
library(dplyr)
library(knitr)
library(kableExtra)
library(tibble)

modelo_logit2 <- glm(depresion_pp ~ 
                       lingrl + anios_esc + edad + t_hijos + c_posparto +
                       etnia + area + q_usted + q_pareja + f2_s4b_406_ +
                       est_civil + f2_s2_216_1 + regionx2 +
                       form_parto + nac_vivo_murieron + medico + planf,
                      data = data18, family = binomial(link = "logit"))

# Extraer coeficientes y otras estadísticas del resumen del modelo
tabla_coef <- summary(modelo_logit2)$coefficients %>%
  as.data.frame() %>%
  rownames_to_column(var = "Variable") %>%
  rename(
    Estimate = Estimate,
    Std_Error = `Std. Error`,
    Z_value = `z value`,
    P_value = `Pr(>|z|)`
  )

tabla_coef <- tabla_coef %>%
  mutate(Significancia = case_when(
    P_value < 0.001 ~ "***",
    P_value < 0.01  ~ "**",
    P_value < 0.05  ~ "*",
    P_value < 0.1   ~ ".",
    TRUE            ~ ""
  ))

tabla_coef %>%
  kable(digits = 4, 
        caption = "Resumen de Coeficientes del Modelo Logit",
        col.names = c("Variable", "Estimación", "Error Estándar", "Valor Z", "Valor p", "Signif.")) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed")) %>%
  column_spec(6, bold = TRUE, color = "red") # pone en rojo y negrita la columna Significancia
Resumen de Coeficientes del Modelo Logit
Variable Estimación Error Estándar Valor Z Valor p Signif.
(Intercept) -0.1223 0.2043 -0.5986 0.5495
lingrl -0.0077 0.0074 -1.0354 0.3005
anios_esc -0.0012 0.0052 -0.2236 0.8231
edad 0.0279 0.0035 7.9701 0.0000 ***
t_hijos 0.0073 0.0202 0.3635 0.7162
c_posparto 0.0274 0.0412 0.6645 0.5064
etnia 0.2990 0.0644 4.6451 0.0000 ***
area 0.1015 0.0444 2.2885 0.0221 *
q_usted -0.2073 0.0965 -2.1480 0.0317 *
q_pareja -0.0808 0.0705 -1.1465 0.2516
f2_s4b_406_ -0.0889 0.1143 -0.7780 0.4366
est_civil -0.0291 0.0446 -0.6518 0.5145
f2_s2_216_1 -0.6355 0.0504 -12.6028 0.0000 ***
regionx2 -0.3746 0.0441 -8.4877 0.0000 ***
form_parto -0.2647 0.0413 -6.4119 0.0000 ***
nac_vivo_murieron 1.5472 0.0929 16.6473 0.0000 ***
medico -0.1559 0.0536 -2.9068 0.0037 **
planf -0.3766 0.1147 -3.2835 0.0010 **

4.1.3 Estimación de los efectos marginales del modelo LOGISTICO:

Los resultados del modelo logit revelan que varios factores influyen significativamente en la probabilidad de desarrollar depresión postparto. El predictor más fuerte es haber perdido un hijo al nacer, que aumenta el riesgo en un 24.7%, mostrando el profundo impacto emocional de esta experiencia. La etnia y la edad también aparecen como factores de riesgo importantes, con incrementos del 4.8% y 0.45% respectivamente, lo que sugiere que ciertos grupos poblacionales y las mujeres de mayor edad podrían necesitar mayor apoyo psicológico. Por otro lado, variables relacionadas con la atención médica durante el parto y el seguimiento profesional muestran efectos protectores significativos, reduciendo el riesgo entre 2.5% y 6.0%, destacando la importancia de los servicios de salud materna.

Entre los hallazgos más relevantes se encuentra que la región de residencia tiene un efecto considerable, con una reducción del 6.0% en algunas zonas, lo que podría reflejar diferencias en el acceso a servicios o apoyo social. Sin embargo, otros factores como el nivel educativo, el estado civil o el número de hijos no mostraron una asociación estadísticamente significativa con la depresión postparto en este análisis. Esto indica que el riesgo de depresión postparto parece estar más relacionado con experiencias médicas traumáticas y características demográficas específicas que con factores socioeconómicos generales.

Los resultados subrayan la necesidad de implementar programas de prevención dirigidos especialmente a mujeres que han sufrido pérdidas perinatales, pertenecen a grupos étnicos vulnerables o son de mayor edad. Además, refuerzan la importancia de garantizar una atención médica de calidad durante el parto y el postparto, ya que esto aparece consistentemente como un factor protector. Estos hallazgos podrían ayudar a diseñar intervenciones más efectivas para reducir la incidencia de depresión postparto en poblaciones de riesgo.

ver código
library(margins)
marg_logit2 <- margins(modelo_logit2)
##Análisis (multiplicar *100)

library(margins)
library(knitr)
library(kableExtra)  # Para mejorar la tabla con formato HTML o LaTeX

# Suponiendo que ya tienes calculados los efectos marginales
marg_logit2 <- margins(modelo_logit2)
resumen <- summary(marg_logit2)

library(margins)
library(knitr)
library(kableExtra)
library(dplyr)

# Calcular efectos marginales, agregar significancia y mostrar en tabla elegante
summary(margins(modelo_logit2)) %>%
  mutate(Signif = cut(p, breaks = c(-Inf, 0.001, 0.01, 0.05, 0.1, Inf),
                      labels = c("***", "**", "*", ".", " "))) %>%
  rename(
    Variable = factor,
    `Efecto Marginal` = AME,
    `Error Estándar` = SE,
    `Valor z` = z,
    `Valor p` = p
  ) %>%
  kable(caption = "Efectos marginales del modelo Logit con significancia",
        digits = 4, format = "html") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), 
                full_width = FALSE)
Efectos marginales del modelo Logit con significancia
Variable Efecto Marginal Error Estándar Valor z Valor p lower upper Signif
anios_esc -0.0002 0.0008 -0.2236 0.8231 -0.0018 0.0014
area 0.0162 0.0071 2.2894 0.0221 0.0023 0.0301 *
c_posparto 0.0044 0.0066 0.6645 0.5064 -0.0085 0.0173
edad 0.0045 0.0006 8.0075 0.0000 0.0034 0.0056 ***
est_civil -0.0046 0.0071 -0.6518 0.5145 -0.0186 0.0093
etnia 0.0478 0.0103 4.6528 0.0000 0.0277 0.0679 ***
f2_s2_216_1 -0.1016 0.0080 -12.7765 0.0000 -0.1172 -0.0860 ***
f2_s4b_406_ -0.0142 0.0183 -0.7780 0.4366 -0.0500 0.0216
form_parto -0.0423 0.0066 -6.4306 0.0000 -0.0552 -0.0294 ***
lingrl -0.0012 0.0012 -1.0355 0.3004 -0.0036 0.0011
medico -0.0249 0.0086 -2.9087 0.0036 -0.0417 -0.0081 **
nac_vivo_murieron 0.2473 0.0144 17.1568 0.0000 0.2191 0.2756 ***
planf -0.0602 0.0183 -3.2858 0.0010 -0.0961 -0.0243 **
q_pareja -0.0129 0.0113 -1.1466 0.2515 -0.0350 0.0092
q_usted -0.0331 0.0154 -2.1488 0.0316 -0.0634 -0.0029 *
regionx2 -0.0599 0.0070 -8.5294 0.0000 -0.0736 -0.0461 ***
t_hijos 0.0012 0.0032 0.3635 0.7162 -0.0051 0.0075

4.1.4 Estimación del la matriz de confusión del modelo LOGISTICO:

La matriz de confusión muestra el desempeño del modelo Logit2 para predecir depresión postparto, con una exactitud global del 78.4%.

El modelo identificó correctamente 12,602 casos negativos (verdaderos negativos), lo que sugiere que es bastante bueno para reconocer a las mujeres que no desarrollarán depresión postparto. Sin embargo, solo detectó 289 casos positivos correctos (verdaderos positivos) frente a 3,334 falsos negativos, indicando que el modelo pasa por alto muchos casos reales de depresión postparto, clasificándolos erróneamente como negativos.

Los 226 falsos positivos representan mujeres que el modelo predijo incorrectamente como desarrollarían depresión postparto. La baja sensibilidad (capacidad para detectar casos positivos) es preocupante, ya que podría dejar sin atención a muchas mujeres que sí necesitan apoyo. La exactitud del 78.4% está principalmente impulsada por los aciertos en casos negativos, lo que sugiere que el modelo necesita mejoras para identificar mejor los casos positivos de depresión postparto.

ver código
library(knitr)
library(kableExtra)

# Obtener probabilidades predichas
probabilidades <- predict(modelo_logit2, type = "response")

# Convertir a etiquetas 0/1 con umbral 0.5
pred_logit2 <- ifelse(probabilidades > 0.5, 1, 0)

# Crear matriz de confusión
conf_matrix2 <- table(Predicho = pred_logit2, Real = data18$depresion_pp)

# Calcular exactitud
exactitud2 <- sum(diag(conf_matrix2)) / sum(conf_matrix2)

# Convertir matriz a data frame para kable
conf_df <- as.data.frame.matrix(conf_matrix2)

# Agregar fila con exactitud
conf_df_ext <- rbind(conf_df, "Exactitud" = c(round(exactitud2, 3), "", ""))  # Ajusta si tu matriz tiene diferente tamaño
Warning in rbind(deparse.level, ...): El número de columnas del resultado, 2,
no es un múltiplo de la longitud del vector 3 del argumento 2
ver código
# Mostrar tabla
kable(conf_df_ext, format = "html", caption = "Matriz de Confusión del Modelo Logit2 con Exactitud") %>%
  kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
Matriz de Confusión del Modelo Logit2 con Exactitud
0 1
0 12602 3334
1 226 289
Exactitud 0.784

4.1.5 Estimación de la curva ROC del modelo LOGISTICO:

La Curva ROC mostrada representa la capacidad del modelo Logit2 para predecir correctamente si una mujer sufre o no de depresión postparto. La gráfica compara la tasa de verdaderos positivos (sensibilidad) con la tasa de falsos positivos (1 - especificidad) a diferentes puntos de corte del modelo.

En este caso, el valor de Área Bajo la Curva (AUC) es 0.666, lo que indica una capacidad de discriminación moderada. Esto significa que el modelo tiene aproximadamente un 66.6% de probabilidad de clasificar correctamente a una mujer con depresión postparto frente a una que no la tiene, escogidas al azar.

ver código
library(pROC)
library(ggplot2)

# Obtener probabilidades predichas (asegúrate de que esta línea NO esté comentada)
probs <- predict(modelo_logit2, type = "response") 

# Crear objeto ROC
roc_obj <- roc(response = data18$depresion_pp, predictor = probs)
Setting levels: control = 0, case = 1
Setting direction: controls < cases
ver código
# Extraer datos para ggplot
roc_df <- data.frame(
  specificity = rev(roc_obj$specificities),
  sensitivity = rev(roc_obj$sensitivities)
)

# Calcular AUC
auc_value <- auc(roc_obj)

# Graficar con ggplot2
ggplot(roc_df, aes(x = 1 - specificity, y = sensitivity)) +
  geom_line(color = "blue", linewidth = 1) +
  geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "grey") +
  labs(
    title = "Gráfica 1:",
    subtitle = "Curva ROC",
    x = "Tasa de Falsos Positivos (1 - Especificidad)",
    y = "Tasa de Verdaderos Positivos (Sensibilidad)",
    caption = paste("Área Bajo la Curva AUC =", round(auc_value, 3))
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold"),
    plot.caption = element_text(hjust = 0, size = 14)
  )

4.1.6 Conclusión:

Al comparar el AUC de 0.666 con un valor de 0.587, podemos observar diferencias importantes en la capacidad predictiva de los modelos. El valor de 0.666, aunque moderado, muestra una discriminación significativamente mejor que el modelo con AUC de 0.587, el cual se acerca peligrosamente al nivel de azar (0.5). Esta comparación revela que el primer modelo tiene un 7.9% más de precisión para distinguir entre casos positivos y negativos de depresión postparto.

El modelo con AUC de 0.587 presenta serias limitaciones, ya que apenas supera en 8.7 puntos porcentuales la clasificación aleatoria. Este bajo desempeño sugeriría que casi no existe capacidad predictiva relevante, haciendo cuestionable su aplicación práctica. En contraste, el modelo con AUC de 0.666, si bien no óptimo, al menos muestra una capacidad discriminativa aceptable para servir como herramienta de tamizaje inicial. La diferencia del 13.5% en la precisión relativa (comparado con el azar) entre ambos modelos (0.666 vs 0.587) podría ser clínicamente significativa en contextos donde se requiera priorizar la identificación de casos de riesgo.

Estos resultados comparativos refuerzan la necesidad de mejorar ambos modelos, particularmente el de menor desempeño. El modelo con AUC 0.587 probablemente requiere una revisión completa de sus variables predictoras, mientras que el de 0.666 podría beneficiarse de ajustes más finos. La brecha entre ambos valores también resalta la importancia de evaluar múltiples métricas de desempeño al comparar modelos predictivos en salud mental, donde incluso mejoras aparentemente modestas pueden tener impacto clínico relevante.