library(haven)Warning: package 'haven' was built under R version 4.4.3
data <- read_dta("Data1_R.dta")
View(data)setwd(“C:/Users/LENOVO/Desktop/25 MAYO ANDRE”)
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
Leer los datos (ajustar la ruta del archivo)
library(haven)Warning: package 'haven' was built under R version 4.4.3
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
results='hide'
str(data)tibble [16,451 × 50] (S3: tbl_df/tbl/data.frame)
$ area : dbl+lbl [1:16451] 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
..@ label : chr "Área"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:2] 0 1
.. ..- attr(*, "names")= chr [1:2] "Rural" "Urbano"
$ empleo : dbl+lbl [1:16451] 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1...
..@ label : chr "1. ¿Qué hizo (…) la semana pasada:"
..@ format.stata: chr "%26.0g"
..@ labels : Named num [1:2] 0 1
.. ..- attr(*, "names")= chr [1:2] "No trabajó" "Trabajó al menos una hora"
$ region : dbl+lbl [1:16451] 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
..@ label : chr "Región"
..@ format.stata: chr "%9.0g"
..@ labels : Named num [1:4] 1 2 3 4
.. ..- attr(*, "names")= chr [1:4] "Sierra" "Costa" "Amazonía" "Insular"
$ edad : num [1:16451] 19 23 38 18 21 22 40 31 19 34 ...
..- attr(*, "label")= chr "101. Entonces, ¿Cuántos años cumplidos tiene?"
..- attr(*, "format.stata")= chr "%8.0g"
$ t_hijos : num [1:16451] 1 1 5 1 1 1 3 2 1 2 ...
..- attr(*, "label")= chr "208.c Total hijos/as en casa"
..- attr(*, "format.stata")= chr "%8.0g"
$ nac_vivo_murieron: dbl+lbl [1:16451] 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
..@ label : chr " 210. ¿Tuvo usted hijos o hijas que nacieron vivos/as y que murieron"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:2] 0 1
.. ..- attr(*, "names")= chr [1:2] "No" "Si"
$ mortinato_2 : dbl+lbl [1:16451] 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0...
..@ label : chr "212.1 De todos los embarazos que usted ha tenido en su vida"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:2] 0 1
.. ..- attr(*, "names")= chr [1:2] "No" "Si"
$ depresion_pp : dbl+lbl [1:16451] 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0...
..@ label : chr "219. ¿Después de alguno de sus partos, sintió tristeza?"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:2] 0 1
.. ..- attr(*, "names")= chr [1:2] "No" "Si"
$ intensidad_dpp : dbl+lbl [1:16451] 1, 2, 0, 0, 0, 0, 2, 0, 0, 2, 0, 2, 1, 0, 0, 0, 0, 0...
..@ label : chr "Intensidad DPP"
..@ format.stata: chr "%12.0g"
..@ labels : Named num [1:3] 0 1 2
.. ..- attr(*, "names")= chr [1:3] "No tiene dpp" "Poca dpp" "Mucha dpp"
$ etnia : dbl+lbl [1:16451] 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0...
..@ label : chr "9.1 ¿Cómo se Identifica (…) según su cultura y costumbres:"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:2] 0 1
.. ..- attr(*, "names")= chr [1:2] "Otra" "Indigena"
$ f2_s2_216_1 : dbl+lbl [1:16451] 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2...
..@ label : chr "216.1 Hay mujeres que pierden sus embarazos antes de cumplir el quinto mes"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:2] 1 2
.. ..- attr(*, "names")= chr [1:2] "si" "no"
$ f2_s2_216_2 : num [1:16451] NA NA NA NA NA NA NA NA NA NA ...
..- attr(*, "label")= chr "216.2 ¿Cuántos?"
..- attr(*, "format.stata")= chr "%8.0g"
$ f2_s2_218_1_a : dbl+lbl [1:16451] 2, 2, 2, 2, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2...
..@ label : chr "218.a ¿Hombre o mujer?"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:2] 1 2
.. ..- attr(*, "names")= chr [1:2] "hombre" "mujer"
$ tiempo_dpp : dbl+lbl [1:16451] 1, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0...
..@ label : chr "221. ¿Durante cuánto tiempo se sintió triste?"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:5] 1 2 3 4 88
.. ..- attr(*, "names")= chr [1:5] "menos de 3 meses" "3 meses" "6 meses" "1año o más" ...
$ f2_s5_504a_1 : dbl+lbl [1:16451] 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3...
..@ label : chr "504.a El trato que recibió del personal de salud que le atendió?PN"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:3] 1 2 3
.. ..- attr(*, "names")= chr [1:3] "Malo" "Regular" "Bueno"
$ f2_s5_504b_1 : dbl+lbl [1:16451] 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3...
..@ label : chr "504.b La experiencia/conocimiento de la persona que le atendió?PN"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:3] 1 2 3
.. ..- attr(*, "names")= chr [1:3] "Malo" "Regular" "Bueno"
$ f2_s5_504c_1 : dbl+lbl [1:16451] 3, 3, 2, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3...
..@ label : chr "504.c La disponibilidad del médico, enfermera u otro personal"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:3] 1 2 3
.. ..- attr(*, "names")= chr [1:3] "Malo" "Regular" "Bueno"
$ f2_s5_504d_1 : dbl+lbl [1:16451] 3, 3, 1, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3...
..@ label : chr "504.d La privacidad durante su atención? - PNoC"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:3] 1 2 3
.. ..- attr(*, "names")= chr [1:3] "Malo" "Regular" "Bueno"
$ f2_s5_504e_1 : dbl+lbl [1:16451] 2, 3, 2, 3, 3, 3, 3, 3, 2, 3, 3, 2, 3, 3, 3, 3, 3, 3...
..@ label : chr "504.e La comodidad del establecimiento? - Parto normal o cesárea"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:3] 1 2 3
.. ..- attr(*, "names")= chr [1:3] "Malo" "Regular" "Bueno"
$ f2_s5_504f_1 : dbl+lbl [1:16451] 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 2, 3, 3, 3, 3, 3, 3...
..@ label : chr "504.f El tiempo que tardaron en atenderla? - Parto normal o cesárea"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:3] 1 2 3
.. ..- attr(*, "names")= chr [1:3] "Malo" "Regular" "Bueno"
$ f2_s5_504g_1 : dbl+lbl [1:16451] 1, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3...
..@ label : chr "504.g El horario de atención? - Parto normal o cesárea"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:3] 1 2 3
.. ..- attr(*, "names")= chr [1:3] "Malo" "Regular" "Bueno"
$ f2_s5_504h_1 : dbl+lbl [1:16451] 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3...
..@ label : chr "504.h La limpieza/aseo del establecimiento? - Parto normal o cesárea"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:3] 1 2 3
.. ..- attr(*, "names")= chr [1:3] "Malo" "Regular" "Bueno"
$ f2_s5_504i_1 : dbl+lbl [1:16451] 2, 3, 1, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3...
..@ label : chr "504.i La ropa/vestimenta utilizada en el parto? - Parto normal o cesárea"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:3] 1 2 3
.. ..- attr(*, "names")= chr [1:3] "Malo" "Regular" "Bueno"
$ f2_s5_504j_1 : dbl+lbl [1:16451] 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3...
..@ label : chr "504.j La información que le dio el personal de salud sobre su salud"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:3] 1 2 3
.. ..- attr(*, "names")= chr [1:3] "Malo" "Regular" "Bueno"
$ f2_s5_504k_1 : dbl+lbl [1:16451] 3, 3, 2, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3...
..@ label : chr "504.k El respeto a su cultura y costumbres relacionadas con el parto? - Parto n"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:3] 1 2 3
.. ..- attr(*, "names")= chr [1:3] "Malo" "Regular" "Bueno"
$ est_civil : dbl+lbl [1:16451] 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1...
..@ label : chr "900. ¿Actualmente usted esta:"
..@ format.stata: chr "%12.0g"
..@ labels : Named num [1:2] 0 1
.. ..- attr(*, "names")= chr [1:2] "En otro caso" "Casada"
$ q_usted : dbl+lbl [1:16451] 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1...
..@ label : chr "403. En la época en la que quedó embarazada de (…), quería Usted:"
..@ format.stata: chr "%17.0g"
..@ labels : Named num [1:2] 0 1
.. ..- attr(*, "names")= chr [1:2] "No tener ese hijo" "Tener ese hijo"
$ q_pareja : dbl+lbl [1:16451] 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1...
..@ label : chr "405. ¿Quería su pareja:"
..@ format.stata: chr "%17.0g"
..@ labels : Named num [1:2] 0 1
.. ..- attr(*, "names")= chr [1:2] "No tener ese hijo" "Tener ese hijo"
$ f2_s4b_406_ : dbl+lbl [1:16451] 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1...
..@ label : chr "406. ¿Tuvo algún control prenatal cuando estaba embarazada de (...)?"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:2] 1 2
.. ..- attr(*, "names")= chr [1:2] "si" "no"
$ lugar : dbl+lbl [1:16451] 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0...
..@ label : chr "423.a ¿En que lugar tuvo el parto de (..).?"
..@ format.stata: chr "%32.0g"
..@ labels : Named num [1:2] 0 1
.. ..- attr(*, "names")= chr [1:2] "Establecimiento privado" "Establecimiento de salud del msp"
$ form_parto : dbl+lbl [1:16451] 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0...
..@ label : chr "425. El parto de (...) fue:"
..@ format.stata: chr "%15.0g"
..@ labels : Named num [1:2] 0 1
.. ..- attr(*, "names")= chr [1:2] "Cesárea" "Normal"
$ c_posparto : dbl+lbl [1:16451] 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1...
..@ label : chr "440. ¿Tuvo usted algún control después del parto de (...)?"
..@ format.stata: chr "%8.0g"
..@ labels : Named num [1:2] 0 1
.. ..- attr(*, "names")= chr [1:2] "No" "Si"
$ anios_esc : num [1:16451] 14 10 6 8 16 9 10 13 14 6 ...
..- attr(*, "label")= chr "Años escolaridad"
..- attr(*, "format.stata")= chr "%9.0g"
$ ingrl : num [1:16451] 0 0 240 0 0 0 0 60 0 0 ...
..- attr(*, "label")= chr "Ingreso laboral"
..- attr(*, "format.stata")= chr "%9.0g"
$ planf : dbl+lbl [1:16451] 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1...
..@ label : chr "Planificación familiar"
..@ format.stata: chr "%13.0g"
..@ labels : Named num [1:2] 0 1
.. ..- attr(*, "names")= chr [1:2] "No planifico" "Si planificó"
$ lingrl : num [1:16451] 0 0 5.48 0 0 ...
..- attr(*, "label")= chr "Logaritmo ingreso laboral"
..- attr(*, "format.stata")= chr "%9.0g"
$ lugarx1 : num [1:16451] 0 0 0 0 0 0 0 1 0 0 ...
..- attr(*, "label")= chr "lugar==Establecimiento privado"
..- attr(*, "format.stata")= chr "%8.0g"
$ lugarx2 : num [1:16451] 1 1 1 1 1 1 1 0 1 1 ...
..- attr(*, "label")= chr "lugar==Establecimiento de salud del msp"
..- attr(*, "format.stata")= chr "%8.0g"
$ regionx1 : num [1:16451] 1 1 1 1 1 1 1 1 1 1 ...
..- attr(*, "label")= chr "region==Sierra"
..- attr(*, "format.stata")= chr "%8.0g"
$ regionx2 : num [1:16451] 0 0 0 0 0 0 0 0 0 0 ...
..- attr(*, "label")= chr "region==Costa"
..- attr(*, "format.stata")= chr "%8.0g"
$ regionx3 : num [1:16451] 0 0 0 0 0 0 0 0 0 0 ...
..- attr(*, "label")= chr "region==Amazonía"
..- attr(*, "format.stata")= chr "%8.0g"
$ regionx4 : num [1:16451] 0 0 0 0 0 0 0 0 0 0 ...
..- attr(*, "label")= chr "region==Insular"
..- attr(*, "format.stata")= chr "%8.0g"
$ intensidad_dppx1 : num [1:16451] 0 0 1 1 1 1 0 1 1 0 ...
..- attr(*, "label")= chr "intensidad_dpp==No tiene dpp"
..- attr(*, "format.stata")= chr "%8.0g"
$ intensidad_dppx2 : num [1:16451] 1 0 0 0 0 0 0 0 0 0 ...
..- attr(*, "label")= chr "intensidad_dpp==Poca dpp"
..- attr(*, "format.stata")= chr "%8.0g"
$ intensidad_dppx3 : num [1:16451] 0 1 0 0 0 0 1 0 0 1 ...
..- attr(*, "label")= chr "intensidad_dpp==Mucha dpp"
..- attr(*, "format.stata")= chr "%8.0g"
$ tiempo_dppx1 : num [1:16451] 0 0 1 1 1 1 0 1 1 0 ...
..- attr(*, "label")= chr "tiempo_dpp== 0.0000"
..- attr(*, "format.stata")= chr "%8.0g"
$ tiempo_dppx2 : num [1:16451] 1 1 0 0 0 0 0 0 0 1 ...
..- attr(*, "label")= chr "tiempo_dpp==menos de 3 meses"
..- attr(*, "format.stata")= chr "%8.0g"
$ tiempo_dppx3 : num [1:16451] 0 0 0 0 0 0 0 0 0 0 ...
..- attr(*, "label")= chr "tiempo_dpp==3 meses"
..- attr(*, "format.stata")= chr "%8.0g"
$ tiempo_dppx4 : num [1:16451] 0 0 0 0 0 0 1 0 0 0 ...
..- attr(*, "label")= chr "tiempo_dpp==6 meses"
..- attr(*, "format.stata")= chr "%8.0g"
$ tiempo_dppx5 : num [1:16451] 0 0 0 0 0 0 0 0 0 0 ...
..- attr(*, "label")= chr "tiempo_dpp==1año o más"
..- attr(*, "format.stata")= chr "%8.0g"
##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"))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
Analisis El ingreso y los años de escolaridad no son estadisticamente significativos, es decir, no nos ayudan a explicar la probabilidad de que las mujeres ecuatorianas sufran de depresion post parto.
La edad es estadísticamente significativa, lo que indica que, las mujeres con mayor edad tienen mayor probabilidad de sufrir de depresion post parto.
El numero de hijos presenta significancia estadistica, es decir, a medida que incrementa el número de hijos, crece la probabilidad de que las mujeres sufran de depresion post parto.
La etnia es una variable estadisticamente significativa en el modelo, lo cual significa que, las mujeres indígenas tienen mas probabilidad de padecer de depresion post parto.
Las mujeres que viven en el área rural tienen mayor probabilidad de sufrir de depresion post parto, en comparación a las damas del área urbana.
Resumen modelo probit
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
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.
aic_logit <- AIC(modelo_logit)
aic_probit <- AIC(modelo_probit)bic_logit <- BIC(modelo_logit)##Comparar BIC de los modelos
bic_logit <- BIC(modelo_logit)
bic_probit <- BIC(modelo_probit)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
CONCLUSION: El modelo con menor AIC/BIC es el preferido, ya que tiene mejor ajuste, es decir se trata del modelo probit
library(margins)Warning: package 'margins' was built under R version 4.4.3
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
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 padezcan de depresion post parto.
El área al ser una variable estadisticamente significativa, nos explica que las mujeres del área rural tienen 1,84 % mas probabilidad de sufrir de depresion post parto.
Un año adiciona de las mujeres ecutorianas en promedio, aumenta la probabilidad en 0,56% de sufrir de depresion post parto.
Una mujer indígena tiene 5,92% de probabilidad de sufrir de depresion post parto.
A medida que aumenta el número de hijos, acrecienta la probabilidad en 0,66% de que padezca de depresion post parto.
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
Analisis 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 padezcan de depresion post parto.
El área al ser una variable estadisticamente significativa, nos explica que las mujeres del área rural tienen 1,88 % mas probabilidad de sufrir de depresion post parto.
Un año adiciona de las mujeres ecutorianas en promedio, aumenta la probabilidad en 0,57% de sufrir de depresion post parto.
Una mujer indígena tiene 6,06% de probabilidad de sufrir de depresion post parto.
A medida que aumenta el número de hijos, acrecienta la probabilidad en 0,68% de que padezca de depresion 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)conf_matrix <- table(Predicho = pred_logit, Real = data$depresion_pp)print(conf_matrix) Real
Predicho 0 1
0 12828 3623
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 depresion post parto ocurra de acuerdo al modelo logit es del 77,98%.
library(pROC)Warning: package 'pROC' was built under R version 4.4.3
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
library(ggplot2)Warning: package 'ggplot2' was built under R version 4.4.3
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()Figura 1: Curva ROC-Modelo Logit
# 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.
medico <- ifelse(data$f2_s5_504c_1 == 3, 1, 0)table(data$f2_s5_504c_1)
1 2 3
405 2008 14038
data$medico <- ifelse(data$f2_s5_504c_1 == 3, 1, 0)##MODELO LOGIT CON MAS VARIABLES DE CONTROL MODELO LOGIT MATRIZ DE EXACTITUD IR CREANDO GRAFICAS… el exito seria q alcance o pase 0,70.
modelo_logit <- glm(depresion_pp ~ lingrl + anios_esc + edad + t_hijos + etnia + area,
data = data, family = binomial(link = "logit"))##DEBER: AUMENTAR VARIABLES A FIN DE QUE, EL 0,58 DEL MODELO LOGIT AUMENTE A 0,70 COMO VALOR MINIMO.
modelo_logit2 <- glm(depresion_pp ~ lingrl + anios_esc + edad + t_hijos +est_civil +lugar + etnia + area + form_parto + c_posparto + empleo + tiempo_dppx2,
data = data, family = binomial(link = "logit"))#Calcular predicciones
pred_mejorado <- ifelse(predict(modelo_logit2, type = "response") > 0.5, 1, 0)#Matriz de confusion
conf_matrix_mejorado <- table(Predicho = pred_mejorado, Real = data$depresion_pp)
print(conf_matrix_mejorado) Real
Predicho 0 1
0 12828 1460
1 0 2163
#Exactitud
exactitud_mejorado <- sum(diag(conf_matrix_mejorado)) / sum(conf_matrix_mejorado)
cat("Exactitud del modelo mejorado:", exactitud_mejorado, "\n")Exactitud del modelo mejorado: 0.9112516
#Calcular la curva ROC
library(pROC)
library(haven)
data$depresion_pp<- as.character(as_factor(data$depresion_pp))
roc_logit2 <- roc(data$depresion_pp, predict(modelo_logit2, type = "response"))Setting levels: control = No, case = Si
Setting direction: controls < cases
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 Logit",
x = "1 - Especificidad",
y = "Sensibilidad") +
theme_minimal()Figura 2: Curva ROC - Actualizada
# Comparar curvas ROC
plot(roc_logit2, col = "blue", main = "Comparación de curvas ROC")
plot(roc_logit2, col = "green", add = TRUE)
legend("bottomright", legend = c("Original", "Mejorado"), col = c("blue", "green"), lwd = 2)Figura 3: Comparacion curvas ROC
# Mostrar el área bajo la curva (AUC)
auc_logit <- auc(roc_logit2)
cat("Área bajo la curva (AUC) - Modelo Logit:", auc_logit, "\n")Área bajo la curva (AUC) - Modelo Logit: 0.8455685