## <environment: R_GlobalEnv>

1 Validación del Censo

1.1 Carga de datos

Descarga de datos desde REDCAP.

Leemos el .csv con la data obtenida del censo

1.1.1 Asignación de códigos de comunidad y hogar

# 1. Extraer los códigos directamente desde la columna `id`
datos <- db_hmz_encuesta_individual_v10 %>%
  filter(!is.na(upch_ei_cod_ind)) %>%
  mutate(
    upch_code_proj = substr(id, 1, 2),     # Extrae los primeros 2 dígitos (proyecto)
    upch_code_community = substr(id, 3, 4),    # Extrae los siguientes 2 dígitos (comunidad)
    upch_code_casa = substr(id, 5, 7)         # Extrae los últimos 3 dígitos (hogar)
  ) 

1.1.2 Asignación de nombres de las comunidades

comunidades_dict <- c(
  "01" = "Quistococha",
  "02" = "Zungarococha",
  "03" = "Llanchama",
  "04" = "Varillal",
  "05" = "San Carlos",
  "06" = "El Paujil",
  "07" = "San Lucas",
  "08" = "23 de Febrero",
  "09" = "12 de Abril",
  "10" = "Cahuide"
)

datos <- datos %>%
  mutate(comunidad_nombre = recode(upch_code_community, !!!comunidades_dict))

1.2 Verificación de la geolocalización de hogares

Convertimos la base de datos a una geometría

coordinates <- db_hmz_encuesta_hogar_v10 %>%
  select(id, upch_long, upch_lat)

datos_sf <- datos %>%
  left_join(coordinates, by = "id") %>%
  filter(!is.na(upch_long)) %>%
  filter(!is.na(upch_lat)) %>%
  st_as_sf(coords = c("upch_long", "upch_lat"), crs = 4326)

1.2.1 Ubicación por comunidad para hacer la verificación

# mapview(datos_sf, zcol = "comunidad_nombre")

#leaflet() %>%
#  addTiles(urlTemplate = "https://mt1.google.com/vt/lyrs=s&x={x}&y={y}&z={z}") %>%
#  addPopups(data=datos_sf, popup = datos_sf$id)

pal <- colorFactor(palette = viridis(n = 10), domain = datos_sf$comunidad_nombre)

leaflet(datos_sf) %>%
  addTiles(urlTemplate = "https://mt1.google.com/vt/lyrs=s&x={x}&y={y}&z={z}",
           options = providerTileOptions(maxNativeZoom=19,maxZoom=25)
  ) %>%
  
  # Añade círculos para marcar las ubicaciones
  addCircleMarkers(
    radius = 5,               # Tamaño de los puntos
    fillColor = ~pal(comunidad_nombre),  # Colores distintos por comunidad
    fillOpacity = 1,        # Opacidad del relleno
    stroke = TRUE,            # Borde del círculo
    weight = 1,               # Grosor del borde
    label = ~comunidad_nombre # Etiqueta flotante que muestra la comunidad
  )

1.3 Validación de censados, encuestados y hogares por comunidad

# 1. Calcular los totales

datos_filtrados <- datos %>%
  filter(upch_ei_presente == 1)

conteo <- datos %>%
  group_by(comunidad_nombre) %>%
  summarise(
    total_censados = n(),  # Total de censados
    total_encuestados = sum(!is.na(upch_ei_mosq)),  # Total de encuestados
    total_hogares = n_distinct(id)  # Total de hogares
  ) %>%
  pivot_longer(cols = -comunidad_nombre, names_to = "categoria", values_to = "total")

conteo
## # A tibble: 30 × 3
##    comunidad_nombre categoria         total
##    <chr>            <chr>             <int>
##  1 12 de Abril      total_censados      243
##  2 12 de Abril      total_encuestados   135
##  3 12 de Abril      total_hogares        62
##  4 23 de Febrero    total_censados       12
##  5 23 de Febrero    total_encuestados    11
##  6 23 de Febrero    total_hogares         7
##  7 Cahuide          total_censados      454
##  8 Cahuide          total_encuestados   294
##  9 Cahuide          total_hogares       110
## 10 El Paujil        total_censados      116
## # ℹ 20 more rows

1.3.1 Ploteo de gráficas por comunidad

ggplot(conteo, aes(x = total, y = categoria)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  geom_text(aes(label = total), hjust = -0.2) +  # Etiquetas en cada barra
  labs(
    title = "Conteo de Censados, Encuestados y Hogares",
    x = "Total",
    y = "Categoría"
  ) +
  facet_wrap(~comunidad_nombre) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5),
    axis.text.y = element_text(size = 12),
    axis.text.x = element_text(size = 10)
  )

1.3.2 Análisis de participación de la encuesta

datos_filtrados <- datos %>%
  select(comunidad_nombre, obs_encuesta, upch_ei_presente) %>%
  filter(upch_ei_presente != 1)

datos_parti <- datos_filtrados %>%
  #filter(!is.na(obs_encuesta)) %>%
  mutate(
    no_participa = case_when(
      str_detect(obs_encuesta, "(?i)particip") ~ "No desea",  # Coincide con cualquier forma de "participar"
      TRUE ~ "Otro"  # Si no se encuentra coincidencia, se marca como "No"
    )
  )

conteo_parti <- datos_parti %>%
  group_by(comunidad_nombre) %>%
  summarise(no_desea = sum(no_participa == "No desea"))

conteo_parti
## # A tibble: 10 × 2
##    comunidad_nombre no_desea
##    <chr>               <int>
##  1 12 de Abril             0
##  2 23 de Febrero           0
##  3 Cahuide                 1
##  4 El Paujil               6
##  5 Llanchama               1
##  6 Quistococha            14
##  7 San Carlos              0
##  8 San Lucas               0
##  9 Varillal               19
## 10 Zungarococha           13

1.4 Validación de edad

edades1 <- datos %>%
  mutate(
    upch_ei_fec_nac = ymd(upch_ei_fec_nac),   # Convierte la columna a formato fecha
    edad = floor(interval(start = upch_ei_fec_nac, end = today()) / years(1))  # Calcula la edad en años
  )

datos_niños1 <- edades1 %>%
  filter(edad >= 7)

edades2 <- datos %>%
  mutate(
    upch_ei_fec_nac = ymd(upch_ei_fec_nac),
    edad = if_else(is.na(upch_ei_fec_nac), NA_real_, floor(interval(start = upch_ei_fec_nac, end = today()) / years(1)))
  )

datos_niños2 <- edades2 %>%
  filter(edad >= 7)
conteo_edades <- datos_niños1 %>%
  group_by(comunidad_nombre) %>%
  summarise(
    total_censados = n(),  # Total de censados
    total_encuestados = sum(!is.na(upch_ei_mosq)),  # Total de encuestados
    total_hogares = n_distinct(id)  # Total de hogares
  ) %>%
  pivot_longer(cols = -comunidad_nombre, names_to = "categoria", values_to = "total")


ggplot(conteo_edades, aes(x = total, y = categoria)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  geom_text(aes(label = total), hjust = -0.2) +  # Etiquetas en cada barra
  labs(
    title = "Conteo de Censados, Encuestados y Hogares",
    x = "Total",
    y = "Categoría"
  ) +
  facet_wrap(~comunidad_nombre) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5),
    axis.text.y = element_text(size = 12),
    axis.text.x = element_text(size = 10)
  )

ggplot(edades1, aes(x = edad)) +
  geom_histogram(binwidth = 10, fill = "steelblue", color = "black") +
  labs(
    title = "Distribución del Total de Censados, Encuestados y Hogares",
    x = "Total",
    y = "Frecuencia"
  ) +
  facet_wrap(~comunidad_nombre, scales = "free_y") +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5),
    axis.text.y = element_text(size = 12),
    axis.text.x = element_text(size = 10)
  )
## Warning: Removed 49 rows containing non-finite outside the scale range
## (`stat_bin()`).

1.5 Validación de sexo

datos_niños2 <- datos_niños2 %>%
  filter(!is.na(upch_ei_sexo)) 

# 1. Agrupar por comunidad y sexo, y calcular los totales
conteo_sexo <- datos_niños2 %>%
  group_by(comunidad_nombre, upch_ei_sexo) %>%
  summarise(total_personas = n(), .groups = "drop")  # Suma de personas por sexo
# 2. Crear el gráfico de barras
ggplot(conteo_sexo, aes(x = upch_ei_sexo, y = total_personas, fill = upch_ei_sexo)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = total_personas), vjust = -0.5) +  # Mostrar los valores sobre las barras
  labs(
    title = "Comparación de Hombres y Mujeres por Comunidad",
    x = "Sexo",
    y = "Total de Personas"
  ) +
  facet_wrap(~comunidad_nombre, scales = "free_y") +  # Permite que el eje Y se ajuste automáticamente
  scale_fill_manual(values = c("Masculino" = "#1f77b4", "Femenino" = "#ff7f0e")) +  # Colores personalizados
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1),
    strip.text = element_text(size = 12, face = "bold")
  )

1.6 Validación de DNI (8 dígitos)

# 1. Validar DNI: 8 dígitos y que no sea '00000000' ni '99999999'
datos <- datos %>%
  mutate(
    dni_valido = case_when(
      is.na(upch_ei_dni) ~ "Sin DNI",  
      nchar(upch_ei_dni) == 8 & !upch_ei_dni %in% c("00000000", "99999999") ~ "Válido",
      TRUE ~ "Inválido"
    )
  )

# 2. Conteo de DNIs válidos e inválidos por comunidad
conteo_dni_comunidad <- datos %>%
  group_by(comunidad_nombre, dni_valido) %>%
  summarise(total = n(), .groups = "drop")

# 3. Mostrar el resultado
print(conteo_dni_comunidad)
## # A tibble: 22 × 3
##    comunidad_nombre dni_valido total
##    <chr>            <chr>      <int>
##  1 12 de Abril      Inválido      32
##  2 12 de Abril      Válido       211
##  3 23 de Febrero    Inválido       3
##  4 23 de Febrero    Válido         9
##  5 Cahuide          Inválido      88
##  6 Cahuide          Sin DNI        1
##  7 Cahuide          Válido       365
##  8 El Paujil        Inválido      22
##  9 El Paujil        Válido        94
## 10 Llanchama        Inválido      55
## # ℹ 12 more rows
ggplot(conteo_dni_comunidad, aes(x = comunidad_nombre, y = total, fill = dni_valido)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "Conteo de DNIs por Comunidad",
    x = "Comunidad",
    y = "Cantidad de DNIs"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1)
  )

1.7 Bivariado - Sexo y Embarazo

# 1. Conteo de personas embarazadas por sexo
conteo_embarazo <- datos %>%
  filter(!is.na(upch_ei_embarazada)) %>%  # Filtramos los que tienen datos en la columna de embarazo
  group_by(upch_ei_sexo, upch_ei_embarazada) %>%
  summarise(total = n(), .groups = "drop")

# 2. Visualización del resultado
print(conteo_embarazo)
## # A tibble: 3 × 3
##   upch_ei_sexo upch_ei_embarazada total
##   <fct>        <fct>              <int>
## 1 Femenino     No                  1377
## 2 Femenino     Si                    30
## 3 Masculino    No                     8
ggplot(conteo_embarazo, aes(x = upch_ei_sexo, y = total, fill = as.factor(upch_ei_embarazada))) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "Conteo de personas embarazadas por sexo",
    x = "Sexo",
    y = "Total de personas"
  ) +
  scale_fill_manual(name = "Embarazada", values = c("Si" = "#1f77b4", "No" = "#ff7f0e")) +
  theme_minimal()

## Rechazo en menores y adultos

# Filtrado inicial
datos_filtrados <- edades1 %>%
  filter(edad > 7) %>%
  select(comunidad_nombre, upch_ei_presente, edad, obs_encuesta)

# Clasificación por edad
datos_filtrados <- datos_filtrados %>%
  mutate(grupo_edad = ifelse(edad >= 18, "Adulto", "Menor de edad"))

# Identificación de no participación
datos_parti <- datos_filtrados %>%
  mutate(
    no_participa = case_when(
      str_detect(obs_encuesta, "(?i)particip") ~ "No desea",
      TRUE ~ "Otro"
    )
  )

# Conteo de participación por comunidad y grupo de edad
conteo_parti <- datos_parti %>%
  group_by(comunidad_nombre, grupo_edad) %>%
  summarise(no_desea = sum(no_participa == "No desea"), .groups = 'drop')

conteo_parti
## # A tibble: 19 × 3
##    comunidad_nombre grupo_edad    no_desea
##    <chr>            <chr>            <int>
##  1 12 de Abril      Adulto               0
##  2 12 de Abril      Menor de edad        0
##  3 23 de Febrero    Adulto               0
##  4 Cahuide          Adulto               0
##  5 Cahuide          Menor de edad        0
##  6 El Paujil        Adulto               1
##  7 El Paujil        Menor de edad        5
##  8 Llanchama        Adulto               0
##  9 Llanchama        Menor de edad        0
## 10 Quistococha      Adulto               4
## 11 Quistococha      Menor de edad        6
## 12 San Carlos       Adulto               0
## 13 San Carlos       Menor de edad        0
## 14 San Lucas        Adulto               0
## 15 San Lucas        Menor de edad        0
## 16 Varillal         Adulto               6
## 17 Varillal         Menor de edad        2
## 18 Zungarococha     Adulto              10
## 19 Zungarococha     Menor de edad        0

1.8 Hogares con solo hombres o solo mujeres

# Identificar casas solo con hombres o solo con mujeres
validacion_casas <- datos %>%
  group_by(upch_code_casa, comunidad_nombre) %>%
  summarise(
    solo_hombres = all(upch_ei_sexo == "Masculino"),
    solo_mujeres = all(upch_ei_sexo == "Femenino"),
    .groups = 'drop'
  )

# Conteo de casas por comunidad
conteo_casas <- validacion_casas %>%
  group_by(comunidad_nombre) %>%
  summarise(
    casas_solo_hombres = 0,
    casas_solo_mujeres = 0
  ) %>%
  mutate(
    casas_solo_hombres = replace_na(casas_solo_hombres, 0),
    casas_solo_mujeres = replace_na(casas_solo_mujeres, 0)
  )

conteo_casas
## # A tibble: 10 × 3
##    comunidad_nombre casas_solo_hombres casas_solo_mujeres
##    <chr>                         <dbl>              <dbl>
##  1 12 de Abril                       0                  0
##  2 23 de Febrero                     0                  0
##  3 Cahuide                           0                  0
##  4 El Paujil                         0                  0
##  5 Llanchama                         0                  0
##  6 Quistococha                       0                  0
##  7 San Carlos                        0                  0
##  8 San Lucas                         0                  0
##  9 Varillal                          0                  0
## 10 Zungarococha                      0                  0