## <environment: R_GlobalEnv>
Descarga de datos desde REDCAP.
Leemos el .csv con la data obtenida del censo
# 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)
)
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))
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)
# 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. 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
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)
)
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
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()`).
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. 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. 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
# 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