============================================================

BLOQUE 1. Carga y revisión inicial de bases de datos

============================================================

# ------------------------------------------------------------
# 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]

Observamos que muchas variables vienen codificadas como texto aunque representan categorías numéricas, por lo que será necesario revisar su formato antes del modelado.

# ------------------------------------------------------------
# 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)

Todas las variables seleccionadas fueron encontradas en la base de datos.

# ------------------------------------------------------------
# 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  
##                                                          
##                                                          
##                                                          
## 

La base de revisión quedó conformada por 4,955 observaciones y 54 variables seleccionadas para el análisis, además, la variable dependiente al_menos_un_problema_agua muestra que 2,672 hogares reportan al menos un problema de agua y 2,283 no lo reportan, por lo que existe suficiente presencia del fenómeno para continuar con un modelo de clasificación binaria.

# ------------------------------------------------------------
# 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

La mayoría de las variables seleccionadas no presenta valores faltantes, pero sí hay variables con porcentajes altos de NA por saltos del cuestionario como p57 con 32.17%, p58 con 32.09%, p15 con 40.06%, p17 con 40.06% y tiempo_total_traslado con 40.24%

# ------------------------------------------------------------
# 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

Las tablas de frecuencia confirman que varias variables tienen categorías válidas suficientes para explorarse, pero también muestran códigos especiales como 8,888, 8888, 9,999 o 9999, especialmente en variables de ingreso, desarrollo urbano, ambiente y gobernanza; por ello, antes de modelar será necesario recodificar esos valores como faltantes y convertir correctamente las variables categóricas y numéricas según su tipo.

============================================================

BLOQUE 2. Limpieza de datos

============================================================

# 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

Después de la corrección, la limpieza ya quedó suficientemente estable para avanzar: la variable dependiente está correctamente codificada como binaria, las variables con muchos valores faltantes quedaron fuera del modelo principal y la base limpia ya no conserva NA en la versión preliminar de modelado. El siguiente paso es trabajar con un conjunto más compacto de predictores para evitar que el modelo sea demasiado grande o difícil de interpretar. Tambipén, como la variable dependiente es 0/1, seguimos con la lógica de regresión logística, porque este modelo predice la probabilidad de pertenecer a una categoría.

============================================================

BLOQUE 3. Definición del target y predictores

============================================================

# ------------------------------------------------------------
# 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)

Todas las variables seleccionadas para el modelo existen dentro de la base limpia.

##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

En este bloque dejamos lista la base final para modelar. 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. También seleccionamos variables que permiten analizar la inseguridad hídrica desde distintas dimensiones: territorio, ingreso, vivienda, servicios urbanos, entorno ambiental, movilidad, perfil sociodemográfico y gobernanza local. Después de la limpieza, la base final quedó con 3,413 observaciones y 24 variables, sin valores faltantes. Además, cp5 fue corregida como variable categórica antes de hacer la partición train/test. Por lo tanto, la base ya está lista para continuar con el modelo.

Al revisar la variable p65, observamos que algunas categorías tenían muy pocos casos, lo que generaba problemas al dividir la base en entrenamiento y prueba. En específico, algunas categorías podían quedar únicamente en el conjunto de prueba y no en el de entrenamiento, impidiendo que el modelo generara predicciones. Para evitar este problema, agrupamos las categorías con menos de 20 observaciones en una categoría llamada “Otro”. Esta decisión permite conservar la variable en el modelo, pero con categorías más estables y adecuadas para la regresión logística.

Ajuste metodológico sobre cp3:cp3 se excluye del modelo principal porque mide el género de la persona encuestada y no una condición directa del hogar o del territorio. Además, una de sus categorías tiene muy pocos casos, lo que genera problemas durante la validación cruzada. Por ello, se conserva solo como variable descriptiva o de contexto, pero no como predictor del modelo.

Durante la validación cruzada apareció un error porque el municipio Los Aldamas estaba presente en un conjunto de validación, pero no en el conjunto de entrenamiento. Esto reveló que la base final todavía incluía municipios fuera del Área Metropolitana de Monterrey. Como nuestra pregunta de investigación está delimitada al AMM, filtramos la base para conservar únicamente municipios metropolitanos antes de dividir los datos y ajustar el modelo. Esta decisión mantiene la coherencia entre la pregunta de investigación, la base de análisis y el modelo predictivo.

##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.

============================================================

BLOQUE 4. Partición de datos: train y test

============================================================

# 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

La partición de la base se realizó correctamente. El conjunto de entrenamiento quedó con 2,389 observaciones y el conjunto de prueba con 1,024 observaciones, sumando las 3,413 observaciones de la base final. Además, la distribución de la variable dependiente se mantuvo relativamente parecida en ambos conjuntos: en entrenamiento, 45.5% de los hogares no reportaron problemas de agua y 54.5% sí reportaron al menos un problema; en prueba, 42.87% no reportaron problemas y 57.13% sí reportaron al menos un problema. Esto confirma que la división train/test no alteró de forma grave el balance del target.

============================================================

BLOQUE 5. Modelado: regresión logística

============================================================

# ------------------------------------------------------------
# 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

En este bloque 5, ajustamos un modelo de regresión logística porque nuestra variable dependiente es binaria. Primero entrenamos el modelo con datos_train y el ajuste se realizó correctamente, es decir, el modelo no marcó errores y pudo estimar los resultados.

Después usamos ese modelo para predecir en datos_test. En lugar de dar directamente 0 o 1, la regresión logística primero calcula una probabilidad para cada hogar. Esas probabilidades pueden estar cerca de 0 o cerca de 1, dependiendo de qué tan probable sea que el hogar presente inseguridad hídrica. Además, el modelo logró calcular probabilidades para todos los casos del conjunto de prueba, ya que no se generaron valores faltantes.

Luego convertimos esas probabilidades en categorías usando un punto de corte de 0.5. Esto significa que si la probabilidad era menor a 0.5, el hogar se clasificó como sin problema de agua; y si era igual o mayor a 0.5, se clasificó como hogar con al menos un problema de agua. Con este criterio, el modelo clasificó 479 casos como hogares sin problema de agua y 639 casos como hogares con al menos un problema.

También tomamos con cuidado la variable p65, porque algunas de sus categorías tenían muy pocos casos. Por eso, cualquier agrupación hecha en esta variable debe entenderse como una decisión técnica para que el modelo fuera más estable, no como una categoría con una interpretación sustantiva fuerte.

Con estos resultados, el siguiente paso es evaluar qué tan bien funcionó el modelo usando la matriz de confusión, el accuracy, la sensibilidad y la especificidad.

============================================================

BLOQUE 6. Validación cruzada k-fold

============================================================

# ------------------------------------------------------------
# 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

La validación cruzada con 5 folds muestra que el modelo tiene un desempeño relativamente estable. El accuracy promedio fue de 0.6771, lo que significa que el modelo clasificó correctamente alrededor del 67.7% de los casos en promedio. Además, la desviación estándar fue baja, de 0.0053, lo que indica que los resultados fueron parecidos entre los distintos folds. Esto sugiere que el rendimiento del modelo no depende demasiado de una sola división de los datos.

============================================================

BLOQUE 7. Evaluación del desempeño del modelo

============================================================

# -----------------------------------------------------------
# 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

En este bloque evaluamos el modelo con el conjunto de prueba, es decir, con datos que el modelo no usó para entrenarse. El modelo obtuvo un accuracy de 0.6777, lo que significa que clasificó correctamente alrededor del 67.8% de los hogares. La sensibilidad fue de 0.7402, por lo que el modelo identificó correctamente aproximadamente el 74.0% de los hogares que sí reportaron al menos un problema de agua. La especificidad fue de 0.5945, lo que significa que identificó correctamente cerca del 59.5% de los hogares que no reportaron problemas de agua. En general, el modelo detecta mejor a los hogares con problemas de agua que a los hogares sin problemas. Esto es útil para nuestro tema, pero también muestra que el modelo debe interpretarse como una herramienta exploratoria, no como una predicción perfecta.

En esta actividad construimos un modelo inicial de regresión logística para predecir si un hogar del Área Metropolitana de Monterrey reporta al menos un problema de agua. Primero limpiamos la base, seleccionamos variables relevantes, filtramos el análisis al AMM y dividimos los datos en entrenamiento y prueba. Después ajustamos el modelo, realizamos validación cruzada y evaluamos su desempeño final en el conjunto de prueba. Los resultados muestran que el modelo tiene un rendimiento estable y aceptable: en validación cruzada obtuvo un accuracy promedio de 67.6% y en el conjunto de prueba obtuvo un accuracy de 67.9%. Además, el modelo mostró mayor capacidad para identificar hogares con problemas de agua que hogares sin problemas. Esto sugiere que las variables seleccionadas sí ayudan a encontrar patrones asociados con la inseguridad hídrica, aunque el modelo no permite hacer afirmaciones causales ni debe usarse como predicción definitiva. Para Cómo Vamos Nuevo León, este modelo puede funcionar como una primera herramienta exploratoria para identificar factores económicos, territoriales, urbanos, ambientales y de gobernanza relacionados con la probabilidad de que un hogar reporte problemas de agua.

# ============================================================
# 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")
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:

  • La sensibilidad nos indica la capacidad del modelo para identificar correctamente cuándo un municipio sí va a tener problemas de agua.
  • La especificidad nos indica la capacidad del modelo para reconocer cuándo no habrá problemas de agua.
  • La exactitud (Accuracy) representa el porcentaje de aciertos globales, considerando tanto los casos positivos como los negativos.
  • El área bajo la curva (AUC) mide la habilidad del modelo para distinguir eficazmente entre un municipio con problemas y uno sin ellos.

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 ...

RESULTADOS OFICIALES PARA EL ARTÍCULO

# ============================================================
# 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"
)