# ------------------------------------------------------------
# 1.1 Cargar bases de datos
# ------------------------------------------------------------
# Cargamos la base principal de respuestas
datos <- read.csv(
"data-eav2025.csv",
stringsAsFactors = FALSE,
na.strings = c("", "NA"),
fileEncoding = "UTF-8"
)
# Cargamos el diccionario de datos
diccionario <- read.csv(
"diccionario-eav2025.csv",
stringsAsFactors = FALSE,
na.strings = c("", "NA"),
fileEncoding = "UTF-8"
)
# Cargamos el cuestionario
cuestionario <- read.csv(
"cuestionario-eav2025.csv",
stringsAsFactors = FALSE,
na.strings = c("", "NA"),
fileEncoding = "UTF-8"
)
# ------------------------------------------------------------
# 1.2 Revisión general de la base
# ------------------------------------------------------------
# Dimensiones: número de filas y columnas
dim(datos)
## [1] 4955 526
# Primeras filas
head(datos)
## orden_gral_muestra_mv mun_mv nom_mun_mv loc_mv nom_loc_mv ageb_mv mza_mv
## 1 1 6 Apodaca 1 Ciudad Apodaca 32 3
## 2 2 6 Apodaca 1 Ciudad Apodaca 51 16
## 3 3 6 Apodaca 1 Ciudad Apodaca 009A 1
## 4 4 6 Apodaca 1 Ciudad Apodaca 102 9
## 5 5 6 Apodaca 1 Ciudad Apodaca 117 1
## 6 6 6 Apodaca 1 Ciudad Apodaca 117 35
## colonia cp1 cp2_1 cp3 cp4_1 cp5 cp6_1 cp7_1 cp8_1 cp9_1 cp10_a_1
## 1 Santa Sofia 4 1 1 48 1 13 0 3 NA NA
## 2 Novapodaca 3 1 1 48 1 13 0 3 NA NA
## 3 Fac Moderno 3 1 1 79 1 1 0 2 NA NA
## 4 Fac Moderno Apodaca 2 0 0 66 1 1 0 3 NA NA
## 5 Moisés Saenz 9 1 1 27 1 1 0 3 NA NA
## 6 Moisés Sáenz 2 0 0 39 1 1 0 3 NA NA
## cp10_b_1 cp11_1 cp12_1 cp13_1 cp14_1 cp15_1_1 cp15_2_1 cp16_1 cp17_1 cp18_1
## 1 <NA> NA <NA> NA NA <NA> <NA> <NA> <NA> NA
## 2 <NA> NA <NA> NA NA <NA> <NA> <NA> <NA> NA
## 3 <NA> NA <NA> NA NA <NA> <NA> <NA> <NA> NA
## 4 <NA> NA <NA> NA NA <NA> <NA> <NA> <NA> NA
## 5 <NA> NA <NA> NA NA <NA> <NA> <NA> <NA> NA
## 6 <NA> NA <NA> NA NA <NA> <NA> <NA> <NA> NA
## cp19_1 cp2_2 cp4_1_2 cp4_2_2 cp6_2 cp7_2 cp8_2 cp9_2 cp10_a_2 cp10_b_2 cp11_2
## 1 NA 1 22 NA 13 1 <NA> 11 4 1 2
## 2 NA 0 50 NA 13 0 3 NA NA <NA> NA
## 3 NA 0 22 NA 1 0 4 NA NA <NA> NA
## 4 NA 1 65 NA 1 0 2 NA NA <NA> NA
## 5 NA 0 30 NA 1 0 4 NA NA <NA> NA
## 6 NA 1 42 NA 1 0 3 NA NA <NA> NA
## cp12_2 cp13_2 cp14_2 cp15_1_2 cp15_2_2 cp16_2 cp17_2 cp18_2 cp19_2 cp2_3
## 1 NA NA NA <NA> <NA> <NA> <NA> <NA> NA 0
## 2 NA NA NA <NA> <NA> <NA> <NA> <NA> NA 0
## 3 NA NA NA <NA> <NA> <NA> <NA> <NA> NA 0
## 4 NA NA NA <NA> <NA> <NA> <NA> <NA> NA <NA>
## 5 NA NA NA <NA> <NA> <NA> <NA> <NA> NA 0
## 6 NA NA NA <NA> <NA> <NA> <NA> <NA> NA <NA>
## cp4_1_3 cp4_2_3 cp6_3 cp7_3 cp8_3 cp9_3 cp10_a_3 cp10_b_3 cp11_3 cp12_3
## 1 12 NA 13 1 <NA> 3 7 2 1 0
## 2 21 NA 13 0 3 NA NA <NA> <NA> <NA>
## 3 19 NA 1 1 <NA> 4 4 1 1 0
## 4 <NA> NA <NA> <NA> <NA> NA NA <NA> <NA> <NA>
## 5 12 NA 1 1 <NA> 3 7 7 1 0
## 6 <NA> NA <NA> <NA> <NA> NA NA <NA> <NA> <NA>
## cp13_3 cp14_3 cp15_1_3 cp15_2_3 cp16_3 cp17_3 cp18_3 cp19_3 cp2_4 cp4_1_4
## 1 0 NA 1 1 1 4 1 9 0 9
## 2 <NA> NA <NA> <NA> <NA> <NA> <NA> NA NA <NA>
## 3 0 NA 0 1 1 4 1 9 NA <NA>
## 4 <NA> NA <NA> <NA> <NA> <NA> <NA> NA NA <NA>
## 5 1 0 1 1 1 3 1 9 1 14
## 6 <NA> NA <NA> <NA> <NA> <NA> <NA> NA NA <NA>
## cp4_2_4 cp6_4 cp7_4 cp8_4 cp9_4 cp10_a_4 cp10_b_4 cp11_4 cp12_4 cp13_4 cp14_4
## 1 NA 13 1 <NA> 2 3 2 1 0 0 <NA>
## 2 NA <NA> NA <NA> NA <NA> <NA> <NA> <NA> <NA> <NA>
## 3 NA <NA> NA <NA> NA <NA> <NA> <NA> <NA> <NA> <NA>
## 4 NA <NA> NA <NA> NA <NA> <NA> <NA> <NA> <NA> <NA>
## 5 NA 1 1 <NA> 3 7 7 1 0 0 <NA>
## 6 NA <NA> NA <NA> NA <NA> <NA> <NA> <NA> <NA> <NA>
## cp15_1_4 cp15_2_4 cp16_4 cp17_4 cp18_4 cp19_4 cp2_5 cp4_1_5 cp4_2_5 cp6_5
## 1 1 1 0 3 1 7 NA <NA> NA <NA>
## 2 <NA> <NA> <NA> <NA> <NA> NA NA <NA> NA <NA>
## 3 <NA> <NA> <NA> <NA> <NA> NA NA <NA> NA <NA>
## 4 <NA> <NA> <NA> <NA> <NA> NA NA <NA> NA <NA>
## 5 1 1 1 3 1 9 1 12 NA 1
## 6 <NA> <NA> <NA> <NA> <NA> NA NA <NA> NA <NA>
## cp7_5 cp8_5 cp9_5 cp10_a_5 cp10_b_5 cp11_5 cp12_5 cp13_5 cp14_5 cp15_1_5
## 1 NA <NA> NA NA <NA> <NA> NA <NA> <NA> <NA>
## 2 NA <NA> NA NA <NA> <NA> NA <NA> <NA> <NA>
## 3 NA <NA> NA NA <NA> <NA> NA <NA> <NA> <NA>
## 4 NA <NA> NA NA <NA> <NA> NA <NA> <NA> <NA>
## 5 1 <NA> 3 7 7 1 0 0 <NA> 1
## 6 NA <NA> NA NA <NA> <NA> NA <NA> <NA> <NA>
## cp15_2_5 cp16_5 cp17_5 cp18_5 cp19_5 cp2_6 cp4_1_6 cp4_2_6 cp6_6 cp7_6 cp8_6
## 1 <NA> <NA> <NA> <NA> NA NA NA NA <NA> NA <NA>
## 2 <NA> <NA> <NA> <NA> NA NA NA NA <NA> NA <NA>
## 3 <NA> <NA> <NA> <NA> NA NA NA NA <NA> NA <NA>
## 4 <NA> <NA> <NA> <NA> NA NA NA NA <NA> NA <NA>
## 5 1 1 3 1 9 1 56 NA 1 0 3
## 6 <NA> <NA> <NA> <NA> NA NA NA NA <NA> NA <NA>
## cp9_6 cp10_a_6 cp10_b_6 cp11_6 cp12_6 cp13_6 cp14_6 cp15_1_6 cp15_2_6 cp16_6
## 1 NA NA <NA> NA NA <NA> NA <NA> <NA> <NA>
## 2 NA NA <NA> NA NA <NA> NA <NA> <NA> <NA>
## 3 NA NA <NA> NA NA <NA> NA <NA> <NA> <NA>
## 4 NA NA <NA> NA NA <NA> NA <NA> <NA> <NA>
## 5 NA NA <NA> NA NA <NA> NA <NA> <NA> <NA>
## 6 NA NA <NA> NA NA <NA> NA <NA> <NA> <NA>
## cp17_6 cp18_6 cp19_6 cp2_7 cp4_1_7 cp4_2_7 cp6_7 cp7_7 cp8_7 cp9_7 cp10_a_7
## 1 <NA> <NA> NA NA <NA> NA NA NA NA NA NA
## 2 <NA> <NA> NA NA <NA> NA NA NA NA NA NA
## 3 <NA> <NA> NA NA <NA> NA NA NA NA NA NA
## 4 <NA> <NA> NA NA <NA> NA NA NA NA NA NA
## 5 <NA> <NA> NA 0 25 NA 1 0 11 NA NA
## 6 <NA> <NA> NA NA <NA> NA NA NA NA NA NA
## cp10_b_7 cp11_7 cp12_7 cp13_7 cp14_7 cp15_1_7 cp15_2_7 cp16_7 cp17_7 cp18_7
## 1 NA NA NA NA NA NA NA <NA> NA <NA>
## 2 NA NA NA NA NA NA NA <NA> NA <NA>
## 3 NA NA NA NA NA NA NA <NA> NA <NA>
## 4 NA NA NA NA NA NA NA <NA> NA <NA>
## 5 NA NA NA NA NA NA NA <NA> NA <NA>
## 6 NA NA NA NA NA NA NA <NA> NA <NA>
## cp19_7 cp2_8 cp4_1_8 cp4_2_8 cp6_8 cp7_8 cp8_8 cp9_8 cp10_a_8 cp10_b_8 cp11_8
## 1 NA NA NA NA NA NA <NA> NA NA NA NA
## 2 NA NA NA NA NA NA <NA> NA NA NA NA
## 3 NA NA NA NA NA NA <NA> NA NA NA NA
## 4 NA NA NA NA NA NA <NA> NA NA NA NA
## 5 NA 0 60 NA 1 0 2 NA NA NA NA
## 6 NA NA NA NA NA NA <NA> NA NA NA NA
## cp12_8 cp13_8 cp14_8 cp15_1_8 cp15_2_8 cp16_8 cp17_8 cp18_8 cp19_8 cp2_9
## 1 NA NA NA NA NA <NA> NA NA NA NA
## 2 NA NA NA NA NA <NA> NA NA NA NA
## 3 NA NA NA NA NA <NA> NA NA NA NA
## 4 NA NA NA NA NA <NA> NA NA NA NA
## 5 NA NA NA NA NA <NA> NA NA NA 0
## 6 NA NA NA NA NA <NA> NA NA NA NA
## cp4_1_9 cp4_2_9 cp6_9 cp7_9 cp8_9 cp9_9 cp10_a_9 cp10_b_9 cp11_9 cp12_9
## 1 NA NA NA NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA NA NA NA
## 5 2 NA 1 0 0 NA NA NA NA NA
## 6 NA NA NA NA NA NA NA NA NA NA
## cp13_9 cp14_9 cp15_1_9 cp15_2_9 cp16_9 cp17_9 cp18_9 cp19_9 cp2_10 cp4_1_10
## 1 NA NA NA NA <NA> NA NA NA NA NA
## 2 NA NA NA NA <NA> NA NA NA NA NA
## 3 NA NA NA NA <NA> NA NA NA NA NA
## 4 NA NA NA NA <NA> NA NA NA NA NA
## 5 NA NA NA NA <NA> NA NA NA NA NA
## 6 NA NA NA NA <NA> NA NA NA NA NA
## cp4_2_10 cp6_10 cp7_10 cp8_10 cp9_10 cp10_a_10 cp10_b_10 cp11_10 cp12_10
## 1 NA NA NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA NA NA
## 5 NA NA NA NA NA NA NA NA NA
## 6 NA NA NA NA NA NA NA NA NA
## cp13_10 cp14_10 cp15_1_10 cp15_2_10 cp16_10 cp17_10 cp18_10 cp19_10 cp2_11
## 1 NA NA NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA NA NA
## 5 NA NA NA NA NA NA NA NA NA
## 6 NA NA NA NA NA NA NA NA NA
## cp4_1_11 cp4_2_11 cp6_11 cp7_11 cp8_11 cp9_11 cp10_a_11 cp10_b_11 cp11_11
## 1 NA NA NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA NA NA
## 5 NA NA NA NA NA NA NA NA NA
## 6 NA NA NA NA NA NA NA NA NA
## cp12_11 cp13_11 cp14_11 cp15_1_11 cp15_2_11 cp16_11 cp17_11 cp18_11 cp19_11
## 1 NA NA NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA NA NA
## 5 NA NA NA NA NA NA NA NA NA
## 6 NA NA NA NA NA NA NA NA NA
## cp2_12 cp4_1_12 cp4_2_12 cp6_12 cp7_12 cp8_12 cp9_12 cp10_a_12 cp10_b_12
## 1 NA NA NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA NA NA
## 5 NA NA NA NA NA NA NA NA NA
## 6 NA NA NA NA NA NA NA NA NA
## cp11_12 cp12_12 cp13_12 cp14_12 cp15_1_12 cp15_2_12 cp16_12 cp17_12 cp18_12
## 1 NA NA NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA NA NA
## 5 NA NA NA NA NA NA NA NA NA
## 6 NA NA NA NA NA NA NA NA NA
## cp19_12 p1 p2 total_min_trabajo_rem_y_norem tiempo_trabajo p3_1 p3_2 p4
## 1 NA 1 1 900 720 12 0 3
## 2 NA 5 NA NA NA <NA> <NA> NA
## 3 NA 5 NA NA NA <NA> <NA> NA
## 4 NA 7 NA NA NA <NA> <NA> NA
## 5 NA 5 NA NA NA <NA> <NA> NA
## 6 NA 2 NA NA NA <NA> <NA> NA
## prestaciones trabajo_formal p5_1 p5_2 p5_3 p5_4 p5_5 p5_6 p5_7 p5_8 p6 p6_1
## 1 1 NA 1 1 1 1 1 1 1 1 1 NA
## 2 NA NA <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 1 NA
## 3 NA NA <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 2 NA
## 4 NA NA <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 2 NA
## 5 NA NA <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 1 NA
## 6 NA NA <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 3 2
## quehaceres_hogar p7_1 p7_2 cuidados_personas p8_1 p8_2 ocio p9_1 p9_2 p10
## 1 180 3 0 0 0 0 60 1 0 0
## 2 480 8 0 0 0 0 60 1 0 0
## 3 330 5 30 30 0 30 150 2 30 1
## 4 330 5 30 30 0 30 320 5 20 1
## 5 240 4 0 600 10 0 180 3 0 0
## 6 120 2 0 NA 7,777 0 240 4 0 0
## p11 p12 p13 p14 p15 p16 p17 p18 p19 tiempo_camina p20_1 p20_2
## 1 11 <NA> NA NA <NA> <NA> <NA> NA NA NA NA NA
## 2 12 <NA> NA NA <NA> <NA> <NA> NA NA NA NA NA
## 3 <NA> 6 NA 1 6 102 1 NA NA NA NA NA
## 4 <NA> 6 NA 1 6 102 1 NA NA NA NA NA
## 5 7 <NA> NA NA <NA> <NA> <NA> NA NA NA NA NA
## 6 3 <NA> NA NA <NA> <NA> <NA> NA NA NA NA NA
## tiempo_espera p21_1 p21_2 p22 p23 costo_total_viaje p24 p25 p26
## 1 NA NA NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA NA NA
## 5 NA NA NA NA NA NA NA NA NA
## 6 NA NA NA NA NA NA NA NA NA
## tiempo_total_traslado tiempo_ida p27_1 p27_2 tiempo_regreso p28_1 p28_2
## 1 NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA
## 3 60 30 0 30 30 0 30
## 4 60 30 0 30 30 0 30
## 5 NA NA NA NA NA NA NA
## 6 NA NA NA NA NA NA NA
## usa_transporte_publico p29 usa_metro p30 p31 p32_1 p32_2 p32_3 p32_4 p32_5
## 1 1 1 1 1 1 0 1 1 1 1
## 2 0 0 0 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 3 0 0 0 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 4 0 0 0 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 5 1 1 0 0 1 0 0 1 0 0
## 6 0 0 0 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## p32_6 p33 p34 p35 p36_1 p36_2 p36_3 p36_4 p36_5 p36_6 p36_7 p37 p38
## 1 2 3 3 2 0 0 0 0 0 0 0 1 1
## 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 3 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 4 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 5 2 4 3 2 0 0 0 0 0 0 0 0 0
## 6 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## victima_tp p39_1 p39_2 p39_3 p39_4 p40 p41 p42 p43 p44_1 p44_2 p44_3 p44_4
## 1 0 0 0 0 0 8 1 1 <NA> 1 1 1 0
## 2 NA <NA> <NA> <NA> <NA> NA 1 3 <NA> 1 2 1 0
## 3 NA <NA> <NA> <NA> <NA> NA 1 1 <NA> 1 1 1 1
## 4 NA <NA> <NA> <NA> <NA> NA 1 1 <NA> 1 1 1 1
## 5 1 1 0 0 0 9 1 5 <NA> 0 0 0 0
## 6 NA <NA> <NA> <NA> <NA> NA 1 5 <NA> 0 0 0 0
## p44_5 p44_6 p44_7 p44_8 p45 p46 p47 p48 p49 p50 p51 p52 p53 p54 p55
## 1 1 0 1 1 8 0 0 5 1 <NA> 2 1 <NA> 3 2
## 2 1 0 0 1 9 1 0 8 1 <NA> 1 7 <NA> <NA> 1
## 3 1 1 1 1 9 0 0 1 0 <NA> 2 4 <NA> 3 5
## 4 1 1 1 1 9 0 0 1 0 <NA> 2 3 <NA> 2 5
## 5 1 1 1 0 6 0 0 9 1 <NA> 2 7 <NA> <NA> 4
## 6 1 1 1 0 6 0 0 6 0 <NA> 6 5 2 <NA> 2
## p56_ultimos_5_anios p56_ultimos_10_anios p56 p57_ultimos_5_anios
## 1 6 6 6 1
## 2 6 6 6 4
## 3 NA NA <NA> NA
## 4 NA NA <NA> NA
## 5 NA NA 6 NA
## 6 6 6 6 2
## p57_ultimos_10_anios p57 p58_ultimos_5_anios p58_ultimos_10_anios p58 p59
## 1 1 1 6 6 6 0
## 2 4 4 7 7 7 0
## 3 NA <NA> NA NA <NA> 0
## 4 NA <NA> NA NA <NA> 0
## 5 NA 2 NA NA 9 1
## 6 2 2 9 9 9 0
## p60 p61 p62_1 p62_2 p62_3 p62_4 p62_5 p63 p64 p65
## 1 <NA> 3 9 9 9 9 9 0 0 17
## 2 <NA> 4 5 7 8 7 8 1 0 6
## 3 <NA> 2 9 9 9 9 9 0 0 17
## 4 <NA> 2 9 9 9 9 9 0 0 8,888
## 5 1 2 5 8 10 7 10 1 0 1
## 6 <NA> 3 6 6 5 5 9 1 0 4
## al_menos_un_problema_agua p66 p67 p68 p69 p70 p71_1 p71_2 p71_3 p71_4 p71_5
## 1 0 0 0 0 1 4 1 1 1 1 1
## 2 0 0 0 0 2 1 1 1 1 1 1
## 3 1 1 1 1 4 7 1 1 1 1 1
## 4 1 1 1 0 3 8 1 1 1 1 1
## 5 1 1 0 1 4 1 1 0 1 1 1
## 6 1 1 1 1 4 4 0 0 0 1 0
## p72 p73 p74 p75 p76 p77 p78 p79 p80 p81 p82 p83_1 p83_2 p84 p85 p86
## 1 1 0 1 1 2 1 1 4 <NA> 1 1 2 2 2 1 2
## 2 3 0 0 <NA> 6 0 1 1 <NA> 1 1 3 3 3 4 2
## 3 4 1 1 1 2 1 2 <NA> 1 1 1 3 2 1 6 2
## 4 3 1 1 1 1 1 2 <NA> 1 1 0 4 2 3 6 2
## 5 4 0 1 3 6 8,888 1 1 <NA> 1 1 2 3 3 6 2
## 6 3 0 0 <NA> 6 0 2 <NA> 4 1 1 2 3 8,888 4 2
## p87 p88 al_menos_una_discriminacion num_discriminaciones p89_1 p89_2 p89_3
## 1 2 2 0 0 0 0 0
## 2 1 2 1 16 1 1 1
## 3 2 2 0 0 0 0 0
## 4 2 2 0 0 0 0 0
## 5 2 2 1 9 8,888 1 0
## 6 2 2 1 3 0 1 0
## p89_4 p89_5 p89_6 p89_7 p89_8 p89_9 p89_10 p89_11 p89_12 p89_13 p89_14 p89_15
## 1 0 0 0 0 0 0 0 0 0 0 0 0
## 2 1 1 1 1 1 1 1 1 1 1 1 1
## 3 0 0 0 0 0 0 0 0 0 0 0 0
## 4 0 0 0 0 0 0 0 0 0 0 0 0
## 5 0 0 1 1 1 0 0 1 0 1 1 1
## 6 0 0 0 0 0 0 0 0 0 1 0 1
## p89_16 p90_1 p90_2 p91 p92 p93 p94 p95 p96 p97 p98 p99 p100 p101 p102
## 1 0 0 1 1 0 <NA> <NA> NA NA NA NA <NA> <NA> <NA> NA
## 2 1 1 1 2 0 <NA> <NA> NA NA NA NA <NA> <NA> <NA> NA
## 3 0 0 0 2 0 <NA> <NA> NA NA NA NA <NA> <NA> <NA> NA
## 4 0 0 0 3 0 <NA> <NA> NA NA NA NA <NA> <NA> <NA> NA
## 5 1 0 1 2 0 <NA> <NA> NA NA NA NA <NA> <NA> <NA> NA
## 6 0 0 0 2 0 <NA> <NA> NA NA NA NA <NA> <NA> <NA> NA
## tiempo_espera_consulta p103_1 p103_2 p104 p105_1 p105_2 p105_3 p105_4 p106
## 1 NA <NA> <NA> NA NA <NA> NA <NA> NA
## 2 NA <NA> <NA> NA NA <NA> NA <NA> NA
## 3 NA <NA> <NA> NA NA <NA> NA <NA> NA
## 4 NA <NA> <NA> NA NA <NA> NA <NA> NA
## 5 NA <NA> <NA> NA NA <NA> NA <NA> NA
## 6 NA <NA> <NA> NA NA <NA> NA <NA> NA
## al_menos_un_problema_mental p107_1 p107_2 p107_3 p108 p109 p110 p111 p112
## 1 1 4 4 3 5 1 3 2 <NA>
## 2 0 4 4 4 5 2 2 2 <NA>
## 3 1 1 4 3 4 6 9 2 <NA>
## 4 1 4 2 2 5 6 9 2 <NA>
## 5 0 4 4 4 1 1 2 8,888 <NA>
## 6 0 4 4 4 5 2 1 3 3
## p113 p114 p115 p116 p117 p118 p119 p120_1 p120_2 p120_3 p120_4 p120_5
## 1 0 NA <NA> NA 2 2 1 1 1 1 1 1
## 2 0 NA <NA> NA 2 1 1 1 1 1 1 1
## 3 0 NA <NA> NA 2 1 1 1 1 1 1 1
## 4 0 NA <NA> NA 2 1 1 1 1 1 1 1
## 5 0 NA <NA> NA 8,888 8,888 8,888 0 0 0 0 0
## 6 0 NA <NA> NA 3 1 0 0 0 0 0 0
## p120_6 p121_1 p121_2 p121_3 p121_4 p121_5 p122 p123 p124_1 p124_2 p124_3 p125
## 1 1 9 9 8 9 9 0 <NA> <NA> <NA> <NA> 2
## 2 1 10 10 10 10 10 0 <NA> <NA> <NA> <NA> 2
## 3 1 9 9 9 9 7 0 <NA> <NA> <NA> <NA> 2
## 4 1 9 9 9 9 7 0 <NA> <NA> <NA> <NA> 2
## 5 0 1 5 5 5 1 0 <NA> <NA> <NA> <NA> 4
## 6 0 5 5 5 8 2 0 <NA> <NA> <NA> <NA> 4
## p126_1 p126_2 p126_3 p126_4 p127 p128 p129 p130 p131 p132 p133 p134 p135
## 1 1 1 1 1 2 1 1 <NA> 1 1 1 1 2
## 2 1 1 0 1 2 3 NA <NA> 1 1 1 1 3
## 3 0 0 0 0 7 3 NA <NA> 1 1 1 1 2
## 4 0 0 0 1 7 3 NA <NA> 1 1 1 1 2
## 5 1 1 0 1 2 3 NA <NA> 1 1 1 1 2
## 6 0 0 0 1 5 3 NA <NA> 0 0 8,888 0 1
## p136 p137 p138 p139 p140 p141 p142 p143 p144 p145 p146 p147 p148 p149
## 1 2 0 <NA> 1 1 1 1 1 1 1 1 1 1 1
## 2 3 0 <NA> 1 1 1 1 2 1 1 1 1 1 1
## 3 3 0 <NA> 1 1 1 1 1 1 1 1 1 1 1
## 4 3 0 <NA> 1 1 1 1 1 1 1 1 1 1 1
## 5 1 0 <NA> 1 1 1 1 8,888 1 1 1 1 1 1
## 6 1 0 <NA> 8,888 0 0 0 8,888 8,888 0 0 0 0 0
## p150 p151 p152 p153 p154 p155 p156 p157 p158 p159 p160
## 1 2 1 1 1 0 1 1 1 1 1 1
## 2 3 1 1 1 0 4 8,888 1 1 2 2
## 3 1 1 1 1 1 1 1 1 1 2 2
## 4 1 1 1 1 1 1 1 1 1 2 2
## 5 8,888 1 1 8,888 0 4 8,888 8,888 8,888 4 4
## 6 8,888 2 0 1 0 2 0 0 0 4 4
## al_menos_una_accion_pc num_acciones_pc p161_1 p161_2 p161_3 p161_4 p161_5
## 1 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 0
## 3 1 4 0 0 0 1 1
## 4 1 3 0 0 0 1 0
## 5 1 1 0 0 0 0 0
## 6 0 0 0 0 0 0 0
## p161_6 p161_7 p161_8 p161_9 p162_1 p162_2 p163 p164 p165 p166 p167
## 1 0 0 0 0 0 0 <NA> 1 2 4 4
## 2 0 0 0 0 0 0 <NA> 0 1 8 3
## 3 0 1 0 1 1 1 1 1 1 2 2
## 4 0 0 1 1 0 1 1 1 1 8 2
## 5 0 0 0 1 0 0 <NA> 1 5 3 9,999
## 6 0 0 0 0 0 0 <NA> 1 5 3 2
## factor_cvnl
## 1 1,861.67
## 2 1,861.67
## 3 723.98
## 4 684.4
## 5 3,505.22
## 6 1,737.40
# Nombres de variables
names(datos)
## [1] "orden_gral_muestra_mv" "mun_mv"
## [3] "nom_mun_mv" "loc_mv"
## [5] "nom_loc_mv" "ageb_mv"
## [7] "mza_mv" "colonia"
## [9] "cp1" "cp2_1"
## [11] "cp3" "cp4_1"
## [13] "cp5" "cp6_1"
## [15] "cp7_1" "cp8_1"
## [17] "cp9_1" "cp10_a_1"
## [19] "cp10_b_1" "cp11_1"
## [21] "cp12_1" "cp13_1"
## [23] "cp14_1" "cp15_1_1"
## [25] "cp15_2_1" "cp16_1"
## [27] "cp17_1" "cp18_1"
## [29] "cp19_1" "cp2_2"
## [31] "cp4_1_2" "cp4_2_2"
## [33] "cp6_2" "cp7_2"
## [35] "cp8_2" "cp9_2"
## [37] "cp10_a_2" "cp10_b_2"
## [39] "cp11_2" "cp12_2"
## [41] "cp13_2" "cp14_2"
## [43] "cp15_1_2" "cp15_2_2"
## [45] "cp16_2" "cp17_2"
## [47] "cp18_2" "cp19_2"
## [49] "cp2_3" "cp4_1_3"
## [51] "cp4_2_3" "cp6_3"
## [53] "cp7_3" "cp8_3"
## [55] "cp9_3" "cp10_a_3"
## [57] "cp10_b_3" "cp11_3"
## [59] "cp12_3" "cp13_3"
## [61] "cp14_3" "cp15_1_3"
## [63] "cp15_2_3" "cp16_3"
## [65] "cp17_3" "cp18_3"
## [67] "cp19_3" "cp2_4"
## [69] "cp4_1_4" "cp4_2_4"
## [71] "cp6_4" "cp7_4"
## [73] "cp8_4" "cp9_4"
## [75] "cp10_a_4" "cp10_b_4"
## [77] "cp11_4" "cp12_4"
## [79] "cp13_4" "cp14_4"
## [81] "cp15_1_4" "cp15_2_4"
## [83] "cp16_4" "cp17_4"
## [85] "cp18_4" "cp19_4"
## [87] "cp2_5" "cp4_1_5"
## [89] "cp4_2_5" "cp6_5"
## [91] "cp7_5" "cp8_5"
## [93] "cp9_5" "cp10_a_5"
## [95] "cp10_b_5" "cp11_5"
## [97] "cp12_5" "cp13_5"
## [99] "cp14_5" "cp15_1_5"
## [101] "cp15_2_5" "cp16_5"
## [103] "cp17_5" "cp18_5"
## [105] "cp19_5" "cp2_6"
## [107] "cp4_1_6" "cp4_2_6"
## [109] "cp6_6" "cp7_6"
## [111] "cp8_6" "cp9_6"
## [113] "cp10_a_6" "cp10_b_6"
## [115] "cp11_6" "cp12_6"
## [117] "cp13_6" "cp14_6"
## [119] "cp15_1_6" "cp15_2_6"
## [121] "cp16_6" "cp17_6"
## [123] "cp18_6" "cp19_6"
## [125] "cp2_7" "cp4_1_7"
## [127] "cp4_2_7" "cp6_7"
## [129] "cp7_7" "cp8_7"
## [131] "cp9_7" "cp10_a_7"
## [133] "cp10_b_7" "cp11_7"
## [135] "cp12_7" "cp13_7"
## [137] "cp14_7" "cp15_1_7"
## [139] "cp15_2_7" "cp16_7"
## [141] "cp17_7" "cp18_7"
## [143] "cp19_7" "cp2_8"
## [145] "cp4_1_8" "cp4_2_8"
## [147] "cp6_8" "cp7_8"
## [149] "cp8_8" "cp9_8"
## [151] "cp10_a_8" "cp10_b_8"
## [153] "cp11_8" "cp12_8"
## [155] "cp13_8" "cp14_8"
## [157] "cp15_1_8" "cp15_2_8"
## [159] "cp16_8" "cp17_8"
## [161] "cp18_8" "cp19_8"
## [163] "cp2_9" "cp4_1_9"
## [165] "cp4_2_9" "cp6_9"
## [167] "cp7_9" "cp8_9"
## [169] "cp9_9" "cp10_a_9"
## [171] "cp10_b_9" "cp11_9"
## [173] "cp12_9" "cp13_9"
## [175] "cp14_9" "cp15_1_9"
## [177] "cp15_2_9" "cp16_9"
## [179] "cp17_9" "cp18_9"
## [181] "cp19_9" "cp2_10"
## [183] "cp4_1_10" "cp4_2_10"
## [185] "cp6_10" "cp7_10"
## [187] "cp8_10" "cp9_10"
## [189] "cp10_a_10" "cp10_b_10"
## [191] "cp11_10" "cp12_10"
## [193] "cp13_10" "cp14_10"
## [195] "cp15_1_10" "cp15_2_10"
## [197] "cp16_10" "cp17_10"
## [199] "cp18_10" "cp19_10"
## [201] "cp2_11" "cp4_1_11"
## [203] "cp4_2_11" "cp6_11"
## [205] "cp7_11" "cp8_11"
## [207] "cp9_11" "cp10_a_11"
## [209] "cp10_b_11" "cp11_11"
## [211] "cp12_11" "cp13_11"
## [213] "cp14_11" "cp15_1_11"
## [215] "cp15_2_11" "cp16_11"
## [217] "cp17_11" "cp18_11"
## [219] "cp19_11" "cp2_12"
## [221] "cp4_1_12" "cp4_2_12"
## [223] "cp6_12" "cp7_12"
## [225] "cp8_12" "cp9_12"
## [227] "cp10_a_12" "cp10_b_12"
## [229] "cp11_12" "cp12_12"
## [231] "cp13_12" "cp14_12"
## [233] "cp15_1_12" "cp15_2_12"
## [235] "cp16_12" "cp17_12"
## [237] "cp18_12" "cp19_12"
## [239] "p1" "p2"
## [241] "total_min_trabajo_rem_y_norem" "tiempo_trabajo"
## [243] "p3_1" "p3_2"
## [245] "p4" "prestaciones"
## [247] "trabajo_formal" "p5_1"
## [249] "p5_2" "p5_3"
## [251] "p5_4" "p5_5"
## [253] "p5_6" "p5_7"
## [255] "p5_8" "p6"
## [257] "p6_1" "quehaceres_hogar"
## [259] "p7_1" "p7_2"
## [261] "cuidados_personas" "p8_1"
## [263] "p8_2" "ocio"
## [265] "p9_1" "p9_2"
## [267] "p10" "p11"
## [269] "p12" "p13"
## [271] "p14" "p15"
## [273] "p16" "p17"
## [275] "p18" "p19"
## [277] "tiempo_camina" "p20_1"
## [279] "p20_2" "tiempo_espera"
## [281] "p21_1" "p21_2"
## [283] "p22" "p23"
## [285] "costo_total_viaje" "p24"
## [287] "p25" "p26"
## [289] "tiempo_total_traslado" "tiempo_ida"
## [291] "p27_1" "p27_2"
## [293] "tiempo_regreso" "p28_1"
## [295] "p28_2" "usa_transporte_publico"
## [297] "p29" "usa_metro"
## [299] "p30" "p31"
## [301] "p32_1" "p32_2"
## [303] "p32_3" "p32_4"
## [305] "p32_5" "p32_6"
## [307] "p33" "p34"
## [309] "p35" "p36_1"
## [311] "p36_2" "p36_3"
## [313] "p36_4" "p36_5"
## [315] "p36_6" "p36_7"
## [317] "p37" "p38"
## [319] "victima_tp" "p39_1"
## [321] "p39_2" "p39_3"
## [323] "p39_4" "p40"
## [325] "p41" "p42"
## [327] "p43" "p44_1"
## [329] "p44_2" "p44_3"
## [331] "p44_4" "p44_5"
## [333] "p44_6" "p44_7"
## [335] "p44_8" "p45"
## [337] "p46" "p47"
## [339] "p48" "p49"
## [341] "p50" "p51"
## [343] "p52" "p53"
## [345] "p54" "p55"
## [347] "p56_ultimos_5_anios" "p56_ultimos_10_anios"
## [349] "p56" "p57_ultimos_5_anios"
## [351] "p57_ultimos_10_anios" "p57"
## [353] "p58_ultimos_5_anios" "p58_ultimos_10_anios"
## [355] "p58" "p59"
## [357] "p60" "p61"
## [359] "p62_1" "p62_2"
## [361] "p62_3" "p62_4"
## [363] "p62_5" "p63"
## [365] "p64" "p65"
## [367] "al_menos_un_problema_agua" "p66"
## [369] "p67" "p68"
## [371] "p69" "p70"
## [373] "p71_1" "p71_2"
## [375] "p71_3" "p71_4"
## [377] "p71_5" "p72"
## [379] "p73" "p74"
## [381] "p75" "p76"
## [383] "p77" "p78"
## [385] "p79" "p80"
## [387] "p81" "p82"
## [389] "p83_1" "p83_2"
## [391] "p84" "p85"
## [393] "p86" "p87"
## [395] "p88" "al_menos_una_discriminacion"
## [397] "num_discriminaciones" "p89_1"
## [399] "p89_2" "p89_3"
## [401] "p89_4" "p89_5"
## [403] "p89_6" "p89_7"
## [405] "p89_8" "p89_9"
## [407] "p89_10" "p89_11"
## [409] "p89_12" "p89_13"
## [411] "p89_14" "p89_15"
## [413] "p89_16" "p90_1"
## [415] "p90_2" "p91"
## [417] "p92" "p93"
## [419] "p94" "p95"
## [421] "p96" "p97"
## [423] "p98" "p99"
## [425] "p100" "p101"
## [427] "p102" "tiempo_espera_consulta"
## [429] "p103_1" "p103_2"
## [431] "p104" "p105_1"
## [433] "p105_2" "p105_3"
## [435] "p105_4" "p106"
## [437] "al_menos_un_problema_mental" "p107_1"
## [439] "p107_2" "p107_3"
## [441] "p108" "p109"
## [443] "p110" "p111"
## [445] "p112" "p113"
## [447] "p114" "p115"
## [449] "p116" "p117"
## [451] "p118" "p119"
## [453] "p120_1" "p120_2"
## [455] "p120_3" "p120_4"
## [457] "p120_5" "p120_6"
## [459] "p121_1" "p121_2"
## [461] "p121_3" "p121_4"
## [463] "p121_5" "p122"
## [465] "p123" "p124_1"
## [467] "p124_2" "p124_3"
## [469] "p125" "p126_1"
## [471] "p126_2" "p126_3"
## [473] "p126_4" "p127"
## [475] "p128" "p129"
## [477] "p130" "p131"
## [479] "p132" "p133"
## [481] "p134" "p135"
## [483] "p136" "p137"
## [485] "p138" "p139"
## [487] "p140" "p141"
## [489] "p142" "p143"
## [491] "p144" "p145"
## [493] "p146" "p147"
## [495] "p148" "p149"
## [497] "p150" "p151"
## [499] "p152" "p153"
## [501] "p154" "p155"
## [503] "p156" "p157"
## [505] "p158" "p159"
## [507] "p160" "al_menos_una_accion_pc"
## [509] "num_acciones_pc" "p161_1"
## [511] "p161_2" "p161_3"
## [513] "p161_4" "p161_5"
## [515] "p161_6" "p161_7"
## [517] "p161_8" "p161_9"
## [519] "p162_1" "p162_2"
## [521] "p163" "p164"
## [523] "p165" "p166"
## [525] "p167" "factor_cvnl"
# Estructura general de la base
str(datos)
## 'data.frame': 4955 obs. of 526 variables:
## $ orden_gral_muestra_mv : chr "1" "2" "3" "4" ...
## $ mun_mv : int 6 6 6 6 6 6 6 6 6 6 ...
## $ nom_mun_mv : chr "Apodaca" "Apodaca" "Apodaca" "Apodaca" ...
## $ loc_mv : int 1 1 1 1 1 1 1 1 1 1 ...
## $ nom_loc_mv : chr "Ciudad Apodaca" "Ciudad Apodaca" "Ciudad Apodaca" "Ciudad Apodaca" ...
## $ ageb_mv : chr "32" "51" "009A" "102" ...
## $ mza_mv : int 3 16 1 9 1 35 6 38 50 14 ...
## $ colonia : chr "Santa Sofia" "Novapodaca" "Fac Moderno" "Fac Moderno Apodaca" ...
## $ cp1 : chr "4" "3" "3" "2" ...
## $ cp2_1 : int 1 1 1 0 1 0 1 0 1 0 ...
## $ cp3 : int 1 1 1 0 1 0 1 0 1 0 ...
## $ cp4_1 : chr "48" "48" "79" "66" ...
## $ cp5 : chr "1" "1" "1" "1" ...
## $ cp6_1 : int 13 13 1 1 1 1 1 1 1 1 ...
## $ cp7_1 : int 0 0 0 0 0 0 0 0 0 0 ...
## $ cp8_1 : int 3 3 2 3 3 3 4 4 4 3 ...
## $ cp9_1 : int NA NA NA NA NA NA NA NA NA NA ...
## $ cp10_a_1 : int NA NA NA NA NA NA NA NA NA NA ...
## $ cp10_b_1 : chr NA NA NA NA ...
## $ cp11_1 : int NA NA NA NA NA NA NA NA NA NA ...
## $ cp12_1 : chr NA NA NA NA ...
## $ cp13_1 : int NA NA NA NA NA NA NA NA NA NA ...
## $ cp14_1 : int NA NA NA NA NA NA NA NA NA NA ...
## $ cp15_1_1 : chr NA NA NA NA ...
## $ cp15_2_1 : chr NA NA NA NA ...
## $ cp16_1 : chr NA NA NA NA ...
## $ cp17_1 : chr NA NA NA NA ...
## $ cp18_1 : int NA NA NA NA NA NA NA NA NA NA ...
## $ cp19_1 : int NA NA NA NA NA NA NA NA NA NA ...
## $ cp2_2 : int 1 0 0 1 0 1 0 1 0 1 ...
## $ cp4_1_2 : chr "22" "50" "22" "65" ...
## $ cp4_2_2 : int NA NA NA NA NA NA NA NA NA NA ...
## $ cp6_2 : chr "13" "13" "1" "1" ...
## $ cp7_2 : chr "1" "0" "0" "0" ...
## $ cp8_2 : chr NA "3" "4" "2" ...
## $ cp9_2 : int 11 NA NA NA NA NA NA NA NA NA ...
## $ cp10_a_2 : int 4 NA NA NA NA NA NA NA NA NA ...
## $ cp10_b_2 : chr "1" NA NA NA ...
## $ cp11_2 : int 2 NA NA NA NA NA NA NA NA NA ...
## $ cp12_2 : int NA NA NA NA NA NA NA NA NA NA ...
## $ cp13_2 : int NA NA NA NA NA NA NA NA NA NA ...
## $ cp14_2 : int NA NA NA NA NA NA NA NA NA NA ...
## $ cp15_1_2 : chr NA NA NA NA ...
## $ cp15_2_2 : chr NA NA NA NA ...
## $ cp16_2 : chr NA NA NA NA ...
## $ cp17_2 : chr NA NA NA NA ...
## $ cp18_2 : chr NA NA NA NA ...
## $ cp19_2 : int NA NA NA NA NA NA NA NA NA NA ...
## $ cp2_3 : chr "0" "0" "0" NA ...
## $ cp4_1_3 : chr "12" "21" "19" NA ...
## $ cp4_2_3 : int NA NA NA NA NA NA NA NA NA NA ...
## $ cp6_3 : chr "13" "13" "1" NA ...
## $ cp7_3 : chr "1" "0" "1" NA ...
## $ cp8_3 : chr NA "3" NA NA ...
## $ cp9_3 : int 3 NA 4 NA 3 NA NA NA NA NA ...
## $ cp10_a_3 : int 7 NA 4 NA 7 NA NA NA NA NA ...
## $ cp10_b_3 : chr "2" NA "1" NA ...
## $ cp11_3 : chr "1" NA "1" NA ...
## $ cp12_3 : chr "0" NA "0" NA ...
## $ cp13_3 : chr "0" NA "0" NA ...
## $ cp14_3 : int NA NA NA NA 0 NA NA NA NA NA ...
## $ cp15_1_3 : chr "1" NA "0" NA ...
## $ cp15_2_3 : chr "1" NA "1" NA ...
## $ cp16_3 : chr "1" NA "1" NA ...
## $ cp17_3 : chr "4" NA "4" NA ...
## $ cp18_3 : chr "1" NA "1" NA ...
## $ cp19_3 : int 9 NA 9 NA 9 NA NA NA NA NA ...
## $ cp2_4 : int 0 NA NA NA 1 NA NA NA NA NA ...
## $ cp4_1_4 : chr "9" NA NA NA ...
## $ cp4_2_4 : int NA NA NA NA NA NA NA NA NA NA ...
## $ cp6_4 : chr "13" NA NA NA ...
## $ cp7_4 : int 1 NA NA NA 1 NA NA NA NA NA ...
## $ cp8_4 : chr NA NA NA NA ...
## $ cp9_4 : int 2 NA NA NA 3 NA NA NA NA NA ...
## $ cp10_a_4 : chr "3" NA NA NA ...
## $ cp10_b_4 : chr "2" NA NA NA ...
## $ cp11_4 : chr "1" NA NA NA ...
## $ cp12_4 : chr "0" NA NA NA ...
## $ cp13_4 : chr "0" NA NA NA ...
## $ cp14_4 : chr NA NA NA NA ...
## $ cp15_1_4 : chr "1" NA NA NA ...
## $ cp15_2_4 : chr "1" NA NA NA ...
## $ cp16_4 : chr "0" NA NA NA ...
## $ cp17_4 : chr "3" NA NA NA ...
## $ cp18_4 : chr "1" NA NA NA ...
## $ cp19_4 : int 7 NA NA NA 9 NA NA NA NA NA ...
## $ cp2_5 : int NA NA NA NA 1 NA NA NA NA NA ...
## $ cp4_1_5 : chr NA NA NA NA ...
## $ cp4_2_5 : int NA NA NA NA NA NA NA NA NA NA ...
## $ cp6_5 : chr NA NA NA NA ...
## $ cp7_5 : int NA NA NA NA 1 NA NA NA NA NA ...
## $ cp8_5 : chr NA NA NA NA ...
## $ cp9_5 : int NA NA NA NA 3 NA NA NA NA NA ...
## $ cp10_a_5 : int NA NA NA NA 7 NA NA NA NA NA ...
## $ cp10_b_5 : chr NA NA NA NA ...
## $ cp11_5 : chr NA NA NA NA ...
## $ cp12_5 : int NA NA NA NA 0 NA NA NA NA NA ...
## $ cp13_5 : chr NA NA NA NA ...
## $ cp14_5 : chr NA NA NA NA ...
## [list output truncated]
# ------------------------------------------------------------
# 1.3 Variables que vamos a revisar
# ------------------------------------------------------------
variables_revisar <- c(
# Variable dependiente principal
"al_menos_un_problema_agua",
# Variables de agua relacionadas
"p66",
"p67",
"p68",
# Territorio
"mun_mv",
"nom_mun_mv",
"loc_mv",
"nom_loc_mv",
"ageb_mv",
"colonia",
# Ingreso y economía
"p167",
"p88",
"p86",
"p87",
# Vivienda y hogar
"p52",
"cp1",
"cp5",
"p55",
"p57",
"p58",
"p59",
# Desarrollo urbano e infraestructura
"p61",
"p62_1",
"p62_2",
"p62_3",
"p62_4",
"p62_5",
"p65",
# Medio ambiente y entorno físico
"p69",
"p70",
"p71_4",
"p71_5",
"p81",
"p82",
"p83_1",
"p83_2",
"p85",
# Movilidad y conectividad territorial
"p15",
"p17",
"tiempo_total_traslado",
"usa_transporte_publico",
"p44_8",
"p49",
# Perfil sociodemográfico
"cp8_1",
"p1",
"cp4_1",
"cp3",
# Gobierno, gobernanza y participación
"p140",
"p143",
"p160",
"p161_4",
"p161_9",
"p164"
# Factor de expansión
# factor_cvnl
)
##La selección ampliada de variables permite analizar la inseguridad hídrica desde varias dimensiones y no únicamente desde ingreso y municipio
# ------------------------------------------------------------
# 1.4 Revisar si escribí bien las variables y existen en la base
# ------------------------------------------------------------
# Variables que sí están en la base
variables_encontradas <- intersect(variables_revisar, names(datos))
# Variables que no se encontraron en la base
variables_faltantes <- setdiff(variables_revisar, names(datos))
# Mostrar variables faltantes
variables_faltantes
## character(0)
# ------------------------------------------------------------
# 1.5 Crear base de revisión
# ------------------------------------------------------------
datos_revision <- datos[, variables_encontradas]
# Revisamos primeras filas
head(datos_revision)
## al_menos_un_problema_agua p66 p67 p68 mun_mv nom_mun_mv loc_mv nom_loc_mv
## 1 0 0 0 0 6 Apodaca 1 Ciudad Apodaca
## 2 0 0 0 0 6 Apodaca 1 Ciudad Apodaca
## 3 1 1 1 1 6 Apodaca 1 Ciudad Apodaca
## 4 1 1 1 0 6 Apodaca 1 Ciudad Apodaca
## 5 1 1 0 1 6 Apodaca 1 Ciudad Apodaca
## 6 1 1 1 1 6 Apodaca 1 Ciudad Apodaca
## ageb_mv colonia p167 p88 p86 p87 p52 cp1 cp5 p55 p57 p58 p59
## 1 32 Santa Sofia 4 2 2 2 1 4 1 2 1 6 0
## 2 51 Novapodaca 3 2 2 1 7 3 1 1 4 7 0
## 3 009A Fac Moderno 2 2 2 2 4 3 1 5 <NA> <NA> 0
## 4 102 Fac Moderno Apodaca 2 2 2 2 3 2 1 5 <NA> <NA> 0
## 5 117 Moisés Saenz 9,999 2 2 2 7 9 1 4 2 9 1
## 6 117 Moisés Sáenz 2 2 2 2 5 2 1 2 2 9 0
## p61 p62_1 p62_2 p62_3 p62_4 p62_5 p65 p69 p70 p71_4 p71_5 p81 p82 p83_1
## 1 3 9 9 9 9 9 17 1 4 1 1 1 1 2
## 2 4 5 7 8 7 8 6 2 1 1 1 1 1 3
## 3 2 9 9 9 9 9 17 4 7 1 1 1 1 3
## 4 2 9 9 9 9 9 8,888 3 8 1 1 1 0 4
## 5 2 5 8 10 7 10 1 4 1 1 1 1 1 2
## 6 3 6 6 5 5 9 4 4 4 1 0 1 1 2
## p83_2 p85 p15 p17 tiempo_total_traslado usa_transporte_publico p44_8 p49
## 1 2 1 <NA> <NA> NA 1 1 1
## 2 3 4 <NA> <NA> NA 0 1 1
## 3 2 6 6 1 60 0 1 0
## 4 2 6 6 1 60 0 1 0
## 5 3 6 <NA> <NA> NA 1 0 1
## 6 3 4 <NA> <NA> NA 0 0 0
## cp8_1 p1 cp4_1 cp3 p140 p143 p160 p161_4 p161_9 p164
## 1 3 1 48 1 1 1 1 0 0 1
## 2 3 5 48 1 1 2 2 0 0 0
## 3 2 5 79 1 1 1 2 1 1 1
## 4 3 7 66 0 1 1 2 1 1 1
## 5 3 5 27 1 1 8,888 4 0 1 1
## 6 3 2 39 0 0 8,888 4 0 0 1
# Revisamos estructura
str(datos_revision)
## 'data.frame': 4955 obs. of 53 variables:
## $ al_menos_un_problema_agua: int 0 0 1 1 1 1 1 1 1 0 ...
## $ p66 : chr "0" "0" "1" "1" ...
## $ p67 : chr "0" "0" "1" "1" ...
## $ p68 : chr "0" "0" "1" "0" ...
## $ mun_mv : int 6 6 6 6 6 6 6 6 6 6 ...
## $ nom_mun_mv : chr "Apodaca" "Apodaca" "Apodaca" "Apodaca" ...
## $ loc_mv : int 1 1 1 1 1 1 1 1 1 1 ...
## $ nom_loc_mv : chr "Ciudad Apodaca" "Ciudad Apodaca" "Ciudad Apodaca" "Ciudad Apodaca" ...
## $ ageb_mv : chr "32" "51" "009A" "102" ...
## $ colonia : chr "Santa Sofia" "Novapodaca" "Fac Moderno" "Fac Moderno Apodaca" ...
## $ p167 : chr "4" "3" "2" "2" ...
## $ p88 : chr "2" "2" "2" "2" ...
## $ p86 : chr "2" "2" "2" "2" ...
## $ p87 : chr "2" "1" "2" "2" ...
## $ p52 : chr "1" "7" "4" "3" ...
## $ cp1 : chr "4" "3" "3" "2" ...
## $ cp5 : chr "1" "1" "1" "1" ...
## $ p55 : chr "2" "1" "5" "5" ...
## $ p57 : chr "1" "4" NA NA ...
## $ p58 : chr "6" "7" NA NA ...
## $ p59 : chr "0" "0" "0" "0" ...
## $ p61 : chr "3" "4" "2" "2" ...
## $ p62_1 : int 9 5 9 9 5 6 5 9 8 8 ...
## $ p62_2 : int 9 7 9 9 8 6 10 8 8 8 ...
## $ p62_3 : int 9 8 9 9 10 5 1 8 8 7 ...
## $ p62_4 : int 9 7 9 9 7 5 9 7 9 7 ...
## $ p62_5 : int 9 8 9 9 10 9 10 9 10 9 ...
## $ p65 : chr "17" "6" "17" "8,888" ...
## $ p69 : chr "1" "2" "4" "3" ...
## $ p70 : chr "4" "1" "7" "8" ...
## $ p71_4 : chr "1" "1" "1" "1" ...
## $ p71_5 : chr "1" "1" "1" "1" ...
## $ p81 : int 1 1 1 1 1 1 1 1 1 1 ...
## $ p82 : chr "1" "1" "1" "0" ...
## $ p83_1 : chr "2" "3" "3" "4" ...
## $ p83_2 : chr "2" "3" "2" "2" ...
## $ p85 : chr "1" "4" "6" "6" ...
## $ p15 : chr NA NA "6" "6" ...
## $ p17 : chr NA NA "1" "1" ...
## $ tiempo_total_traslado : int NA NA 60 60 NA NA 20 80 NA 20 ...
## $ usa_transporte_publico : int 1 0 0 0 1 0 0 0 0 0 ...
## $ p44_8 : chr "1" "1" "1" "1" ...
## $ p49 : int 1 1 0 0 1 0 2 2 1 1 ...
## $ cp8_1 : int 3 3 2 3 3 3 4 4 4 3 ...
## $ p1 : chr "1" "5" "5" "7" ...
## $ cp4_1 : chr "48" "48" "79" "66" ...
## $ cp3 : int 1 1 1 0 1 0 1 0 1 0 ...
## $ p140 : chr "1" "1" "1" "1" ...
## $ p143 : chr "1" "2" "1" "1" ...
## $ p160 : chr "1" "2" "2" "2" ...
## $ p161_4 : chr "0" "0" "1" "1" ...
## $ p161_9 : chr "0" "0" "1" "1" ...
## $ p164 : chr "1" "0" "1" "1" ...
# Resumen general
summary(datos_revision)
## al_menos_un_problema_agua p66 p67
## Min. :0.0000 Length:4955 Length:4955
## 1st Qu.:0.0000 Class :character Class :character
## Median :1.0000 Mode :character Mode :character
## Mean :0.5393
## 3rd Qu.:1.0000
## Max. :1.0000
##
## p68 mun_mv nom_mun_mv loc_mv
## Length:4955 Min. : 2.00 Length:4955 Min. : 0.00
## Class :character 1st Qu.:18.00 Class :character 1st Qu.: 1.00
## Mode :character Median :26.00 Mode :character Median : 1.00
## Mean :28.28 Mean : 48.13
## 3rd Qu.:41.00 3rd Qu.: 1.00
## Max. :51.00 Max. :572.00
##
## nom_loc_mv ageb_mv colonia p167
## Length:4955 Length:4955 Length:4955 Length:4955
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## p88 p86 p87 p52
## Length:4955 Length:4955 Length:4955 Length:4955
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## cp1 cp5 p55 p57
## Length:4955 Length:4955 Length:4955 Length:4955
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## p58 p59 p61 p62_1
## Length:4955 Length:4955 Length:4955 Min. : 1.00
## Class :character Class :character Class :character 1st Qu.: 6.00
## Mode :character Mode :character Mode :character Median : 8.00
## Mean : 9.32
## 3rd Qu.: 9.00
## Max. :9999.00
##
## p62_2 p62_3 p62_4 p62_5
## Min. : 1.000 Min. : 1.0 Min. : 1.00 Min. : 1.000
## 1st Qu.: 6.000 1st Qu.: 6.0 1st Qu.: 6.00 1st Qu.: 8.000
## Median : 7.000 Median : 8.0 Median : 8.00 Median : 9.000
## Mean : 8.774 Mean : 64.8 Mean : 30.78 Mean : 8.654
## 3rd Qu.: 8.000 3rd Qu.: 9.0 3rd Qu.: 9.00 3rd Qu.:10.000
## Max. :8888.000 Max. :9999.0 Max. :9999.00 Max. :10.000
##
## p65 p69 p70 p71_4
## Length:4955 Length:4955 Length:4955 Length:4955
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## p71_5 p81 p82 p83_1
## Length:4955 Min. :0.0000 Length:4955 Length:4955
## Class :character 1st Qu.:1.0000 Class :character Class :character
## Mode :character Median :1.0000 Mode :character Mode :character
## Mean :0.8505
## 3rd Qu.:1.0000
## Max. :1.0000
##
## p83_2 p85 p15 p17
## Length:4955 Length:4955 Length:4955 Length:4955
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## tiempo_total_traslado usa_transporte_publico p44_8
## Min. : 10.00 Min. :0.0000 Length:4955
## 1st Qu.: 30.00 1st Qu.:0.0000 Class :character
## Median : 60.00 Median :0.0000 Mode :character
## Mean : 88.61 Mean :0.3457
## 3rd Qu.:120.00 3rd Qu.:1.0000
## Max. :600.00 Max. :1.0000
## NA's :1994
## p49 cp8_1 p1 cp4_1
## Min. : 0.000 Min. : 0.000 Length:4955 Length:4955
## 1st Qu.: 0.000 1st Qu.: 3.000 Class :character Class :character
## Median : 1.000 Median : 3.000 Mode :character Mode :character
## Mean : 6.879 Mean : 4.734
## 3rd Qu.: 1.000 3rd Qu.: 5.000
## Max. :9999.000 Max. :14.000
## NA's :129
## cp3 p140 p143 p160
## Min. :0.0000 Length:4955 Length:4955 Length:4955
## 1st Qu.:0.0000 Class :character Class :character Class :character
## Median :1.0000 Mode :character Mode :character Mode :character
## Mean :0.5053
## 3rd Qu.:1.0000
## Max. :3.0000
##
## p161_4 p161_9 p164
## Length:4955 Length:4955 Length:4955
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
# ------------------------------------------------------------
# 1.6 Revisar tipos de datos y valores faltantes
# ------------------------------------------------------------
# Tipo de dato de cada variable
sapply(datos_revision, class)
## al_menos_un_problema_agua p66 p67
## "integer" "character" "character"
## p68 mun_mv nom_mun_mv
## "character" "integer" "character"
## loc_mv nom_loc_mv ageb_mv
## "integer" "character" "character"
## colonia p167 p88
## "character" "character" "character"
## p86 p87 p52
## "character" "character" "character"
## cp1 cp5 p55
## "character" "character" "character"
## p57 p58 p59
## "character" "character" "character"
## p61 p62_1 p62_2
## "character" "integer" "integer"
## p62_3 p62_4 p62_5
## "integer" "integer" "integer"
## p65 p69 p70
## "character" "character" "character"
## p71_4 p71_5 p81
## "character" "character" "integer"
## p82 p83_1 p83_2
## "character" "character" "character"
## p85 p15 p17
## "character" "character" "character"
## tiempo_total_traslado usa_transporte_publico p44_8
## "integer" "integer" "character"
## p49 cp8_1 p1
## "integer" "integer" "character"
## cp4_1 cp3 p140
## "character" "integer" "character"
## p143 p160 p161_4
## "character" "character" "character"
## p161_9 p164
## "character" "character"
# Número de valores faltantes por variable
colSums(is.na(datos_revision))
## al_menos_un_problema_agua p66 p67
## 0 0 0
## p68 mun_mv nom_mun_mv
## 0 0 0
## loc_mv nom_loc_mv ageb_mv
## 0 0 0
## colonia p167 p88
## 0 0 0
## p86 p87 p52
## 0 0 0
## cp1 cp5 p55
## 0 0 0
## p57 p58 p59
## 1594 1590 0
## p61 p62_1 p62_2
## 0 0 0
## p62_3 p62_4 p62_5
## 0 0 0
## p65 p69 p70
## 0 0 0
## p71_4 p71_5 p81
## 0 0 0
## p82 p83_1 p83_2
## 0 0 0
## p85 p15 p17
## 0 1985 1985
## tiempo_total_traslado usa_transporte_publico p44_8
## 1994 0 0
## p49 cp8_1 p1
## 0 129 0
## cp4_1 cp3 p140
## 0 0 0
## p143 p160 p161_4
## 0 0 0
## p161_9 p164
## 0 0
# Porcentaje de valores faltantes por variable
round(colSums(is.na(datos_revision)) / nrow(datos_revision) * 100, 2)
## al_menos_un_problema_agua p66 p67
## 0.00 0.00 0.00
## p68 mun_mv nom_mun_mv
## 0.00 0.00 0.00
## loc_mv nom_loc_mv ageb_mv
## 0.00 0.00 0.00
## colonia p167 p88
## 0.00 0.00 0.00
## p86 p87 p52
## 0.00 0.00 0.00
## cp1 cp5 p55
## 0.00 0.00 0.00
## p57 p58 p59
## 32.17 32.09 0.00
## p61 p62_1 p62_2
## 0.00 0.00 0.00
## p62_3 p62_4 p62_5
## 0.00 0.00 0.00
## p65 p69 p70
## 0.00 0.00 0.00
## p71_4 p71_5 p81
## 0.00 0.00 0.00
## p82 p83_1 p83_2
## 0.00 0.00 0.00
## p85 p15 p17
## 0.00 40.06 40.06
## tiempo_total_traslado usa_transporte_publico p44_8
## 40.24 0.00 0.00
## p49 cp8_1 p1
## 0.00 2.60 0.00
## cp4_1 cp3 p140
## 0.00 0.00 0.00
## p143 p160 p161_4
## 0.00 0.00 0.00
## p161_9 p164
## 0.00 0.00
# ------------------------------------------------------------
# 1.7 Tablas básicas de frecuencia para todas las variables
# ------------------------------------------------------------
# Este ciclo revisa todas las variables de datos_revision.
# Si la variable tiene pocas categorías, imprime tabla de frecuencia.
# Si tiene muchas categorías, solo imprime summary para no saturar la salida.
for (variable in names(datos_revision)) {
cat("\n============================================================\n")
cat("Variable:", variable, "\n")
cat("============================================================\n")
# Contamos cuántos valores distintos tiene la variable
numero_categorias <- length(unique(datos_revision[[variable]]))
cat("Número de valores distintos:", numero_categorias, "\n\n")
# Si tiene 30 valores o menos, hacemos tabla de frecuencia
if (numero_categorias <= 30) {
print(table(datos_revision[[variable]], useNA = "ifany"))
}
# Si tiene más de 30 valores, usamos summary
if (numero_categorias > 30) {
print(summary(datos_revision[[variable]]))
cat("Nota: no se imprime tabla completa porque tiene muchas categorías.\n")
}
}
##
## ============================================================
## Variable: al_menos_un_problema_agua
## ============================================================
## Número de valores distintos: 2
##
##
## 0 1
## 2283 2672
##
## ============================================================
## Variable: p66
## ============================================================
## Número de valores distintos: 8
##
##
## 0 1 2 3 4 5 8,888 9,999
## 2598 1127 465 329 315 117 3 1
##
## ============================================================
## Variable: p67
## ============================================================
## Número de valores distintos: 8
##
##
## 0 1 2 3 4 5 8,888 9,999
## 3047 1126 372 184 134 87 4 1
##
## ============================================================
## Variable: p68
## ============================================================
## Número de valores distintos: 8
##
##
## 0 1 2 3 4 5 8,888 9,999
## 3359 964 318 136 100 73 3 2
##
## ============================================================
## Variable: mun_mv
## ============================================================
## Número de valores distintos: 41
##
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.00 18.00 26.00 28.28 41.00 51.00
## Nota: no se imprime tabla completa porque tiene muchas categorías.
##
## ============================================================
## Variable: nom_mun_mv
## ============================================================
## Número de valores distintos: 41
##
## Length Class Mode
## 4955 character character
## Nota: no se imprime tabla completa porque tiene muchas categorías.
##
## ============================================================
## Variable: loc_mv
## ============================================================
## Número de valores distintos: 49
##
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 1.00 1.00 48.13 1.00 572.00
## Nota: no se imprime tabla completa porque tiene muchas categorías.
##
## ============================================================
## Variable: nom_loc_mv
## ============================================================
## Número de valores distintos: 82
##
## Length Class Mode
## 4955 character character
## Nota: no se imprime tabla completa porque tiene muchas categorías.
##
## ============================================================
## Variable: ageb_mv
## ============================================================
## Número de valores distintos: 1179
##
## Length Class Mode
## 4955 character character
## Nota: no se imprime tabla completa porque tiene muchas categorías.
##
## ============================================================
## Variable: colonia
## ============================================================
## Número de valores distintos: 2002
##
## Length Class Mode
## 4955 character character
## Nota: no se imprime tabla completa porque tiene muchas categorías.
##
## ============================================================
## Variable: p167
## ============================================================
## Número de valores distintos: 13
##
##
## 1 10 11 12 2 3 4 5 6 7 8 9 9,999
## 139 5 4 6 1377 1714 776 258 59 20 11 8 578
##
## ============================================================
## Variable: p88
## ============================================================
## Número de valores distintos: 6
##
##
## 1 2 3 4 8,888 9,999
## 706 3394 739 78 3 35
##
## ============================================================
## Variable: p86
## ============================================================
## Número de valores distintos: 6
##
##
## 1 2 3 4 8,888 9,999
## 1159 2991 597 176 6 26
##
## ============================================================
## Variable: p87
## ============================================================
## Número de valores distintos: 6
##
##
## 1 2 3 4 8,888 9,999
## 1869 2498 301 129 132 26
##
## ============================================================
## Variable: p52
## ============================================================
## Número de valores distintos: 11
##
##
## 1 2 3 4 5 6 7 8 8,888 9 9,999
## 2325 296 516 476 745 220 156 11 6 199 5
##
## ============================================================
## Variable: cp1
## ============================================================
## Número de valores distintos: 13
##
##
## 1 10 11 12 2 3 4 5 6 7 8 9 9,999
## 571 4 1 3 1357 1246 994 470 200 60 24 15 10
##
## ============================================================
## Variable: cp5
## ============================================================
## Número de valores distintos: 4
##
##
## 1 2 3 9,999
## 4407 17 520 11
##
## ============================================================
## Variable: p55
## ============================================================
## Número de valores distintos: 7
##
##
## 1 2 3 4 5 8,888 9,999
## 177 908 639 1640 1589 1 1
##
## ============================================================
## Variable: p57
## ============================================================
## Número de valores distintos: 22
##
##
## 1 10 11 12 13 14 15 16 17 18 19 2 3
## 1291 44 265 70 2 5 9 5 1 3 1 878 249
## 4 5 6 7 8 8,888 9 9,999 <NA>
## 172 57 153 81 43 7 10 15 1594
##
## ============================================================
## Variable: p58
## ============================================================
## Número de valores distintos: 16
##
##
## 1 10 11 12 13 2 3 4 5 6 7 8 8,888
## 1470 3 12 1 1 88 259 453 31 464 207 74 13
## 9 9,999 <NA>
## 279 10 1590
##
## ============================================================
## Variable: p59
## ============================================================
## Número de valores distintos: 4
##
##
## 0 1 8,888 9,999
## 4295 655 3 2
##
## ============================================================
## Variable: p61
## ============================================================
## Número de valores distintos: 5
##
##
## 1 2 3 4 8,888
## 1245 1691 1812 202 5
##
## ============================================================
## Variable: p62_1
## ============================================================
## Número de valores distintos: 11
##
##
## 1 2 3 4 5 6 7 8 9 10 9999
## 143 66 72 130 411 460 976 1278 882 536 1
##
## ============================================================
## Variable: p62_2
## ============================================================
## Número de valores distintos: 11
##
##
## 1 2 3 4 5 6 7 8 9 10 8888
## 119 76 108 177 510 604 1075 1290 685 310 1
##
## ============================================================
## Variable: p62_3
## ============================================================
## Número de valores distintos: 12
##
##
## 1 2 3 4 5 6 7 8 9 10 8888 9999
## 131 66 111 160 455 515 870 1202 906 508 22 9
##
## ============================================================
## Variable: p62_4
## ============================================================
## Número de valores distintos: 12
##
##
## 1 2 3 4 5 6 7 8 9 10 8888 9999
## 210 91 126 175 486 482 819 1177 933 443 11 2
##
## ============================================================
## Variable: p62_5
## ============================================================
## Número de valores distintos: 10
##
##
## 1 2 3 4 5 6 7 8 9 10
## 15 16 19 46 131 189 383 849 1740 1567
##
## ============================================================
## Variable: p65
## ============================================================
## Número de valores distintos: 19
##
##
## 1 10 11 12 13 14 15 16 17 2 3 4 5
## 1024 5 1 9 1 2 2 1 254 1377 291 1253 234
## 6 7 8 8,888 9 9,999
## 355 3 1 132 1 9
##
## ============================================================
## Variable: p69
## ============================================================
## Número de valores distintos: 7
##
##
## 1 2 3 4 5 8,888 9,999
## 614 1555 1507 1031 71 176 1
##
## ============================================================
## Variable: p70
## ============================================================
## Número de valores distintos: 10
##
##
## 1 2 3 4 5 6 7 8 8,888 9,999
## 262 183 523 1163 339 331 371 1753 10 20
##
## ============================================================
## Variable: p71_4
## ============================================================
## Número de valores distintos: 4
##
##
## 0 1 8,888 9,999
## 1842 3024 76 13
##
## ============================================================
## Variable: p71_5
## ============================================================
## Número de valores distintos: 4
##
##
## 0 1 8,888 9,999
## 1874 2962 105 14
##
## ============================================================
## Variable: p81
## ============================================================
## Número de valores distintos: 2
##
##
## 0 1
## 741 4214
##
## ============================================================
## Variable: p82
## ============================================================
## Número de valores distintos: 3
##
##
## 0 1 8,888
## 858 4090 7
##
## ============================================================
## Variable: p83_1
## ============================================================
## Número de valores distintos: 5
##
##
## 1 2 3 4 8,888
## 970 2212 1614 128 31
##
## ============================================================
## Variable: p83_2
## ============================================================
## Número de valores distintos: 6
##
##
## 1 2 3 4 8,888 9,999
## 428 1978 2101 303 144 1
##
## ============================================================
## Variable: p85
## ============================================================
## Número de valores distintos: 17
##
##
## 1 10 11 12 13 14 15 2 3 4 5 6 7
## 1349 2 1 1 1 4 89 782 912 1224 174 301 60
## 8 8,888 9 9,999
## 2 47 2 4
##
## ============================================================
## Variable: p15
## ============================================================
## Número de valores distintos: 46
##
## Length Class Mode
## 4955 character character
## Nota: no se imprime tabla completa porque tiene muchas categorías.
##
## ============================================================
## Variable: p17
## ============================================================
## Número de valores distintos: 16
##
##
## 1 10 11 12 13 14 2 3 4 5 6 7 8
## 430 3 2 206 6 1 649 97 30 94 36 3 7
## 9 9,999 <NA>
## 1396 10 1985
##
## ============================================================
## Variable: tiempo_total_traslado
## ============================================================
## Número de valores distintos: 99
##
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 10.00 30.00 60.00 88.61 120.00 600.00 1994
## Nota: no se imprime tabla completa porque tiene muchas categorías.
##
## ============================================================
## Variable: usa_transporte_publico
## ============================================================
## Número de valores distintos: 2
##
##
## 0 1
## 3242 1713
##
## ============================================================
## Variable: p44_8
## ============================================================
## Número de valores distintos: 4
##
##
## 0 1 2 8,888
## 2508 2380 66 1
##
## ============================================================
## Variable: p49
## ============================================================
## Número de valores distintos: 10
##
##
## 0 1 2 3 4 5 6 7 8 9999
## 1854 2371 568 113 25 4 1 11 5 3
##
## ============================================================
## Variable: cp8_1
## ============================================================
## Número de valores distintos: 16
##
##
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <NA>
## 72 2 952 1652 854 99 105 98 99 8 30 755 19 72 9 129
##
## ============================================================
## Variable: p1
## ============================================================
## Número de valores distintos: 9
##
##
## 1 2 3 4 5 6 7 8 9,999
## 1500 156 111 704 1547 31 775 115 16
##
## ============================================================
## Variable: cp4_1
## ============================================================
## Número de valores distintos: 79
##
## Length Class Mode
## 4955 character character
## Nota: no se imprime tabla completa porque tiene muchas categorías.
##
## ============================================================
## Variable: cp3
## ============================================================
## Número de valores distintos: 4
##
##
## 0 1 2 3
## 2457 2494 2 2
##
## ============================================================
## Variable: p140
## ============================================================
## Número de valores distintos: 4
##
##
## 0 1 8,888 9,999
## 1470 3177 300 8
##
## ============================================================
## Variable: p143
## ============================================================
## Número de valores distintos: 6
##
##
## 1 2 3 4 5 8,888
## 896 1044 1389 812 470 344
##
## ============================================================
## Variable: p160
## ============================================================
## Número de valores distintos: 6
##
##
## 1 2 3 4 8,888 9,999
## 702 1627 1400 1140 76 10
##
## ============================================================
## Variable: p161_4
## ============================================================
## Número de valores distintos: 4
##
##
## 0 1 8,888 9,999
## 4165 786 2 2
##
## ============================================================
## Variable: p161_9
## ============================================================
## Número de valores distintos: 3
##
##
## 0 1 8,888
## 4085 868 2
##
## ============================================================
## Variable: p164
## ============================================================
## Número de valores distintos: 4
##
##
## 0 1 8,888 9,999
## 691 4255 4 5
# Creamos una copia para limpiar sin modificar datos_revision original por si acaso.
datos_limpios <- datos_revision
# En el Bloque 1 encontramos códigos como 7777, 8888 y 9999.
# Estos códigos no son respuestas reales, sino valores especiales.
# Por eso los convertimos a NA.
codigos_especiales <- c("7777", "8888", "9999", "8,888", "9,999")
# Recorremos todas las variables y cambiamos esos códigos por NA.
for (variable in names(datos_limpios)) {
# Convertimos temporalmente a texto para detectar bien los códigos.
x <- as.character(datos_limpios[[variable]])
# Quitamos espacios al inicio o final porque me salió error.
x <- trimws(x)
# Convertimos códigos especiales a NA.
x[x %in% codigos_especiales] <- NA
# Guardamos la variable ya corregida.
datos_limpios[[variable]] <- x
}
# Nuestra variable dependiente es al_menos_un_problema_agua.
# Debe quedar como 0/1:
# 0 = no reportó problema de agua
# 1 = sí reportó al menos un problema de agua
x_target <- tolower(datos_limpios$al_menos_un_problema_agua)
datos_limpios$al_menos_un_problema_agua <- ifelse(
x_target %in% c("1", "si", "sí", "yes", "true"),
1,
ifelse(
x_target %in% c("0", "no", "false"),
0,
NA
)
)
# Revisamos que la variable dependiente haya quedado bien.
table(datos_limpios$al_menos_un_problema_agua, useNA = "ifany")
##
## 0 1
## 2283 2672
# Estas variables sí tiene sentido tratarlas como numéricas:
# cp1 = número de personas en el hogar
# cp5 = número de cuartos / dormitorios, según diccionario
# cp4_1 = edad
# p49 = número de vehículos
# tiempo_total_traslado = tiempo de traslado
# factor_cvnl = factor de expansión
variables_numericas <- c(
"cp1",
"cp5",
"cp4_1",
"p49",
"tiempo_total_traslado"
)
# Convertimos solo las variables numéricas que sí estén en la base.
for (variable in intersect(variables_numericas, names(datos_limpios))) {
datos_limpios[[variable]] <- as.numeric(datos_limpios[[variable]])
}
# Todas las demás variables, excepto el target y las numéricas,se tratan como categóricas.
variables_categoricas <- setdiff(
names(datos_limpios),
c("al_menos_un_problema_agua", variables_numericas)
)
# Convertimos esas variables a factor.
for (variable in variables_categoricas) {
datos_limpios[[variable]] <- as.factor(datos_limpios[[variable]])
}
# Revisamos que el target sea numérico,las numéricas sean numeric,y las categóricas sean factor.
sapply(datos_limpios, class)
## al_menos_un_problema_agua p66 p67
## "numeric" "factor" "factor"
## p68 mun_mv nom_mun_mv
## "factor" "factor" "factor"
## loc_mv nom_loc_mv ageb_mv
## "factor" "factor" "factor"
## colonia p167 p88
## "factor" "factor" "factor"
## p86 p87 p52
## "factor" "factor" "factor"
## cp1 cp5 p55
## "numeric" "numeric" "factor"
## p57 p58 p59
## "factor" "factor" "factor"
## p61 p62_1 p62_2
## "factor" "factor" "factor"
## p62_3 p62_4 p62_5
## "factor" "factor" "factor"
## p65 p69 p70
## "factor" "factor" "factor"
## p71_4 p71_5 p81
## "factor" "factor" "factor"
## p82 p83_1 p83_2
## "factor" "factor" "factor"
## p85 p15 p17
## "factor" "factor" "factor"
## tiempo_total_traslado usa_transporte_publico p44_8
## "numeric" "factor" "factor"
## p49 cp8_1 p1
## "numeric" "factor" "factor"
## cp4_1 cp3 p140
## "numeric" "factor" "factor"
## p143 p160 p161_4
## "factor" "factor" "factor"
## p161_9 p164
## "factor" "factor"
# Revisamos resumen general después de limpieza.
summary(datos_limpios)
## al_menos_un_problema_agua p66 p67 p68 mun_mv
## Min. :0.0000 0 :2598 0 :3047 0 :3359 18 : 354
## 1st Qu.:0.0000 1 :1127 1 :1126 1 : 964 19 : 354
## Median :1.0000 2 : 465 2 : 372 2 : 318 21 : 354
## Mean :0.5393 3 : 329 3 : 184 3 : 136 31 : 354
## 3rd Qu.:1.0000 4 : 315 4 : 134 4 : 100 39 : 354
## Max. :1.0000 5 : 117 5 : 87 5 : 73 46 : 354
## NA's: 4 NA's: 5 NA's: 5 (Other):2831
## nom_mun_mv loc_mv nom_loc_mv
## Apodaca : 354 1 :4092 Ciudad Santa Catarina : 354
## Cadereyta Jiménez: 354 572 : 101 Monterrey : 354
## García : 354 45 : 56 San Nicolás de los Garza: 354
## General Escobedo : 354 456 : 56 San Pedro Garza García : 354
## Juárez : 354 284 : 52 Santiago : 352
## Monterrey : 354 212 : 45 Guadalupe : 350
## (Other) :2831 (Other): 553 (Other) :2837
## ageb_mv colonia p167 p88
## 180 : 38 Centro : 200 3 :1714 1 : 706
## 167 : 30 Valle Del Roble : 56 2 :1377 2 :3394
## 171 : 29 Real De Palmas : 43 4 : 776 3 : 739
## 327 : 29 Los Fierros : 28 5 : 258 4 : 78
## 203 : 26 San Pedro : 27 1 : 139 NA's: 38
## 557 : 26 Valle De Santa María: 25 (Other): 113
## (Other):4777 (Other) :4576 NA's : 578
## p86 p87 p52 cp1 cp5
## 1 :1159 1 :1869 1 :2325 Min. : 1.000 Min. :1.000
## 2 :2991 2 :2498 5 : 745 1st Qu.: 2.000 1st Qu.:1.000
## 3 : 597 3 : 301 3 : 516 Median : 3.000 Median :1.000
## 4 : 176 4 : 129 4 : 476 Mean : 3.111 Mean :1.214
## NA's: 32 NA's: 158 2 : 296 3rd Qu.: 4.000 3rd Qu.:1.000
## (Other): 586 Max. :12.000 Max. :3.000
## NA's : 11 NA's :10 NA's :11
## p55 p57 p58 p59 p61
## 1 : 177 1 :1291 1 :1470 0 :4295 1 :1245
## 2 : 908 2 : 878 6 : 464 1 : 655 2 :1691
## 3 : 639 11 : 265 4 : 453 NA's: 5 3 :1812
## 4 :1640 3 : 249 9 : 279 4 : 202
## 5 :1589 4 : 172 3 : 259 NA's: 5
## NA's: 2 (Other): 484 (Other): 417
## NA's :1616 NA's :1613
## p62_1 p62_2 p62_3 p62_4 p62_5
## 8 :1278 8 :1290 8 :1202 8 :1177 9 :1740
## 7 : 976 7 :1075 9 : 906 9 : 933 10 :1567
## 9 : 882 9 : 685 7 : 870 7 : 819 8 : 849
## 10 : 536 6 : 604 6 : 515 5 : 486 7 : 383
## 6 : 460 5 : 510 10 : 508 6 : 482 6 : 189
## (Other): 822 (Other): 790 (Other): 923 (Other):1045 5 : 131
## NA's : 1 NA's : 1 NA's : 31 NA's : 13 (Other): 96
## p65 p69 p70 p71_4 p71_5 p81
## 2 :1377 1 : 614 8 :1753 0 :1842 0 :1874 0: 741
## 4 :1253 2 :1555 4 :1163 1 :3024 1 :2962 1:4214
## 1 :1024 3 :1507 3 : 523 NA's: 89 NA's: 119
## 6 : 355 4 :1031 7 : 371
## 3 : 291 5 : 71 5 : 339
## (Other): 514 NA's: 177 (Other): 776
## NA's : 141 NA's : 30
## p82 p83_1 p83_2 p85 p15
## 0 : 858 1 : 970 1 : 428 1 :1349 39 : 562
## 1 :4090 2 :2212 2 :1978 4 :1224 26 : 262
## NA's: 7 3 :1614 3 :2101 3 : 912 46 : 259
## 4 : 128 4 : 303 2 : 782 6 : 259
## NA's: 31 NA's: 145 6 : 301 19 : 218
## (Other): 336 (Other):1409
## NA's : 51 NA's :1986
## p17 tiempo_total_traslado usa_transporte_publico p44_8
## 9 :1396 Min. : 10.00 0:3242 0 :2508
## 2 : 649 1st Qu.: 30.00 1:1713 1 :2380
## 1 : 430 Median : 60.00 2 : 66
## 12 : 206 Mean : 88.61 NA's: 1
## 3 : 97 3rd Qu.:120.00
## (Other): 182 Max. :600.00
## NA's :1995 NA's :1994
## p49 cp8_1 p1 cp4_1 cp3
## Min. :0.0000 3 :1652 5 :1547 Min. :18.00 0:2457
## 1st Qu.:0.0000 2 : 952 1 :1500 1st Qu.:35.00 1:2494
## Median :1.0000 4 : 854 7 : 775 Median :49.00 2: 2
## Mean :0.8257 11 : 755 4 : 704 Mean :48.78 3: 2
## 3rd Qu.:1.0000 6 : 105 2 : 156 3rd Qu.:63.00
## Max. :8.0000 (Other): 508 (Other): 257 Max. :95.00
## NA's :3 NA's : 129 NA's : 16 NA's :2
## p140 p143 p160 p161_4 p161_9 p164
## 0 :1470 1 : 896 1 : 702 0 :4165 0 :4085 0 : 691
## 1 :3177 2 :1044 2 :1627 1 : 786 1 : 868 1 :4255
## NA's: 308 3 :1389 3 :1400 NA's: 4 NA's: 2 NA's: 9
## 4 : 812 4 :1140
## 5 : 470 NA's: 86
## NA's: 344
##
# Número de valores faltantes por variable después de limpiar.
faltantes_despues <- colSums(is.na(datos_limpios))
# Porcentaje de valores faltantes por variable después de limpiar.
porcentaje_faltantes_despues <- round(
faltantes_despues / nrow(datos_limpios) * 100,
2
)
# Creamos una tabla resumen de limpieza.
resumen_limpieza <- data.frame(
variable = names(datos_limpios),
tipo = as.character(sapply(datos_limpios, class)),
faltantes = as.numeric(faltantes_despues),
porcentaje_faltantes = as.numeric(porcentaje_faltantes_despues)
)
# Ordenamos de mayor a menor porcentaje de faltantes.
resumen_limpieza <- resumen_limpieza[
order(-resumen_limpieza$porcentaje_faltantes),
]
# Mostramos el resumen.
resumen_limpieza
## variable tipo faltantes porcentaje_faltantes
## 39 p17 factor 1995 40.26
## 40 tiempo_total_traslado numeric 1994 40.24
## 38 p15 factor 1986 40.08
## 19 p57 factor 1616 32.61
## 20 p58 factor 1613 32.55
## 11 p167 factor 578 11.66
## 49 p143 factor 344 6.94
## 48 p140 factor 308 6.22
## 29 p69 factor 177 3.57
## 14 p87 factor 158 3.19
## 36 p83_2 factor 145 2.93
## 28 p65 factor 141 2.85
## 44 cp8_1 factor 129 2.60
## 32 p71_5 factor 119 2.40
## 31 p71_4 factor 89 1.80
## 50 p160 factor 86 1.74
## 37 p85 factor 51 1.03
## 12 p88 factor 38 0.77
## 13 p86 factor 32 0.65
## 25 p62_3 factor 31 0.63
## 35 p83_1 factor 31 0.63
## 30 p70 factor 30 0.61
## 45 p1 factor 16 0.32
## 26 p62_4 factor 13 0.26
## 15 p52 factor 11 0.22
## 17 cp5 numeric 11 0.22
## 16 cp1 numeric 10 0.20
## 53 p164 factor 9 0.18
## 34 p82 factor 7 0.14
## 3 p67 factor 5 0.10
## 4 p68 factor 5 0.10
## 21 p59 factor 5 0.10
## 22 p61 factor 5 0.10
## 2 p66 factor 4 0.08
## 51 p161_4 factor 4 0.08
## 43 p49 numeric 3 0.06
## 18 p55 factor 2 0.04
## 46 cp4_1 numeric 2 0.04
## 52 p161_9 factor 2 0.04
## 23 p62_1 factor 1 0.02
## 24 p62_2 factor 1 0.02
## 42 p44_8 factor 1 0.02
## 1 al_menos_un_problema_agua numeric 0 0.00
## 5 mun_mv factor 0 0.00
## 6 nom_mun_mv factor 0 0.00
## 7 loc_mv factor 0 0.00
## 8 nom_loc_mv factor 0 0.00
## 9 ageb_mv factor 0 0.00
## 10 colonia factor 0 0.00
## 27 p62_5 factor 0 0.00
## 33 p81 factor 0 0.00
## 41 usa_transporte_publico factor 0 0.00
## 47 cp3 factor 0 0.00
# Estas variables NO se usarían directamente como predictores del modelo principal.
# Razones:
# - p66, p67 y p68 forman parte del fenómeno de agua y pueden parecerse al target.
# - p57, p58, p15, p17 y tiempo_total_traslado tienen muchos NA por saltos del cuestionario.
# - ageb, colonia y localidad son demasiado detalladas para un modelo simple.
# - p85 puede ser circular si la persona menciona agua como problema ambiental.
# - factor_cvnl es factor de expansión, no predictor sustantivo.
variables_contexto <- c(
"p66",
"p67",
"p68",
"p57",
"p58",
"p15",
"p17",
"tiempo_total_traslado",
"mun_mv",
"loc_mv",
"nom_loc_mv",
"ageb_mv",
"colonia",
"p69",
"p70",
"p85",
"factor_cvnl" #aquí si lo dejo porque es solo como contexto, ya lo quité de las variables numéricas
)
# Variable dependiente.
variable_dependiente <- "al_menos_un_problema_agua"
# Variables candidatas para el modelo principal.
variables_modelo <- setdiff(
names(datos_limpios),
c(variable_dependiente, variables_contexto)
)
# Mostramos variables que quedarían como candidatas.
variables_modelo
## [1] "nom_mun_mv" "p167" "p88"
## [4] "p86" "p87" "p52"
## [7] "cp1" "cp5" "p55"
## [10] "p59" "p61" "p62_1"
## [13] "p62_2" "p62_3" "p62_4"
## [16] "p62_5" "p65" "p71_4"
## [19] "p71_5" "p81" "p82"
## [22] "p83_1" "p83_2" "usa_transporte_publico"
## [25] "p44_8" "p49" "cp8_1"
## [28] "p1" "cp4_1" "cp3"
## [31] "p140" "p143" "p160"
## [34] "p161_4" "p161_9" "p164"
# Mostramos variables que quedarían solo como contexto.
intersect(variables_contexto, names(datos_limpios))
## [1] "p66" "p67" "p68"
## [4] "p57" "p58" "p15"
## [7] "p17" "tiempo_total_traslado" "mun_mv"
## [10] "loc_mv" "nom_loc_mv" "ageb_mv"
## [13] "colonia" "p69" "p70"
## [16] "p85"
# Creamos una base con el target y las variables candidatas.
# Esta todavía es preliminar porque debemos revisar si pierde muchas observaciones.
datos_modelo_preliminar <- datos_limpios[
,
c(variable_dependiente, variables_modelo)
]
# REvisamos dimensiones antes de quitar NA.
dim(datos_modelo_preliminar)
## [1] 4955 37
datos_modelo <- datos_modelo_preliminar[
complete.cases(datos_modelo_preliminar),
]
# Revisamos dimensiones después de quitar NA.
dim(datos_modelo)
## [1] 3560 37
# Revisamos que ya no haya valores faltantes ahora si.
colSums(is.na(datos_modelo))
## al_menos_un_problema_agua nom_mun_mv p167
## 0 0 0
## p88 p86 p87
## 0 0 0
## p52 cp1 cp5
## 0 0 0
## p55 p59 p61
## 0 0 0
## p62_1 p62_2 p62_3
## 0 0 0
## p62_4 p62_5 p65
## 0 0 0
## p71_4 p71_5 p81
## 0 0 0
## p82 p83_1 p83_2
## 0 0 0
## usa_transporte_publico p44_8 p49
## 0 0 0
## cp8_1 p1 cp4_1
## 0 0 0
## cp3 p140 p143
## 0 0 0
## p160 p161_4 p161_9
## 0 0 0
## p164
## 0
# Revisamos distribución del target en la base completa limpia.
table(datos_limpios$al_menos_un_problema_agua, useNA = "ifany")
##
## 0 1
## 2283 2672
# Revisamos distribución del target en la base preliminar de modelo.
table(datos_modelo$al_menos_un_problema_agua, useNA = "ifany")
##
## 0 1
## 1638 1922
# ------------------------------------------------------------
# 3.1 Definir variable dependiente
# ------------------------------------------------------------
# Nuestra variable dependiente es binaria:
# 0 = el hogar no reportó problemas de agua
# 1 = el hogar sí reportó al menos un problema de agua
target <- "al_menos_un_problema_agua"
# Revisamos nuevamente la distribución del target en la base limpia solo para tenerlo visual en este bloque y organizar mejor nuestro análisis.
table(datos_limpios[[target]], useNA = "ifany")
##
## 0 1
## 2283 2672
##La variable dependiente al_menos_un_problema_agua quedó correctamente definida como una variable binaria, donde 0 representa hogares que no reportaron problemas de agua y 1 representa hogares que sí reportaron al menos un problema. En la base limpia completa se mantienen 2,283 casos en la categoría 0 y 2,672 casos en la categoría 1, por lo que la distribución permite continuar con un modelo de clasificación binaria mediante regresión logística.
# ------------------------------------------------------------
# 3.2 Definir variables que NO deben entrar al modelo principal
# ------------------------------------------------------------
# Estas variables se excluyen porque están demasiado cerca del target.
# Es decir, ayudan a construir o describir el problema de agua, pero no conviene usarlas como predictores porque pueden generar problemas.
variables_cercanas_target <- c(
"p66",
"p67",
"p68"
)
# Estas variables se excluyen del modelo principal porque tienen muchos NA debido a saltos del cuestionario.
variables_muchos_na <- c(
"p57",
"p58",
"p15",
"p17",
"tiempo_total_traslado"
)
# Estas variables territoriales son útiles para contexto,pero son demasiado detalladas para un modelo sencillo.
variables_territorio_detallado <- c(
"mun_mv",
"loc_mv",
"nom_loc_mv",
"ageb_mv",
"colonia"
)
# Estas variables se dejan como contexto porque pueden ser útiles para interpretar el problema, pero no son centrales para el modelo principal.
variables_contexto <- c(
"p69",
"p70",
"p85",
"factor_cvnl"
)
# ------------------------------------------------------------
# 3.3 Definir variables predictoras finales
# ------------------------------------------------------------
# Estas variables sí entran al modelo principal porque representan dimensiones que pueden ayudar a explicar la inseguridad hídrica:territorio, ingreso, vivienda, servicios urbanos, ambiente, movilidad,perfil sociodemográfico y gobernanza.
predictores_finales <- c(
# Territorio general
"nom_mun_mv",
# Ingreso y situación económica
"p167",
"p88",
# Vivienda y hogar
"p52",
"cp1",
"cp5",
"p59",
# Servicios urbanos e infraestructura
"p61",
"p62_1",
"p62_2",
"p62_4",
"p62_5",
"p65",
# Entorno ambiental
"p81",
"p83_1",
# Movilidad y recursos del hogar
"usa_transporte_publico",
"p49",
# Perfil sociodemográfico
"p1",
"cp4_1",
# Gobernanza local
"p140",
"p143",
"p160",
"p161_9"
)
# Revisamos si todas las variables seleccionadas existen en datos_limpios otra vez porque me salió error pero se arregló.
variables_faltantes_modelo <- setdiff(
c(target, predictores_finales),
names(datos_limpios)
)
# Mostramos variables faltantes.
variables_faltantes_modelo
## character(0)
##Los predictores finales seleccionados permiten analizar la inseguridad hídrica desde varias dimensiones: territorio, ingreso, vivienda, servicios urbanos, entorno ambiental, movilidad, perfil sociodemográfico y gobernanza local. Esto fortalece el modelo porque ya no depende únicamente de ingreso y municipio, sino que incorpora factores menos obvios que pueden ser útiles para interpretar desigualdades territoriales y condiciones del entorno urbano.
# ------------------------------------------------------------
# 3.5 Crear base final para el modelo
# ------------------------------------------------------------
# Creamos una base solo con el target y los predictores finales.
datos_modelo_final <- datos_limpios[
,
c(target, predictores_finales)
]
# --------------------------------------------------------------------------------
# 3.X Filtrar solo municipios del Área Metropolitana de Monterrey porque en las prubas del bloque 6 salió error con variable de territorio "Los Aldamas".
# --------------------------------------------------------------------------------
# Revisamos primero qué municipios aparecen en la base.
sort(unique(datos_modelo_final$nom_mun_mv))
## [1] Agualeguas Allende Anáhuac
## [4] Apodaca Cadereyta Jiménez Cerralvo
## [7] China Ciénega de Flores Doctor Arroyo
## [10] Doctor González El Carmen Galeana
## [13] García General Escobedo General Terán
## [16] General Zaragoza General Zuazua Guadalupe
## [19] Hidalgo Hualahuises Juárez
## [22] Lampazos de Naranjo Linares Los Aldamas
## [25] Los Herreras Los Ramones Marín
## [28] Mier y Noriega Mina Montemorelos
## [31] Monterrey Parás Pesquería
## [34] Rayones Sabinas Hidalgo Salinas Victoria
## [37] San Nicolás de los Garza San Pedro Garza García Santa Catarina
## [40] Santiago Villaldama
## 41 Levels: Agualeguas Allende Anáhuac Apodaca Cadereyta Jiménez ... Villaldama
# Definimos los municipios del Área Metropolitana de Monterrey.
municipios_amm <- c(
"Abasolo",
"Apodaca",
"Cadereyta Jiménez",
"Ciénega de Flores",
"El Carmen",
"García",
"General Escobedo",
"General Zuazua",
"Guadalupe",
"Hidalgo",
"Juárez",
"Monterrey",
"Pesquería",
"Salinas Victoria",
"San Nicolás de los Garza",
"San Pedro Garza García",
"Santa Catarina",
"Santiago"
)
# Filtramos la base para conservar solo observaciones del AMM.
datos_modelo_final <- datos_modelo_final[
datos_modelo_final$nom_mun_mv %in% municipios_amm,
]
# Quitamos niveles vacíos después del filtro.
datos_modelo_final <- droplevels(datos_modelo_final)
# Revisamos cuántas observaciones quedaron.
dim(datos_modelo_final)
## [1] 4463 24
# Revisamos qué municipios quedaron.
table(datos_modelo_final$nom_mun_mv)
##
## Apodaca Cadereyta Jiménez Ciénega de Flores
## 354 354 96
## El Carmen García General Escobedo
## 104 354 354
## General Zuazua Guadalupe Hidalgo
## 136 353 40
## Juárez Monterrey Pesquería
## 354 354 124
## Salinas Victoria San Nicolás de los Garza San Pedro Garza García
## 72 354 354
## Santa Catarina Santiago
## 354 352
#-------------------------------------------------------------------------
# Revisamos dimensiones antes de quitar valores faltantes.
dim(datos_modelo_final)
## [1] 4463 24
# Revisamos valores faltantes por variable antes de eliminar filas.
colSums(is.na(datos_modelo_final))
## al_menos_un_problema_agua nom_mun_mv p167
## 0 0 529
## p88 p52 cp1
## 38 11 10
## cp5 p59 p61
## 8 5 4
## p62_1 p62_2 p62_4
## 1 1 11
## p62_5 p65 p81
## 0 130 0
## p83_1 usa_transporte_publico p49
## 31 0 3
## p1 cp4_1 p140
## 14 2 298
## p143 p160 p161_9
## 337 83 2
# Eliminamos filas con valores faltantes.
# Esto es necesario porque el modelo no acepta NA.
datos_modelo_final <- datos_modelo_final[
complete.cases(datos_modelo_final),
]
# Revisamos dimensiones después de quitar valores faltantes.
dim(datos_modelo_final)
## [1] 3413 24
# Confirmamos que ya no haya valores faltantes.
colSums(is.na(datos_modelo_final))
## al_menos_un_problema_agua nom_mun_mv p167
## 0 0 0
## p88 p52 cp1
## 0 0 0
## cp5 p59 p61
## 0 0 0
## p62_1 p62_2 p62_4
## 0 0 0
## p62_5 p65 p81
## 0 0 0
## p83_1 usa_transporte_publico p49
## 0 0 0
## p1 cp4_1 p140
## 0 0 0
## p143 p160 p161_9
## 0 0 0
# Revisamos distribución final del target.
table(datos_modelo_final[[target]], useNA = "ifany")
##
## 0 1
## 1526 1887
# ------------------------------------------------------------
# 3.6 Revisar tipos de variables finales
# ------------------------------------------------------------
# Revisamos que el target sea numérico,
# las variables categóricas sean factor
# y las variables numéricas estén como numeric.
sapply(datos_modelo_final, class)
## al_menos_un_problema_agua nom_mun_mv p167
## "numeric" "factor" "factor"
## p88 p52 cp1
## "factor" "factor" "numeric"
## cp5 p59 p61
## "numeric" "factor" "factor"
## p62_1 p62_2 p62_4
## "factor" "factor" "factor"
## p62_5 p65 p81
## "factor" "factor" "factor"
## p83_1 usa_transporte_publico p49
## "factor" "factor" "numeric"
## p1 cp4_1 p140
## "factor" "numeric" "factor"
## p143 p160 p161_9
## "factor" "factor" "factor"
# ------------------------------------------------------------
# 3.7 Resumen de variables utilizadas
# ------------------------------------------------------------
# Guardamos una tabla sencilla para documentar qué variables entran al modelo.
resumen_predictores <- data.frame(
variable = predictores_finales,
papel = "Predictor del modelo principal"
)
# Mostramos la tabla.
resumen_predictores
## variable papel
## 1 nom_mun_mv Predictor del modelo principal
## 2 p167 Predictor del modelo principal
## 3 p88 Predictor del modelo principal
## 4 p52 Predictor del modelo principal
## 5 cp1 Predictor del modelo principal
## 6 cp5 Predictor del modelo principal
## 7 p59 Predictor del modelo principal
## 8 p61 Predictor del modelo principal
## 9 p62_1 Predictor del modelo principal
## 10 p62_2 Predictor del modelo principal
## 11 p62_4 Predictor del modelo principal
## 12 p62_5 Predictor del modelo principal
## 13 p65 Predictor del modelo principal
## 14 p81 Predictor del modelo principal
## 15 p83_1 Predictor del modelo principal
## 16 usa_transporte_publico Predictor del modelo principal
## 17 p49 Predictor del modelo principal
## 18 p1 Predictor del modelo principal
## 19 cp4_1 Predictor del modelo principal
## 20 p140 Predictor del modelo principal
## 21 p143 Predictor del modelo principal
## 22 p160 Predictor del modelo principal
## 23 p161_9 Predictor del modelo principal
# ------------------------------------------------------------
# 3.8 Ajuste final: agrupar categorías poco frecuentes de p65 porque salio error
# ------------------------------------------------------------
# Revisamos distribución original de p65
table(datos_modelo_final$p65)
##
## 1 10 11 12 13 14 15 16 17 2 3 4 5 6 7 8 9
## 658 4 1 8 1 1 2 0 227 956 190 934 164 262 3 1 1
# Convertimos p65 a texto para poder modificar categorías
datos_modelo_final$p65 <- as.character(datos_modelo_final$p65)
# Identificamos categorías con menos de 20 casos
categorias_pocas_p65 <- names(
table(datos_modelo_final$p65)[table(datos_modelo_final$p65) < 20]
)
# Revisamos cuáles categorías serán agrupadas
categorias_pocas_p65
## [1] "10" "11" "12" "13" "14" "15" "7" "8" "9"
# Agrupamos esas categorías poco frecuentes en "Otro"
datos_modelo_final$p65[
datos_modelo_final$p65 %in% categorias_pocas_p65
] <- "Otro"
# Volvemos a convertir p65 a factor
datos_modelo_final$p65 <- as.factor(datos_modelo_final$p65)
# Quitamos niveles vacíos
datos_modelo_final <- droplevels(datos_modelo_final)
# Revisamos distribución final de p65
table(datos_modelo_final$p65)
##
## 1 17 2 3 4 5 6 Otro
## 658 227 956 190 934 164 262 22
# ============================================================
# AJUSTE METODOLÓGICO: convertir cp5 a factor
# ============================================================
# cp5 es una variable categórica codificada con valores 1, 2 y 3.
# Por eso la convertimos a factor antes de dividir la base en train/test.
datos_modelo_final$cp5 <- as.factor(datos_modelo_final$cp5)
# Quitamos niveles vacíos, por seguridad.
datos_modelo_final <- droplevels(datos_modelo_final)
# Revisamos que cp5 ya quedó como factor.
str(datos_modelo_final$cp5)
## Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 3 1 ...
# Revisamos la distribución de cp5.
table(datos_modelo_final$cp5)
##
## 1 2 3
## 3031 16 366
##Ajuste metodológico sobre cp8_1:Durante la validación cruzada observamos que cp8_1 generaba problemas porque una de sus categorías tenía muy pocos casos y podía aparecer en el conjunto de validación, pero no en el conjunto de entrenamiento. Como esta variable no es central para la pregunta de investigación y no tenemos suficientes observaciones para interpretar esa categoría con confianza, decidimos excluirla del modelo principal y conservarla solo como variable de contexto.Esto no afecta el corazón del modelo. Seguimos teniendo las dimensiones importantes: territorio, ingreso, vivienda, servicios urbanos, e ntorno ambiental, movilidad, edad, ocupación y gobernanza.
# Eliminamos niveles vacíos de factores que quedaron después de limpiar porque nos salían organizados de forma que nos confundían.
datos_modelo_final <- droplevels(datos_modelo_final)
set.seed(123) #para hacer la división aleatoria repetible.
# Calculamos el número total de observaciones.
n_total <- nrow(datos_modelo_final)
# Usaremos 70% de la base para entrenamiento.
n_train <- round(0.70 * n_total)
# Seleccionamos aleatoriamente las filas que irán a entrenamiento.
indices_train <- sample(
1:n_total,
size = n_train,
replace = FALSE
)
# Train: datos que usará el modelo para aprender.
datos_train <- datos_modelo_final[indices_train, ]
# Test: datos que usaremos después para evaluar el modelo.
datos_test <- datos_modelo_final[-indices_train, ]
# Revisamos cuántas observaciones quedaron en cada conjunto.
dim(datos_train)
## [1] 2389 24
dim(datos_test)
## [1] 1024 24
# Revisamos que train + test sumen el total de la base final.
nrow(datos_train) + nrow(datos_test)
## [1] 3413
# Revisamos la distribución del target en train.
round(prop.table(table(datos_train$al_menos_un_problema_agua)) * 100, 2)
##
## 0 1
## 45.5 54.5
# Revisamos la distribución del target en test.
round(prop.table(table(datos_test$al_menos_un_problema_agua)) * 100, 2)
##
## 0 1
## 42.87 57.13
# ------------------------------------------------------------
# 5.1 Ajustar modelo de regresión logística
# ------------------------------------------------------------
# porque nuestra variable dependiente es binaria: 0 = no reportó problemas de agua, 1 = sí reportó al menos un problema.
modelo_logistico <- glm(
al_menos_un_problema_agua ~ .,
data = datos_train,
family = binomial
)
# Mostramos el resumen del modelo.
# Aquí podremos ver coeficientes, errores estándar, valores z y p-values.
summary(modelo_logistico)
##
## Call:
## glm(formula = al_menos_un_problema_agua ~ ., family = binomial,
## data = datos_train)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.292187 1.068385 1.209 0.226480
## nom_mun_mvCadereyta Jiménez -0.724251 0.253369 -2.858 0.004257 **
## nom_mun_mvCiénega de Flores 0.082537 0.395235 0.209 0.834580
## nom_mun_mvEl Carmen -1.075988 0.351250 -3.063 0.002189 **
## nom_mun_mvGarcía 0.079968 0.259681 0.308 0.758124
## nom_mun_mvGeneral Escobedo -0.787787 0.243536 -3.235 0.001217 **
## nom_mun_mvGeneral Zuazua -0.861273 0.323342 -2.664 0.007730 **
## nom_mun_mvGuadalupe -0.214120 0.252559 -0.848 0.396549
## nom_mun_mvHidalgo -0.316189 0.515944 -0.613 0.539986
## nom_mun_mvJuárez -0.806990 0.251292 -3.211 0.001321 **
## nom_mun_mvMonterrey -1.807559 0.292082 -6.189 6.07e-10 ***
## nom_mun_mvPesquería -0.300267 0.332095 -0.904 0.365911
## nom_mun_mvSalinas Victoria -0.788401 0.420077 -1.877 0.060546 .
## nom_mun_mvSan Nicolás de los Garza -0.424023 0.249559 -1.699 0.089303 .
## nom_mun_mvSan Pedro Garza García -1.241687 0.255427 -4.861 1.17e-06 ***
## nom_mun_mvSanta Catarina -0.575905 0.253081 -2.276 0.022872 *
## nom_mun_mvSantiago -1.425448 0.276370 -5.158 2.50e-07 ***
## p16710 13.585785 352.681216 0.039 0.969272
## p16711 -0.221732 1.329364 -0.167 0.867531
## p16712 1.275579 1.233179 1.034 0.300958
## p1672 0.871943 0.307924 2.832 0.004630 **
## p1673 0.320967 0.304832 1.053 0.292373
## p1674 0.142168 0.318069 0.447 0.654894
## p1675 0.075009 0.362148 0.207 0.835914
## p1676 0.241422 0.536293 0.450 0.652590
## p1677 1.163275 0.692491 1.680 0.092988 .
## p1678 1.648564 0.959111 1.719 0.085642 .
## p1679 2.211981 1.225259 1.805 0.071025 .
## p882 0.277517 0.149391 1.858 0.063219 .
## p883 0.263068 0.194162 1.355 0.175454
## p884 0.358592 0.410976 0.873 0.382915
## p522 -0.191565 0.204126 -0.938 0.348005
## p523 -0.519271 0.184506 -2.814 0.004887 **
## p524 -0.302067 0.185738 -1.626 0.103885
## p525 -0.504132 0.154736 -3.258 0.001122 **
## p526 -0.104191 0.251944 -0.414 0.679203
## p527 -0.842330 0.308400 -2.731 0.006309 **
## p528 -0.378140 1.279064 -0.296 0.767507
## p529 -0.617523 0.307319 -2.009 0.044496 *
## cp1 -0.048295 0.039867 -1.211 0.225746
## cp52 1.234135 0.661440 1.866 0.062065 .
## cp53 -0.083136 0.180903 -0.460 0.645833
## p591 0.158599 0.148953 1.065 0.286985
## p612 0.323361 0.140234 2.306 0.021118 *
## p613 0.271054 0.138699 1.954 0.050671 .
## p614 0.326973 0.259599 1.260 0.207839
## p62_110 -0.417649 0.384679 -1.086 0.277608
## p62_12 -0.384662 0.496803 -0.774 0.438769
## p62_13 -0.631331 0.486231 -1.298 0.194143
## p62_14 -0.348938 0.439461 -0.794 0.427187
## p62_15 -0.259643 0.358019 -0.725 0.468317
## p62_16 -0.390323 0.364016 -1.072 0.283601
## p62_17 -0.423884 0.344063 -1.232 0.217950
## p62_18 -0.332246 0.341397 -0.973 0.330457
## p62_19 -0.473175 0.359258 -1.317 0.187809
## p62_210 0.139389 0.442549 0.315 0.752786
## p62_22 -0.151281 0.526744 -0.287 0.773959
## p62_23 0.165138 0.480544 0.344 0.731111
## p62_24 -0.161417 0.427019 -0.378 0.705424
## p62_25 0.490577 0.374824 1.309 0.190596
## p62_26 0.320581 0.383413 0.836 0.403085
## p62_27 0.343937 0.372260 0.924 0.355529
## p62_28 0.265301 0.372628 0.712 0.476480
## p62_29 0.458361 0.391297 1.171 0.241442
## p62_410 -0.456807 0.339268 -1.346 0.178157
## p62_42 0.548928 0.439217 1.250 0.211377
## p62_43 0.061083 0.371059 0.165 0.869245
## p62_44 -0.183609 0.361701 -0.508 0.611716
## p62_45 0.328507 0.301455 1.090 0.275828
## p62_46 -0.098898 0.306236 -0.323 0.746735
## p62_47 0.336448 0.296256 1.136 0.256096
## p62_48 -0.032387 0.282203 -0.115 0.908631
## p62_49 -0.043127 0.296625 -0.145 0.884401
## p62_510 -0.767007 0.917037 -0.836 0.402931
## p62_52 0.920319 1.289458 0.714 0.475397
## p62_53 0.920714 1.682125 0.547 0.584137
## p62_54 0.631210 1.084711 0.582 0.560624
## p62_55 0.479813 0.985594 0.487 0.626381
## p62_56 -0.310823 0.955926 -0.325 0.745065
## p62_57 -0.073937 0.935319 -0.079 0.936992
## p62_58 -0.250276 0.920590 -0.272 0.785726
## p62_59 -0.630698 0.916800 -0.688 0.491494
## p6517 -0.357409 0.247502 -1.444 0.148721
## p652 -0.282053 0.147428 -1.913 0.055727 .
## p653 -0.107873 0.231965 -0.465 0.641904
## p654 -0.006026 0.151385 -0.040 0.968249
## p655 0.510495 0.260445 1.960 0.049986 *
## p656 -0.100419 0.214696 -0.468 0.639978
## p65Otro -0.821910 0.650547 -1.263 0.206440
## p811 -0.285591 0.141934 -2.012 0.044206 *
## p83_12 0.480071 0.143968 3.335 0.000854 ***
## p83_13 0.057605 0.153714 0.375 0.707841
## p83_14 0.711933 0.390659 1.822 0.068396 .
## usa_transporte_publico1 0.278125 0.108027 2.575 0.010036 *
## p49 0.073160 0.065181 1.122 0.261685
## p12 0.054590 0.324220 0.168 0.866290
## p13 -0.764228 0.339347 -2.252 0.024319 *
## p14 -0.162474 0.154473 -1.052 0.292894
## p15 0.060682 0.132382 0.458 0.646674
## p16 -0.369429 0.598109 -0.618 0.536798
## p17 -0.228966 0.183117 -1.250 0.211161
## p18 0.254031 0.346039 0.734 0.462882
## cp4_1 -0.008314 0.003962 -2.098 0.035876 *
## p1401 0.023547 0.135222 0.174 0.861760
## p1432 -0.561140 0.161063 -3.484 0.000494 ***
## p1433 -0.701398 0.160964 -4.357 1.32e-05 ***
## p1434 -0.403692 0.198002 -2.039 0.041468 *
## p1435 -0.113891 0.248170 -0.459 0.646289
## p1602 0.185400 0.156377 1.186 0.235783
## p1603 0.437495 0.161146 2.715 0.006630 **
## p1604 0.287801 0.180450 1.595 0.110733
## p161_91 0.778686 0.143308 5.434 5.52e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 3292.5 on 2388 degrees of freedom
## Residual deviance: 2651.9 on 2277 degrees of freedom
## AIC: 2875.9
##
## Number of Fisher Scoring iterations: 12
# Revisamos si el modelo logró converger.
# TRUE significa que el modelo se ajustó correctamente.
modelo_logistico$converged
## [1] TRUE
# ------------------------------------------------------------
# 5.2 Generar probabilidades predichas en test
# ------------------------------------------------------------
probabilidades_test <- predict(
modelo_logistico,
newdata = datos_test,
type = "response" #indica que queremos probabilidades entre 0 y 1.
)
# Revisamos un resumen de las probabilidades predichas.
summary(probabilidades_test)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0441 0.3709 0.5662 0.5546 0.7482 1.0000
# Revisamos si alguna predicción salió como NA.
sum(is.na(probabilidades_test))
## [1] 0
# ------------------------------------------------------------
# 5.4 Convertir probabilidades a clasificación 0/1
# ------------------------------------------------------------
# Usamos 0.5 como punto de corte:
# si la probabilidad es mayor o igual a 0.5, clasificamos como 1;
# si es menor a 0.5, clasificamos como 0.
predicciones_test <- ifelse(
probabilidades_test >= 0.5,
1,
0
)
# Revisamos cuántos casos fueron clasificados como 0 y como 1.
table(predicciones_test, useNA = "ifany")
## predicciones_test
## 0 1
## 413 611
# ------------------------------------------------------------
# 5.5 Crear tabla con resultado real y predicción
# ------------------------------------------------------------
# Creamos una tabla sencilla para comparar después
# el valor real contra la predicción del modelo.
resultados_test <- data.frame(
real = datos_test$al_menos_un_problema_agua,
probabilidad_predicha = probabilidades_test,
prediccion = predicciones_test
)
# Revisamos las primeras filas.
head(resultados_test)
## real probabilidad_predicha prediccion
## 3 1 0.8077585 1
## 12 0 0.5968653 1
## 23 1 0.6431269 1
## 25 1 0.8717026 1
## 26 0 0.2298130 0
## 33 0 0.8345945 1
# ------------------------------------------------------------
# 6.1. Pasos iniciales
# ------------------------------------------------------------
# Usaremos 5 folds.
# Esto significa que la base se divide en 5 partes.
# En cada vuelta, el modelo entrena con 4 partes y se prueba con 1.
k <- 5
set.seed(123)
# Creamos un vector que asigna cada fila a uno de los 5 folds.
folds <- sample(
rep(1:k, length.out = nrow(datos_modelo_final))
)
# Aquí guardaremos el accuracy de cada fold.
accuracy_folds <- numeric(k)
for (i in 1:k) {
# Datos de entrenamiento: todos menos el fold i.
train_cv <- datos_modelo_final[folds != i, ]
# Datos de validación: solo el fold i.
test_cv <- datos_modelo_final[folds == i, ]
# Ajustamos el modelo con los datos de entrenamiento de esta vuelta.
modelo_cv <- glm(
al_menos_un_problema_agua ~ .,
data = train_cv,
family = binomial
)
# Calculamos probabilidades para el fold de validación.
probabilidades_cv <- predict(
modelo_cv,
newdata = test_cv,
type = "response"
)
# Convertimos probabilidades a clasificación 0/1 usando 0.5.
predicciones_cv <- ifelse(
probabilidades_cv >= 0.5,
1,
0
)
# Calculamos accuracy del fold:
# proporción de casos correctamente clasificados.
accuracy_folds[i] <- mean(
predicciones_cv == test_cv$al_menos_un_problema_agua
)
}
# ------------------------------------------------------------
# 6.2. Revisar resultados de validación cruzada
# ------------------------------------------------------------
# Accuracy obtenido en cada fold.
accuracy_folds
## [1] 0.6705710 0.6808199 0.6778917 0.6730205 0.6832845
# Accuracy promedio de los 5 folds.
mean(accuracy_folds)
## [1] 0.6771175
# Desviación estándar de los accuracy.
# Si es baja, significa que el modelo fue relativamente estable.
sd(accuracy_folds)
## [1] 0.005291036
# Creamos una tabla sencilla para documentar resultados.
resultados_cv <- data.frame(
fold = 1:k,
accuracy = accuracy_folds
)
# Mostramos la tabla.
resultados_cv
## fold accuracy
## 1 1 0.6705710
## 2 2 0.6808199
## 3 3 0.6778917
## 4 4 0.6730205
## 5 5 0.6832845
# -----------------------------------------------------------
# 7.1 Crear matriz de confusión
# ------------------------------------------------------------
# La matriz de confusión compara:
# - el valor real observado
# - contra la predicción del modelo
# Usamos factor con niveles 0 y 1 para asegurar que la tabla tenga ambas categorías.
real_test <- factor(resultados_test$real, levels = c(0, 1))
prediccion_test <- factor(resultados_test$prediccion, levels = c(0, 1))
matriz_confusion <- table(
Real = real_test,
Predicho = prediccion_test
)
matriz_confusion
## Predicho
## Real 0 1
## 0 261 178
## 1 152 433
# ------------------------------------------------------------
# 7.2 Calcular accuracy
# ------------------------------------------------------------
# Accuracy = proporción total de casos correctamente clasificados.
# Es decir, cuántas veces el modelo acertó en general.
accuracy_test <- sum(diag(matriz_confusion)) / sum(matriz_confusion)
accuracy_test
## [1] 0.6777344
# ------------------------------------------------------------
# 7.3 Calcular sensibilidad
# ------------------------------------------------------------
# Sensibilidad = de todos los hogares que SÍ tenían al menos un problema de agua, qué proporción fue identificada correctamente por el modelo.
sensibilidad <- matriz_confusion["1", "1"] / sum(matriz_confusion["1", ])
sensibilidad
## [1] 0.7401709
# ------------------------------------------------------------
# 7.4 Calcular especificidad
# ------------------------------------------------------------
# Especificidad = de todos los hogares que NO tenían problemas de agua, qué proporción fue identificada correctamente por el modelo.
especificidad <- matriz_confusion["0", "0"] / sum(matriz_confusion["0", ])
especificidad
## [1] 0.594533
# ------------------------------------------------------------
# 7.5 Tabla resumen de métricas
# ------------------------------------------------------------
# Creamos una tabla sencilla con las métricas principales.
metricas_modelo <- data.frame(
metrica = c("Accuracy", "Sensibilidad", "Especificidad"),
valor = c(accuracy_test, sensibilidad, especificidad)
)
metricas_modelo
## metrica valor
## 1 Accuracy 0.6777344
## 2 Sensibilidad 0.7401709
## 3 Especificidad 0.5945330
# ============================================================
# GUARDAR VERSIÓN OFICIAL PARA EL EQUIPO
# ============================================================
# Creamos una carpeta para guardar la versión final del proyecto.
dir.create("version_oficial_modelo", showWarnings = FALSE)
# Guardamos la base final ya limpia y filtrada.
saveRDS(
datos_modelo_final,
"version_oficial_modelo/datos_modelo_final.rds"
)
# Guardamos el conjunto de entrenamiento oficial.
saveRDS(
datos_train,
"version_oficial_modelo/datos_train.rds"
)
# Guardamos el conjunto de prueba oficial.
saveRDS(
datos_test,
"version_oficial_modelo/datos_test.rds"
)
# Guardamos también resultados útiles de nuestro modelo base.
saveRDS(
resultados_test,
"version_oficial_modelo/resultados_test_logistico.rds"
)
saveRDS(
metricas_modelo,
"version_oficial_modelo/metricas_modelo_logistico.rds"
)
saveRDS(
matriz_confusion,
"version_oficial_modelo/matriz_confusion_logistico.rds"
)
# Guardamos un resumen para verificar que todo se cargue igual en otra computadora.
resumen_version <- list(
dimensiones_base_final = dim(datos_modelo_final),
dimensiones_train = dim(datos_train),
dimensiones_test = dim(datos_test),
distribucion_train = table(datos_train$al_menos_un_problema_agua),
distribucion_test = table(datos_test$al_menos_un_problema_agua),
metricas_modelo = metricas_modelo
)
saveRDS(
resumen_version,
"version_oficial_modelo/resumen_version_oficial.rds"
)
#CARGAR BASES DE DATOS
datos_modelo_final <- readRDS("datos_modelo_final.rds")
datos_test <- readRDS("datos_test.rds")
head(datos_modelo_final)
## al_menos_un_problema_agua nom_mun_mv p167 p88 p52 cp1 cp5 p59 p61 p62_1
## 1 0 Apodaca 4 2 1 4 1 0 3 9
## 2 0 Apodaca 3 2 7 3 1 0 4 5
## 3 1 Apodaca 2 2 4 3 1 0 2 9
## 10 0 Apodaca 3 1 1 2 1 0 1 8
## 11 1 Apodaca 2 3 1 7 1 0 1 8
## 12 0 Apodaca 4 2 1 2 1 0 3 7
## p62_2 p62_4 p62_5 p65 p81 p83_1 usa_transporte_publico p49 p1 cp4_1 p140
## 1 9 9 9 17 1 2 1 1 1 48 1
## 2 7 7 8 6 1 3 0 1 5 48 1
## 3 9 9 9 17 1 3 0 0 5 79 1
## 10 8 7 9 1 1 3 0 1 7 62 1
## 11 6 8 8 4 0 2 0 1 5 56 0
## 12 8 8 8 2 1 2 1 0 1 68 1
## p143 p160 p161_9
## 1 1 1 0
## 2 2 2 0
## 3 1 2 1
## 10 3 2 0
## 11 3 4 0
## 12 3 1 0
head(datos_test)
## al_menos_un_problema_agua nom_mun_mv p167 p88 p52 cp1 cp5 p59 p61 p62_1
## 3 1 Apodaca 2 2 4 3 1 0 2 9
## 12 0 Apodaca 4 2 1 2 1 0 3 7
## 23 1 Apodaca 4 2 1 3 1 0 2 9
## 25 1 Apodaca 4 1 1 2 1 0 2 9
## 26 0 Apodaca 5 2 1 5 1 0 3 10
## 33 0 Apodaca 2 3 6 3 1 0 3 8
## p62_2 p62_4 p62_5 p65 p81 p83_1 usa_transporte_publico p49 p1 cp4_1 p140
## 3 9 9 9 17 1 3 0 0 5 79 1
## 12 8 8 8 2 1 2 1 0 1 68 1
## 23 8 6 9 5 1 2 0 1 5 80 1
## 25 9 9 9 17 1 4 0 1 5 42 1
## 26 10 10 10 17 1 3 0 2 1 29 0
## 33 8 5 10 4 1 2 1 0 1 36 1
## p143 p160 p161_9
## 3 1 2 1
## 12 3 1 0
## 23 2 1 0
## 25 1 4 1
## 26 3 1 0
## 33 3 2 0
##Torneo-de-Modelos-y-Flexibilidad–Selección-del-Modelo-
#PASO 0. CREACION DEL TRAIN SET CON BASE A LA BASE GENERAL Y EL SET TEST
datos_train <- datos_modelo_final[!(rownames(datos_modelo_final) %in% rownames(datos_test)), ]
head(datos_train)
## al_menos_un_problema_agua nom_mun_mv p167 p88 p52 cp1 cp5 p59 p61 p62_1
## 1 0 Apodaca 4 2 1 4 1 0 3 9
## 2 0 Apodaca 3 2 7 3 1 0 4 5
## 10 0 Apodaca 3 1 1 2 1 0 1 8
## 11 1 Apodaca 2 3 1 7 1 0 1 8
## 13 1 Apodaca 2 2 1 6 1 0 1 8
## 15 0 Apodaca 5 2 1 4 1 0 2 9
## p62_2 p62_4 p62_5 p65 p81 p83_1 usa_transporte_publico p49 p1 cp4_1 p140
## 1 9 9 9 17 1 2 1 1 1 48 1
## 2 7 7 8 6 1 3 0 1 5 48 1
## 10 8 7 9 1 1 3 0 1 7 62 1
## 11 6 8 8 4 0 2 0 1 5 56 0
## 13 8 6 6 2 1 2 0 1 5 68 1
## 15 10 10 10 1 1 3 0 2 1 25 1
## p143 p160 p161_9
## 1 1 1 0
## 2 2 2 0
## 10 3 2 0
## 11 3 4 0
## 13 3 4 0
## 15 3 4 1
dim(datos_modelo_final)
## [1] 3413 24
dim(datos_train)
## [1] 2389 24
dim(datos_test)
## [1] 1024 24
#PASO N.1 ACTIVIDAD 3 - Expandir el repertorio de modelos
#Como vimos en la actividad anterior, nuestra variable dependiente es "al_menos_un_problema_de_agua" esta es una variable binaria, donde 0 = No y 1 = Si. Por lo tanto se trabajara con los siguientes modelos: Regresión Logística con términos polinomiales, GAMs y Árboles de Clasificación.
#PASO N.2 ACTIVIDAD 3 - Validación Cruzada e Hiperparámetros
#En este paso vamos a crear los modelos matematicos con validacion cruzada con nuestro conjunto de entrenamiento, ajustando sus hiperparametros.Los modelos que se trabajaran son: Regresion Logisitca con Terminos Polinomiales, GAMs y Arboles de Clasificacion
#CV
# 1. Asegurar la instalación y carga de la librería para el cálculo del ROC
if(!require(pROC)) install.packages("pROC")
## Cargando paquete requerido: pROC
## Warning: package 'pROC' was built under R version 4.5.3
## Type 'citation("pROC")' for a citation.
##
## Adjuntando el paquete: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
library(pROC)
library(boot)
library(ggplot2)
# --- PASO N.2. REGRESION LOGISTICA CON TERMINOS POLINOMIALES ---
set.seed(123) # Fija la semilla para
# Evaluamos las dimensiones usando las variables del train set, aplicando el polinomio de grado 2 a la variable cuantitativa de edad (cp4_1).
modelo_log_poly <- glm(al_menos_un_problema_agua ~ nom_mun_mv + p167 + p88 + p52 + p59 + p61 + p140 + poly(cp4_1, 2), data = datos_train, family = binomial(link = "logit"))
summary(modelo_log_poly)
##
## Call:
## glm(formula = al_menos_un_problema_agua ~ nom_mun_mv + p167 +
## p88 + p52 + p59 + p61 + p140 + poly(cp4_1, 2), family = binomial(link = "logit"),
## data = datos_train)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.23193 0.35700 0.650 0.515902
## nom_mun_mvCadereyta Jiménez -0.54804 0.23109 -2.372 0.017714 *
## nom_mun_mvCiénega de Flores 0.15323 0.37607 0.407 0.683686
## nom_mun_mvEl Carmen -0.89494 0.32376 -2.764 0.005706 **
## nom_mun_mvGarcía 0.16661 0.23905 0.697 0.485816
## nom_mun_mvGeneral Escobedo -0.68512 0.22745 -3.012 0.002594 **
## nom_mun_mvGeneral Zuazua -0.62114 0.29552 -2.102 0.035563 *
## nom_mun_mvGuadalupe -0.24021 0.23339 -1.029 0.303384
## nom_mun_mvHidalgo -0.57635 0.48790 -1.181 0.237492
## nom_mun_mvJuárez -0.77916 0.23199 -3.359 0.000784 ***
## nom_mun_mvMonterrey -1.64412 0.27542 -5.970 2.38e-09 ***
## nom_mun_mvPesquería -0.23381 0.30695 -0.762 0.446226
## nom_mun_mvSalinas Victoria -0.55253 0.38583 -1.432 0.152131
## nom_mun_mvSan Nicolás de los Garza -0.48266 0.23131 -2.087 0.036922 *
## nom_mun_mvSan Pedro Garza García -1.28548 0.23164 -5.550 2.86e-08 ***
## nom_mun_mvSanta Catarina -0.51870 0.23263 -2.230 0.025765 *
## nom_mun_mvSantiago -1.44159 0.25401 -5.675 1.39e-08 ***
## p16710 13.58339 331.75038 0.041 0.967340
## p16711 -0.86152 1.27927 -0.673 0.500665
## p16712 1.37136 1.20761 1.136 0.256127
## p1672 0.88408 0.28968 3.052 0.002274 **
## p1673 0.16786 0.28527 0.588 0.556241
## p1674 -0.18239 0.29702 -0.614 0.539165
## p1675 -0.36022 0.33806 -1.066 0.286627
## p1676 -0.17553 0.50743 -0.346 0.729402
## p1677 0.83706 0.66929 1.251 0.211058
## p1678 1.26457 0.87998 1.437 0.150705
## p1679 1.59085 1.15828 1.373 0.169609
## p882 0.09906 0.13275 0.746 0.455522
## p883 0.25170 0.17297 1.455 0.145623
## p884 0.33728 0.37765 0.893 0.371792
## p522 -0.27525 0.19028 -1.447 0.148028
## p523 -0.60422 0.17448 -3.463 0.000534 ***
## p524 -0.16818 0.17125 -0.982 0.326070
## p525 -0.54089 0.14194 -3.811 0.000139 ***
## p526 -0.23023 0.22985 -1.002 0.316524
## p527 -1.01397 0.29217 -3.471 0.000519 ***
## p528 0.06110 1.26914 0.048 0.961601
## p529 -0.81155 0.28864 -2.812 0.004929 **
## p591 0.26792 0.13932 1.923 0.054474 .
## p612 0.56446 0.12548 4.498 6.85e-06 ***
## p613 0.49891 0.12168 4.100 4.13e-05 ***
## p614 0.56480 0.23498 2.404 0.016232 *
## p1401 -0.01890 0.10379 -0.182 0.855540
## poly(cp4_1, 2)1 -10.18437 2.49408 -4.083 4.44e-05 ***
## poly(cp4_1, 2)2 -7.80994 2.28037 -3.425 0.000615 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 3292.5 on 2388 degrees of freedom
## Residual deviance: 2892.1 on 2343 degrees of freedom
## AIC: 2984.1
##
## Number of Fisher Scoring iterations: 12
# Ejecutamos la validación cruzada de 5 pliegues (K = 5) sobre el modelo que acabamos de crear
cv_poly2 <- cv.glm(datos_train, modelo_log_poly, K = 5)
# Desplegamos en la consola el error estimado por la validación cruzada
print("Error promedio (MSE) del Grado 2 bajo Validación Cruzada:")
## [1] "Error promedio (MSE) del Grado 2 bajo Validación Cruzada:"
print(cv_poly2$delta[1])
## [1] 0.2194184
# Se intenta con un grado mas (3)
set.seed(123)
modelo_log_poly3 <- glm(al_menos_un_problema_agua ~ nom_mun_mv + p167 + p88 + p52 + p59 + p61 + p140 + poly(cp4_1, 3), data = datos_train, family = binomial(link = "logit"))
summary(modelo_log_poly3)
##
## Call:
## glm(formula = al_menos_un_problema_agua ~ nom_mun_mv + p167 +
## p88 + p52 + p59 + p61 + p140 + poly(cp4_1, 3), family = binomial(link = "logit"),
## data = datos_train)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.25744 0.35704 0.721 0.470882
## nom_mun_mvCadereyta Jiménez -0.55206 0.23119 -2.388 0.016945 *
## nom_mun_mvCiénega de Flores 0.14482 0.37656 0.385 0.700542
## nom_mun_mvEl Carmen -0.91045 0.32463 -2.805 0.005038 **
## nom_mun_mvGarcía 0.16848 0.23928 0.704 0.481364
## nom_mun_mvGeneral Escobedo -0.68589 0.22752 -3.015 0.002573 **
## nom_mun_mvGeneral Zuazua -0.60532 0.29606 -2.045 0.040893 *
## nom_mun_mvGuadalupe -0.24721 0.23324 -1.060 0.289191
## nom_mun_mvHidalgo -0.55351 0.48838 -1.133 0.257064
## nom_mun_mvJuárez -0.78413 0.23213 -3.378 0.000730 ***
## nom_mun_mvMonterrey -1.64681 0.27545 -5.979 2.25e-09 ***
## nom_mun_mvPesquería -0.24636 0.30733 -0.802 0.422767
## nom_mun_mvSalinas Victoria -0.56572 0.38653 -1.464 0.143302
## nom_mun_mvSan Nicolás de los Garza -0.47485 0.23138 -2.052 0.040144 *
## nom_mun_mvSan Pedro Garza García -1.27100 0.23180 -5.483 4.17e-08 ***
## nom_mun_mvSanta Catarina -0.50409 0.23286 -2.165 0.030406 *
## nom_mun_mvSantiago -1.44057 0.25396 -5.673 1.41e-08 ***
## p16710 13.48392 332.75034 0.041 0.967676
## p16711 -0.91259 1.28483 -0.710 0.477529
## p16712 1.30856 1.20966 1.082 0.279357
## p1672 0.86482 0.28949 2.987 0.002814 **
## p1673 0.14317 0.28533 0.502 0.615823
## p1674 -0.20815 0.29714 -0.701 0.483614
## p1675 -0.39400 0.33851 -1.164 0.244459
## p1676 -0.20890 0.50924 -0.410 0.681649
## p1677 0.81953 0.66971 1.224 0.221058
## p1678 1.26324 0.87979 1.436 0.151046
## p1679 1.57242 1.16038 1.355 0.175389
## p882 0.09646 0.13292 0.726 0.468018
## p883 0.25120 0.17314 1.451 0.146829
## p884 0.32691 0.37752 0.866 0.386527
## p522 -0.27943 0.19062 -1.466 0.142684
## p523 -0.58842 0.17454 -3.371 0.000748 ***
## p524 -0.15481 0.17158 -0.902 0.366910
## p525 -0.54522 0.14216 -3.835 0.000125 ***
## p526 -0.22573 0.23010 -0.981 0.326580
## p527 -1.00396 0.29252 -3.432 0.000599 ***
## p528 -0.01332 1.24205 -0.011 0.991443
## p529 -0.80014 0.28878 -2.771 0.005593 **
## p591 0.26164 0.13948 1.876 0.060680 .
## p612 0.56366 0.12551 4.491 7.09e-06 ***
## p613 0.50455 0.12182 4.142 3.44e-05 ***
## p614 0.57016 0.23544 2.422 0.015450 *
## p1401 -0.02456 0.10402 -0.236 0.813381
## poly(cp4_1, 3)1 -10.26182 2.48770 -4.125 3.71e-05 ***
## poly(cp4_1, 3)2 -7.70218 2.25391 -3.417 0.000633 ***
## poly(cp4_1, 3)3 3.82596 2.23666 1.711 0.087160 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 3292.5 on 2388 degrees of freedom
## Residual deviance: 2889.2 on 2342 degrees of freedom
## AIC: 2983.2
##
## Number of Fisher Scoring iterations: 12
# --- PASO N.3. SE AGREGA LA VALIDACIÓN CRUZADA ---
# Ejecutamos la validación cruzada de 5 pliegues (K = 5) sobre el modelo de grado 3
cv_poly3 <- cv.glm(datos_train, modelo_log_poly3, K = 5)
# Desplegamos en la consola el error estimado por la validación cruzada
print("Error promedio (MSE) del Grado 3 bajo Validación Cruzada:")
## [1] "Error promedio (MSE) del Grado 3 bajo Validación Cruzada:"
print(cv_poly3$delta[1])
## [1] 0.219057
# SE COMPARAN PARA VER CON CUAL NOS QUEDAMOS SIGUIENDO EL PRINCIPIO DE PARSIMONIA
AIC(modelo_log_poly, modelo_log_poly3)
## df AIC
## modelo_log_poly 46 2984.111
## modelo_log_poly3 47 2983.223
#Se concluye que nos quedamos con el grado dos debido a que la comparacion del AIC entre ambos no presenta uan diferencia significativa, entonces nos quedamos con el grado dos porque es menos complejo que el grado 3.
#--------PASO N.4. GAMS------
# Graficamos la edad contra la probabilidad de tener problemas de agua
ggplot(datos_train, aes(x = cp4_1, y = al_menos_un_problema_agua)) +
geom_point(alpha = 0.2, color = "gray") + # Muestra dónde se concentran tus datos
geom_smooth(method = "gam", formula = y ~ s(x), color = "blue", se = TRUE) + # Dibuja la curva real
labs(title = "Relación Visual: Edad vs Problemas de Agua",
x = "Edad (cp4_1)",
y = "Probabilidad de problemas de agua") +
theme_minimal()
library(mgcv)
## Cargando paquete requerido: nlme
## This is mgcv 1.9-4. For overview type '?mgcv'.
library(boot)
set.seed(123) # Para que los 5 pliegues de la CV siempre se partan igual
# 1. Entrenamos el GAM fijando el hiperparámetro k = 4 en el spline de la edad
modelo_gam <- gam(al_menos_un_problema_agua ~ nom_mun_mv + p167 + p88 + p52 + p59 + p61 + p140 + s(cp4_1, k = 4),
data = datos_train,
family = binomial(link = "logit"))
# 2. Ver el resumen estadístico del modelo
summary(modelo_gam)
##
## Family: binomial
## Link function: logit
##
## Formula:
## al_menos_un_problema_agua ~ nom_mun_mv + p167 + p88 + p52 + p59 +
## p61 + p140 + s(cp4_1, k = 4)
##
## Parametric coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.432e-01 3.569e-01 0.681 0.495592
## nom_mun_mvCadereyta Jiménez -5.511e-01 2.310e-01 -2.386 0.017043 *
## nom_mun_mvCiénega de Flores 1.562e-01 3.761e-01 0.415 0.677898
## nom_mun_mvEl Carmen -8.993e-01 3.239e-01 -2.776 0.005495 **
## nom_mun_mvGarcía 1.667e-01 2.390e-01 0.697 0.485528
## nom_mun_mvGeneral Escobedo -6.869e-01 2.273e-01 -3.022 0.002512 **
## nom_mun_mvGeneral Zuazua -6.151e-01 2.957e-01 -2.080 0.037510 *
## nom_mun_mvGuadalupe -2.480e-01 2.331e-01 -1.064 0.287334
## nom_mun_mvHidalgo -5.608e-01 4.882e-01 -1.149 0.250626
## nom_mun_mvJuárez -7.785e-01 2.319e-01 -3.357 0.000788 ***
## nom_mun_mvMonterrey -1.647e+00 2.752e-01 -5.985 2.17e-09 ***
## nom_mun_mvPesquería -2.398e-01 3.068e-01 -0.781 0.434532
## nom_mun_mvSalinas Victoria -5.562e-01 3.859e-01 -1.441 0.149508
## nom_mun_mvSan Nicolás de los Garza -4.812e-01 2.312e-01 -2.081 0.037419 *
## nom_mun_mvSan Pedro Garza García -1.281e+00 2.316e-01 -5.528 3.23e-08 ***
## nom_mun_mvSanta Catarina -5.126e-01 2.326e-01 -2.204 0.027523 *
## nom_mun_mvSantiago -1.446e+00 2.538e-01 -5.696 1.23e-08 ***
## p16710 2.453e+01 8.075e+04 0.000 0.999758
## p16711 -8.683e-01 1.281e+00 -0.678 0.497953
## p16712 1.352e+00 1.209e+00 1.118 0.263459
## p1672 8.751e-01 2.895e-01 3.023 0.002506 **
## p1673 1.618e-01 2.852e-01 0.567 0.570393
## p1674 -1.870e-01 2.970e-01 -0.630 0.529017
## p1675 -3.670e-01 3.382e-01 -1.085 0.277822
## p1676 -1.782e-01 5.082e-01 -0.351 0.725797
## p1677 8.373e-01 6.695e-01 1.251 0.211059
## p1678 1.282e+00 8.800e-01 1.456 0.145306
## p1679 1.578e+00 1.159e+00 1.362 0.173196
## p882 9.700e-02 1.328e-01 0.731 0.464977
## p883 2.520e-01 1.729e-01 1.457 0.145139
## p884 3.335e-01 3.773e-01 0.884 0.376761
## p522 -2.747e-01 1.904e-01 -1.443 0.149020
## p523 -6.026e-01 1.742e-01 -3.459 0.000543 ***
## p524 -1.643e-01 1.713e-01 -0.959 0.337476
## p525 -5.447e-01 1.420e-01 -3.837 0.000125 ***
## p526 -2.302e-01 2.299e-01 -1.001 0.316631
## p527 -1.015e+00 2.923e-01 -3.471 0.000519 ***
## p528 1.149e-02 1.247e+00 0.009 0.992645
## p529 -8.067e-01 2.884e-01 -2.797 0.005158 **
## p591 2.640e-01 1.393e-01 1.895 0.058094 .
## p612 5.639e-01 1.254e-01 4.497 6.90e-06 ***
## p613 4.995e-01 1.216e-01 4.106 4.03e-05 ***
## p614 5.665e-01 2.350e-01 2.411 0.015920 *
## p1401 -2.223e-02 1.038e-01 -0.214 0.830429
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Approximate significance of smooth terms:
## edf Ref.df Chi.sq p-value
## s(cp4_1) 2.419 2.766 28.35 1.03e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## R-sq.(adj) = 0.142 Deviance explained = 12.2%
## UBRE = 0.24888 Scale est. = 1 n = 2389
# 3. Ejecutamos la Validación Cruzada de 5 (K = 5)
cv_gam <- cv.glm(datos_train, modelo_gam, K = 5)
#------ PASO N.5. ARBOL DE DECISION------
# ENTRENAMIENTO
if(!require(rpart)) install.packages
## Cargando paquete requerido: rpart
if(!require(rpart.plot)) install.packages("rpart.plot")
## Cargando paquete requerido: rpart.plot
## Warning: package 'rpart.plot' was built under R version 4.5.3
library(rpart)
library(rpart.plot)
set.seed(123)
modelo_arbol_agua <- rpart(al_menos_un_problema_agua ~ nom_mun_mv + p167 + p88 + p52 + p59 + p61 + p140 + cp4_1,
data = datos_train,
method = "class",
control = rpart.control(cp = 0.01, maxdepth = 4, xval = 5))
printcp(modelo_arbol_agua)
##
## Classification tree:
## rpart(formula = al_menos_un_problema_agua ~ nom_mun_mv + p167 +
## p88 + p52 + p59 + p61 + p140 + cp4_1, data = datos_train,
## method = "class", control = rpart.control(cp = 0.01, maxdepth = 4,
## xval = 5))
##
## Variables actually used in tree construction:
## [1] nom_mun_mv
##
## Root node error: 1087/2389 = 0.455
##
## n= 2389
##
## CP nsplit rel error xerror xstd
## 1 0.20239 0 1.00000 1.00000 0.022391
## 2 0.01000 1 0.79761 0.80221 0.021648
#PASO N.6. ACTIVIDAD 3 - el Enfrentamiento Final (Test Set)
if(!require(pROC)) install.packages("pROC")
if(!require(caret)) install.packages("caret")
## Cargando paquete requerido: caret
## Warning: package 'caret' was built under R version 4.5.3
## Cargando paquete requerido: lattice
##
## Adjuntando el paquete: 'lattice'
## The following object is masked from 'package:boot':
##
## melanoma
if(!require(rpart)) install.packages("rpart")
library(pROC)
library(caret)
library(rpart)
y_real <- factor(datos_test$al_menos_un_problema_agua, levels = c("0", "1"))
# PASO N.7. OBTENCION DE PREDICCIONES
#MODELO 1: Regresión Logística Polinomial (Grado 2)
prob_poly <- predict(modelo_log_poly, newdata = datos_test, type = "response")
pred_poly <- factor(ifelse(prob_poly > 0.5, "1", "0"), levels = c("0", "1"))
#MODELO 2: Modelos Aditivos Generalizados (GAM)
prob_gam <- predict(modelo_gam, newdata = datos_test, type = "response")
pred_gam <- factor(ifelse(prob_gam > 0.5, "1", "0"), levels = c("0", "1"))
#MODELO 3: Árbol de Decisión (rpart)
prob_arbol <- predict(modelo_arbol_agua, newdata = datos_test, type = "prob")[, "1"]
pred_arbol <- predict(modelo_arbol_agua, newdata = datos_test, type = "class")
pred_arbol <- factor(pred_arbol, levels = c("0", "1"))
# CALCULO DE CURVAS ROC Y AUC
roc_poly <- roc(datos_test$al_menos_un_problema_agua, prob_poly, quiet = TRUE)
roc_gam <- roc(datos_test$al_menos_un_problema_agua, prob_gam, quiet = TRUE)
roc_arbol <- roc(datos_test$al_menos_un_problema_agua, prob_arbol, quiet = TRUE)
# VISUALIZACION: CURVAS ROC COMPARATIVAS
plot(roc_poly, col = "blue", lwd = 2, main = "Comparativa de Curvas ROC (Test Set)")
plot(roc_gam, col = "red", lwd = 2, add = TRUE)
plot(roc_arbol, col = "green3", lwd = 2, add = TRUE)
abline(a = 0, b = 1, lty = 2, col = "gray")
legend("bottomright",
legend = c(paste("Reg. Logística Poli (AUC =", round(auc(roc_poly), 3), ")"),
paste("GAM (AUC =", round(auc(roc_gam), 3), ")"),
paste("Árbol de Decisión (AUC =", round(auc(roc_arbol), 3), ")")),
col = c("blue", "red", "green3"),
lwd = 2,
bty = "n")
# PASO N.8. MATRICES DE CONFUSIoN Y EXTRACCION DE METRICAS
# Definimos el "1" como la clase positiva de interes (tiene problemas de agua)
cm_poly <- confusionMatrix(pred_poly, y_real, positive = "1")
cm_gam <- confusionMatrix(pred_gam, y_real, positive = "1")
cm_arbol <- confusionMatrix(pred_arbol, y_real, positive = "1")
# Print las matrices completas para un desglose + detallado
print("--- Matriz de Confusión: Regresión Logística ---")
## [1] "--- Matriz de Confusión: Regresión Logística ---"
print(cm_poly$table)
## Reference
## Prediction 0 1
## 0 225 150
## 1 214 435
print("--- Matriz de Confusión: GAM ---")
## [1] "--- Matriz de Confusión: GAM ---"
print(cm_gam$table)
## Reference
## Prediction 0 1
## 0 231 150
## 1 208 435
print("--- Matriz de Confusión: Árbol de Decisión ---")
## [1] "--- Matriz de Confusión: Árbol de Decisión ---"
print(cm_arbol$table)
## Reference
## Prediction 0 1
## 0 150 70
## 1 289 515
# CREACIÓN DE LA TABLA COMPARATIVA FINAL
tabla_comparativa <- data.frame(
Modelo = c("Regresión Logística Polinomial", "GAM (Modelos Aditivos)", "Árbol de Decisión"),
AUC = c(as.numeric(auc(roc_poly)), as.numeric(auc(roc_gam)), as.numeric(auc(roc_arbol))),
Exactitud_Accuracy = c(cm_poly$overall["Accuracy"], cm_gam$overall["Accuracy"], cm_arbol$overall["Accuracy"]),
Sensibilidad = c(cm_poly$byClass["Sensitivity"], cm_gam$byClass["Sensitivity"], cm_arbol$byClass["Sensitivity"]),
Especificidad = c(cm_poly$byClass["Specificity"], cm_gam$byClass["Specificity"], cm_arbol$byClass["Specificity"])
)
tabla_comparativa[, 2:5] <- round(tabla_comparativa[, 2:5], 4)
if(!require(knitr)) install.packages("knitr")
## Cargando paquete requerido: knitr
knitr::kable(tabla_comparativa, caption = "Tabla Comparativa de Rendimiento en el Test Set")
| Modelo | AUC | Exactitud_Accuracy | Sensibilidad | Especificidad |
|---|---|---|---|---|
| Regresión Logística Polinomial | 0.6825 | 0.6445 | 0.7436 | 0.5125 |
| GAM (Modelos Aditivos) | 0.6830 | 0.6504 | 0.7436 | 0.5262 |
| Árbol de Decisión | 0.6110 | 0.6494 | 0.8803 | 0.3417 |
En este caso:
Dados nuestros resultados, podemos clasificar a GAM (Modelos Aditivos) como el mejor modelo. Bajo el contexto de este proyecto, es más favorable prevenir un escenario de accidente de agua (asumir que habrá problemas y que finalmente no ocurran) a ignorar un riesgo real. Por lo tanto, se prioriza la sensibilidad sobre la especificidad; en este sentido, GAM ofrece el balance más óptimo con una sensibilidad de 0.74 y un AUC de 0.6830 (el más elevado y alejado de 0.5, que equivale a decisiones al azar), siendo así el modelo con mejor capacidad de predicción sobre accidente de agua bajo el contexto de esta actividad
Al evaluar los resultados, se observa que no existe sobreajuste debido a que el rendimiento se mantiene estable sin alcanzar una exactitud perfecta. El modelo conserva un margen de error realista y esperado, lo que demuestra que no memorizó los datos de entrenamiento sino que aprendió a generalizar correctamente para ofrecer predicciones adecuadas en el conjunto de prueba.
###NUEVOS RESULTADOS PARA EL ARTÍCULO
# ============================================================
# RESULTADO 1. Verificación de base final y objetos oficiales
# ============================================================
# ------------------------------------------------------------
# 1.1 Revisar objetos principales
# ------------------------------------------------------------
# Revisamos si existen los objetos principales que usamos en el análisis.
exists("datos_modelo_final")
## [1] TRUE
exists("datos_train")
## [1] TRUE
exists("datos_test")
## [1] TRUE
exists("modelo_logistico")
## [1] TRUE
exists("resultados_test")
## [1] TRUE
exists("matriz_confusion")
## [1] TRUE
exists("metricas_modelo")
## [1] TRUE
exists("resultados_cv")
## [1] TRUE
# ------------------------------------------------------------
# 1.2 Revisar dimensiones de las bases
# ------------------------------------------------------------
# Dimensiones de la base final limpia.
dim(datos_modelo_final)
## [1] 3413 24
# Dimensiones del conjunto de entrenamiento.
dim(datos_train)
## [1] 2389 24
# Dimensiones del conjunto de prueba.
dim(datos_test)
## [1] 1024 24
# Revisamos que train + test sumen el total de la base final.
nrow(datos_train) + nrow(datos_test)
## [1] 3413
nrow(datos_modelo_final)
## [1] 3413
# ------------------------------------------------------------
# 1.3 Revisar variables finales
# ------------------------------------------------------------
# Nombres de las variables que quedaron en la base final.
names(datos_modelo_final)
## [1] "al_menos_un_problema_agua" "nom_mun_mv"
## [3] "p167" "p88"
## [5] "p52" "cp1"
## [7] "cp5" "p59"
## [9] "p61" "p62_1"
## [11] "p62_2" "p62_4"
## [13] "p62_5" "p65"
## [15] "p81" "p83_1"
## [17] "usa_transporte_publico" "p49"
## [19] "p1" "cp4_1"
## [21] "p140" "p143"
## [23] "p160" "p161_9"
# Número total de variables.
length(names(datos_modelo_final))
## [1] 24
# ------------------------------------------------------------
# 1.4 Revisar que variables excluidas no estén en la base final
# ------------------------------------------------------------
# Estas variables dieron problemas o no quedaron como predictores principales.
# Revisamos si siguen apareciendo en la base final.
"cp3" %in% names(datos_modelo_final)
## [1] FALSE
"cp8_1" %in% names(datos_modelo_final)
## [1] FALSE
# ------------------------------------------------------------
# 1.5 Revisar variable dependiente
# ------------------------------------------------------------
# Revisamos distribución de la variable dependiente en la base final.
table(datos_modelo_final$al_menos_un_problema_agua)
##
## 0 1
## 1526 1887
# Revisamos proporciones en porcentaje.
round(prop.table(table(datos_modelo_final$al_menos_un_problema_agua)) * 100, 2)
##
## 0 1
## 44.71 55.29
# Revisamos distribución en train.
table(datos_train$al_menos_un_problema_agua)
##
## 0 1
## 1087 1302
round(prop.table(table(datos_train$al_menos_un_problema_agua)) * 100, 2)
##
## 0 1
## 45.5 54.5
# Revisamos distribución en test.
table(datos_test$al_menos_un_problema_agua)
##
## 0 1
## 439 585
round(prop.table(table(datos_test$al_menos_un_problema_agua)) * 100, 2)
##
## 0 1
## 42.87 57.13
# ------------------------------------------------------------
# 1.6 Revisar municipios finales
# ------------------------------------------------------------
# Municipios incluidos en la base final.
sort(unique(datos_modelo_final$nom_mun_mv))
## [1] Apodaca Cadereyta Jiménez Ciénega de Flores
## [4] El Carmen García General Escobedo
## [7] General Zuazua Guadalupe Hidalgo
## [10] Juárez Monterrey Pesquería
## [13] Salinas Victoria San Nicolás de los Garza San Pedro Garza García
## [16] Santa Catarina Santiago
## 17 Levels: Apodaca Cadereyta Jiménez Ciénega de Flores El Carmen ... Santiago
# Número de observaciones por municipio.
table(datos_modelo_final$nom_mun_mv)
##
## Apodaca Cadereyta Jiménez Ciénega de Flores
## 266 289 73
## El Carmen García General Escobedo
## 84 300 279
## General Zuazua Guadalupe Hidalgo
## 104 276 32
## Juárez Monterrey Pesquería
## 262 183 117
## Salinas Victoria San Nicolás de los Garza San Pedro Garza García
## 63 262 285
## Santa Catarina Santiago
## 278 260
# ------------------------------------------------------------
# 1.7 Revisar valores faltantes finales
# ------------------------------------------------------------
# Total de valores faltantes en la base final.
sum(is.na(datos_modelo_final))
## [1] 0
# Valores faltantes por variable.
colSums(is.na(datos_modelo_final))
## al_menos_un_problema_agua nom_mun_mv p167
## 0 0 0
## p88 p52 cp1
## 0 0 0
## cp5 p59 p61
## 0 0 0
## p62_1 p62_2 p62_4
## 0 0 0
## p62_5 p65 p81
## 0 0 0
## p83_1 usa_transporte_publico p49
## 0 0 0
## p1 cp4_1 p140
## 0 0 0
## p143 p160 p161_9
## 0 0 0
# ------------------------------------------------------------
# 1.8 Revisar tipos de variables
# ------------------------------------------------------------
# Revisamos estructura de la base final.
str(datos_modelo_final)
## 'data.frame': 3413 obs. of 24 variables:
## $ al_menos_un_problema_agua: num 0 0 1 0 1 0 1 0 0 1 ...
## $ nom_mun_mv : Factor w/ 17 levels "Apodaca","Cadereyta Jiménez",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ p167 : Factor w/ 12 levels "1","10","11",..: 7 6 5 6 5 7 5 8 7 6 ...
## $ p88 : Factor w/ 4 levels "1","2","3","4": 2 2 2 1 3 2 2 2 2 3 ...
## $ p52 : Factor w/ 9 levels "1","2","3","4",..: 1 7 4 1 1 1 1 1 1 6 ...
## $ cp1 : num 4 3 3 2 7 2 6 4 1 5 ...
## $ cp5 : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 3 1 ...
## $ p59 : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 2 ...
## $ p61 : Factor w/ 4 levels "1","2","3","4": 3 4 2 1 1 3 1 2 2 3 ...
## $ p62_1 : Factor w/ 10 levels "1","10","2","3",..: 10 6 10 9 9 8 9 10 8 6 ...
## $ p62_2 : Factor w/ 10 levels "1","10","2","3",..: 10 8 10 9 7 9 9 2 9 6 ...
## $ p62_4 : Factor w/ 10 levels "1","10","2","3",..: 10 8 10 8 9 9 7 2 9 8 ...
## $ p62_5 : Factor w/ 10 levels "1","10","2","3",..: 10 9 10 10 9 9 7 2 10 9 ...
## $ p65 : Factor w/ 8 levels "1","17","2","3",..: 2 7 2 1 5 3 3 1 5 7 ...
## $ p81 : Factor w/ 2 levels "0","1": 2 2 2 2 1 2 2 2 2 2 ...
## $ p83_1 : Factor w/ 4 levels "1","2","3","4": 2 3 3 3 2 2 2 3 2 2 ...
## $ usa_transporte_publico : Factor w/ 2 levels "0","1": 2 1 1 1 1 2 1 1 1 1 ...
## $ p49 : num 1 1 0 1 1 0 1 2 1 1 ...
## $ p1 : Factor w/ 8 levels "1","2","3","4",..: 1 5 5 7 5 1 5 1 4 5 ...
## $ cp4_1 : num 48 48 79 62 56 68 68 25 55 29 ...
## $ p140 : Factor w/ 2 levels "0","1": 2 2 2 2 1 2 2 2 1 2 ...
## $ p143 : Factor w/ 5 levels "1","2","3","4",..: 1 2 1 3 3 3 3 3 2 1 ...
## $ p160 : Factor w/ 4 levels "1","2","3","4": 1 2 2 2 4 1 4 4 4 4 ...
## $ p161_9 : Factor w/ 2 levels "0","1": 1 1 2 1 1 1 1 2 1 1 ...
# ============================================================
# RESULTADO 2. Tabla final de variables del modelo
# ============================================================
# Esta tabla sirve para documentar qué variables usamos,
# qué significa cada una y qué papel cumple en el análisis.
# No cambia la base ni vuelve a correr el modelo.
tabla_variables_modelo <- data.frame(
variable = c(
"al_menos_un_problema_agua",
"nom_mun_mv",
"p167",
"p88",
"p52",
"cp1",
"cp5",
"p59",
"p61",
"p62_1",
"p62_2",
"p62_4",
"p62_5",
"p65",
"p81",
"p83_1",
"usa_transporte_publico",
"p49",
"p1",
"cp4_1",
"p140",
"p143",
"p160",
"p161_9"
),
nombre_claro = c(
"Hogar reportó al menos un problema de agua",
"Municipio de residencia",
"Ingreso total mensual del hogar",
"Percepción de si el ingreso del hogar alcanza",
"Tipo de vivienda",
"Número de personas en el hogar",
"Composición del hogar / con quién vive",
"Intención de mudarse de colonia o municipio",
"Confianza en vecinos",
"Satisfacción con servicio público 1",
"Satisfacción con servicio público 2",
"Satisfacción con servicio público 4",
"Satisfacción con servicio público 5",
"Principal problema de desarrollo urbano percibido",
"Vivienda mantiene temperatura agradable en mucho calor",
"Percepción de mucho concreto y poca vegetación",
"Uso de transporte público",
"Número de vehículos disponibles en el hogar",
"Actividad u ocupación principal",
"Edad de la persona encuestada",
"Percepción de capacidad del gobierno municipal para resolver problemas",
"Coincidencia entre prioridades del gobierno y de la comunidad",
"Percepción de influencia ciudadana en decisiones municipales",
"Solicitud de apoyo, reporte o queja ante autoridades"
),
dimension = c(
"Variable dependiente",
"Territorio",
"Capacidad económica del hogar",
"Capacidad económica del hogar",
"Vivienda",
"Composición del hogar",
"Composición del hogar",
"Vivienda y arraigo territorial",
"Contexto barrial",
"Servicios urbanos",
"Servicios urbanos",
"Servicios urbanos",
"Servicios urbanos",
"Desarrollo urbano",
"Entorno ambiental y vivienda",
"Entorno ambiental",
"Movilidad",
"Movilidad y recursos del hogar",
"Perfil sociodemográfico",
"Perfil sociodemográfico",
"Gobernanza",
"Gobernanza",
"Gobernanza",
"Gobernanza y participación"
),
papel_en_modelo = c(
"Variable dependiente",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor",
"Predictor"
),
justificacion = c(
"Resume si el hogar reportó al menos un problema de agua; es el fenómeno que buscamos clasificar.",
"Permite observar diferencias territoriales entre municipios metropolitanos.",
"Captura capacidad económica del hogar, relevante para enfrentar fallas del servicio.",
"Complementa el ingreso porque mide si el hogar percibe que sus recursos son suficientes.",
"Ayuda a identificar condiciones de vivienda que pueden influir en la experiencia del agua.",
"El tamaño del hogar puede aumentar la presión sobre consumo y almacenamiento de agua.",
"Ayuda a describir la composición del hogar como condición social del entorno doméstico.",
"Puede reflejar insatisfacción o vulnerabilidad asociada al lugar donde se vive.",
"Mide capital social o confianza barrial, relevante para entender el entorno comunitario.",
"Ayuda a capturar calidad percibida de servicios urbanos.",
"Ayuda a capturar calidad percibida de servicios urbanos.",
"Ayuda a capturar calidad percibida de servicios urbanos.",
"Ayuda a capturar calidad percibida de servicios urbanos.",
"Incorpora percepción sobre problemas urbanos que pueden relacionarse con infraestructura y entorno.",
"Relaciona condiciones de vivienda con vulnerabilidad ante calor y estrés ambiental.",
"Captura condiciones ambientales del entorno urbano.",
"Permite considerar conectividad y movilidad como parte del contexto territorial.",
"Aproxima recursos materiales del hogar y capacidad de movilidad.",
"Funciona como variable de perfil de la persona encuestada.",
"Funciona como variable de perfil sociodemográfico.",
"Captura percepción sobre capacidad institucional municipal.",
"Captura alineación entre prioridades ciudadanas y gubernamentales.",
"Captura percepción de incidencia ciudadana en decisiones públicas.",
"Captura acciones ciudadanas de reporte, solicitud o queja ante autoridades."
),
stringsAsFactors = FALSE
)
# ------------------------------------------------------------
# 2.1 Agregar tipo de variable según quedó en la base final
# ------------------------------------------------------------
# Revisamos el tipo de dato de cada variable en la base final.
tabla_variables_modelo$tipo_en_base <- sapply(
datos_modelo_final[tabla_variables_modelo$variable],
function(x) class(x)[1]
)
# ------------------------------------------------------------
# 2.2 Revisar que todas las variables existan en la base final
# ------------------------------------------------------------
# Si esto regresa character(0), significa que todas las variables de la tabla
# sí existen en datos_modelo_final.
setdiff(tabla_variables_modelo$variable, names(datos_modelo_final))
## character(0)
# ------------------------------------------------------------
# 2.3 Mostrar tabla final
# ------------------------------------------------------------
tabla_variables_modelo
## variable
## 1 al_menos_un_problema_agua
## 2 nom_mun_mv
## 3 p167
## 4 p88
## 5 p52
## 6 cp1
## 7 cp5
## 8 p59
## 9 p61
## 10 p62_1
## 11 p62_2
## 12 p62_4
## 13 p62_5
## 14 p65
## 15 p81
## 16 p83_1
## 17 usa_transporte_publico
## 18 p49
## 19 p1
## 20 cp4_1
## 21 p140
## 22 p143
## 23 p160
## 24 p161_9
## nombre_claro
## 1 Hogar reportó al menos un problema de agua
## 2 Municipio de residencia
## 3 Ingreso total mensual del hogar
## 4 Percepción de si el ingreso del hogar alcanza
## 5 Tipo de vivienda
## 6 Número de personas en el hogar
## 7 Composición del hogar / con quién vive
## 8 Intención de mudarse de colonia o municipio
## 9 Confianza en vecinos
## 10 Satisfacción con servicio público 1
## 11 Satisfacción con servicio público 2
## 12 Satisfacción con servicio público 4
## 13 Satisfacción con servicio público 5
## 14 Principal problema de desarrollo urbano percibido
## 15 Vivienda mantiene temperatura agradable en mucho calor
## 16 Percepción de mucho concreto y poca vegetación
## 17 Uso de transporte público
## 18 Número de vehículos disponibles en el hogar
## 19 Actividad u ocupación principal
## 20 Edad de la persona encuestada
## 21 Percepción de capacidad del gobierno municipal para resolver problemas
## 22 Coincidencia entre prioridades del gobierno y de la comunidad
## 23 Percepción de influencia ciudadana en decisiones municipales
## 24 Solicitud de apoyo, reporte o queja ante autoridades
## dimension papel_en_modelo
## 1 Variable dependiente Variable dependiente
## 2 Territorio Predictor
## 3 Capacidad económica del hogar Predictor
## 4 Capacidad económica del hogar Predictor
## 5 Vivienda Predictor
## 6 Composición del hogar Predictor
## 7 Composición del hogar Predictor
## 8 Vivienda y arraigo territorial Predictor
## 9 Contexto barrial Predictor
## 10 Servicios urbanos Predictor
## 11 Servicios urbanos Predictor
## 12 Servicios urbanos Predictor
## 13 Servicios urbanos Predictor
## 14 Desarrollo urbano Predictor
## 15 Entorno ambiental y vivienda Predictor
## 16 Entorno ambiental Predictor
## 17 Movilidad Predictor
## 18 Movilidad y recursos del hogar Predictor
## 19 Perfil sociodemográfico Predictor
## 20 Perfil sociodemográfico Predictor
## 21 Gobernanza Predictor
## 22 Gobernanza Predictor
## 23 Gobernanza Predictor
## 24 Gobernanza y participación Predictor
## justificacion
## 1 Resume si el hogar reportó al menos un problema de agua; es el fenómeno que buscamos clasificar.
## 2 Permite observar diferencias territoriales entre municipios metropolitanos.
## 3 Captura capacidad económica del hogar, relevante para enfrentar fallas del servicio.
## 4 Complementa el ingreso porque mide si el hogar percibe que sus recursos son suficientes.
## 5 Ayuda a identificar condiciones de vivienda que pueden influir en la experiencia del agua.
## 6 El tamaño del hogar puede aumentar la presión sobre consumo y almacenamiento de agua.
## 7 Ayuda a describir la composición del hogar como condición social del entorno doméstico.
## 8 Puede reflejar insatisfacción o vulnerabilidad asociada al lugar donde se vive.
## 9 Mide capital social o confianza barrial, relevante para entender el entorno comunitario.
## 10 Ayuda a capturar calidad percibida de servicios urbanos.
## 11 Ayuda a capturar calidad percibida de servicios urbanos.
## 12 Ayuda a capturar calidad percibida de servicios urbanos.
## 13 Ayuda a capturar calidad percibida de servicios urbanos.
## 14 Incorpora percepción sobre problemas urbanos que pueden relacionarse con infraestructura y entorno.
## 15 Relaciona condiciones de vivienda con vulnerabilidad ante calor y estrés ambiental.
## 16 Captura condiciones ambientales del entorno urbano.
## 17 Permite considerar conectividad y movilidad como parte del contexto territorial.
## 18 Aproxima recursos materiales del hogar y capacidad de movilidad.
## 19 Funciona como variable de perfil de la persona encuestada.
## 20 Funciona como variable de perfil sociodemográfico.
## 21 Captura percepción sobre capacidad institucional municipal.
## 22 Captura alineación entre prioridades ciudadanas y gubernamentales.
## 23 Captura percepción de incidencia ciudadana en decisiones públicas.
## 24 Captura acciones ciudadanas de reporte, solicitud o queja ante autoridades.
## tipo_en_base
## 1 numeric
## 2 factor
## 3 factor
## 4 factor
## 5 factor
## 6 numeric
## 7 factor
## 8 factor
## 9 factor
## 10 factor
## 11 factor
## 12 factor
## 13 factor
## 14 factor
## 15 factor
## 16 factor
## 17 factor
## 18 numeric
## 19 factor
## 20 numeric
## 21 factor
## 22 factor
## 23 factor
## 24 factor
# ------------------------------------------------------------
# 2.4 Guardar la tabla para usarla en el artículo
# ------------------------------------------------------------
write.csv(
tabla_variables_modelo,
"tabla_variables_modelo_articulo.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
# ============================================================
# RESULTADO 2B. Revisar nombres exactos en diccionario
# ============================================================
# Este bloque sirve para confirmar cómo se llaman exactamente
# las variables en el diccionario y cuestionario.
# No cambia la base ni el modelo.
# ------------------------------------------------------------
# 2B.1 Revisar estructura del diccionario y cuestionario
# ------------------------------------------------------------
# Vemos los nombres de columnas del diccionario.
names(diccionario)
## [1] "código" "descripción" "tema" "tipo.de.dato"
## [5] "observaciones"
# Vemos los nombres de columnas del cuestionario.
names(cuestionario)
## [1] "Código" "Pregunta" "Tema" "Nota"
# Revisamos las primeras filas para entender cómo están organizados.
head(diccionario)
## código
## 1 orden_gral_muestra_mv
## 2 mun_mv
## 3 nom_mun_mv
## 4 loc_mv
## 5 nom_loc_mv
## 6 ageb_mv
## descripción
## 1 El orden de la observación dentro de la muestra total.
## 2 Código numérico del municipio donde se realizó la encuesta. Identificador geográfico estandarizado definido por INEGI para la referenciación territorial de los datos.
## 3 Nombre del municipio donde se realizó la encuesta.
## 4 Código numérico de la localidad donde se encuestó. Identificador geográfico estandarizado definido por INEGI para la referenciación territorial de los datos.
## 5 Nombre de la localidad donde se encuestó.
## 6 Código de Área Geoestadística Básica (AGEB) donde se realizó la encuesta. Identificador geográfico estandarizado definido por INEGI para la referenciación territorial de los datos.
## tema tipo.de.dato
## 1 <NA> numérico
## 2 <NA> numérico
## 3 <NA> texto
## 4 <NA> numérico
## 5 <NA> texto
## 6 <NA> numérico
## observaciones
## 1 No aplica factor de expansión para análisis geográficos. Esta variable es para identificación y agrupación geográfica, no para inferencias estadísticas directas.
## 2 No aplica factor de expansión para análisis geográficos. Esta variable es para identificación y agrupación geográfica, no para inferencias estadísticas directas.
## 3 No aplica factor de expansión para análisis geográficos. Esta variable es para identificación y agrupación geográfica, no para inferencias estadísticas directas.
## 4 No aplica factor de expansión para análisis geográficos. Esta variable es para identificación y agrupación geográfica, no para inferencias estadísticas directas.
## 5 No aplica factor de expansión para análisis geográficos. Esta variable es para identificación y agrupación geográfica, no para inferencias estadísticas directas.
## 6 No aplica factor de expansión para análisis geográficos. Esta variable es para identificación y agrupación geográfica, no para inferencias estadísticas directas.
head(cuestionario)
## Código Pregunta Tema Nota
## 1 <NA> <NA> <NA> <NA>
## 2 CP1 ¿Cuantas personas viven en este hogar? generales <NA>
## 3 <NA> 1. Nombre de cada integrante <NA> <NA>
## 4 <NA> <NA> <NA> <NA>
## 5 CP2 ¿Cuál es su sexo asignado al nacer? generales <NA>
## 6 <NA> 0. Hombre <NA> <NA>
# ------------------------------------------------------------
# 2B.2 Buscar variables del modelo en el diccionario
# ------------------------------------------------------------
# Guardamos las variables que usamos en el modelo.
variables_modelo <- tabla_variables_modelo$variable
# Buscamos filas del diccionario donde aparezca alguna de esas variables.
# Convertimos cada fila a texto para buscar sin depender del nombre exacto de la columna.
filas_diccionario <- apply(
diccionario,
1,
function(fila) any(as.character(fila) %in% variables_modelo)
)
# Creamos una tabla solo con las variables del modelo que aparecieron en el diccionario.
diccionario_variables_modelo <- diccionario[filas_diccionario, ]
# Mostramos la tabla.
diccionario_variables_modelo
## código
## 3 nom_mun_mv
## 10 cp1
## 14 cp4_1
## 17 cp5
## 50 p1
## 107 usa_transporte_publico
## 151 p49
## 154 p52
## 167 p59
## 169 p61
## 170 p62_1
## 171 p62_2
## 173 p62_4
## 174 p62_5
## 177 p65
## 178 al_menos_un_problema_agua
## 198 p81
## 200 p83_1
## 206 p88
## 298 p140
## 301 p143
## 318 p160
## 329 p161_9
## 336 p167
## descripción
## 3 Nombre del municipio donde se realizó la encuesta.
## 10 ¿Cuantas personas viven en este hogar?
## 14 ¿Cuántos años cumplidos tiene (NOMBRE)? (la persona encuestada)
## 17 ¿Con quién vive en su hogar?
## 50 Durante la semana pasada, ¿cuál fue su principal ocupación? (Seleccione una)
## 107 Usa el transporte público (camión, metro, transmetro/ecovía) para su viaje principal o cualquier otro viaje a la semana.
## 151 ¿Cuántos vehículos de motor (autos y camionetas) hay en el hogar?
## 154 La vivienda en la que vive actualmente:
## 167 Si pudiera, ¿le gustaría mudarse a otra colonia o municipio?
## 169 ¿Confía en sus vecinos(as)?
## 170 Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno". Alumbrado público.
## 171 Condición de las calles y avenidas.
## 173 Drenaje pluvial.
## 174 Recolección de basura.
## 177 En su opinión, ¿cuál es el principal problema de DESARROLLO URBANO que se vive en su municipio?\n\nNota para encuestador(a): Mostrar tarjeta D
## 178 Ha experimentado al menos uno de los problemas relacionados con el agua mencionados anteriormente
## 198 Durante momentos de mucho calor ¿En su casa puede mantener una temperatura agradable?
## 200 Mencione qué tan de acuerdo está con las siguientes afirmaciones: En mi colonia hay mucho concreto y poca vegetación (arboles, plantas)
## 206 Con el TOTAL DEL INGRESO DEL HOGAR, diría usted que…
## 298 ¿Es capaz de resolver los problemas del municipio?
## 301 De acuerdo con la siguiente escala ¿Qué tanto coinciden las prioridades del gobierno de [Nombre de ALCALDE/ALCALDESA] con lo que más le importa a las personas de su comunidad?
## 318 De acuerdo con la siguiente escala ¿Cuánto considera que los ciudadanos pueden influir en las decisiones del gobierno de este municipio?
## 329 Solicitar apoyo o presentar quejas a funcionarios o autoridades. (Reportar baches, luminarias, parques en mal estado u otros aspectos que permitan la mejora de la ciudad)
## 336 FINALMENTE: Tomando en cuenta a todas las personas que aportan ingresos al hogar ¿Cuál es el ingreso TOTAL mensual del hogar?\n\nNota para encuestador(a): Mostrar tarjeta M y solo pedir que nos indiquen el número de su respuesta
## tema tipo.de.dato
## 3 <NA> texto
## 10 generales numérico
## 14 generales numérico
## 17 generales numérico
## 50 economía_y_trabajo numérico
## 107 movilidad numérico
## 151 movilidad numérico
## 154 desarrollo_urbano numérico
## 167 desarrollo_urbano numérico
## 169 desarrollo_urbano numérico
## 170 desarrollo_urbano numérico
## 171 desarrollo_urbano numérico
## 173 desarrollo_urbano numérico
## 174 desarrollo_urbano numérico
## 177 desarrollo_urbano numérico
## 178 medio_ambiente numérico
## 198 medio_ambiente numérico
## 200 medio_ambiente numérico
## 206 economía_y_trabajo numérico
## 298 gobierno numérico
## 301 gobierno numérico
## 318 gobierno numérico
## 329 gobierno numérico
## 336 economía_y_trabajo numérico
## observaciones
## 3 No aplica factor de expansión para análisis geográficos. Esta variable es para identificación y agrupación geográfica, no para inferencias estadísticas directas.
## 10 Requiere factor de expansión.
## 14 Se debe aplicar factor de expansión cuando se analiza de forma individual, ya que representa una muestra de la población. Sin embargo, cuando se combinan todas las variables relacionadas con la edad (en años) de los integrantes del hogar (cp4_1, cp4_2, cp4_3, etc.) en un análisis a nivel de personas (estructura 'long' o datos apilados), no se debe aplicar el factor de expansión, pues en este caso se está analizando la composición interna de los hogares y no realizando inferencias poblacionales.
## 17 Requiere factor de expansión.
## 50 Requiere factor de expansión.
## 107 Contesta 2, 8, o 10 en p17, o 1 en p29. Requiere factor de expansión. Esta es una variable derivada de las preguntas originales de la encuesta.
## 151 <NA>
## 154 Requiere factor de expansión.
## 167 Requiere factor de expansión.
## 169 Requiere factor de expansión.
## 170 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Requiere factor de expansión.
## 171 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno". Requiere factor de expansión.
## 173 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno". Requiere factor de expansión.
## 174 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno". Requiere factor de expansión.
## 177 Requiere factor de expansión.
## 178 Para quienes respondieron 1, 2, 3, 4, o 5 en p66, p67 o p68. Requiere factor de expansión. Esta es una variable derivada de las preguntas originales de la encuesta.
## 198 Requiere factor de expansión.
## 200 Requiere factor de expansión.
## 206 Requiere factor de expansión.
## 298 Considera que (Nombre de ALCALDE/ALCALDESA). Requiere factor de expansión.
## 301 Requiere factor de expansión.
## 318 Requiere factor de expansión.
## 329 ¿Ha realizado alguna(s) de siguientes acciones en los últimos 12 meses para mejorar las condiciones de su estado? Requiere factor de expansión.
## 336 Requiere factor de expansión.
# ------------------------------------------------------------
# 2B.3 Buscar variables específicas que queremos confirmar
# ------------------------------------------------------------
# Estas son las variables donde queremos revisar el nombre exacto.
variables_a_confirmar <- c(
"p62_1",
"p62_2",
"p62_4",
"p62_5",
"p1",
"cp5",
"p88",
"p167",
"p49"
)
# Buscamos esas variables en el diccionario.
filas_confirmar_diccionario <- apply(
diccionario,
1,
function(fila) any(as.character(fila) %in% variables_a_confirmar)
)
# Mostramos solo esas filas.
diccionario_variables_confirmar <- diccionario[filas_confirmar_diccionario, ]
diccionario_variables_confirmar
## código
## 17 cp5
## 50 p1
## 151 p49
## 170 p62_1
## 171 p62_2
## 173 p62_4
## 174 p62_5
## 206 p88
## 336 p167
## descripción
## 17 ¿Con quién vive en su hogar?
## 50 Durante la semana pasada, ¿cuál fue su principal ocupación? (Seleccione una)
## 151 ¿Cuántos vehículos de motor (autos y camionetas) hay en el hogar?
## 170 Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno". Alumbrado público.
## 171 Condición de las calles y avenidas.
## 173 Drenaje pluvial.
## 174 Recolección de basura.
## 206 Con el TOTAL DEL INGRESO DEL HOGAR, diría usted que…
## 336 FINALMENTE: Tomando en cuenta a todas las personas que aportan ingresos al hogar ¿Cuál es el ingreso TOTAL mensual del hogar?\n\nNota para encuestador(a): Mostrar tarjeta M y solo pedir que nos indiquen el número de su respuesta
## tema tipo.de.dato
## 17 generales numérico
## 50 economía_y_trabajo numérico
## 151 movilidad numérico
## 170 desarrollo_urbano numérico
## 171 desarrollo_urbano numérico
## 173 desarrollo_urbano numérico
## 174 desarrollo_urbano numérico
## 206 economía_y_trabajo numérico
## 336 economía_y_trabajo numérico
## observaciones
## 17 Requiere factor de expansión.
## 50 Requiere factor de expansión.
## 151 <NA>
## 170 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Requiere factor de expansión.
## 171 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno". Requiere factor de expansión.
## 173 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno". Requiere factor de expansión.
## 174 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno". Requiere factor de expansión.
## 206 Requiere factor de expansión.
## 336 Requiere factor de expansión.
# ------------------------------------------------------------
# 2B.4 Guardar tablas para revisar después
# ------------------------------------------------------------
# Guardamos la tabla de variables del modelo encontradas en el diccionario.
write.csv(
diccionario_variables_modelo,
"diccionario_variables_modelo.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
# Guardamos la tabla de variables específicas a confirmar.
write.csv(
diccionario_variables_confirmar,
"diccionario_variables_confirmar.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
# ============================================================
# RESULTADO 2C. Corregir nombres claros en tabla de variables
# ============================================================
# Actualizamos nombres claros usando lo confirmado en el diccionario.
tabla_variables_modelo$nombre_claro[
tabla_variables_modelo$variable == "cp5"
] <- "¿Con quién vive en su hogar?"
tabla_variables_modelo$nombre_claro[
tabla_variables_modelo$variable == "p1"
] <- "Ocupación principal durante la semana pasada"
tabla_variables_modelo$nombre_claro[
tabla_variables_modelo$variable == "p49"
] <- "Número de vehículos de motor en el hogar"
tabla_variables_modelo$nombre_claro[
tabla_variables_modelo$variable == "p62_1"
] <- "Satisfacción con alumbrado público"
tabla_variables_modelo$nombre_claro[
tabla_variables_modelo$variable == "p62_2"
] <- "Satisfacción con condición de calles y avenidas"
tabla_variables_modelo$nombre_claro[
tabla_variables_modelo$variable == "p62_4"
] <- "Satisfacción con drenaje pluvial"
tabla_variables_modelo$nombre_claro[
tabla_variables_modelo$variable == "p62_5"
] <- "Satisfacción con recolección de basura"
tabla_variables_modelo$nombre_claro[
tabla_variables_modelo$variable == "p88"
] <- "Percepción de si el ingreso total del hogar alcanza"
tabla_variables_modelo$nombre_claro[
tabla_variables_modelo$variable == "p167"
] <- "Ingreso total mensual del hogar"
# Revisamos la tabla actualizada.
tabla_variables_modelo
## variable
## 1 al_menos_un_problema_agua
## 2 nom_mun_mv
## 3 p167
## 4 p88
## 5 p52
## 6 cp1
## 7 cp5
## 8 p59
## 9 p61
## 10 p62_1
## 11 p62_2
## 12 p62_4
## 13 p62_5
## 14 p65
## 15 p81
## 16 p83_1
## 17 usa_transporte_publico
## 18 p49
## 19 p1
## 20 cp4_1
## 21 p140
## 22 p143
## 23 p160
## 24 p161_9
## nombre_claro
## 1 Hogar reportó al menos un problema de agua
## 2 Municipio de residencia
## 3 Ingreso total mensual del hogar
## 4 Percepción de si el ingreso total del hogar alcanza
## 5 Tipo de vivienda
## 6 Número de personas en el hogar
## 7 ¿Con quién vive en su hogar?
## 8 Intención de mudarse de colonia o municipio
## 9 Confianza en vecinos
## 10 Satisfacción con alumbrado público
## 11 Satisfacción con condición de calles y avenidas
## 12 Satisfacción con drenaje pluvial
## 13 Satisfacción con recolección de basura
## 14 Principal problema de desarrollo urbano percibido
## 15 Vivienda mantiene temperatura agradable en mucho calor
## 16 Percepción de mucho concreto y poca vegetación
## 17 Uso de transporte público
## 18 Número de vehículos de motor en el hogar
## 19 Ocupación principal durante la semana pasada
## 20 Edad de la persona encuestada
## 21 Percepción de capacidad del gobierno municipal para resolver problemas
## 22 Coincidencia entre prioridades del gobierno y de la comunidad
## 23 Percepción de influencia ciudadana en decisiones municipales
## 24 Solicitud de apoyo, reporte o queja ante autoridades
## dimension papel_en_modelo
## 1 Variable dependiente Variable dependiente
## 2 Territorio Predictor
## 3 Capacidad económica del hogar Predictor
## 4 Capacidad económica del hogar Predictor
## 5 Vivienda Predictor
## 6 Composición del hogar Predictor
## 7 Composición del hogar Predictor
## 8 Vivienda y arraigo territorial Predictor
## 9 Contexto barrial Predictor
## 10 Servicios urbanos Predictor
## 11 Servicios urbanos Predictor
## 12 Servicios urbanos Predictor
## 13 Servicios urbanos Predictor
## 14 Desarrollo urbano Predictor
## 15 Entorno ambiental y vivienda Predictor
## 16 Entorno ambiental Predictor
## 17 Movilidad Predictor
## 18 Movilidad y recursos del hogar Predictor
## 19 Perfil sociodemográfico Predictor
## 20 Perfil sociodemográfico Predictor
## 21 Gobernanza Predictor
## 22 Gobernanza Predictor
## 23 Gobernanza Predictor
## 24 Gobernanza y participación Predictor
## justificacion
## 1 Resume si el hogar reportó al menos un problema de agua; es el fenómeno que buscamos clasificar.
## 2 Permite observar diferencias territoriales entre municipios metropolitanos.
## 3 Captura capacidad económica del hogar, relevante para enfrentar fallas del servicio.
## 4 Complementa el ingreso porque mide si el hogar percibe que sus recursos son suficientes.
## 5 Ayuda a identificar condiciones de vivienda que pueden influir en la experiencia del agua.
## 6 El tamaño del hogar puede aumentar la presión sobre consumo y almacenamiento de agua.
## 7 Ayuda a describir la composición del hogar como condición social del entorno doméstico.
## 8 Puede reflejar insatisfacción o vulnerabilidad asociada al lugar donde se vive.
## 9 Mide capital social o confianza barrial, relevante para entender el entorno comunitario.
## 10 Ayuda a capturar calidad percibida de servicios urbanos.
## 11 Ayuda a capturar calidad percibida de servicios urbanos.
## 12 Ayuda a capturar calidad percibida de servicios urbanos.
## 13 Ayuda a capturar calidad percibida de servicios urbanos.
## 14 Incorpora percepción sobre problemas urbanos que pueden relacionarse con infraestructura y entorno.
## 15 Relaciona condiciones de vivienda con vulnerabilidad ante calor y estrés ambiental.
## 16 Captura condiciones ambientales del entorno urbano.
## 17 Permite considerar conectividad y movilidad como parte del contexto territorial.
## 18 Aproxima recursos materiales del hogar y capacidad de movilidad.
## 19 Funciona como variable de perfil de la persona encuestada.
## 20 Funciona como variable de perfil sociodemográfico.
## 21 Captura percepción sobre capacidad institucional municipal.
## 22 Captura alineación entre prioridades ciudadanas y gubernamentales.
## 23 Captura percepción de incidencia ciudadana en decisiones públicas.
## 24 Captura acciones ciudadanas de reporte, solicitud o queja ante autoridades.
## tipo_en_base
## 1 numeric
## 2 factor
## 3 factor
## 4 factor
## 5 factor
## 6 numeric
## 7 factor
## 8 factor
## 9 factor
## 10 factor
## 11 factor
## 12 factor
## 13 factor
## 14 factor
## 15 factor
## 16 factor
## 17 factor
## 18 numeric
## 19 factor
## 20 numeric
## 21 factor
## 22 factor
## 23 factor
## 24 factor
# Guardamos la versión corregida.
write.csv(
tabla_variables_modelo,
"tabla_variables_modelo_articulo_corregida.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
# ============================================================
# RESULTADO 3. Descriptivos oficiales para el artículo
# ============================================================
# Este bloque genera tablas y gráficas descriptivas sencillas.
# No cambia la base, no cambia el modelo y no cambia la partición train/test.
# ------------------------------------------------------------
# 3.1 Distribución general de inseguridad hídrica
# ------------------------------------------------------------
# Tabla de conteos.
tabla_target <- table(datos_modelo_final$al_menos_un_problema_agua)
# Tabla de porcentajes.
porcentaje_target <- round(prop.table(tabla_target) * 100, 2)
# Unimos conteos y porcentajes en una sola tabla.
descriptivo_target <- data.frame(
problema_agua = c("No reportó problemas de agua", "Sí reportó al menos un problema de agua"),
conteo = as.numeric(tabla_target),
porcentaje = as.numeric(porcentaje_target)
)
# Mostramos la tabla.
descriptivo_target
## problema_agua conteo porcentaje
## 1 No reportó problemas de agua 1526 44.71
## 2 Sí reportó al menos un problema de agua 1887 55.29
# Gráfica sencilla.
barplot(
descriptivo_target$porcentaje,
names.arg = descriptivo_target$problema_agua,
main = "Hogares según reporte de problemas de agua",
ylab = "Porcentaje",
ylim = c(0, 100),
las = 2
)
# ------------------------------------------------------------
# 3.2 Problemas de agua por ingreso del hogar
# ------------------------------------------------------------
# Tabla cruzada entre ingreso y problemas de agua.
tabla_ingreso_agua <- table(
Ingreso = datos_modelo_final$p167,
ProblemaAgua = datos_modelo_final$al_menos_un_problema_agua
)
# Porcentajes por nivel de ingreso.
# Cada fila suma 100%.
porcentaje_ingreso_agua <- round(
prop.table(tabla_ingreso_agua, margin = 1) * 100,
2
)
# Mostramos tabla de conteos y porcentajes.
tabla_ingreso_agua
## ProblemaAgua
## Ingreso 0 1
## 1 55 38
## 10 1 3
## 11 3 1
## 12 2 4
## 2 338 629
## 3 611 761
## 4 348 315
## 5 127 93
## 6 29 20
## 7 9 10
## 8 2 9
## 9 1 4
porcentaje_ingreso_agua
## ProblemaAgua
## Ingreso 0 1
## 1 59.14 40.86
## 10 25.00 75.00
## 11 75.00 25.00
## 12 33.33 66.67
## 2 34.95 65.05
## 3 44.53 55.47
## 4 52.49 47.51
## 5 57.73 42.27
## 6 59.18 40.82
## 7 47.37 52.63
## 8 18.18 81.82
## 9 20.00 80.00
# Guardamos en formato de tabla para artículo.
descriptivo_ingreso <- data.frame(
ingreso = rownames(porcentaje_ingreso_agua),
porcentaje_sin_problema = porcentaje_ingreso_agua[, "0"],
porcentaje_con_problema = porcentaje_ingreso_agua[, "1"]
)
descriptivo_ingreso
## ingreso porcentaje_sin_problema porcentaje_con_problema
## 1 1 59.14 40.86
## 10 10 25.00 75.00
## 11 11 75.00 25.00
## 12 12 33.33 66.67
## 2 2 34.95 65.05
## 3 3 44.53 55.47
## 4 4 52.49 47.51
## 5 5 57.73 42.27
## 6 6 59.18 40.82
## 7 7 47.37 52.63
## 8 8 18.18 81.82
## 9 9 20.00 80.00
# Gráfica: porcentaje con problema por nivel de ingreso.
barplot(
descriptivo_ingreso$porcentaje_con_problema,
names.arg = descriptivo_ingreso$ingreso,
main = "Porcentaje de hogares con problemas de agua por ingreso",
ylab = "Porcentaje con al menos un problema de agua",
xlab = "Categoría de ingreso",
ylim = c(0, 100),
las = 2
)
# ------------------------------------------------------------
# 3.3 Problemas de agua por municipio
# ------------------------------------------------------------
# Tabla cruzada entre municipio y problemas de agua.
tabla_municipio_agua <- table(
Municipio = datos_modelo_final$nom_mun_mv,
ProblemaAgua = datos_modelo_final$al_menos_un_problema_agua
)
# Porcentajes por municipio.
# Cada fila suma 100%.
porcentaje_municipio_agua <- round(
prop.table(tabla_municipio_agua, margin = 1) * 100,
2
)
# Mostramos tabla de conteos y porcentajes.
tabla_municipio_agua
## ProblemaAgua
## Municipio 0 1
## Apodaca 85 181
## Cadereyta Jiménez 119 170
## Ciénega de Flores 21 52
## El Carmen 42 42
## García 64 236
## General Escobedo 135 144
## General Zuazua 44 60
## Guadalupe 96 180
## Hidalgo 19 13
## Juárez 103 159
## Monterrey 131 52
## Pesquería 41 76
## Salinas Victoria 21 42
## San Nicolás de los Garza 111 151
## San Pedro Garza García 189 96
## Santa Catarina 114 164
## Santiago 191 69
porcentaje_municipio_agua
## ProblemaAgua
## Municipio 0 1
## Apodaca 31.95 68.05
## Cadereyta Jiménez 41.18 58.82
## Ciénega de Flores 28.77 71.23
## El Carmen 50.00 50.00
## García 21.33 78.67
## General Escobedo 48.39 51.61
## General Zuazua 42.31 57.69
## Guadalupe 34.78 65.22
## Hidalgo 59.38 40.62
## Juárez 39.31 60.69
## Monterrey 71.58 28.42
## Pesquería 35.04 64.96
## Salinas Victoria 33.33 66.67
## San Nicolás de los Garza 42.37 57.63
## San Pedro Garza García 66.32 33.68
## Santa Catarina 41.01 58.99
## Santiago 73.46 26.54
# Guardamos en formato de tabla para artículo.
descriptivo_municipio <- data.frame(
municipio = rownames(porcentaje_municipio_agua),
porcentaje_sin_problema = porcentaje_municipio_agua[, "0"],
porcentaje_con_problema = porcentaje_municipio_agua[, "1"]
)
# Ordenamos de mayor a menor porcentaje con problema.
descriptivo_municipio <- descriptivo_municipio[
order(descriptivo_municipio$porcentaje_con_problema, decreasing = TRUE),
]
descriptivo_municipio
## municipio porcentaje_sin_problema
## García García 21.33
## Ciénega de Flores Ciénega de Flores 28.77
## Apodaca Apodaca 31.95
## Salinas Victoria Salinas Victoria 33.33
## Guadalupe Guadalupe 34.78
## Pesquería Pesquería 35.04
## Juárez Juárez 39.31
## Santa Catarina Santa Catarina 41.01
## Cadereyta Jiménez Cadereyta Jiménez 41.18
## General Zuazua General Zuazua 42.31
## San Nicolás de los Garza San Nicolás de los Garza 42.37
## General Escobedo General Escobedo 48.39
## El Carmen El Carmen 50.00
## Hidalgo Hidalgo 59.38
## San Pedro Garza García San Pedro Garza García 66.32
## Monterrey Monterrey 71.58
## Santiago Santiago 73.46
## porcentaje_con_problema
## García 78.67
## Ciénega de Flores 71.23
## Apodaca 68.05
## Salinas Victoria 66.67
## Guadalupe 65.22
## Pesquería 64.96
## Juárez 60.69
## Santa Catarina 58.99
## Cadereyta Jiménez 58.82
## General Zuazua 57.69
## San Nicolás de los Garza 57.63
## General Escobedo 51.61
## El Carmen 50.00
## Hidalgo 40.62
## San Pedro Garza García 33.68
## Monterrey 28.42
## Santiago 26.54
# Gráfica: porcentaje con problema por municipio.
barplot(
descriptivo_municipio$porcentaje_con_problema,
names.arg = descriptivo_municipio$municipio,
main = "Porcentaje de hogares con problemas de agua por municipio",
ylab = "Porcentaje con al menos un problema de agua",
xlab = "Municipio",
ylim = c(0, 100),
las = 2
)
# ------------------------------------------------------------
# 3.4 Problemas de agua por percepción de ingreso suficiente
# ------------------------------------------------------------
# Tabla cruzada entre p88 y problemas de agua.
tabla_p88_agua <- table(
IngresoAlcanza = datos_modelo_final$p88,
ProblemaAgua = datos_modelo_final$al_menos_un_problema_agua
)
# Porcentajes por categoría de p88.
porcentaje_p88_agua <- round(
prop.table(tabla_p88_agua, margin = 1) * 100,
2
)
tabla_p88_agua
## ProblemaAgua
## IngresoAlcanza 0 1
## 1 249 263
## 2 1035 1269
## 3 226 319
## 4 16 36
porcentaje_p88_agua
## ProblemaAgua
## IngresoAlcanza 0 1
## 1 48.63 51.37
## 2 44.92 55.08
## 3 41.47 58.53
## 4 30.77 69.23
descriptivo_p88 <- data.frame(
ingreso_alcanza = rownames(porcentaje_p88_agua),
porcentaje_sin_problema = porcentaje_p88_agua[, "0"],
porcentaje_con_problema = porcentaje_p88_agua[, "1"]
)
descriptivo_p88
## ingreso_alcanza porcentaje_sin_problema porcentaje_con_problema
## 1 1 48.63 51.37
## 2 2 44.92 55.08
## 3 3 41.47 58.53
## 4 4 30.77 69.23
# ------------------------------------------------------------
# 3.5 Problemas de agua por variables de gobernanza
# ------------------------------------------------------------
# Revisamos p140: capacidad del gobierno municipal para resolver problemas.
tabla_p140_agua <- table(
CapacidadGobierno = datos_modelo_final$p140,
ProblemaAgua = datos_modelo_final$al_menos_un_problema_agua
)
porcentaje_p140_agua <- round(
prop.table(tabla_p140_agua, margin = 1) * 100,
2
)
tabla_p140_agua
## ProblemaAgua
## CapacidadGobierno 0 1
## 0 468 623
## 1 1058 1264
porcentaje_p140_agua
## ProblemaAgua
## CapacidadGobierno 0 1
## 0 42.90 57.10
## 1 45.56 54.44
# Revisamos p143: coincidencia entre prioridades del gobierno y comunidad.
tabla_p143_agua <- table(
PrioridadesGobierno = datos_modelo_final$p143,
ProblemaAgua = datos_modelo_final$al_menos_un_problema_agua
)
porcentaje_p143_agua <- round(
prop.table(tabla_p143_agua, margin = 1) * 100,
2
)
tabla_p143_agua
## ProblemaAgua
## PrioridadesGobierno 0 1
## 1 273 494
## 2 406 392
## 3 518 497
## 4 241 331
## 5 88 173
porcentaje_p143_agua
## ProblemaAgua
## PrioridadesGobierno 0 1
## 1 35.59 64.41
## 2 50.88 49.12
## 3 51.03 48.97
## 4 42.13 57.87
## 5 33.72 66.28
# Revisamos p160: influencia ciudadana en decisiones municipales.
tabla_p160_agua <- table(
InfluenciaCiudadana = datos_modelo_final$p160,
ProblemaAgua = datos_modelo_final$al_menos_un_problema_agua
)
porcentaje_p160_agua <- round(
prop.table(tabla_p160_agua, margin = 1) * 100,
2
)
tabla_p160_agua
## ProblemaAgua
## InfluenciaCiudadana 0 1
## 1 280 211
## 2 561 635
## 3 427 654
## 4 258 387
porcentaje_p160_agua
## ProblemaAgua
## InfluenciaCiudadana 0 1
## 1 57.03 42.97
## 2 46.91 53.09
## 3 39.50 60.50
## 4 40.00 60.00
# ------------------------------------------------------------
# 3.6 Guardar tablas descriptivas
# ------------------------------------------------------------
write.csv(
descriptivo_target,
"descriptivo_target_articulo.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
write.csv(
descriptivo_ingreso,
"descriptivo_ingreso_articulo.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
write.csv(
descriptivo_municipio,
"descriptivo_municipio_articulo.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
write.csv(
descriptivo_p88,
"descriptivo_p88_articulo.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
# ============================================================
# RESULTADO 3C. Conteos y etiquetas de categorías importantes
# ============================================================
# Este bloque no cambia la base ni el modelo.
# Solo genera tablas para interpretar mejor los descriptivos.
# ------------------------------------------------------------
# 3C.1 Conteos por ingreso del hogar p167
# ------------------------------------------------------------
# Conteos de hogares por categoría de ingreso y problema de agua.
tabla_ingreso_agua
## ProblemaAgua
## Ingreso 0 1
## 1 55 38
## 10 1 3
## 11 3 1
## 12 2 4
## 2 338 629
## 3 611 761
## 4 348 315
## 5 127 93
## 6 29 20
## 7 9 10
## 8 2 9
## 9 1 4
# Total de casos por categoría de ingreso.
rowSums(tabla_ingreso_agua)
## 1 10 11 12 2 3 4 5 6 7 8 9
## 93 4 4 6 967 1372 663 220 49 19 11 5
# ------------------------------------------------------------
# 3C.2 Conteos por percepción de ingreso suficiente p88
# ------------------------------------------------------------
tabla_p88_agua
## ProblemaAgua
## IngresoAlcanza 0 1
## 1 249 263
## 2 1035 1269
## 3 226 319
## 4 16 36
rowSums(tabla_p88_agua)
## 1 2 3 4
## 512 2304 545 52
# ------------------------------------------------------------
# 3C.3 Conteos por gobernanza
# ------------------------------------------------------------
tabla_p140_agua
## ProblemaAgua
## CapacidadGobierno 0 1
## 0 468 623
## 1 1058 1264
rowSums(tabla_p140_agua)
## 0 1
## 1091 2322
tabla_p143_agua
## ProblemaAgua
## PrioridadesGobierno 0 1
## 1 273 494
## 2 406 392
## 3 518 497
## 4 241 331
## 5 88 173
rowSums(tabla_p143_agua)
## 1 2 3 4 5
## 767 798 1015 572 261
tabla_p160_agua
## ProblemaAgua
## InfluenciaCiudadana 0 1
## 1 280 211
## 2 561 635
## 3 427 654
## 4 258 387
rowSums(tabla_p160_agua)
## 1 2 3 4
## 491 1196 1081 645
# ------------------------------------------------------------
# 3C.4 Buscar opciones de respuesta en cuestionario
# ------------------------------------------------------------
# Revisamos cómo están escritas las preguntas y notas.
cuestionario[cuestionario$Código %in% c("p88", "p167", "p140", "p143", "p160"), ]
## [1] Código Pregunta Tema Nota
## <0 rows> (o 0- extensión row.names)
# También buscamos en el diccionario por si aparece información adicional.
diccionario[diccionario$código %in% c("p88", "p167", "p140", "p143", "p160"), ]
## código
## 206 p88
## 298 p140
## 301 p143
## 318 p160
## 336 p167
## descripción
## 206 Con el TOTAL DEL INGRESO DEL HOGAR, diría usted que…
## 298 ¿Es capaz de resolver los problemas del municipio?
## 301 De acuerdo con la siguiente escala ¿Qué tanto coinciden las prioridades del gobierno de [Nombre de ALCALDE/ALCALDESA] con lo que más le importa a las personas de su comunidad?
## 318 De acuerdo con la siguiente escala ¿Cuánto considera que los ciudadanos pueden influir en las decisiones del gobierno de este municipio?
## 336 FINALMENTE: Tomando en cuenta a todas las personas que aportan ingresos al hogar ¿Cuál es el ingreso TOTAL mensual del hogar?\n\nNota para encuestador(a): Mostrar tarjeta M y solo pedir que nos indiquen el número de su respuesta
## tema tipo.de.dato
## 206 economía_y_trabajo numérico
## 298 gobierno numérico
## 301 gobierno numérico
## 318 gobierno numérico
## 336 economía_y_trabajo numérico
## observaciones
## 206 Requiere factor de expansión.
## 298 Considera que (Nombre de ALCALDE/ALCALDESA). Requiere factor de expansión.
## 301 Requiere factor de expansión.
## 318 Requiere factor de expansión.
## 336 Requiere factor de expansión.
# ============================================================
# RESULTADO 3D. Exportar etiquetas completas de variables
# ============================================================
# Este bloque sirve para guardar las descripciones completas
# del diccionario y cuestionario, sin depender de screenshots.
# ------------------------------------------------------------
# 3D.1 Crear función sencilla para limpiar códigos
# ------------------------------------------------------------
# Esta función convierte los códigos a texto, quita espacios
# y los pone en minúsculas para evitar errores de búsqueda.
limpiar_codigo <- function(x) {
tolower(trimws(as.character(x)))
}
# ------------------------------------------------------------
# 3D.2 Definir variables que queremos revisar
# ------------------------------------------------------------
# Variables exactas que usamos o queremos interpretar.
variables_revisar <- c(
"p88", "p167", "p140", "p143", "p160",
"p62_1", "p62_2", "p62_4", "p62_5",
"cp5", "p1", "p49"
)
# Versión limpia de esas variables.
variables_revisar_limpias <- limpiar_codigo(variables_revisar)
# Algunas variables como p62_1, p62_2, etc. pueden aparecer
# en el cuestionario como p62. Por eso también buscamos la base del código.
variables_base <- unique(sub("_[0-9]+$", "", variables_revisar_limpias))
# ------------------------------------------------------------
# 3D.3 Buscar en diccionario
# ------------------------------------------------------------
# Buscamos coincidencias exactas en el diccionario.
diccionario_confirmar <- diccionario[
limpiar_codigo(diccionario[["código"]]) %in% variables_revisar_limpias,
]
# Mostramos la tabla.
diccionario_confirmar
## código
## 17 cp5
## 50 p1
## 151 p49
## 170 p62_1
## 171 p62_2
## 173 p62_4
## 174 p62_5
## 206 p88
## 298 p140
## 301 p143
## 318 p160
## 336 p167
## descripción
## 17 ¿Con quién vive en su hogar?
## 50 Durante la semana pasada, ¿cuál fue su principal ocupación? (Seleccione una)
## 151 ¿Cuántos vehículos de motor (autos y camionetas) hay en el hogar?
## 170 Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno". Alumbrado público.
## 171 Condición de las calles y avenidas.
## 173 Drenaje pluvial.
## 174 Recolección de basura.
## 206 Con el TOTAL DEL INGRESO DEL HOGAR, diría usted que…
## 298 ¿Es capaz de resolver los problemas del municipio?
## 301 De acuerdo con la siguiente escala ¿Qué tanto coinciden las prioridades del gobierno de [Nombre de ALCALDE/ALCALDESA] con lo que más le importa a las personas de su comunidad?
## 318 De acuerdo con la siguiente escala ¿Cuánto considera que los ciudadanos pueden influir en las decisiones del gobierno de este municipio?
## 336 FINALMENTE: Tomando en cuenta a todas las personas que aportan ingresos al hogar ¿Cuál es el ingreso TOTAL mensual del hogar?\n\nNota para encuestador(a): Mostrar tarjeta M y solo pedir que nos indiquen el número de su respuesta
## tema tipo.de.dato
## 17 generales numérico
## 50 economía_y_trabajo numérico
## 151 movilidad numérico
## 170 desarrollo_urbano numérico
## 171 desarrollo_urbano numérico
## 173 desarrollo_urbano numérico
## 174 desarrollo_urbano numérico
## 206 economía_y_trabajo numérico
## 298 gobierno numérico
## 301 gobierno numérico
## 318 gobierno numérico
## 336 economía_y_trabajo numérico
## observaciones
## 17 Requiere factor de expansión.
## 50 Requiere factor de expansión.
## 151 <NA>
## 170 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Requiere factor de expansión.
## 171 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno". Requiere factor de expansión.
## 173 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno". Requiere factor de expansión.
## 174 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno". Requiere factor de expansión.
## 206 Requiere factor de expansión.
## 298 Considera que (Nombre de ALCALDE/ALCALDESA). Requiere factor de expansión.
## 301 Requiere factor de expansión.
## 318 Requiere factor de expansión.
## 336 Requiere factor de expansión.
# Guardamos la tabla completa.
write.csv(
diccionario_confirmar,
"diccionario_variables_importantes_completo.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
# ------------------------------------------------------------
# 3D.4 Buscar en cuestionario
# ------------------------------------------------------------
# Buscamos coincidencias exactas y también códigos base.
cuestionario_confirmar <- cuestionario[
limpiar_codigo(cuestionario[["Código"]]) %in% c(variables_revisar_limpias, variables_base),
]
# Mostramos la tabla.
cuestionario_confirmar
## Código
## 24 CP5
## 191 P1
## 805 P49
## 993 P62_1
## 997 P62_2
## 1005 P62_4
## 1009 P62_5
## 1282 P88
## 1936 P140
## 1954 P143
## 2067 P160
## 2181 P167
## Pregunta
## 24 ¿Con quién vive en su hogar?
## 191 Durante la semana pasada, ¿cuál fue su principal ocupación? (Seleccione una)
## 805 ¿Cuántos vehículos de motor (autos y camionetas) hay en el hogar?
## 993 Alumbrado público.
## 997 Condición de las calles y avenidas.
## 1005 Drenaje pluvial.
## 1009 Recolección de basura.
## 1282 Con el TOTAL DEL INGRESO DEL HOGAR, diría usted que…
## 1936 ¿Es capaz de resolver los problemas del municipio?
## 1954 De acuerdo con la siguiente escala ¿Qué tanto coinciden las prioridades del gobierno de [Nombre de ALCALDE/ALCALDESA] con lo que más le importa a las personas de su comunidad?
## 2067 De acuerdo con la siguiente escala ¿Cuánto considera que los ciudadanos pueden influir en las decisiones del gobierno de este municipio?
## 2181 FINALMENTE: Tomando en cuenta a todas las personas que aportan ingresos al hogar ¿Cuál es el ingreso TOTAL mensual del hogar?\n\nNota para encuestador(a): Mostrar tarjeta M y solo pedir que nos indiquen el número de su respuesta
## Tema
## 24 generales
## 191 economia_y_trabajo
## 805 movilidad
## 993 desarrollo_urbano
## 997 desarrollo_urbano
## 1005 desarrollo_urbano
## 1009 desarrollo_urbano
## 1282 economia_y_trabajo
## 1936 gobierno
## 1954 gobierno
## 2067 gobierno
## 2181 economia_y_trabajo
## Nota
## 24 <NA>
## 191 <NA>
## 805 <NA>
## 993 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno".
## 997 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno".
## 1005 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno".
## 1009 De acuerdo con su experiencia en su municipio, qué tan satisfecho(a) está con los siguientes servicios públicos. Evalúe, en una escala del 1 al 10, en donde 1 es "muy malo" y 10 "muy bueno".
## 1282 <NA>
## 1936 Considera que (Nombre de ALCALDE/ALCALDESA):
## 1954 <NA>
## 2067 <NA>
## 2181 <NA>
# Guardamos la tabla completa.
write.csv(
cuestionario_confirmar,
"cuestionario_variables_importantes_completo.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
# ------------------------------------------------------------
# 3D.5 Revisar si algo no apareció
# ------------------------------------------------------------
# Variables que no aparecieron en diccionario.
setdiff(
variables_revisar_limpias,
limpiar_codigo(diccionario_confirmar[["código"]])
)
## character(0)
# Variables base que no aparecieron en cuestionario.
setdiff(
variables_base,
limpiar_codigo(cuestionario_confirmar[["Código"]])
)
## [1] "p62"
# ------------------------------------------------------------
# 3D.6 Abrir tablas en visor de RStudio
# ------------------------------------------------------------
# Esto permite ver las descripciones completas en RStudio.
View(diccionario_confirmar)
View(cuestionario_confirmar)
# ============================================================
# RESULTADO 4. Resumen del modelo logístico final
# ============================================================
# Este bloque resume el modelo logístico final.
# No cambia la base ni cambia el modelo; solo extrae resultados.
# ------------------------------------------------------------
# 4.1 Ver resumen completo del modelo
# ------------------------------------------------------------
summary(modelo_logistico)
##
## Call:
## glm(formula = al_menos_un_problema_agua ~ ., family = binomial,
## data = datos_train)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.292187 1.068385 1.209 0.226480
## nom_mun_mvCadereyta Jiménez -0.724251 0.253369 -2.858 0.004257 **
## nom_mun_mvCiénega de Flores 0.082537 0.395235 0.209 0.834580
## nom_mun_mvEl Carmen -1.075988 0.351250 -3.063 0.002189 **
## nom_mun_mvGarcía 0.079968 0.259681 0.308 0.758124
## nom_mun_mvGeneral Escobedo -0.787787 0.243536 -3.235 0.001217 **
## nom_mun_mvGeneral Zuazua -0.861273 0.323342 -2.664 0.007730 **
## nom_mun_mvGuadalupe -0.214120 0.252559 -0.848 0.396549
## nom_mun_mvHidalgo -0.316189 0.515944 -0.613 0.539986
## nom_mun_mvJuárez -0.806990 0.251292 -3.211 0.001321 **
## nom_mun_mvMonterrey -1.807559 0.292082 -6.189 6.07e-10 ***
## nom_mun_mvPesquería -0.300267 0.332095 -0.904 0.365911
## nom_mun_mvSalinas Victoria -0.788401 0.420077 -1.877 0.060546 .
## nom_mun_mvSan Nicolás de los Garza -0.424023 0.249559 -1.699 0.089303 .
## nom_mun_mvSan Pedro Garza García -1.241687 0.255427 -4.861 1.17e-06 ***
## nom_mun_mvSanta Catarina -0.575905 0.253081 -2.276 0.022872 *
## nom_mun_mvSantiago -1.425448 0.276370 -5.158 2.50e-07 ***
## p16710 13.585785 352.681216 0.039 0.969272
## p16711 -0.221732 1.329364 -0.167 0.867531
## p16712 1.275579 1.233179 1.034 0.300958
## p1672 0.871943 0.307924 2.832 0.004630 **
## p1673 0.320967 0.304832 1.053 0.292373
## p1674 0.142168 0.318069 0.447 0.654894
## p1675 0.075009 0.362148 0.207 0.835914
## p1676 0.241422 0.536293 0.450 0.652590
## p1677 1.163275 0.692491 1.680 0.092988 .
## p1678 1.648564 0.959111 1.719 0.085642 .
## p1679 2.211981 1.225259 1.805 0.071025 .
## p882 0.277517 0.149391 1.858 0.063219 .
## p883 0.263068 0.194162 1.355 0.175454
## p884 0.358592 0.410976 0.873 0.382915
## p522 -0.191565 0.204126 -0.938 0.348005
## p523 -0.519271 0.184506 -2.814 0.004887 **
## p524 -0.302067 0.185738 -1.626 0.103885
## p525 -0.504132 0.154736 -3.258 0.001122 **
## p526 -0.104191 0.251944 -0.414 0.679203
## p527 -0.842330 0.308400 -2.731 0.006309 **
## p528 -0.378140 1.279064 -0.296 0.767507
## p529 -0.617523 0.307319 -2.009 0.044496 *
## cp1 -0.048295 0.039867 -1.211 0.225746
## cp52 1.234135 0.661440 1.866 0.062065 .
## cp53 -0.083136 0.180903 -0.460 0.645833
## p591 0.158599 0.148953 1.065 0.286985
## p612 0.323361 0.140234 2.306 0.021118 *
## p613 0.271054 0.138699 1.954 0.050671 .
## p614 0.326973 0.259599 1.260 0.207839
## p62_110 -0.417649 0.384679 -1.086 0.277608
## p62_12 -0.384662 0.496803 -0.774 0.438769
## p62_13 -0.631331 0.486231 -1.298 0.194143
## p62_14 -0.348938 0.439461 -0.794 0.427187
## p62_15 -0.259643 0.358019 -0.725 0.468317
## p62_16 -0.390323 0.364016 -1.072 0.283601
## p62_17 -0.423884 0.344063 -1.232 0.217950
## p62_18 -0.332246 0.341397 -0.973 0.330457
## p62_19 -0.473175 0.359258 -1.317 0.187809
## p62_210 0.139389 0.442549 0.315 0.752786
## p62_22 -0.151281 0.526744 -0.287 0.773959
## p62_23 0.165138 0.480544 0.344 0.731111
## p62_24 -0.161417 0.427019 -0.378 0.705424
## p62_25 0.490577 0.374824 1.309 0.190596
## p62_26 0.320581 0.383413 0.836 0.403085
## p62_27 0.343937 0.372260 0.924 0.355529
## p62_28 0.265301 0.372628 0.712 0.476480
## p62_29 0.458361 0.391297 1.171 0.241442
## p62_410 -0.456807 0.339268 -1.346 0.178157
## p62_42 0.548928 0.439217 1.250 0.211377
## p62_43 0.061083 0.371059 0.165 0.869245
## p62_44 -0.183609 0.361701 -0.508 0.611716
## p62_45 0.328507 0.301455 1.090 0.275828
## p62_46 -0.098898 0.306236 -0.323 0.746735
## p62_47 0.336448 0.296256 1.136 0.256096
## p62_48 -0.032387 0.282203 -0.115 0.908631
## p62_49 -0.043127 0.296625 -0.145 0.884401
## p62_510 -0.767007 0.917037 -0.836 0.402931
## p62_52 0.920319 1.289458 0.714 0.475397
## p62_53 0.920714 1.682125 0.547 0.584137
## p62_54 0.631210 1.084711 0.582 0.560624
## p62_55 0.479813 0.985594 0.487 0.626381
## p62_56 -0.310823 0.955926 -0.325 0.745065
## p62_57 -0.073937 0.935319 -0.079 0.936992
## p62_58 -0.250276 0.920590 -0.272 0.785726
## p62_59 -0.630698 0.916800 -0.688 0.491494
## p6517 -0.357409 0.247502 -1.444 0.148721
## p652 -0.282053 0.147428 -1.913 0.055727 .
## p653 -0.107873 0.231965 -0.465 0.641904
## p654 -0.006026 0.151385 -0.040 0.968249
## p655 0.510495 0.260445 1.960 0.049986 *
## p656 -0.100419 0.214696 -0.468 0.639978
## p65Otro -0.821910 0.650547 -1.263 0.206440
## p811 -0.285591 0.141934 -2.012 0.044206 *
## p83_12 0.480071 0.143968 3.335 0.000854 ***
## p83_13 0.057605 0.153714 0.375 0.707841
## p83_14 0.711933 0.390659 1.822 0.068396 .
## usa_transporte_publico1 0.278125 0.108027 2.575 0.010036 *
## p49 0.073160 0.065181 1.122 0.261685
## p12 0.054590 0.324220 0.168 0.866290
## p13 -0.764228 0.339347 -2.252 0.024319 *
## p14 -0.162474 0.154473 -1.052 0.292894
## p15 0.060682 0.132382 0.458 0.646674
## p16 -0.369429 0.598109 -0.618 0.536798
## p17 -0.228966 0.183117 -1.250 0.211161
## p18 0.254031 0.346039 0.734 0.462882
## cp4_1 -0.008314 0.003962 -2.098 0.035876 *
## p1401 0.023547 0.135222 0.174 0.861760
## p1432 -0.561140 0.161063 -3.484 0.000494 ***
## p1433 -0.701398 0.160964 -4.357 1.32e-05 ***
## p1434 -0.403692 0.198002 -2.039 0.041468 *
## p1435 -0.113891 0.248170 -0.459 0.646289
## p1602 0.185400 0.156377 1.186 0.235783
## p1603 0.437495 0.161146 2.715 0.006630 **
## p1604 0.287801 0.180450 1.595 0.110733
## p161_91 0.778686 0.143308 5.434 5.52e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 3292.5 on 2388 degrees of freedom
## Residual deviance: 2651.9 on 2277 degrees of freedom
## AIC: 2875.9
##
## Number of Fisher Scoring iterations: 12
# ------------------------------------------------------------
# 4.2 Extraer tabla de coeficientes
# ------------------------------------------------------------
# Guardamos la tabla de coeficientes del modelo.
coeficientes_modelo <- summary(modelo_logistico)$coefficients
# Convertimos la tabla a data frame para poder revisarla y guardarla.
tabla_coeficientes_modelo <- data.frame(
variable = rownames(coeficientes_modelo),
estimacion = coeficientes_modelo[, "Estimate"],
error_estandar = coeficientes_modelo[, "Std. Error"],
valor_z = coeficientes_modelo[, "z value"],
p_value = coeficientes_modelo[, "Pr(>|z|)"],
row.names = NULL
)
# Mostramos la tabla completa.
tabla_coeficientes_modelo
## variable estimacion error_estandar valor_z
## 1 (Intercept) 1.292186837 1.068385e+00 1.20947673
## 2 nom_mun_mvCadereyta Jiménez -0.724251055 2.533688e-01 -2.85848502
## 3 nom_mun_mvCiénega de Flores 0.082537176 3.952349e-01 0.20883070
## 4 nom_mun_mvEl Carmen -1.075988489 3.512504e-01 -3.06330913
## 5 nom_mun_mvGarcía 0.079967603 2.596815e-01 0.30794499
## 6 nom_mun_mvGeneral Escobedo -0.787787253 2.435364e-01 -3.23478301
## 7 nom_mun_mvGeneral Zuazua -0.861272630 3.233417e-01 -2.66366073
## 8 nom_mun_mvGuadalupe -0.214119830 2.525590e-01 -0.84780115
## 9 nom_mun_mvHidalgo -0.316188670 5.159444e-01 -0.61283474
## 10 nom_mun_mvJuárez -0.806990426 2.512924e-01 -3.21135964
## 11 nom_mun_mvMonterrey -1.807559356 2.920815e-01 -6.18854424
## 12 nom_mun_mvPesquería -0.300267034 3.320950e-01 -0.90416007
## 13 nom_mun_mvSalinas Victoria -0.788400592 4.200773e-01 -1.87679902
## 14 nom_mun_mvSan Nicolás de los Garza -0.424022502 2.495591e-01 -1.69908631
## 15 nom_mun_mvSan Pedro Garza García -1.241687392 2.554272e-01 -4.86121873
## 16 nom_mun_mvSanta Catarina -0.575905333 2.530814e-01 -2.27557344
## 17 nom_mun_mvSantiago -1.425448160 2.763702e-01 -5.15774930
## 18 p16710 13.585785342 3.526812e+02 0.03852143
## 19 p16711 -0.221731510 1.329364e+00 -0.16679515
## 20 p16712 1.275578781 1.233179e+00 1.03438215
## 21 p1672 0.871943002 3.079239e-01 2.83168339
## 22 p1673 0.320966943 3.048322e-01 1.05292996
## 23 p1674 0.142168237 3.180686e-01 0.44697345
## 24 p1675 0.075009217 3.621480e-01 0.20712313
## 25 p1676 0.241421595 5.362932e-01 0.45016713
## 26 p1677 1.163274971 6.924907e-01 1.67984211
## 27 p1678 1.648564392 9.591114e-01 1.71884566
## 28 p1679 2.211980564 1.225259e+00 1.80531715
## 29 p882 0.277516831 1.493913e-01 1.85765049
## 30 p883 0.263067535 1.941622e-01 1.35488572
## 31 p884 0.358591999 4.109762e-01 0.87253725
## 32 p522 -0.191565299 2.041259e-01 -0.93846655
## 33 p523 -0.519270924 1.845064e-01 -2.81437938
## 34 p524 -0.302066562 1.857379e-01 -1.62630569
## 35 p525 -0.504132420 1.547356e-01 -3.25802440
## 36 p526 -0.104191487 2.519439e-01 -0.41355039
## 37 p527 -0.842329562 3.084000e-01 -2.73128890
## 38 p528 -0.378139875 1.279064e+00 -0.29563795
## 39 p529 -0.617522619 3.073194e-01 -2.00938398
## 40 cp1 -0.048294546 3.986706e-02 -1.21138983
## 41 cp52 1.234135495 6.614397e-01 1.86583214
## 42 cp53 -0.083135678 1.809033e-01 -0.45955859
## 43 p591 0.158598881 1.489530e-01 1.06475807
## 44 p612 0.323361034 1.402339e-01 2.30586954
## 45 p613 0.271053527 1.386993e-01 1.95425355
## 46 p614 0.326973314 2.595994e-01 1.25953038
## 47 p62_110 -0.417648685 3.846788e-01 -1.08570750
## 48 p62_12 -0.384661533 4.968026e-01 -0.77427433
## 49 p62_13 -0.631331247 4.862307e-01 -1.29841915
## 50 p62_14 -0.348938358 4.394606e-01 -0.79401520
## 51 p62_15 -0.259642596 3.580193e-01 -0.72521947
## 52 p62_16 -0.390322502 3.640165e-01 -1.07226602
## 53 p62_17 -0.423884141 3.440628e-01 -1.23199656
## 54 p62_18 -0.332245560 3.413970e-01 -0.97319415
## 55 p62_19 -0.473175253 3.592581e-01 -1.31708984
## 56 p62_210 0.139388534 4.425492e-01 0.31496729
## 57 p62_22 -0.151280828 5.267439e-01 -0.28719994
## 58 p62_23 0.165137728 4.805438e-01 0.34364757
## 59 p62_24 -0.161417088 4.270187e-01 -0.37800941
## 60 p62_25 0.490577390 3.748244e-01 1.30881924
## 61 p62_26 0.320581276 3.834132e-01 0.83612484
## 62 p62_27 0.343937065 3.722596e-01 0.92391727
## 63 p62_28 0.265301386 3.726276e-01 0.71197465
## 64 p62_29 0.458361208 3.912966e-01 1.17139073
## 65 p62_410 -0.456807445 3.392678e-01 -1.34645082
## 66 p62_42 0.548927992 4.392173e-01 1.24978673
## 67 p62_43 0.061082671 3.710591e-01 0.16461709
## 68 p62_44 -0.183608556 3.617013e-01 -0.50762488
## 69 p62_45 0.328507142 3.014547e-01 1.08973964
## 70 p62_46 -0.098897871 3.062356e-01 -0.32294704
## 71 p62_47 0.336448001 2.962558e-01 1.13566741
## 72 p62_48 -0.032387082 2.822027e-01 -0.11476533
## 73 p62_49 -0.043126990 2.966249e-01 -0.14539235
## 74 p62_510 -0.767007482 9.170366e-01 -0.83639793
## 75 p62_52 0.920318745 1.289458e+00 0.71372501
## 76 p62_53 0.920714028 1.682125e+00 0.54735177
## 77 p62_54 0.631209751 1.084711e+00 0.58191497
## 78 p62_55 0.479813450 9.855938e-01 0.48682676
## 79 p62_56 -0.310822668 9.559258e-01 -0.32515353
## 80 p62_57 -0.073937433 9.353193e-01 -0.07905047
## 81 p62_58 -0.250275713 9.205897e-01 -0.27186456
## 82 p62_59 -0.630697910 9.167998e-01 -0.68793413
## 83 p6517 -0.357408942 2.475024e-01 -1.44406277
## 84 p652 -0.282053445 1.474279e-01 -1.91316160
## 85 p653 -0.107872749 2.319651e-01 -0.46503864
## 86 p654 -0.006025787 1.513855e-01 -0.03980427
## 87 p655 0.510495408 2.604454e-01 1.96008637
## 88 p656 -0.100419442 2.146957e-01 -0.46772925
## 89 p65Otro -0.821910065 6.505466e-01 -1.26341468
## 90 p811 -0.285591223 1.419343e-01 -2.01213606
## 91 p83_12 0.480071281 1.439679e-01 3.33457213
## 92 p83_13 0.057605379 1.537137e-01 0.37475763
## 93 p83_14 0.711932728 3.906589e-01 1.82238964
## 94 usa_transporte_publico1 0.278125354 1.080270e-01 2.57459086
## 95 p49 0.073160260 6.518094e-02 1.12241793
## 96 p12 0.054589716 3.242203e-01 0.16837231
## 97 p13 -0.764227811 3.393470e-01 -2.25205398
## 98 p14 -0.162473521 1.544726e-01 -1.05179512
## 99 p15 0.060682302 1.323821e-01 0.45838766
## 100 p16 -0.369429467 5.981091e-01 -0.61766233
## 101 p17 -0.228966148 1.831173e-01 -1.25037943
## 102 p18 0.254030595 3.460390e-01 0.73410981
## 103 cp4_1 -0.008314283 3.962335e-03 -2.09832898
## 104 p1401 0.023546753 1.352223e-01 0.17413365
## 105 p1432 -0.561139821 1.610630e-01 -3.48397819
## 106 p1433 -0.701397682 1.609643e-01 -4.35747369
## 107 p1434 -0.403692200 1.980024e-01 -2.03882492
## 108 p1435 -0.113890917 2.481700e-01 -0.45892300
## 109 p1602 0.185399861 1.563772e-01 1.18559374
## 110 p1603 0.437494638 1.611461e-01 2.71489466
## 111 p1604 0.287801197 1.804499e-01 1.59490926
## 112 p161_91 0.778686334 1.433076e-01 5.43367002
## p_value
## 1 2.264797e-01
## 2 4.256692e-03
## 3 8.345804e-01
## 4 2.189038e-03
## 5 7.581242e-01
## 6 1.217352e-03
## 7 7.729548e-03
## 8 3.965487e-01
## 9 5.399856e-01
## 10 1.321085e-03
## 11 6.072237e-10
## 12 3.659105e-01
## 13 6.054565e-02
## 14 8.930292e-02
## 15 1.166653e-06
## 16 2.287155e-02
## 17 2.499360e-07
## 18 9.692719e-01
## 19 8.675312e-01
## 20 3.009575e-01
## 21 4.630367e-03
## 22 2.923731e-01
## 23 6.548942e-01
## 24 8.359137e-01
## 25 6.525899e-01
## 26 9.298804e-02
## 27 8.564248e-02
## 28 7.102507e-02
## 29 6.321866e-02
## 30 1.754540e-01
## 31 3.829154e-01
## 32 3.480047e-01
## 33 4.887151e-03
## 34 1.038846e-01
## 35 1.121908e-03
## 36 6.792034e-01
## 37 6.308714e-03
## 38 7.675066e-01
## 39 4.449643e-02
## 40 2.257460e-01
## 41 6.206485e-02
## 42 6.458331e-01
## 43 2.869854e-01
## 44 2.111792e-02
## 45 5.067124e-02
## 46 2.078388e-01
## 47 2.776084e-01
## 48 4.387686e-01
## 49 1.941433e-01
## 50 4.271866e-01
## 51 4.683174e-01
## 52 2.836006e-01
## 53 2.179504e-01
## 54 3.304568e-01
## 55 1.878085e-01
## 56 7.527865e-01
## 57 7.739592e-01
## 58 7.311113e-01
## 59 7.054236e-01
## 60 1.905956e-01
## 61 4.030847e-01
## 62 3.555294e-01
## 63 4.764805e-01
## 64 2.414418e-01
## 65 1.781572e-01
## 66 2.113775e-01
## 67 8.692454e-01
## 68 6.117164e-01
## 69 2.758278e-01
## 70 7.467354e-01
## 71 2.560958e-01
## 72 9.086311e-01
## 73 8.844011e-01
## 74 4.029311e-01
## 75 4.753972e-01
## 76 5.841371e-01
## 77 5.606240e-01
## 78 6.263811e-01
## 79 7.450649e-01
## 80 9.369925e-01
## 81 7.857262e-01
## 82 4.914943e-01
## 83 1.487213e-01
## 84 5.572737e-02
## 85 6.419038e-01
## 86 9.682492e-01
## 87 4.998570e-02
## 88 6.399782e-01
## 89 2.064402e-01
## 90 4.420560e-02
## 91 8.543074e-04
## 92 7.078407e-01
## 93 6.839589e-02
## 94 1.003587e-02
## 95 2.616848e-01
## 96 8.662904e-01
## 97 2.431886e-02
## 98 2.928936e-01
## 99 6.466740e-01
## 100 5.367979e-01
## 101 2.111610e-01
## 102 4.628818e-01
## 103 3.587609e-02
## 104 8.617604e-01
## 105 4.940197e-04
## 106 1.315723e-05
## 107 4.146750e-02
## 108 6.462895e-01
## 109 2.357828e-01
## 110 6.629686e-03
## 111 1.107325e-01
## 112 5.520663e-08
# ------------------------------------------------------------
# 4.3 Marcar variables con p-value menor a 0.05
# ------------------------------------------------------------
# Agregamos una columna para identificar resultados con p < 0.05.
tabla_coeficientes_modelo$significativo_005 <- ifelse(
tabla_coeficientes_modelo$p_value < 0.05,
"Sí",
"No"
)
# Mostramos solo las filas con p-value menor a 0.05.
tabla_coeficientes_significativos <- tabla_coeficientes_modelo[
tabla_coeficientes_modelo$p_value < 0.05,
]
tabla_coeficientes_significativos
## variable estimacion error_estandar valor_z
## 2 nom_mun_mvCadereyta Jiménez -0.724251055 0.253368848 -2.858485
## 4 nom_mun_mvEl Carmen -1.075988489 0.351250378 -3.063309
## 6 nom_mun_mvGeneral Escobedo -0.787787253 0.243536352 -3.234783
## 7 nom_mun_mvGeneral Zuazua -0.861272630 0.323341715 -2.663661
## 10 nom_mun_mvJuárez -0.806990426 0.251292448 -3.211360
## 11 nom_mun_mvMonterrey -1.807559356 0.292081511 -6.188544
## 15 nom_mun_mvSan Pedro Garza García -1.241687392 0.255427180 -4.861219
## 16 nom_mun_mvSanta Catarina -0.575905333 0.253081409 -2.275573
## 17 nom_mun_mvSantiago -1.425448160 0.276370191 -5.157749
## 21 p1672 0.871943002 0.307923903 2.831683
## 33 p523 -0.519270924 0.184506370 -2.814379
## 35 p525 -0.504132420 0.154735618 -3.258024
## 37 p527 -0.842329562 0.308400024 -2.731289
## 39 p529 -0.617522619 0.307319370 -2.009384
## 44 p612 0.323361034 0.140233880 2.305870
## 87 p655 0.510495408 0.260445363 1.960086
## 90 p811 -0.285591223 0.141934350 -2.012136
## 91 p83_12 0.480071281 0.143967880 3.334572
## 94 usa_transporte_publico1 0.278125354 0.108027011 2.574591
## 97 p13 -0.764227811 0.339347022 -2.252054
## 103 cp4_1 -0.008314283 0.003962335 -2.098329
## 105 p1432 -0.561139821 0.161062954 -3.483978
## 106 p1433 -0.701397682 0.160964295 -4.357474
## 107 p1434 -0.403692200 0.198002387 -2.038825
## 110 p1603 0.437494638 0.161146082 2.714895
## 112 p161_91 0.778686334 0.143307623 5.433670
## p_value significativo_005
## 2 4.256692e-03 Sí
## 4 2.189038e-03 Sí
## 6 1.217352e-03 Sí
## 7 7.729548e-03 Sí
## 10 1.321085e-03 Sí
## 11 6.072237e-10 Sí
## 15 1.166653e-06 Sí
## 16 2.287155e-02 Sí
## 17 2.499360e-07 Sí
## 21 4.630367e-03 Sí
## 33 4.887151e-03 Sí
## 35 1.121908e-03 Sí
## 37 6.308714e-03 Sí
## 39 4.449643e-02 Sí
## 44 2.111792e-02 Sí
## 87 4.998570e-02 Sí
## 90 4.420560e-02 Sí
## 91 8.543074e-04 Sí
## 94 1.003587e-02 Sí
## 97 2.431886e-02 Sí
## 103 3.587609e-02 Sí
## 105 4.940197e-04 Sí
## 106 1.315723e-05 Sí
## 107 4.146750e-02 Sí
## 110 6.629686e-03 Sí
## 112 5.520663e-08 Sí
# ------------------------------------------------------------
# 4.4 Calcular odds ratios
# ------------------------------------------------------------
# En regresión logística, exp(coeficiente) se interpreta como odds ratio.
# Esto ayuda a ver si una variable aumenta o reduce las posibilidades relativas
# de reportar problemas de agua.
tabla_coeficientes_modelo$odds_ratio <- exp(
tabla_coeficientes_modelo$estimacion
)
# Mostramos la tabla con odds ratio.
tabla_coeficientes_modelo
## variable estimacion error_estandar valor_z
## 1 (Intercept) 1.292186837 1.068385e+00 1.20947673
## 2 nom_mun_mvCadereyta Jiménez -0.724251055 2.533688e-01 -2.85848502
## 3 nom_mun_mvCiénega de Flores 0.082537176 3.952349e-01 0.20883070
## 4 nom_mun_mvEl Carmen -1.075988489 3.512504e-01 -3.06330913
## 5 nom_mun_mvGarcía 0.079967603 2.596815e-01 0.30794499
## 6 nom_mun_mvGeneral Escobedo -0.787787253 2.435364e-01 -3.23478301
## 7 nom_mun_mvGeneral Zuazua -0.861272630 3.233417e-01 -2.66366073
## 8 nom_mun_mvGuadalupe -0.214119830 2.525590e-01 -0.84780115
## 9 nom_mun_mvHidalgo -0.316188670 5.159444e-01 -0.61283474
## 10 nom_mun_mvJuárez -0.806990426 2.512924e-01 -3.21135964
## 11 nom_mun_mvMonterrey -1.807559356 2.920815e-01 -6.18854424
## 12 nom_mun_mvPesquería -0.300267034 3.320950e-01 -0.90416007
## 13 nom_mun_mvSalinas Victoria -0.788400592 4.200773e-01 -1.87679902
## 14 nom_mun_mvSan Nicolás de los Garza -0.424022502 2.495591e-01 -1.69908631
## 15 nom_mun_mvSan Pedro Garza García -1.241687392 2.554272e-01 -4.86121873
## 16 nom_mun_mvSanta Catarina -0.575905333 2.530814e-01 -2.27557344
## 17 nom_mun_mvSantiago -1.425448160 2.763702e-01 -5.15774930
## 18 p16710 13.585785342 3.526812e+02 0.03852143
## 19 p16711 -0.221731510 1.329364e+00 -0.16679515
## 20 p16712 1.275578781 1.233179e+00 1.03438215
## 21 p1672 0.871943002 3.079239e-01 2.83168339
## 22 p1673 0.320966943 3.048322e-01 1.05292996
## 23 p1674 0.142168237 3.180686e-01 0.44697345
## 24 p1675 0.075009217 3.621480e-01 0.20712313
## 25 p1676 0.241421595 5.362932e-01 0.45016713
## 26 p1677 1.163274971 6.924907e-01 1.67984211
## 27 p1678 1.648564392 9.591114e-01 1.71884566
## 28 p1679 2.211980564 1.225259e+00 1.80531715
## 29 p882 0.277516831 1.493913e-01 1.85765049
## 30 p883 0.263067535 1.941622e-01 1.35488572
## 31 p884 0.358591999 4.109762e-01 0.87253725
## 32 p522 -0.191565299 2.041259e-01 -0.93846655
## 33 p523 -0.519270924 1.845064e-01 -2.81437938
## 34 p524 -0.302066562 1.857379e-01 -1.62630569
## 35 p525 -0.504132420 1.547356e-01 -3.25802440
## 36 p526 -0.104191487 2.519439e-01 -0.41355039
## 37 p527 -0.842329562 3.084000e-01 -2.73128890
## 38 p528 -0.378139875 1.279064e+00 -0.29563795
## 39 p529 -0.617522619 3.073194e-01 -2.00938398
## 40 cp1 -0.048294546 3.986706e-02 -1.21138983
## 41 cp52 1.234135495 6.614397e-01 1.86583214
## 42 cp53 -0.083135678 1.809033e-01 -0.45955859
## 43 p591 0.158598881 1.489530e-01 1.06475807
## 44 p612 0.323361034 1.402339e-01 2.30586954
## 45 p613 0.271053527 1.386993e-01 1.95425355
## 46 p614 0.326973314 2.595994e-01 1.25953038
## 47 p62_110 -0.417648685 3.846788e-01 -1.08570750
## 48 p62_12 -0.384661533 4.968026e-01 -0.77427433
## 49 p62_13 -0.631331247 4.862307e-01 -1.29841915
## 50 p62_14 -0.348938358 4.394606e-01 -0.79401520
## 51 p62_15 -0.259642596 3.580193e-01 -0.72521947
## 52 p62_16 -0.390322502 3.640165e-01 -1.07226602
## 53 p62_17 -0.423884141 3.440628e-01 -1.23199656
## 54 p62_18 -0.332245560 3.413970e-01 -0.97319415
## 55 p62_19 -0.473175253 3.592581e-01 -1.31708984
## 56 p62_210 0.139388534 4.425492e-01 0.31496729
## 57 p62_22 -0.151280828 5.267439e-01 -0.28719994
## 58 p62_23 0.165137728 4.805438e-01 0.34364757
## 59 p62_24 -0.161417088 4.270187e-01 -0.37800941
## 60 p62_25 0.490577390 3.748244e-01 1.30881924
## 61 p62_26 0.320581276 3.834132e-01 0.83612484
## 62 p62_27 0.343937065 3.722596e-01 0.92391727
## 63 p62_28 0.265301386 3.726276e-01 0.71197465
## 64 p62_29 0.458361208 3.912966e-01 1.17139073
## 65 p62_410 -0.456807445 3.392678e-01 -1.34645082
## 66 p62_42 0.548927992 4.392173e-01 1.24978673
## 67 p62_43 0.061082671 3.710591e-01 0.16461709
## 68 p62_44 -0.183608556 3.617013e-01 -0.50762488
## 69 p62_45 0.328507142 3.014547e-01 1.08973964
## 70 p62_46 -0.098897871 3.062356e-01 -0.32294704
## 71 p62_47 0.336448001 2.962558e-01 1.13566741
## 72 p62_48 -0.032387082 2.822027e-01 -0.11476533
## 73 p62_49 -0.043126990 2.966249e-01 -0.14539235
## 74 p62_510 -0.767007482 9.170366e-01 -0.83639793
## 75 p62_52 0.920318745 1.289458e+00 0.71372501
## 76 p62_53 0.920714028 1.682125e+00 0.54735177
## 77 p62_54 0.631209751 1.084711e+00 0.58191497
## 78 p62_55 0.479813450 9.855938e-01 0.48682676
## 79 p62_56 -0.310822668 9.559258e-01 -0.32515353
## 80 p62_57 -0.073937433 9.353193e-01 -0.07905047
## 81 p62_58 -0.250275713 9.205897e-01 -0.27186456
## 82 p62_59 -0.630697910 9.167998e-01 -0.68793413
## 83 p6517 -0.357408942 2.475024e-01 -1.44406277
## 84 p652 -0.282053445 1.474279e-01 -1.91316160
## 85 p653 -0.107872749 2.319651e-01 -0.46503864
## 86 p654 -0.006025787 1.513855e-01 -0.03980427
## 87 p655 0.510495408 2.604454e-01 1.96008637
## 88 p656 -0.100419442 2.146957e-01 -0.46772925
## 89 p65Otro -0.821910065 6.505466e-01 -1.26341468
## 90 p811 -0.285591223 1.419343e-01 -2.01213606
## 91 p83_12 0.480071281 1.439679e-01 3.33457213
## 92 p83_13 0.057605379 1.537137e-01 0.37475763
## 93 p83_14 0.711932728 3.906589e-01 1.82238964
## 94 usa_transporte_publico1 0.278125354 1.080270e-01 2.57459086
## 95 p49 0.073160260 6.518094e-02 1.12241793
## 96 p12 0.054589716 3.242203e-01 0.16837231
## 97 p13 -0.764227811 3.393470e-01 -2.25205398
## 98 p14 -0.162473521 1.544726e-01 -1.05179512
## 99 p15 0.060682302 1.323821e-01 0.45838766
## 100 p16 -0.369429467 5.981091e-01 -0.61766233
## 101 p17 -0.228966148 1.831173e-01 -1.25037943
## 102 p18 0.254030595 3.460390e-01 0.73410981
## 103 cp4_1 -0.008314283 3.962335e-03 -2.09832898
## 104 p1401 0.023546753 1.352223e-01 0.17413365
## 105 p1432 -0.561139821 1.610630e-01 -3.48397819
## 106 p1433 -0.701397682 1.609643e-01 -4.35747369
## 107 p1434 -0.403692200 1.980024e-01 -2.03882492
## 108 p1435 -0.113890917 2.481700e-01 -0.45892300
## 109 p1602 0.185399861 1.563772e-01 1.18559374
## 110 p1603 0.437494638 1.611461e-01 2.71489466
## 111 p1604 0.287801197 1.804499e-01 1.59490926
## 112 p161_91 0.778686334 1.433076e-01 5.43367002
## p_value significativo_005 odds_ratio
## 1 2.264797e-01 No 3.640740e+00
## 2 4.256692e-03 Sí 4.846874e-01
## 3 8.345804e-01 No 1.086039e+00
## 4 2.189038e-03 Sí 3.409606e-01
## 5 7.581242e-01 No 1.083252e+00
## 6 1.217352e-03 Sí 4.548502e-01
## 7 7.729548e-03 Sí 4.226239e-01
## 8 3.965487e-01 No 8.072516e-01
## 9 5.399856e-01 No 7.289219e-01
## 10 1.321085e-03 Sí 4.461989e-01
## 11 6.072237e-10 Sí 1.640540e-01
## 12 3.659105e-01 No 7.406204e-01
## 13 6.054565e-02 No 4.545713e-01
## 14 8.930292e-02 No 6.544092e-01
## 15 1.166653e-06 Sí 2.888963e-01
## 16 2.287155e-02 Sí 5.621957e-01
## 17 2.499360e-07 Sí 2.404007e-01
## 18 9.692719e-01 No 7.947520e+05
## 19 8.675312e-01 No 8.011304e-01
## 20 3.009575e-01 No 3.580773e+00
## 21 4.630367e-03 Sí 2.391553e+00
## 22 2.923731e-01 No 1.378460e+00
## 23 6.548942e-01 No 1.152771e+00
## 24 8.359137e-01 No 1.077894e+00
## 25 6.525899e-01 No 1.273058e+00
## 26 9.298804e-02 No 3.200397e+00
## 27 8.564248e-02 No 5.199510e+00
## 28 7.102507e-02 No 9.133789e+00
## 29 6.321866e-02 No 1.319848e+00
## 30 1.754540e-01 No 1.300915e+00
## 31 3.829154e-01 No 1.431313e+00
## 32 3.480047e-01 No 8.256657e-01
## 33 4.887151e-03 Sí 5.949542e-01
## 34 1.038846e-01 No 7.392889e-01
## 35 1.121908e-03 Sí 6.040294e-01
## 36 6.792034e-01 No 9.010527e-01
## 37 6.308714e-03 Sí 4.307060e-01
## 38 7.675066e-01 No 6.851347e-01
## 39 4.449643e-02 Sí 5.392788e-01
## 40 2.257460e-01 No 9.528531e-01
## 41 6.206485e-02 No 3.435407e+00
## 42 6.458331e-01 No 9.202263e-01
## 43 2.869854e-01 No 1.171868e+00
## 44 2.111792e-02 Sí 1.381764e+00
## 45 5.067124e-02 No 1.311345e+00
## 46 2.078388e-01 No 1.386764e+00
## 47 2.776084e-01 No 6.585936e-01
## 48 4.387686e-01 No 6.806810e-01
## 49 1.941433e-01 No 5.318833e-01
## 50 4.271866e-01 No 7.054366e-01
## 51 4.683174e-01 No 7.713272e-01
## 52 2.836006e-01 No 6.768386e-01
## 53 2.179504e-01 No 6.544997e-01
## 54 3.304568e-01 No 7.173112e-01
## 55 1.878085e-01 No 6.230209e-01
## 56 7.527865e-01 No 1.149571e+00
## 57 7.739592e-01 No 8.596063e-01
## 58 7.311113e-01 No 1.179556e+00
## 59 7.054236e-01 No 8.509371e-01
## 60 1.905956e-01 No 1.633259e+00
## 61 4.030847e-01 No 1.377928e+00
## 62 3.555294e-01 No 1.410490e+00
## 63 4.764805e-01 No 1.303824e+00
## 64 2.414418e-01 No 1.581480e+00
## 65 1.781572e-01 No 6.333023e-01
## 66 2.113775e-01 No 1.731396e+00
## 67 8.692454e-01 No 1.062987e+00
## 68 6.117164e-01 No 8.322615e-01
## 69 2.758278e-01 No 1.388893e+00
## 70 7.467354e-01 No 9.058352e-01
## 71 2.560958e-01 No 1.399966e+00
## 72 9.086311e-01 No 9.681318e-01
## 73 8.844011e-01 No 9.577898e-01
## 74 4.029311e-01 No 4.644007e-01
## 75 4.753972e-01 No 2.510090e+00
## 76 5.841371e-01 No 2.511083e+00
## 77 5.606240e-01 No 1.879883e+00
## 78 6.263811e-01 No 1.615773e+00
## 79 7.450649e-01 No 7.328438e-01
## 80 9.369925e-01 No 9.287298e-01
## 81 7.857262e-01 No 7.785861e-01
## 82 4.914943e-01 No 5.322202e-01
## 83 1.487213e-01 No 6.994864e-01
## 84 5.572737e-02 No 7.542334e-01
## 85 6.419038e-01 No 8.977418e-01
## 86 9.682492e-01 No 9.939923e-01
## 87 4.998570e-02 Sí 1.666116e+00
## 88 6.399782e-01 No 9.044580e-01
## 89 2.064402e-01 No 4.395912e-01
## 90 4.420560e-02 Sí 7.515698e-01
## 91 8.543074e-04 Sí 1.616190e+00
## 92 7.078407e-01 No 1.059297e+00
## 93 6.839589e-02 No 2.037926e+00
## 94 1.003587e-02 Sí 1.320652e+00
## 95 2.616848e-01 No 1.075903e+00
## 96 8.662904e-01 No 1.056107e+00
## 97 2.431886e-02 Sí 4.656934e-01
## 98 2.928936e-01 No 8.500386e-01
## 99 6.466740e-01 No 1.062561e+00
## 100 5.367979e-01 No 6.911285e-01
## 101 2.111610e-01 No 7.953555e-01
## 102 4.628818e-01 No 1.289211e+00
## 103 3.587609e-02 Sí 9.917202e-01
## 104 8.617604e-01 No 1.023826e+00
## 105 4.940197e-04 Sí 5.705584e-01
## 106 1.315723e-05 Sí 4.958917e-01
## 107 4.146750e-02 Sí 6.678497e-01
## 108 6.462895e-01 No 8.923553e-01
## 109 2.357828e-01 No 1.203700e+00
## 110 6.629686e-03 Sí 1.548822e+00
## 111 1.107325e-01 No 1.333492e+00
## 112 5.520663e-08 Sí 2.178608e+00
# ------------------------------------------------------------
# 4.5 Guardar tablas para el artículo
# ------------------------------------------------------------
write.csv(
tabla_coeficientes_modelo,
"tabla_coeficientes_modelo_logistico.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
write.csv(
tabla_coeficientes_significativos,
"tabla_coeficientes_significativos_modelo_logistico.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
# ============================================================
# RESULTADO 5. Tabla oficial de métricas del modelo base
# ============================================================
# Este bloque organiza las métricas finales del modelo logístico base.
# No cambia la base, no cambia el modelo y no modifica train/test.
# ------------------------------------------------------------
# 5.1 Crear tabla de validación cruzada
# ------------------------------------------------------------
tabla_validacion_cruzada <- data.frame(
metrica = c(
"Accuracy promedio en validación cruzada",
"Desviación estándar del accuracy en validación cruzada"
),
valor = c(
mean(accuracy_folds),
sd(accuracy_folds)
)
)
tabla_validacion_cruzada
## metrica valor
## 1 Accuracy promedio en validación cruzada 0.677117512
## 2 Desviación estándar del accuracy en validación cruzada 0.005291036
# ------------------------------------------------------------
# 5.2 Crear tabla de evaluación en test
# ------------------------------------------------------------
tabla_metricas_test <- data.frame(
metrica = c(
"Accuracy en test",
"Sensibilidad en test",
"Especificidad en test"
),
valor = c(
accuracy_test,
sensibilidad,
especificidad
)
)
tabla_metricas_test
## metrica valor
## 1 Accuracy en test 0.6777344
## 2 Sensibilidad en test 0.7401709
## 3 Especificidad en test 0.5945330
# ------------------------------------------------------------
# 5.3 Crear tabla de matriz de confusión
# ------------------------------------------------------------
tabla_matriz_confusion <- as.data.frame.matrix(matriz_confusion)
tabla_matriz_confusion
## 0 1
## 0 261 178
## 1 152 433
# ------------------------------------------------------------
# 5.4 Guardar tablas para el artículo
# ------------------------------------------------------------
write.csv(
tabla_validacion_cruzada,
"tabla_validacion_cruzada_modelo_base.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
write.csv(
tabla_metricas_test,
"tabla_metricas_test_modelo_base.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
write.csv(
tabla_matriz_confusion,
"tabla_matriz_confusion_modelo_base.csv",
row.names = TRUE,
fileEncoding = "UTF-8"
)
# ============================================================
# RESULTADO 6. Tabla oficial del torneo de modelos
# ============================================================
# Esta tabla resume los resultados de la Actividad M3.1.
# No vuelve a entrenar modelos; solo organiza los resultados finales
# del torneo de modelos para usarlos en el artículo.
# ------------------------------------------------------------
# 6.1 Crear tabla comparativa del torneo
# ------------------------------------------------------------
tabla_torneo_modelos <- data.frame(
modelo = c(
"Regresión logística polinomial",
"GAM",
"Árbol de clasificación"
),
auc = c(
0.6825,
0.6830,
0.6110
),
accuracy = c(
0.6445,
0.6504,
0.6494
),
sensibilidad = c(
0.7436,
0.7436,
0.8803
),
especificidad = c(
0.5125,
0.5262,
0.3417
)
)
# Mostramos la tabla.
tabla_torneo_modelos
## modelo auc accuracy sensibilidad especificidad
## 1 Regresión logística polinomial 0.6825 0.6445 0.7436 0.5125
## 2 GAM 0.6830 0.6504 0.7436 0.5262
## 3 Árbol de clasificación 0.6110 0.6494 0.8803 0.3417
# ------------------------------------------------------------
# 6.2 Identificar el modelo con mejor AUC
# ------------------------------------------------------------
# El AUC ayuda a evaluar qué tan bien separa el modelo
# entre hogares con y sin problemas de agua.
mejor_auc <- tabla_torneo_modelos[
tabla_torneo_modelos$auc == max(tabla_torneo_modelos$auc),
]
mejor_auc
## modelo auc accuracy sensibilidad especificidad
## 2 GAM 0.683 0.6504 0.7436 0.5262
# ------------------------------------------------------------
# 6.3 Identificar el modelo con mayor sensibilidad
# ------------------------------------------------------------
# La sensibilidad indica qué tan bien detecta hogares
# que sí reportaron al menos un problema de agua.
mejor_sensibilidad <- tabla_torneo_modelos[
tabla_torneo_modelos$sensibilidad == max(tabla_torneo_modelos$sensibilidad),
]
mejor_sensibilidad
## modelo auc accuracy sensibilidad especificidad
## 3 Árbol de clasificación 0.611 0.6494 0.8803 0.3417
# ------------------------------------------------------------
# 6.4 Guardar tabla para el artículo
# ------------------------------------------------------------
write.csv(
tabla_torneo_modelos,
"tabla_torneo_modelos_articulo.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)