Anexo técnico

# Versiones del lenguaje de programación y del IDE

#R.version
#RStudio.Version()

Carga de librerías

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(naniar)
library(janitor)
## 
## Attaching package: 'janitor'
## 
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
library(readxl)
library(zoo)
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(writexl)
library(sf)
## Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(rnaturalearth)
library(ggplot2)
library(dplyr)
library(cartogram)
library(sp)
library(raster)
## 
## Attaching package: 'raster'
## 
## The following object is masked from 'package:dplyr':
## 
##     select
library(countrycode)
library(skimr)
## 
## Attaching package: 'skimr'
## 
## The following object is masked from 'package:raster':
## 
##     bind
## 
## The following object is masked from 'package:naniar':
## 
##     n_complete
library(VIM)
## Loading required package: colorspace
## 
## Attaching package: 'colorspace'
## 
## The following object is masked from 'package:raster':
## 
##     RGB
## 
## Loading required package: grid
## VIM is ready to use.
## 
## Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
## 
## Attaching package: 'VIM'
## 
## The following object is masked from 'package:datasets':
## 
##     sleep

Carga de datos y organización de archivos

Carga 1: datos crudos

# El archivo recibido está en formato xlsx (Excel) y tiene varias hojas de cálculo dentro.

# Ruta local del archivo
matriz_original_SGPJ <- "C:/Users/USER/Desktop/codebaker/all_r/Mapa de Gestión y Fortalecimiento de la Supervisión General del Poder Judicial/data/raw/datos-originales.xlsx"
# Nombres de las diferentes hojas de cáculo en el archivo
hojas_nombres<-excel_sheets(matriz_original_SGPJ)
hojas_nombres
## [1] "Indicadores Denunciantes 2024" "Indicadores Denunciados 2024" 
## [3] "Indicadores Denunciantes 2023" "Indicadores Denunciados 2023"
# Ponemos todas las hojas como listas en un solo objeto para su análisis rápido y tomar decisiones sobre modficaciones de formato.
hojas_lista <- lapply(hojas_nombres, function(sheet) read_excel(matriz_original_SGPJ, sheet = sheet))
## New names:
## New names:
## New names:
## New names:
## • `` -> `...2`
## • `` -> `...3`
## • `` -> `...4`
## • `` -> `...5`
## • `` -> `...6`
## • `` -> `...7`
## • `` -> `...8`
## • `` -> `...9`
## • `` -> `...10`
## • `` -> `...11`
## • `` -> `...12`
## • `` -> `...13`
## • `` -> `...14`
## • `` -> `...15`
## • `` -> `...16`
## • `` -> `...17`
## • `` -> `...18`
## • `` -> `...19`
## • `` -> `...20`
## • `` -> `...21`
## • `` -> `...22`
## • `` -> `...23`
## • `` -> `...24`
## • `` -> `...25`
## • `` -> `...26`
## • `` -> `...27`
## • `` -> `...28`
## • `` -> `...29`
## • `` -> `...30`
## • `` -> `...31`
## • `` -> `...32`
## • `` -> `...33`
## • `` -> `...34`
## • `` -> `...35`
## • `` -> `...36`
## • `` -> `...37`
## • `` -> `...38`
# Les volvemos a poner su nombre esas listas 
names(hojas_lista) <- hojas_nombres

# Vemos que las dimensiones no se corresponde con el análisis visual del archivo original en Excel. Hay que arreglar su formato para continuar con el análisis.

lapply(hojas_lista, dim)
## $`Indicadores Denunciantes 2024`
## [1] 202  38
## 
## $`Indicadores Denunciados 2024`
## [1] 264  20
## 
## $`Indicadores Denunciantes 2023`
## [1] 151  37
## 
## $`Indicadores Denunciados 2023`
## [1] 151  20

Carga 2: con ajuste manual

# Manualmente en Excel se ajustó el archivo (solo se descomponen celdas agregadas y se eliminan títulos nada más)

# Se continúa entonces con este archivo editado y repetimos los pasos anteriores
matriz_editada_SGPJ <- "C:/Users/USER/Desktop/codebaker/all_r/Mapa de Gestión y Fortalecimiento de la Supervisión General del Poder Judicial/data/edited/datos-modificados.xlsx"

# Nombres de las diferentes hojas de cáculo en el archivo editado
hojas_nombres<-excel_sheets(matriz_editada_SGPJ)
hojas_nombres
## [1] "Indicadores Denunciantes 2024" "Indicadores Denunciados 2024" 
## [3] "Indicadores Denunciantes 2023" "Indicadores Denunciados 2023"
# Ponemos todas las hojas como listas en un solo objeto para su análisis rápido y seguir tomando decisiones sobre modficaciones de formato.
hojas_lista <- lapply(hojas_nombres, function(sheet) read_excel(matriz_editada_SGPJ, sheet = sheet))

# Les volvemos a poner su nombre esas listas 
names(hojas_lista) <- hojas_nombres

# 

lapply(hojas_lista, dim)
## $`Indicadores Denunciantes 2024`
## [1] 200  38
## 
## $`Indicadores Denunciados 2024`
## [1] 262  20
## 
## $`Indicadores Denunciantes 2023`
## [1] 149  37
## 
## $`Indicadores Denunciados 2023`
## [1] 149  20

Hojas en archivos independientes

# Guardamos las 4 hojas como archivos diferentes 

output_dir <- "C:/Users/USER/Desktop/codebaker/all_r/Mapa de Gestión y Fortalecimiento de la Supervisión General del Poder Judicial/data/edited/"

# Conversión de cada lista a un data frame
lapply(names(hojas_lista), function(name) {
  # 
  df <- as.data.frame(hojas_lista[[name]])
  
  # Nombre y dirección para los files
  file_name <- paste0(output_dir, name, ".xlsx")
  
  # Guardar como Excel en el wd
  write_xlsx(df, file_name)
})
## [[1]]
## [1] "C:\\Users\\USER\\Desktop\\codebaker\\all_r\\Mapa de Gestión y Fortalecimiento de la Supervisión General del Poder Judicial\\data\\edited\\Indicadores Denunciantes 2024.xlsx"
## 
## [[2]]
## [1] "C:\\Users\\USER\\Desktop\\codebaker\\all_r\\Mapa de Gestión y Fortalecimiento de la Supervisión General del Poder Judicial\\data\\edited\\Indicadores Denunciados 2024.xlsx"
## 
## [[3]]
## [1] "C:\\Users\\USER\\Desktop\\codebaker\\all_r\\Mapa de Gestión y Fortalecimiento de la Supervisión General del Poder Judicial\\data\\edited\\Indicadores Denunciantes 2023.xlsx"
## 
## [[4]]
## [1] "C:\\Users\\USER\\Desktop\\codebaker\\all_r\\Mapa de Gestión y Fortalecimiento de la Supervisión General del Poder Judicial\\data\\edited\\Indicadores Denunciados 2023.xlsx"

Carga 3: archivos independientes

# Nuevo cargue de hojas para seguir con la limpieza como objetos individuales

# file paths
files <- list(
  "denunciantes_2024" = "C:/Users/USER/Desktop/codebaker/all_r/Mapa de Gestión y Fortalecimiento de la Supervisión General del Poder Judicial/data/edited/Indicadores Denunciantes 2024.xlsx",
  "denunciados_2024" = "C:/Users/USER/Desktop/codebaker/all_r/Mapa de Gestión y Fortalecimiento de la Supervisión General del Poder Judicial/data/edited/Indicadores Denunciados 2024.xlsx",
  "denunciantes_2023" = "C:/Users/USER/Desktop/codebaker/all_r/Mapa de Gestión y Fortalecimiento de la Supervisión General del Poder Judicial/data/edited/Indicadores Denunciantes 2023.xlsx",
  "denunciados_2023" = "C:/Users/USER/Desktop/codebaker/all_r/Mapa de Gestión y Fortalecimiento de la Supervisión General del Poder Judicial/data/edited/Indicadores Denunciados 2023.xlsx"
)

# Files en data frames
data_frames <- lapply(files, read_excel)

# Objetos individuales 
denunciantes_2024 <- data_frames[["denunciantes_2024"]]
denunciados_2024 <- data_frames[["denunciados_2024"]]
denunciantes_2023 <- data_frames[["denunciantes_2023"]]
denunciados_2023 <- data_frames[["denunciados_2023"]]

Exploración

Datos faltantes

# Mapa de valores faltantes para denunciantes_2023
vis_miss(denunciantes_2023) +
  ggtitle("Mapa de valores faltantes: Denunciantes 2023")

# Mapa de valores faltantes para denunciados_2023
vis_miss(denunciados_2023) +
  ggtitle("Mapa de valores faltantes: Denunciados 2023")

# Mapa de valores faltantes para denunciantes_2024
vis_miss(denunciantes_2024) +
  ggtitle("Mapa de valores faltantes: Denunciantes 2024")

# Mapa de valores faltantes para denunciados_2024
vis_miss(denunciados_2024) +
  ggtitle("Mapa de valores faltantes: Denunciados 2024")

Limpieza

Nombres estandarizados
# Poner los nombres de las variables en snake_case para mejor manipulación y presentación. 

denunciantes_2023 <- denunciantes_2023 %>% clean_names()

denunciados_2023 <- denunciados_2023 %>% clean_names()

denunciantes_2024 <- denunciantes_2024 %>% clean_names()

denunciados_2024 <-denunciados_2024 %>% clean_names()

#names(denunciantes_2023)
#names(denunciados_2023)
#names(denunciantes_2024)
#names(denunciados_2024)
Nombres con su indicador
# Nombrar la variables con su indicador principal para mayor claridad

# Denunciantes 2023

denunciantes_2023 <- denunciantes_2023 %>%
  rename(
    NUM_denuncia = no_de_denuncia,
    GENERO_femenino = femenino,
    GENERO_masculino = masculino,
    GENERO_otro = otro,
    VULNERABLE_si = si,
    VULNERABLE_no = no_2,
    VULNERABLE_des = se_desconoce,
    PERSONA_nat = natural,
    PERSONA_jur = juridica,
    COND_def_priv_rep_legal = defensor_privado_representante_legal,
    COND_parte_proceso = parte_del_proceso,
    COND_rep_org_soc_civil = representante_de_organizacion_de_sociedad_civil,
    COND_ser_jud = servidor_judicial,
    SER_mag_corte_apel = magistrado_de_corte_de_apelaciones,
    SER_juez = juez,
    SER_aux = auxiliar,
    SER_admin = administrativo, 
    DEP_admin = administrativa, 
    DEP_org_jur = organo_jurisdiccional, 
    ORG_JUR_j_paz = juzgado_de_paz,
    ORG_JUR_j_secc = juzgado_seccional,
    ORG_JUR_j_letras = juzgado_de_letras,
    ORG_JUR_t_sent = tribunal_de_sentencia,
    ORG_JUR_c_apel = corte_de_apelaciones, 
    UBICACION = indicador_ubicacion_geografica, 
    INSPECTOR = indicador_inspector_a_responsable_de_la_investigacion, 
    CAUSAL = indicador_causal_de_denuncia,
    RES_con_merito = con_merito,
    RES_sin_merito = sin_merito,
    RES_acumulada = acumulada,
    RES_inadmitida = inadmitida,
    RES_desistida = desistida,
    RES_suspenso = en_suspenso,
    RES_previo_admision = previo_de_admision,
    RES_previo_aprob_inf = previo_aprobacion_de_informe)


# Denunciados 2023

denunciados_2023 <- denunciados_2023 %>%
  rename(
    NUM_denuncia = no_de_denuncia,
    GENERO_femenino = femenino,
    GENERO_masculino = masculino,
    GENERO_otro = otro,
    SER_mag_corte_apel = magistrado_de_corte_de_apelaciones,
    SER_juez = juez,
    SER_aux = auxiliar,
    SER_admin = administrativo, 
    DEP_admin = administrativa, 
    DEP_org_jur = organo_jurisdiccional,
    ORG_JUR_j_paz = juzgado_de_paz,
    ORG_JUR_j_secc = juzgado_seccional,
    ORG_JUR_j_letras = juzgado_de_letras,
    ORG_JUR_t_sent = tribunal_de_sentencia,
    ORG_JUR_c_apel = corte_de_apelaciones,
    REINCIDE_si = si,
    REINCIDE_no = no_2,
    UBICACION = indicador_ubicacion_geografica,
    ) 


# Denunciantes 2024

denunciantes_2024 <- denunciantes_2024 %>%
  rename(
    NUM_denuncia = no_de_denuncia,
    GENERO_femenino = femenino,
    GENERO_masculino = masculino,
    GENERO_otro = otro,
    VULNERABLE_si = si,
    VULNERABLE_no = no_2,
    VULNERABLE_des = se_desconoce,
    PERSONA_nat = natural,
    PERSONA_jur = juridica,
    COND_def_priv_rep_legal = defensor_privado_representante_legal,
    COND_parte_proceso = parte_del_proceso,
    COND_rep_org_soc_civil = representante_de_organizacion_de_sociedad_civil,
    COND_ser_jud = servidor_judicial,
    SER_mag_corte_apel = magistrado_de_corte_de_apelaciones,
    SER_juez = juez,
    SER_aux = auxiliar,
    SER_admin = administrativo, 
    DEP_admin = administrativa, 
    DEP_org_jur = organo_jurisdiccional, 
    ORG_JUR_j_paz = juzgado_de_paz,
    ORG_JUR_v_dom = violencia_domestica,
    ORG_JUR_j_secc = juzgado_seccional,
    ORG_JUR_j_letras = juzgado_de_letras,
    ORG_JUR_t_sent = tribunal_de_sentencia,
    ORG_JUR_c_apel = corte_de_apelaciones, 
    UBICACION = indicador_ubicacion_geografica, 
    INSPECTOR = indicador_inspector_a_responsable_de_la_investigacion, 
    CAUSAL = indicador_causal_de_denuncia,
    RES_con_merito = con_merito,
    RES_sin_merito = sin_merito,
    RES_acumulada = acumulada,
    RES_inadmitida = inadmitida,
    RES_desistida = desistida,
    RES_suspenso = en_suspenso,
    RES_previo_admision = previo_de_admision,
    RES_previo_aprob_inf = previo_aprobacion_de_informe)



# Denunciados 2024

denunciados_2024 <- denunciados_2024 %>%
  rename(
    NUM_denuncia = no_de_denuncia,
    GENERO_femenino = femenino,
    GENERO_masculino = masculino,
    GENERO_otro = otro,
    SER_mag_corte_apel = magistrado_de_corte_de_apelaciones,
    SER_juez = juez,
    SER_aux = auxiliar,
    SER_admin = administrativo, 
    DEP_admin = administrativa, 
    DEP_org_jur = organo_jurisdiccional,
    ORG_JUR_j_paz = juzgado_de_paz,
    ORG_JUR_j_secc = juzgado_seccional,
    ORG_JUR_j_letras = juzgado_de_letras,
    ORG_JUR_t_sent = tribunal_de_sentencia,
    ORG_JUR_c_apel = corte_de_apelaciones,
    REINCIDE_si = si,
    REINCIDE_no = no_2,
    UBICACION = indicador_ubicacion_geografica,
    ) 

#names(denunciantes_2023)
#names(denunciados_2023)
#names(denunciantes_2024)
#names(denunciados_2024)
Dimensiones correctas de las bases
# Hay unas bases que son "más largas" sin una razón aparente. Es decir no acaban donde acaban los datos registrados. Por eso las corto. Pasa en el año 2023.

denunciantes_2023 <- denunciantes_2023[1:16, ]

denunciados_2023 <- denunciados_2023[1:34, ]
# Además, elimino las filas de la denuncia 0801-2024-00 por información evidentemente incompleta. Pasa en el año 2024.

denunciantes_2024 <- denunciantes_2024[1:199,]

denunciados_2024 <- denunciados_2024[1:261,] 
Imputación de valores
# Como descompuse las filas agregadas en Excel, hay que volverlas a llenar con los valores inmediatamente anteriores puesto que se generaron NAs. Es decir, un número único de denuncia agrupaba a varios individuos y demás indicadores. Verifico los patrones de datos faltantes de manera iterativa y con inspección visual. 

# DENUNCIANTES 2023

denunciantes_2023<- na.locf(denunciantes_2023, na.rm = FALSE)

# DENUNCIADOS 2023

denunciados_2023<- na.locf(denunciados_2023, na.rm = FALSE)

# DENUNCIANTES 2024

denunciantes_2024<- na.locf(denunciantes_2024, na.rm = FALSE)

# DENUNCIADOS 2024

denunciados_2024<- na.locf(denunciados_2024, na.rm = FALSE)

# Con esta operación tenemos el 100% de los datos. Más tarde se aplicarán más filtros para asegurar la calidad e integridad de los datos.
Nueva variable: año
# Crear variable año en cada base

denunciantes_2023<- denunciantes_2023%>% mutate(AÑO = 2023)
denunciados_2023 <- denunciados_2023%>% mutate(AÑO = 2023)
denunciantes_2024 <- denunciantes_2024%>% mutate(AÑO = 2024)
denunciados_2024 <- denunciados_2024%>% mutate(AÑO = 2024)
Nueva variable: rol
# Crear variable rol en cada base

denunciantes_2023<- denunciantes_2023%>% mutate(ROL = "denunciante")
denunciados_2023 <- denunciados_2023%>% mutate(ROL = "denunciado")
denunciantes_2024 <- denunciantes_2024%>% mutate(ROL = "denunciante")
denunciados_2024 <- denunciados_2024%>% mutate(ROL = "denunciado")
Eliminar columna de conteo
# Eliminar columna de conteo en todos los sets

denunciantes_2023<- denunciantes_2023 %>% dplyr::select(-no)
denunciados_2023 <- denunciados_2023 %>% dplyr::select(-no)
denunciantes_2024 <- denunciantes_2024 %>% dplyr::select(-no)
denunciados_2024 <- denunciados_2024 %>% dplyr::select(-no)
Validación valores únicos
# Valores únicos de todas las variables

# Denunciantes 2023

distinct_counts_denunciantes_2023 <- sapply(denunciantes_2023, n_distinct)


distinct_counts_denunciantes_2023_df <- data.frame(
  Unique_Values = distinct_counts_denunciantes_2023
)

# Denunciados 2023

distinct_counts_denunciados_2023 <- sapply(denunciados_2023, n_distinct)


distinct_counts_denunciados_2023_df <- data.frame(
  Unique_Values = distinct_counts_denunciados_2023
)


# Denunciantes 2024

distinct_counts_denunciantes_2024 <- sapply(denunciantes_2024, n_distinct)


distinct_counts_denunciantes_2024_df <- data.frame(
  Unique_Values = distinct_counts_denunciantes_2024
)

# Denunciados 2024

distinct_counts_denunciados_2024 <- sapply(denunciados_2024, n_distinct)


distinct_counts_denunciados_2024_df <- data.frame(
  Unique_Values = distinct_counts_denunciados_2024
)


#distinct_counts_denunciantes_2023_df
#distinct_counts_denunciados_2023_df

#distinct_counts_denunciantes_2024_df
#distinct_counts_denunciados_2024_df
Número de denuncias: 2023
# ¿Por qué no concuerdan el conteo de números identificadores de denuncias en cada año?

##### 2023

denuncias_unicas_comunes_2023 <- intersect(unique(denunciantes_2023$NUM_denuncia), unique(denunciados_2023$NUM_denuncia))

length(denuncias_unicas_comunes_2023) # 9 denuncias en común entre denunciantes 2023 y denunciados 2023
## [1] 9
##
unicos_de_denunciantes_2023 <- setdiff(unique(denunciantes_2023$NUM_denuncia), unique(denunciados_2023$NUM_denuncia))

unicos_de_denunciantes_2023 # son 5
## [1] "0801-2023-00187"  "0801--2023-00409" "0801-2023-00312"  "0801-2023-00436" 
## [5] "0801-2023-00503"
unicos_de_denunciados_2023 <- setdiff(unique(denunciados_2023$NUM_denuncia), unique(denunciantes_2023$NUM_denuncia))

unicos_de_denunciados_2023 # son 10 denuncias
##  [1] "0801-2024-00187" "0801-2023-00409" "0801-2024-00312" "0801-2024-00436"
##  [5] "0801-2023-00326" "0801-2023-00339" "0501-2023-00086" "0801-2024-00503"
##  [9] "0801-2023-00534" "0801-2023-00401"
##

# Comparativa

max_length <- max(length(denuncias_unicas_comunes_2023), length(unicos_de_denunciantes_2023), length(unicos_de_denunciados_2023))


df_side_by_side_2023 <- data.frame(
  Denuncias_Comunes = c(denuncias_unicas_comunes_2023, rep(NA, max_length - length(denuncias_unicas_comunes_2023))),
  Únicos_Denunciantes = c(unicos_de_denunciantes_2023, rep(NA, max_length - length(unicos_de_denunciantes_2023))),
  Únicos_Denunciados = c(unicos_de_denunciados_2023, rep(NA, max_length - length(unicos_de_denunciados_2023)))
)

df_side_by_side_2023
##    Denuncias_Comunes Únicos_Denunciantes Únicos_Denunciados
## 1    0801-2023-00549     0801-2023-00187    0801-2024-00187
## 2    1804-2023-00026    0801--2023-00409    0801-2023-00409
## 3    0801-2023-00387     0801-2023-00312    0801-2024-00312
## 4    0501-2023-00119     0801-2023-00436    0801-2024-00436
## 5    0601-2023-00019     0801-2023-00503    0801-2023-00326
## 6    0209-2023-00028                <NA>    0801-2023-00339
## 7    0801-2023-00524                <NA>    0501-2023-00086
## 8    0801-2023-00454                <NA>    0801-2024-00503
## 9    0801-2023-00132                <NA>    0801-2023-00534
## 10              <NA>                <NA>    0801-2023-00401
############# CORRECIONES A ERRORES DE DIGITACIÓN


denunciados_2023$NUM_denuncia[denunciados_2023$NUM_denuncia == "0801-2024-00187" ] <- "0801-2023-00187"
denunciados_2023$NUM_denuncia[denunciados_2023$NUM_denuncia == "0801-2024-00312" ] <- "0801-2023-00312"
denunciados_2023$NUM_denuncia[denunciados_2023$NUM_denuncia == "0801-2024-00436" ] <- "0801-2023-00436"
denunciados_2023$NUM_denuncia[denunciados_2023$NUM_denuncia == "0801-2024-00503" ] <- "0801-2023-00503"


denunciantes_2023$NUM_denuncia[denunciantes_2023$NUM_denuncia == "0801--2023-00409" ] <- "0801-2023-00409"
Número de denuncias: 2024
# ¿Por qué no concuerdan el conteo de números identificadores de denuncias en cada año?

##### 2024

denuncias_comunes_2024 <- intersect(unique(denunciantes_2024$NUM_denuncia), unique(denunciados_2024$NUM_denuncia))

length(denuncias_comunes_2024) # 135 denuncias en común entre denunciantes 2024 y denunciados 2024
## [1] 135
#

unicos_de_denunciantes_2024 <- setdiff(unique(denunciantes_2024$NUM_denuncia), unique(denunciados_2024$NUM_denuncia))

unicos_de_denunciantes_2024 # son 23
##  [1] "0801-2024-00035" "0801-2024-00134" "0801-2024-00142" "0801-2024-00182"
##  [5] "0801-024-00217"  "0801-2024-00398" "0801-2024-00419" "0501-2024-00014"
##  [9] "0501-2024-00029" "0101-2024-00017" "0703-2024-00002" "0801-2024-00323"
## [13] "0801-2024-00192" "0801-2024-00342" "0801-2024-00425" "0801-2024-00270"
## [17] "0801-2024-00422" "0801-2024-00203" "0801-2024-00305" "0801-2024-00381"
## [21] "0801-2024-00485" "0801-2024-00263" "0801-2024-00516"
unicos_de_denunciados_2024 <- setdiff(unique(denunciados_2024$NUM_denuncia), unique(denunciantes_2024$NUM_denuncia))

unicos_de_denunciados_2024 # son 57
##  [1] "0801-2024-00009"           "0801-2024-00012"          
##  [3] "0801-2024-00013"           "0801-2024-00014"          
##  [5] "0801-2024-00015"           "0801-2024-00016"          
##  [7] "0801-2024-00018"           "0801-2024-00019"          
##  [9] "0801-2024-0035"            "0801-2024-00047"          
## [11] "0801-2024-00054"           "0801-2024-00055"          
## [13] "0801-202-00056"            "0801-2024-00065"          
## [15] "0801-2024-00075"           "0801-2024-00098"          
## [17] "0801-2024-00099"           "Acumulado 0801-2024-00123"
## [19] "0801-2024-00102"           "0801-2024-00115"          
## [21] "0801-2024-00118"           "0801-2024-00125"          
## [23] "0801-2024-00146"           "0801-2024-00159"          
## [25] "0801-2024-00217"           "0801-2024-00227"          
## [27] "0801-2024-00229"           "0801-2024-00257"          
## [29] "0801-2024-00258"           "0801-2024-00266"          
## [31] "0801-2024-00315"           "0801-2024-00402"          
## [33] "0801-2024-00480"           "0501-2024-00011"          
## [35] "0401-2024-00002"           "0401-2024-00003"          
## [37] "0401-2024-00007"           "0101-2024-00016"          
## [39] "0301-2024-00002"           "1301-2024-00002"          
## [41] "1301-2024-00004"           "0801-2024-00361"          
## [43] "0801-2024-00483"           "0801-2024+00192"          
## [45] "0101-2024-00002"           "0801-2024-00245"          
## [47] "0801-2024-00369"           "0801-2024-00427"          
## [49] "0801-2024-00324"           "0801-2024-00371"          
## [51] "0801-2024-000422"          "0801-2024-00509"          
## [53] "0801-2024-00557"           "0801-2024-00292"          
## [55] "0801-2024-00351"           "0801-2024-00372"          
## [57] "0801-2024-00298"
#

# Comparativa

max_length_2024 <- max(
  length(denuncias_comunes_2024),
  length(unicos_de_denunciantes_2024),
  length(unicos_de_denunciados_2024)
)



df_side_by_side_2024 <- data.frame(
  Denuncias_Comunes = c(denuncias_comunes_2024, rep(NA, max_length_2024 - length(denuncias_comunes_2024))),
  Únicos_Denunciantes = c(unicos_de_denunciantes_2024, rep(NA, max_length_2024 - length(unicos_de_denunciantes_2024))),
  Únicos_Denunciados = c(unicos_de_denunciados_2024, rep(NA, max_length_2024 - length(unicos_de_denunciados_2024)))
)


df_side_by_side_2024
##     Denuncias_Comunes Únicos_Denunciantes        Únicos_Denunciados
## 1     0801-2024-00002     0801-2024-00035           0801-2024-00009
## 2     0801-2024-00003     0801-2024-00134           0801-2024-00012
## 3     0801-2024-00005     0801-2024-00142           0801-2024-00013
## 4     0801-2024-00007     0801-2024-00182           0801-2024-00014
## 5     0801-2024-00010      0801-024-00217           0801-2024-00015
## 6     0801-2024-00020     0801-2024-00398           0801-2024-00016
## 7     0801-2024-00022     0801-2024-00419           0801-2024-00018
## 8     0801-2024-00023     0501-2024-00014           0801-2024-00019
## 9     0801-2024-00024     0501-2024-00029            0801-2024-0035
## 10    0801-2024-00025     0101-2024-00017           0801-2024-00047
## 11    0801-2024-00027     0703-2024-00002           0801-2024-00054
## 12    0801-2024-00028     0801-2024-00323           0801-2024-00055
## 13    0801-2024-00030     0801-2024-00192            0801-202-00056
## 14    0801-2024-00031     0801-2024-00342           0801-2024-00065
## 15    0801-2024-00032     0801-2024-00425           0801-2024-00075
## 16    0801-2024-00033     0801-2024-00270           0801-2024-00098
## 17    0801-2024-00042     0801-2024-00422           0801-2024-00099
## 18    0801-2024-00043     0801-2024-00203 Acumulado 0801-2024-00123
## 19    0801-2024-00044     0801-2024-00305           0801-2024-00102
## 20    0801-2024-00048     0801-2024-00381           0801-2024-00115
## 21    0801-2024-00051     0801-2024-00485           0801-2024-00118
## 22    0801-2024-00058     0801-2024-00263           0801-2024-00125
## 23    0801-2024-00059     0801-2024-00516           0801-2024-00146
## 24    0801-2024-00061                <NA>           0801-2024-00159
## 25    0801-2024-00062                <NA>           0801-2024-00217
## 26    0801-2024-00069                <NA>           0801-2024-00227
## 27    0801-2024-00071                <NA>           0801-2024-00229
## 28    0801-2024-00072                <NA>           0801-2024-00257
## 29    0801-2024-00089                <NA>           0801-2024-00258
## 30    0801-2024-00094                <NA>           0801-2024-00266
## 31    0801-2024-00138                <NA>           0801-2024-00315
## 32    0801-2024-00195                <NA>           0801-2024-00402
## 33    0801-2024-00196                <NA>           0801-2024-00480
## 34    0801-2024-00206                <NA>           0501-2024-00011
## 35    0801-2024-00221                <NA>           0401-2024-00002
## 36    0801-2024-00222                <NA>           0401-2024-00003
## 37    0801-2024-00233                <NA>           0401-2024-00007
## 38    0801-2024-00235                <NA>           0101-2024-00016
## 39    0801-2024-00259                <NA>           0301-2024-00002
## 40    0801-2024-00264                <NA>           1301-2024-00002
## 41    0801-2024-00322                <NA>           1301-2024-00004
## 42    0801-2024-00346                <NA>           0801-2024-00361
## 43    0801-2024-00354                <NA>           0801-2024-00483
## 44    0801-2024-00367                <NA>           0801-2024+00192
## 45    0801-2024-00377                <NA>           0101-2024-00002
## 46    0801-2024-00412                <NA>           0801-2024-00245
## 47    0801-2024-00424                <NA>           0801-2024-00369
## 48    0501-2024-00001                <NA>           0801-2024-00427
## 49    0501-2024-00002                <NA>           0801-2024-00324
## 50    0501-2024-00003                <NA>           0801-2024-00371
## 51    0501-2024-00006                <NA>          0801-2024-000422
## 52    0501-2024-00009                <NA>           0801-2024-00509
## 53    0501-2024-00010                <NA>           0801-2024-00557
## 54    0801-2024-00011                <NA>           0801-2024-00292
## 55    1001-2024-00002                <NA>           0801-2024-00351
## 56    0506-2024-00001                <NA>           0801-2024-00372
## 57    0401-2024-00005                <NA>           0801-2024-00298
## 58    0101-2024-00001                <NA>                      <NA>
## 59    0101-2024-00006                <NA>                      <NA>
## 60    0301-2024-00004                <NA>                      <NA>
## 61    1501-2024-00001                <NA>                      <NA>
## 62    0601-2024-00002                <NA>                      <NA>
## 63    1201-2024-00001                <NA>                      <NA>
## 64    1201-2024-00002                <NA>                      <NA>
## 65    1201-2024-00005                <NA>                      <NA>
## 66    1301-2024-00001                <NA>                      <NA>
## 67    1301-2024-00003                <NA>                      <NA>
## 68    1301-2024-00006                <NA>                      <NA>
## 69    1709-2024-00005                <NA>                      <NA>
## 70    1001-2024-00004                <NA>                      <NA>
## 71    1201-2024-00003                <NA>                      <NA>
## 72    1001-2024-00001                <NA>                      <NA>
## 73    0401-2024-00009                <NA>                      <NA>
## 74    0301-2024-00006                <NA>                      <NA>
## 75    0301-2024-00001                <NA>                      <NA>
## 76    0801-2024-00210                <NA>                      <NA>
## 77    0801-2024-00273                <NA>                      <NA>
## 78    0801-2024-00393                <NA>                      <NA>
## 79    0801-2024-00513                <NA>                      <NA>
## 80    0801-2024-00405                <NA>                      <NA>
## 81    0801-2024-00518                <NA>                      <NA>
## 82    0801-2024-00579                <NA>                      <NA>
## 83    0801-2024-00562                <NA>                      <NA>
## 84    0501-2024-00018                <NA>                      <NA>
## 85    0501-2024-00007                <NA>                      <NA>
## 86    0501-2024-00005                <NA>                      <NA>
## 87    0101-2024-00010                <NA>                      <NA>
## 88    0801-2024-00001                <NA>                      <NA>
## 89    0801-2024-00036                <NA>                      <NA>
## 90    0801-2024-00161                <NA>                      <NA>
## 91    0801-2024-00320                <NA>                      <NA>
## 92    0801-2024-00327                <NA>                      <NA>
## 93    0801-2024-00127                <NA>                      <NA>
## 94    0801-2024-00244                <NA>                      <NA>
## 95    0801-2024-00281                <NA>                      <NA>
## 96    0801-2024-00350                <NA>                      <NA>
## 97    0801-2024-00303                <NA>                      <NA>
## 98    0801-2024-00262                <NA>                      <NA>
## 99    0801-2024-00247                <NA>                      <NA>
## 100   0801-2024-00400                <NA>                      <NA>
## 101   0801-2024-00461                <NA>                      <NA>
## 102   0801-2024-00191                <NA>                      <NA>
## 103   0801-2024-00447                <NA>                      <NA>
## 104   0801-2024-00216                <NA>                      <NA>
## 105   0801-2024-00190                <NA>                      <NA>
## 106   0801-2024-00169                <NA>                      <NA>
## 107   0801-2024-00199                <NA>                      <NA>
## 108   0801-2024-00255                <NA>                      <NA>
## 109   0801-2024-00188                <NA>                      <NA>
## 110   0801-2024-00510                <NA>                      <NA>
## 111   0801-2024-00287                <NA>                      <NA>
## 112   0801-2024-00260                <NA>                      <NA>
## 113   0801-2024-00332                <NA>                      <NA>
## 114   0801-2024-00249                <NA>                      <NA>
## 115   0801-2024-00283                <NA>                      <NA>
## 116   0801-2024-00537                <NA>                      <NA>
## 117   0801-2024-00194                <NA>                      <NA>
## 118   0801-2024-00500                <NA>                      <NA>
## 119   0801-2024-00392                <NA>                      <NA>
## 120   0801-2024-00352                <NA>                      <NA>
## 121   0801-2024-00238                <NA>                      <NA>
## 122   0801-2024-00209                <NA>                      <NA>
## 123   0801-2024-00189                <NA>                      <NA>
## 124   0801-2024-00312                <NA>                      <NA>
## 125   0801-2024-00570                <NA>                      <NA>
## 126   0801-2024-00436                <NA>                      <NA>
## 127   0801-2024-00289                <NA>                      <NA>
## 128   0801-2024-00254                <NA>                      <NA>
## 129   0801-2024-00368                <NA>                      <NA>
## 130   0801-2024-00267                <NA>                      <NA>
## 131   0801-2024-00363                <NA>                      <NA>
## 132   0801-2024-00307                <NA>                      <NA>
## 133   0801-2024-00251                <NA>                      <NA>
## 134   0801-2024-00278                <NA>                      <NA>
## 135   0801-2024-00200                <NA>                      <NA>
########### CORRECCIÓN DE VALORES 

pattern <- "^\\d{4}-\\d{4}-\\d{5}$"

# Filtrar valores no NA de Únicos_Denunciantes
df_denunciantes <- data.frame(
  Únicos_Denunciantes = df_side_by_side_2024$Únicos_Denunciantes[!is.na(df_side_by_side_2024$Únicos_Denunciantes)]
)

# Verificar códigos inválidos en Únicos_Denunciantes
df_denunciantes$Invalid <- !grepl(pattern, df_denunciantes$Únicos_Denunciantes)
invalid_denunciantes <- df_denunciantes[df_denunciantes$Invalid, ]

# Filtrar valores no NA de Únicos_Denunciados
df_denunciados <- data.frame(
  Únicos_Denunciados = df_side_by_side_2024$Únicos_Denunciados[!is.na(df_side_by_side_2024$Únicos_Denunciados)]
)

# Verificar códigos inválidos en Únicos_Denunciados
df_denunciados$Invalid <- !grepl(pattern, df_denunciados$Únicos_Denunciados)
invalid_denunciados <- df_denunciados[df_denunciados$Invalid, ]

# Imprimir resultados
print("Códigos inválidos en Únicos_Denunciantes:")
## [1] "Códigos inválidos en Únicos_Denunciantes:"
print(invalid_denunciantes)
##   Únicos_Denunciantes Invalid
## 5      0801-024-00217    TRUE
print("Códigos inválidos en Únicos_Denunciados:")
## [1] "Códigos inválidos en Únicos_Denunciados:"
print(invalid_denunciados)
##           Únicos_Denunciados Invalid
## 9             0801-2024-0035    TRUE
## 13            0801-202-00056    TRUE
## 18 Acumulado 0801-2024-00123    TRUE
## 44           0801-2024+00192    TRUE
## 51          0801-2024-000422    TRUE
### CORRECCIONES A ERRORES DE DIGITACIÓN


denunciantes_2024$NUM_denuncia[denunciantes_2023$NUM_denuncia == "0801-024-00217" ] <- "0801-2024-00217"

denunciados_2024$NUM_denuncia[denunciados_2024$NUM_denuncia =="0801-2024-0035"]<-"0801-2024-00035"
denunciados_2024$NUM_denuncia[denunciados_2024$NUM_denuncia =="0801-202-00056"]<-"0801-2024-00056"
denunciados_2024$NUM_denuncia[denunciados_2024$NUM_denuncia =="Acumulado 0801-2024-00123"]<-"0801-2024-00123"
denunciados_2024$NUM_denuncia[denunciados_2024$NUM_denuncia =="0801-2024+00192"]<-"0801-2024-00192"
denunciados_2024$NUM_denuncia[denunciados_2024$NUM_denuncia =="0801-2024+00192"]<-"0801-2024-00192"
denunciados_2024$NUM_denuncia[denunciados_2024$NUM_denuncia =="0801-2024-000422"]<-"0801-2024-00042"
Tipos de variables
Valores correctos según tipo de variable
# Debería haber dos valores únicos: 1s y 0s 

# Casos problemáticos donde hay más de 2 valores únicos

########################################################### denunciantes 2023
# Vector de variables a analizar

variables_denunciantes_2023 <- c(
  "GENERO_femenino", "GENERO_masculino", "GENERO_otro",
  "VULNERABLE_si", "VULNERABLE_no", "VULNERABLE_des",
  "PERSONA_nat", "PERSONA_jur",
  "COND_def_priv_rep_legal", "COND_parte_proceso", "COND_rep_org_soc_civil", "COND_ser_jud",
  "SER_mag_corte_apel", "SER_juez", "SER_aux", "SER_admin",
  "DEP_admin", "DEP_org_jur",
  "ORG_JUR_j_paz","ORG_JUR_j_secc", "ORG_JUR_j_letras",
  "ORG_JUR_t_sent", "ORG_JUR_c_apel",
  "RES_con_merito", "RES_sin_merito", "RES_acumulada", "RES_inadmitida",
  "RES_desistida", "RES_suspenso", "RES_previo_admision", "RES_previo_aprob_inf"
)

# Filtrar las variables con más de 2 valores únicos
variables_con_mas_de_dos <- names(which(sapply(denunciantes_2023[variables_denunciantes_2023], n_distinct) > 2))

print(variables_con_mas_de_dos)
## [1] "GENERO_masculino"
# SOLUCIÓN 

denunciantes_2023$GENERO_masculino[denunciantes_2023$GENERO_masculino == 3] <- 1
############################################################ denunciados 2023

variables_con_mas_de_dos_2 <- names(which(sapply(denunciados_2023, n_distinct) > 2))

print(variables_con_mas_de_dos_2) # 
## [1] "NUM_denuncia"          "nombre_del_denunciado" "GENERO_femenino"      
## [4] "GENERO_masculino"      "SER_juez"              "SER_aux"              
## [7] "UBICACION"
# SOLUCIÓN

denunciados_2023$GENERO_femenino[denunciados_2023$GENERO_femenino == 7] <- 1
denunciados_2023$GENERO_masculino[denunciados_2023$GENERO_masculino == 3] <- 1
denunciados_2023$GENERO_masculino[denunciados_2023$GENERO_masculino == 2] <- 1
denunciados_2023$SER_juez[denunciados_2023$SER_juez == 8] <- 1
denunciados_2023$SER_juez[denunciados_2023$SER_juez == 2] <- 1
denunciados_2023$SER_aux[denunciados_2023$SER_aux == 2] <- 1
denunciados_2023$SER_aux[denunciados_2023$SER_aux == 4] <- 1
####################################################### denunciantes 2024

variables_con_mas_de_dos_3 <- names(which(sapply(denunciantes_2024, n_distinct) > 2))

print(variables_con_mas_de_dos_3)  
##  [1] "NUM_denuncia"           "nombre_del_denunciante" "GENERO_femenino"       
##  [4] "GENERO_masculino"       "VULNERABLE_si"          "PERSONA_nat"           
##  [7] "COND_parte_proceso"     "UBICACION"              "INSPECTOR"             
## [10] "CAUSAL"
# SOLUCIÓN
denunciantes_2024$GENERO_femenino[denunciantes_2024$GENERO_femenino ==2] <-1
denunciantes_2024$GENERO_masculino[denunciantes_2024$GENERO_masculino == 4]<- 1
denunciantes_2024$GENERO_masculino[denunciantes_2024$GENERO_masculino == 2]<- 1
denunciantes_2024$GENERO_masculino[denunciantes_2024$GENERO_masculino == 3] <- 1
denunciantes_2024$VULNERABLE_si[denunciantes_2024$VULNERABLE_si == 2] <-1
denunciantes_2024$PERSONA_nat[denunciantes_2024$PERSONA_nat == 2] <- 1
denunciantes_2024$COND_parte_proceso[denunciantes_2024$COND_parte_proceso == 2]<-1
######################################################## denunciados 2024

variables_con_mas_de_dos_4 <- names(which(sapply(denunciados_2024, n_distinct) > 2))

print(variables_con_mas_de_dos_4)  
##  [1] "NUM_denuncia"          "nombre_del_denunciado" "GENERO_femenino"      
##  [4] "GENERO_masculino"      "SER_mag_corte_apel"    "SER_juez"             
##  [7] "SER_aux"               "SER_admin"             "DEP_admin"            
## [10] "ORG_JUR_j_letras"      "REINCIDE_no"           "UBICACION"
# SOLUCIÓN 
denunciados_2024$GENERO_femenino[denunciados_2024$GENERO_femenino == 2] <- 1
denunciados_2024$GENERO_femenino[denunciados_2024$GENERO_femenino == 9] <- 1
denunciados_2024$GENERO_femenino[denunciados_2024$GENERO_femenino == 4] <- 1
denunciados_2024$GENERO_femenino[denunciados_2024$GENERO_femenino == 3] <- 1

denunciados_2024$GENERO_masculino[denunciados_2024$GENERO_masculino == 2] <-1
denunciados_2024$GENERO_masculino[denunciados_2024$GENERO_masculino == 6] <-1
denunciados_2024$GENERO_masculino[denunciados_2024$GENERO_masculino == 9] <-1
denunciados_2024$GENERO_masculino[denunciados_2024$GENERO_masculino == 3] <-1

denunciados_2024$SER_mag_corte_apel[denunciados_2024$SER_mag_corte_apel == 3] <- 1
denunciados_2024$SER_mag_corte_apel[denunciados_2024$SER_mag_corte_apel == 4] <- 1

denunciados_2024$SER_juez[denunciados_2024$SER_juez == 2] <- 1
denunciados_2024$SER_juez[denunciados_2024$SER_juez == 3] <- 1

denunciados_2024$SER_aux[denunciados_2024$SER_aux== 2] <-1
denunciados_2024$SER_aux[denunciados_2024$SER_aux == 14] <-1                    
denunciados_2024$SER_aux[denunciados_2024$SER_aux == 8] <-1
denunciados_2024$SER_aux[denunciados_2024$SER_aux == 4] <-1

denunciados_2024$SER_admin[denunciados_2024$SER_admin==3] <-1

denunciados_2024$DEP_admin[denunciados_2024$DEP_admin==3] <-1

denunciados_2024$ORG_JUR_j_letras[denunciados_2024$ORG_JUR_j_letras == 3]<- 1

denunciados_2024$REINCIDE_no[denunciados_2024$REINCIDE_no == 2] <-1
denunciados_2024$REINCIDE_no[denunciados_2024$REINCIDE_no == "1+S215:S218"] <-1

Validación y visualizaciones

Denunciantes 2023
############################################################ OK GLOBAL DENUNCIANTES 2023

sumario_denunciantes_2023_df <- denunciantes_2023 %>% 
  group_by(NUM_denuncia) %>%
  summarise(
    # Géneros (usar sum si pueden haber múltiples por denuncia)
    femenino = sum(GENERO_femenino, na.rm = TRUE),
    masculino = sum(GENERO_masculino, na.rm = TRUE),
    otro = sum(GENERO_otro, na.rm = TRUE),

    # Vulnerabilidades (usar max para evitar doble conteo)
    vulnerable_si = max(VULNERABLE_si, na.rm = TRUE),
    vulnerable_no = max(VULNERABLE_no, na.rm = TRUE),
    vulnerable_desconocido = max(VULNERABLE_des, na.rm = TRUE),

    # Tipos de persona (usar max para evitar doble conteo)
    persona_natural = max(PERSONA_nat, na.rm = TRUE),
    persona_juridica = max(PERSONA_jur, na.rm = TRUE),

    # Condiciones (max conservador)
    cond_def_priv_rep_legal = max(COND_def_priv_rep_legal, na.rm = TRUE),
    cond_parte_proceso = max(COND_parte_proceso, na.rm = TRUE),
    cond_rep_org_soc_civil = max(COND_rep_org_soc_civil, na.rm = TRUE),
    cond_ser_judicial = max(COND_ser_jud, na.rm = TRUE),

    # Roles dentro del sistema judicial (max conservador)
    ser_magistrado_corte_apelaciones = max(SER_mag_corte_apel, na.rm = TRUE),
    ser_juez = max(SER_juez, na.rm = TRUE),
    ser_auxiliar = max(SER_aux, na.rm = TRUE),
    ser_administrativo = max(SER_admin, na.rm = TRUE),

    # Dependencias (usar max si solo puede haber una por denuncia)
    dependencia_administrativa = max(DEP_admin, na.rm = TRUE),
    dependencia_org_juridica = max(DEP_org_jur, na.rm = TRUE),

    # Órganos jurídicos (usar max si solo puede haber uno por denuncia)
    org_juridico_juzgado_paz = max(ORG_JUR_j_paz, na.rm = TRUE),
    org_juridico_juzgado_seccional = max(ORG_JUR_j_secc, na.rm = TRUE),
    org_juridico_juzgado_letras = max(ORG_JUR_j_letras, na.rm = TRUE),
    org_juridico_tribunal_sentencia = max(ORG_JUR_t_sent, na.rm = TRUE),
    org_juridico_corte_apelaciones = max(ORG_JUR_c_apel, na.rm = TRUE),

    # Resultados de denuncias (usar max ya que solo debe haber un resultado por denuncia)
    res_con_merito = max(RES_con_merito, na.rm = TRUE),
    res_sin_merito = max(RES_sin_merito, na.rm = TRUE),
    res_acumulada = max(RES_acumulada, na.rm = TRUE),
    res_inadmitida = max(RES_inadmitida, na.rm = TRUE),
    res_desistida = max(RES_desistida, na.rm = TRUE),
    res_suspenso = max(RES_suspenso, na.rm = TRUE),
    res_previo_admision = max(RES_previo_admision, na.rm = TRUE),
    res_previo_aprobacion_informe = max(RES_previo_aprob_inf, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(
    denuncias_únicas = n(),  # Esto contará el número de denuncias únicas
    across(where(is.numeric), sum, na.rm = TRUE),
    # Valores únicos por denuncia
    total_personas_denunciantes = n_distinct(denunciantes_2023$nombre_del_denunciante),
    lugares_únicos = n_distinct(denunciantes_2023$UBICACION),
    inspectores_únicos = n_distinct(denunciantes_2023$INSPECTOR),
    causales_únicas = n_distinct(denunciantes_2023$CAUSAL)
  )
## Warning: There was 1 warning in `summarise()`.
## ℹ In argument: `across(where(is.numeric), sum, na.rm = TRUE)`.
## Caused by warning:
## ! The `...` argument of `across()` is deprecated as of dplyr 1.1.0.
## Supply arguments directly to `.fns` through an anonymous function instead.
## 
##   # Previously
##   across(a:b, mean, na.rm = TRUE)
## 
##   # Now
##   across(a:b, \(x) mean(x, na.rm = TRUE))
# Convertir el data frame a un formato largo para facilitar la visualización
sumario_largo <- sumario_denunciantes_2023_df %>%
  pivot_longer(cols = everything(), names_to = "Variable", values_to = "Valor")

# Definir el nuevo orden de las variables
nuevo_orden <- c("denuncias_únicas","causales_únicas","lugares_únicos","inspectores_únicos","total_personas_denunciantes", "femenino", "masculino","otro")

# Reordenar el dataframe
sumario_largo <- sumario_largo %>%
  mutate(Variable = factor(Variable, 
                           levels = c(nuevo_orden, 
                                      setdiff(unique(Variable), nuevo_orden))))

# Crear el bar plot con etiquetas al final de las barras
sumario_largo_global_denunciantes_2023 <- ggplot(sumario_largo, aes(x = fct_rev(Variable), y = Valor)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  geom_text(aes(label = Valor), hjust = -0.2, color = "black") +
  coord_flip() +
  labs(
    title = "Resumen Global de Indicadores: Denunciantes 2023",
    x = "Variable",
    y = "Valor"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

ggsave("images/resumen_global_denunciantes_2023.png", sumario_largo_global_denunciantes_2023, 
       width = 15, height = 12, units = "in", dpi = 300)
################################################################### OK NUM 2023

género_summary <- denunciantes_2023 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    femenino = sum(GENERO_femenino, na.rm = TRUE),
    masculino = sum(GENERO_masculino, na.rm = TRUE),
    otro = max(GENERO_otro, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

vulnerabilidad_summary <- denunciantes_2023 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    vulnerable_si = max(VULNERABLE_si, na.rm = TRUE),
    vulnerable_no = max(VULNERABLE_no, na.rm = TRUE),
    vulnerable_desconocido = max(VULNERABLE_des, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

persona_summary <- denunciantes_2023 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    persona_natural = max(PERSONA_nat, na.rm = TRUE),
    persona_juridica = max(PERSONA_jur, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

condiciones_summary <- denunciantes_2023 %>% 
  group_by(NUM_denuncia) %>%
  summarise(
    cond_def_priv_rep_legal = max(COND_def_priv_rep_legal, na.rm = TRUE),
    cond_parte_proceso = max(COND_parte_proceso, na.rm = TRUE),
    cond_rep_org_soc_civil = max(COND_rep_org_soc_civil, na.rm = TRUE),
    cond_ser_judicial = max(COND_ser_jud, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

servidores_summary <- denunciantes_2023 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    ser_magistrado_corte_apelaciones = max(SER_mag_corte_apel, na.rm = TRUE),
    ser_juez = max(SER_juez, na.rm = TRUE),
    ser_auxiliar = max(SER_aux, na.rm = TRUE),
    ser_administrativo = max(SER_admin, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

dependencias_summary <- denunciantes_2023 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    dependencia_administrativa = max(DEP_admin, na.rm = TRUE),
    dependencia_org_juridica = max(DEP_org_jur, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

org_jurídicos_summary <- denunciantes_2023 %>% 
  group_by(NUM_denuncia) %>%
  summarise(
    org_juridico_juzgado_paz = max(ORG_JUR_j_paz, na.rm = TRUE),
    org_juridico_juzgado_seccional = max(ORG_JUR_j_secc, na.rm = TRUE),
    org_juridico_juzgado_letras = max(ORG_JUR_j_letras, na.rm = TRUE),
    org_juridico_tribunal_sentencia = max(ORG_JUR_t_sent, na.rm = TRUE),
    org_juridico_corte_apelaciones = max(ORG_JUR_c_apel, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

resultados_summary <- denunciantes_2023 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    res_con_merito = max(RES_con_merito, na.rm = TRUE),
    res_sin_merito = max(RES_sin_merito, na.rm = TRUE),
    res_acumulada = max(RES_acumulada, na.rm = TRUE),
    res_inadmitida = max(RES_inadmitida, na.rm = TRUE),
    res_desistida = max(RES_desistida, na.rm = TRUE),
    res_suspenso = max(RES_suspenso, na.rm = TRUE),
    res_previo_admision = max(RES_previo_admision, na.rm = TRUE),
    res_previo_aprobacion_informe = max(RES_previo_aprob_inf, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
library(RColorBrewer)


crear_grafico <- function(datos, titulo) {
  datos_long <- datos %>%
    pivot_longer(cols = everything(), names_to = "categoria", values_to = "valor") %>%
    arrange(desc(valor))  # Ordena los datos de mayor a menor
  
  # Crear una paleta de colores graduada
  num_colores <- nrow(datos_long)
  paleta_colores <- colorRampPalette(brewer.pal(9, "Blues"))(num_colores)
  
  ggplot(datos_long, aes(x = reorder(categoria, -valor), y = valor, fill = valor)) +
    geom_bar(stat = "identity") +
    scale_fill_gradientn(colours = paleta_colores) +
    theme_minimal() +
    labs(title = titulo, x = "", y = "Cantidad") +
    theme(
      panel.background = element_rect(fill = "lightgrey"), 
      axis.text.x = element_text(angle = 45, hjust = 1),
      legend.position = "none",
      plot.title = element_text(hjust = 0.5)
    ) +
    geom_text(aes(label = valor), vjust = -0.5, size = 1.8)
}


# Crear lista de datos
datos_lista <- list(
 "Género" = género_summary,
 "Vulnerabilidad" = vulnerabilidad_summary,
 "Tipo de Persona" = persona_summary,
 "Condiciones" = condiciones_summary,
 "Servidores" = servidores_summary,
 "Dependencias" = dependencias_summary,
 "Órganos Jurídicos" = org_jurídicos_summary,
 "Resultados" = resultados_summary
)

# Crear gráficos
graficos <- lapply(names(datos_lista), function(nombre) {
 crear_grafico(datos_lista[[nombre]], nombre)
})

# Organizar en grid
arranged_plot<- grid.arrange(
 graficos[[1]], graficos[[2]], 
 graficos[[3]], graficos[[4]],
 graficos[[5]], graficos[[6]],
 graficos[[7]], graficos[[8]],
 ncol = 4,
 top = textGrob("Resumen de Indicadores Numéricos: Denunciantes 2023", 
                gp = gpar(fontsize = 14, fontface = "bold")),
 padding = unit(0.5, "lines"))

ggsave("images/resumen_denunciantes_2023.png", arranged_plot, width = 20, height = 16, units = "in", dpi = 300)
Denunciados 2023
# La idea es ver el conteo de categorías para validar el encoding

############################ OK resuelvo conflictos de género (arreglos muy específicos)

denunciados_2023 <- denunciados_2023 %>%
  mutate(GENERO_femenino = ifelse(NUM_denuncia == "0801-2023-00401", 0, GENERO_femenino))

denunciados_2023 <- denunciados_2023 %>%
  mutate(GENERO_femenino = ifelse(nombre_del_denunciado == "Rolando Arturo Tome Molina", 0, GENERO_femenino))

denunciados_2023 <- denunciados_2023 %>%
  mutate(GENERO_femenino = ifelse(nombre_del_denunciado == "Angel Adolfo Mendoza Rodriguez", 0, GENERO_femenino))    


denunciados_2023 <- denunciados_2023 %>%
  mutate(GENERO_femenino = ifelse(nombre_del_denunciado == "Guatavo Castellanos Caballero", 0, GENERO_femenino))  


denunciados_2023 <- denunciados_2023 %>%
  mutate(GENERO_femenino = ifelse(nombre_del_denunciado == "Carlos Orlando Aleman Rodriguez", 0, GENERO_femenino))  

denunciados_2023 <- denunciados_2023 %>%
  mutate(GENERO_femenino = ifelse(nombre_del_denunciado == "Marell Alejandro Suazo Avilez", 0, GENERO_femenino)) 
 

denunciados_2023 <- denunciados_2023 %>%
  mutate(
    GENERO_masculino = ifelse(nombre_del_denunciado == "Maria Lydia Guzman", 0, GENERO_masculino),
    GENERO_femenino = ifelse(nombre_del_denunciado == "Maria Lydia Guzman", 1, GENERO_femenino)
  )

denunciados_2023 <- denunciados_2023 %>%
  mutate(
    GENERO_masculino = ifelse(nombre_del_denunciado == "Amalia Zulema Espinal Castillo", 0, GENERO_masculino),
    GENERO_femenino = ifelse(nombre_del_denunciado == "Amalia Zulema Espinal Castillo", 1, GENERO_femenino)
  )

names_to_modify <- c(
  "Ana Creistina Amaya Muñoz",
  "Socchilh Esperanza Evansks Aguirre",
  "Nixsa Yakelin Fuentes Cruz",
  "Maria Teresa Jimenez",
  "Roalma Berenice Matute",
  "Delmi Lopoez",
  "Karen Rosalina Paz",
  "Dunia Emerita Flores",
  "Florencia Menardi Marconi",
  "Gladis Patricia Montoya Villatoro" 
)

denunciados_2023 <- denunciados_2023 %>%
  mutate(
    GENERO_femenino = ifelse(nombre_del_denunciado %in% names_to_modify, 1, GENERO_femenino),
    GENERO_masculino = ifelse(nombre_del_denunciado %in% names_to_modify, 0, GENERO_masculino)
  )
################################################ OK GLOBAL denunciados 2023


library(dplyr)
library(ggplot2)
library(tidyr)
library(forcats)

# Crear el resumen de los denunciados
sumario_denunciados_2023_df <- denunciados_2023 %>% 
  group_by(NUM_denuncia) %>%
  summarise(
    # Géneros (usar sum si pueden haber múltiples por denuncia)
    femenino = sum(GENERO_femenino, na.rm = TRUE),
    masculino = sum(GENERO_masculino, na.rm = TRUE),
    otro = sum(GENERO_otro, na.rm = TRUE),

    # Roles dentro del sistema judicial (max conservador)
    ser_magistrado_corte_apelaciones = max(SER_mag_corte_apel, na.rm = TRUE),
    ser_juez = max(SER_juez, na.rm = TRUE),
    ser_auxiliar = max(SER_aux, na.rm = TRUE),
    ser_administrativo = max(SER_admin, na.rm = TRUE),

    # Dependencias (usar max si solo puede haber una por denuncia)
    dependencia_administrativa = max(DEP_admin, na.rm = TRUE),
    dependencia_org_juridica = max(DEP_org_jur, na.rm = TRUE),

    # Órganos jurídicos (usar max si solo puede haber uno por denuncia)
    org_juridico_juzgado_paz = max(ORG_JUR_j_paz, na.rm = TRUE),
    org_juridico_juzgado_seccional = max(ORG_JUR_j_secc, na.rm = TRUE),
    org_juridico_juzgado_letras = max(ORG_JUR_j_letras, na.rm = TRUE),
    org_juridico_tribunal_sentencia = max(ORG_JUR_t_sent, na.rm = TRUE),
    org_juridico_corte_apelaciones = max(ORG_JUR_c_apel, na.rm = TRUE),

    # Reincidencia del denunciado (usar max ya que solo debe haber un resultado por denuncia)
    rein_si = max(REINCIDE_si, na.rm = TRUE),
    rein_no = max(REINCIDE_no, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(
    denuncias_únicas = n(),  # Esto contará el número de denuncias únicas
    across(where(is.numeric), sum, na.rm = TRUE),
    # Valores únicos por denuncia
    total_personas_denunciadas = n_distinct(denunciados_2023$nombre_del_denunciado),
    lugares_únicos = n_distinct(denunciados_2023$UBICACION)
  )

# Convertir el data frame a un formato largo para facilitar la visualización
sumario_largo <- sumario_denunciados_2023_df %>%
  tidyr::pivot_longer(cols = everything(), names_to = "Variable", values_to = "Valor")

# Definir el nuevo orden de las variables
nuevo_orden <- c("denuncias_únicas", "lugares_únicos", "total_personas_denunciadas", "femenino", "masculino", "otro")

# Reordenar el dataframe
sumario_largo <- sumario_largo %>%
  mutate(Variable = factor(Variable, 
                           levels = c(nuevo_orden, 
                                      setdiff(unique(Variable), nuevo_orden))))

# Crear el bar plot con etiquetas al final de las barras
sumario_largo_global_denunciados_2023 <- ggplot(sumario_largo, aes(x = fct_rev(Variable), y = Valor)) +
  geom_bar(stat = "identity", fill = "black") +
  geom_text(aes(label = Valor), hjust = -0.2, color = "black") +
  coord_flip() +
  labs(
    title = "Resumen Global de Indicadores: Denunciados 2023",
    x = "Variable",
    y = "Valor"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

# Guardar el gráfico
ggsave("images/resumen_global_denunciados_2023.png", sumario_largo_global_denunciados_2023, 
       width = 15, height = 12, units = "in", dpi = 300)
####################################### OK NUM DENUNCIADOS 2023

género_summary <- denunciados_2023 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    femenino = sum(GENERO_femenino, na.rm = TRUE),
    masculino = sum(GENERO_masculino, na.rm = TRUE),
    otro = max(GENERO_otro, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))


servidores_summary <- denunciados_2023 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    ser_magistrado_corte_apelaciones = max(SER_mag_corte_apel, na.rm = TRUE),
    ser_juez = max(SER_juez, na.rm = TRUE),
    ser_auxiliar = max(SER_aux, na.rm = TRUE),
    ser_administrativo = max(SER_admin, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

dependencias_summary <- denunciados_2023 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    dependencia_administrativa = max(DEP_admin, na.rm = TRUE),
    dependencia_org_juridica = max(DEP_org_jur, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

org_jurídicos_summary <- denunciados_2023 %>% 
  group_by(NUM_denuncia) %>%
  summarise(
    org_juridico_juzgado_paz = max(ORG_JUR_j_paz, na.rm = TRUE),
    org_juridico_juzgado_seccional = max(ORG_JUR_j_secc, na.rm = TRUE),
    org_juridico_juzgado_letras = max(ORG_JUR_j_letras, na.rm = TRUE),
    org_juridico_tribunal_sentencia = max(ORG_JUR_t_sent, na.rm = TRUE),
    org_juridico_corte_apelaciones = max(ORG_JUR_c_apel, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))


reincidencia_summary <- denunciados_2023 %>% 
  group_by(NUM_denuncia) %>% 
  summarise(
    rein_si = max(REINCIDE_si, na.rm = TRUE),
    rein_no = max(REINCIDE_no, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))



############
library(gridExtra)
library(RColorBrewer)


crear_grafico <- function(datos, titulo) {
  datos_long <- datos %>%
    pivot_longer(cols = everything(), names_to = "categoria", values_to = "valor") %>%
    arrange(desc(valor))  # Ordena los datos de mayor a menor
  
  # Crear una paleta de colores graduada
  num_colores <- nrow(datos_long)
  paleta_colores <- colorRampPalette(brewer.pal(9, "Greys"))(num_colores)
  
  ggplot(datos_long, aes(x = reorder(categoria, -valor), y = valor, fill = valor)) +
    geom_bar(stat = "identity") +
    scale_fill_gradientn(colours = paleta_colores) +
    theme_minimal() +
    labs(title = titulo, x = "", y = "Cantidad") +
    theme(
      panel.background = element_rect(fill = "lightgrey"), 
      axis.text.x = element_text(angle = 45, hjust = 1),
      legend.position = "none",
      plot.title = element_text(hjust = 0.5)
    ) +
    geom_text(aes(label = valor), vjust = -0.5, size = 1.8)
}


# Crear lista de datos
datos_lista <- list(
 "Género" = género_summary,
 "Servidores" = servidores_summary,
 "Dependencias" = dependencias_summary,
 "Órganos Jurídicos" = org_jurídicos_summary,
 "Reincidencia" = reincidencia_summary
)

# Crear gráficos
graficos <- lapply(names(datos_lista), function(nombre) {
 crear_grafico(datos_lista[[nombre]], nombre)
})

# Organizar en grid
arranged_plot<- grid.arrange(
 graficos[[1]], graficos[[2]], 
 graficos[[3]], graficos[[4]],
 graficos[[5]],
 ncol = 3,
 top = textGrob("Resumen de Indicadores Numéricos: Denunciados 2023", 
                gp = gpar(fontsize = 14, fontface = "bold")),
 padding = unit(0.5, "lines"))

ggsave("images/resumen_denunciados_2023.png", arranged_plot, 
       width = 15, height = 12, units = "in", dpi = 300)
Denunciantes 2024
################################################ POR VALIDAR! GLOBAL DENUNCIANTES 2024

sumario_denunciantes_2024_df <- denunciantes_2024 %>% 
  group_by(NUM_denuncia) %>%
  summarise(
    # Géneros (usar sum si pueden haber múltiples por denuncia)
    femenino = sum(GENERO_femenino, na.rm = TRUE),
    masculino = sum(GENERO_masculino, na.rm = TRUE),
    otro = sum(GENERO_otro, na.rm = TRUE),

    # Vulnerabilidades (usar max para evitar doble conteo)
    vulnerable_si = max(VULNERABLE_si, na.rm = TRUE),
    vulnerable_no = max(VULNERABLE_no, na.rm = TRUE),
    vulnerable_desconocido = max(VULNERABLE_des, na.rm = TRUE),

    # Tipos de persona (usar max para evitar doble conteo)
    persona_natural = max(PERSONA_nat, na.rm = TRUE),
    persona_juridica = max(PERSONA_jur, na.rm = TRUE),

    # Condiciones (max conservador)
    cond_def_priv_rep_legal = max(COND_def_priv_rep_legal, na.rm = TRUE),
    cond_parte_proceso = max(COND_parte_proceso, na.rm = TRUE),
    cond_rep_org_soc_civil = max(COND_rep_org_soc_civil, na.rm = TRUE),
    cond_ser_judicial = max(COND_ser_jud, na.rm = TRUE),

    # Roles dentro del sistema judicial (max conservador)
    ser_magistrado_corte_apelaciones = max(SER_mag_corte_apel, na.rm = TRUE),
    ser_juez = max(SER_juez, na.rm = TRUE),
    ser_auxiliar = max(SER_aux, na.rm = TRUE),
    ser_administrativo = max(SER_admin, na.rm = TRUE),

    # Dependencias (usar max si solo puede haber una por denuncia)
    dependencia_administrativa = max(DEP_admin, na.rm = TRUE),
    dependencia_org_juridica = max(DEP_org_jur, na.rm = TRUE),

    # Órganos jurídicos (usar max si solo puede haber uno por denuncia)
    org_juridico_juzgado_paz = max(ORG_JUR_j_paz, na.rm = TRUE),
    org_juridico_v_domestica = max(ORG_JUR_v_dom, na.rm = TRUE), 
    org_juridico_juzgado_seccional = max(ORG_JUR_j_secc, na.rm = TRUE),
    org_juridico_juzgado_letras = max(ORG_JUR_j_letras, na.rm = TRUE),
    org_juridico_tribunal_sentencia = max(ORG_JUR_t_sent, na.rm = TRUE),
    org_juridico_corte_apelaciones = max(ORG_JUR_c_apel, na.rm = TRUE),

    # Resultados de denuncias (usar max ya que solo debe haber un resultado por denuncia)
    res_con_merito = max(RES_con_merito, na.rm = TRUE),
    res_sin_merito = max(RES_sin_merito, na.rm = TRUE),
    res_acumulada = max(RES_acumulada, na.rm = TRUE),
    res_inadmitida = max(RES_inadmitida, na.rm = TRUE),
    res_desistida = max(RES_desistida, na.rm = TRUE),
    res_suspenso = max(RES_suspenso, na.rm = TRUE),
    res_previo_admision = max(RES_previo_admision, na.rm = TRUE),
    res_previo_aprobacion_informe = max(RES_previo_aprob_inf, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(
    denuncias_únicas = n(),  # Esto contará el número de denuncias únicas
    across(where(is.numeric), sum, na.rm = TRUE),
    # Valores únicos por denuncia
    total_personas_denunciantes = n_distinct(denunciantes_2024$nombre_del_denunciante),
    lugares_únicos = n_distinct(denunciantes_2024$UBICACION),
    inspectores_únicos = n_distinct(denunciantes_2024$INSPECTOR),
    causales_únicas = n_distinct(denunciantes_2024$CAUSAL)
  )


# Convertir el data frame a un formato largo para facilitar la visualización
sumario_largo <- sumario_denunciantes_2024_df %>%
  pivot_longer(cols = everything(), names_to = "Variable", values_to = "Valor")

# Definir el nuevo orden de las variables
nuevo_orden <- c("denuncias_únicas","causales_únicas","lugares_únicos","inspectores_únicos","total_personas_denunciantes", "femenino", "masculino","otro")

# Reordenar el dataframe
sumario_largo <- sumario_largo %>%
  mutate(Variable = factor(Variable, 
                           levels = c(nuevo_orden, 
                                      setdiff(unique(Variable), nuevo_orden))))




# Crear el bar plot con etiquetas al final de las barras
sumario_largo_global_denunciantes_2024 <- ggplot(sumario_largo, aes(x = fct_rev(Variable), y = Valor)) +
  geom_bar(stat = "identity", fill = "darkorchid4") +
  geom_text(aes(label = Valor), hjust = -0.2, color = "black") +
  coord_flip() +
  labs(
    title = "Resumen Global de Indicadores: Denunciantes 2024",
    x = "Variable",
    y = "Valor"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

ggsave("images/resumen_global_denunciantes_2024.png", sumario_largo_global_denunciantes_2024, 
       width = 15, height = 12, units = "in", dpi = 300)
#################################### POR VALIDAR! NUM DENUNCIANTES 2024 

género_summary <- denunciantes_2024 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    femenino = sum(GENERO_femenino, na.rm = TRUE),
    masculino = sum(GENERO_masculino, na.rm = TRUE),
    otro = max(GENERO_otro, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

vulnerabilidad_summary <- denunciantes_2024 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    vulnerable_si = max(VULNERABLE_si, na.rm = TRUE),
    vulnerable_no = max(VULNERABLE_no, na.rm = TRUE),
    vulnerable_desconocido = max(VULNERABLE_des, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

persona_summary <- denunciantes_2024 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    persona_natural = max(PERSONA_nat, na.rm = TRUE),
    persona_juridica = max(PERSONA_jur, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

condiciones_summary <- denunciantes_2024 %>% 
  group_by(NUM_denuncia) %>%
  summarise(
    cond_def_priv_rep_legal = max(COND_def_priv_rep_legal, na.rm = TRUE),
    cond_parte_proceso = max(COND_parte_proceso, na.rm = TRUE),
    cond_rep_org_soc_civil = max(COND_rep_org_soc_civil, na.rm = TRUE),
    cond_ser_judicial = max(COND_ser_jud, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

servidores_summary <- denunciantes_2024 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    ser_magistrado_corte_apelaciones = max(SER_mag_corte_apel, na.rm = TRUE),
    ser_juez = max(SER_juez, na.rm = TRUE),
    ser_auxiliar = max(SER_aux, na.rm = TRUE),
    ser_administrativo = max(SER_admin, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

dependencias_summary <- denunciantes_2024 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    dependencia_administrativa = max(DEP_admin, na.rm = TRUE),
    dependencia_org_juridica = max(DEP_org_jur, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

org_jurídicos_summary <- denunciantes_2024 %>% 
  group_by(NUM_denuncia) %>%
  summarise(
    org_juridico_juzgado_paz = max(ORG_JUR_j_paz, na.rm = TRUE),
    org_juridico_violencia_dom = max(ORG_JUR_v_dom, na.rm = TRUE),
    org_juridico_juzgado_seccional = max(ORG_JUR_j_secc, na.rm = TRUE),
    org_juridico_juzgado_letras = max(ORG_JUR_j_letras, na.rm = TRUE),
    org_juridico_tribunal_sentencia = max(ORG_JUR_t_sent, na.rm = TRUE),
    org_juridico_corte_apelaciones = max(ORG_JUR_c_apel, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

resultados_summary <- denunciantes_2024 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    res_con_merito = max(RES_con_merito, na.rm = TRUE),
    res_sin_merito = max(RES_sin_merito, na.rm = TRUE),
    res_acumulada = max(RES_acumulada, na.rm = TRUE),
    res_inadmitida = max(RES_inadmitida, na.rm = TRUE),
    res_desistida = max(RES_desistida, na.rm = TRUE),
    res_suspenso = max(RES_suspenso, na.rm = TRUE),
    res_previo_admision = max(RES_previo_admision, na.rm = TRUE),
    res_previo_aprobacion_informe = max(RES_previo_aprob_inf, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

library(gridExtra)
library(RColorBrewer)


crear_grafico <- function(datos, titulo) {
  datos_long <- datos %>%
    pivot_longer(cols = everything(), names_to = "categoria", values_to = "valor") %>%
    arrange(desc(valor))  # Ordena los datos de mayor a menor
  
  # Crear una paleta de colores graduada
  num_colores <- nrow(datos_long)
  paleta_colores <- colorRampPalette(brewer.pal(9, "BuPu"))(num_colores)
  

ggplot(datos_long, aes(x = reorder(categoria, -valor), y = valor, fill = valor)) +
    geom_bar(stat = "identity") +
    scale_fill_gradientn(colours = paleta_colores) +
    theme_minimal() +
    labs(title = titulo, x = "", y = "Cantidad") +
    theme(
      panel.background = element_rect(fill = "lightgrey"), 
      axis.text.x = element_text(angle = 45, hjust = 1),
      legend.position = "none",
      plot.title = element_text(hjust = 0.5)
    ) +
    geom_text(aes(label = valor), vjust = -0.5, size = 1.8)
}


# Crear lista de datos
datos_lista <- list(
 "Género" = género_summary,
 "Vulnerabilidad" = vulnerabilidad_summary,
 "Tipo de Persona" = persona_summary,
 "Condiciones" = condiciones_summary,
 "Servidores" = servidores_summary,
 "Dependencias" = dependencias_summary,
 "Órganos Jurídicos" = org_jurídicos_summary,
 "Resultados" = resultados_summary
)

# Crear gráficos
graficos <- lapply(names(datos_lista), function(nombre) {
 crear_grafico(datos_lista[[nombre]], nombre)
})

# Organizar en grid
arranged_plot<- grid.arrange(
 graficos[[1]], graficos[[2]], 
 graficos[[3]], graficos[[4]],
 graficos[[5]], graficos[[6]],
 graficos[[7]], graficos[[8]],
 ncol = 4,
 top = textGrob("Resumen de Indicadores Numéricos: Denunciantes 2024", 
                gp = gpar(fontsize = 14, fontface = "bold")),
 padding = unit(0.5, "lines"))

ggsave("images/resumen_denunciantes_2024.png", arranged_plot, width = 20, height = 16, units = "in", dpi = 300)
Denunciados 2024
################################################### POR VALIDAR! GLOBAL DENUNCIADOS 2024

denunciados_2024$REINCIDE_no <- as.numeric(denunciados_2024$REINCIDE_no)


# Crear el resumen de los denunciados
sumario_denunciados_2024_df <- denunciados_2024 %>% 
  group_by(NUM_denuncia) %>%
  summarise(
    # Géneros (usar sum si pueden haber múltiples por denuncia)
    femenino = sum(GENERO_femenino, na.rm = TRUE),
    masculino = sum(GENERO_masculino, na.rm = TRUE),
    otro = sum(GENERO_otro, na.rm = TRUE),

    # Roles dentro del sistema judicial (max conservador)
    ser_magistrado_corte_apelaciones = max(SER_mag_corte_apel, na.rm = TRUE),
    ser_juez = max(SER_juez, na.rm = TRUE),
    ser_auxiliar = max(SER_aux, na.rm = TRUE),
    ser_administrativo = max(SER_admin, na.rm = TRUE),

    # Dependencias (usar max si solo puede haber una por denuncia)
    dependencia_administrativa = max(DEP_admin, na.rm = TRUE),
    dependencia_org_juridica = max(DEP_org_jur, na.rm = TRUE),

    # Órganos jurídicos (usar max si solo puede haber uno por denuncia)
    org_juridico_juzgado_paz = max(ORG_JUR_j_paz, na.rm = TRUE),
    org_juridico_juzgado_seccional = max(ORG_JUR_j_secc, na.rm = TRUE),
    org_juridico_juzgado_letras = max(ORG_JUR_j_letras, na.rm = TRUE),
    org_juridico_tribunal_sentencia = max(ORG_JUR_t_sent, na.rm = TRUE),
    org_juridico_corte_apelaciones = max(ORG_JUR_c_apel, na.rm = TRUE),

    # Reincidencia del denunciado (usar max ya que solo debe haber un resultado por denuncia)
     rein_si = max(REINCIDE_si, na.rm = TRUE),
    rein_no = max(REINCIDE_no, na.rm = TRUE)
   
    
  ) %>%
  ungroup() %>%
  summarise(
    denuncias_únicas = n(),  # Esto contará el número de denuncias únicas
    across(where(is.numeric), sum, na.rm = TRUE),
    # Valores únicos por denuncia
    total_personas_denunciadas = n_distinct(denunciados_2024$nombre_del_denunciado),
    lugares_únicos = n_distinct(denunciados_2024$UBICACION)
  )

# Convertir el data frame a un formato largo para facilitar la visualización
sumario_largo <- sumario_denunciados_2024_df %>%
  tidyr::pivot_longer(cols = everything(), names_to = "Variable", values_to = "Valor")

# Definir el nuevo orden de las variables
nuevo_orden <- c("denuncias_únicas", "lugares_únicos", "total_personas_denunciadas", "femenino", "masculino", "otro")

# Reordenar el dataframe
sumario_largo <- sumario_largo %>%
  mutate(Variable = factor(Variable, 
                           levels = c(nuevo_orden, 
                                      setdiff(unique(Variable), nuevo_orden))))

# Crear el bar plot con etiquetas al final de las barras
sumario_largo_global_denunciados_2024 <- ggplot(sumario_largo, aes(x = fct_rev(Variable), y = Valor)) +
  geom_bar(stat = "identity", fill = "black") +
  geom_text(aes(label = Valor), hjust = -0.2, color = "black") +
  coord_flip() +
  labs(
    title = "Resumen Global de Indicadores: Denunciados 2024",
    x = "Variable",
    y = "Valor"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

# Guardar el gráfico
ggsave("images/resumen_global_denunciados_2024.png", sumario_largo_global_denunciados_2024, 
       width = 15, height = 12, units = "in", dpi = 300)
######################################################## POR VALIDAR! NUM DENUNCIADOS 2024

género_summary <- denunciados_2024 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    femenino = sum(GENERO_femenino, na.rm = TRUE),
    masculino = sum(GENERO_masculino, na.rm = TRUE),
    otro = max(GENERO_otro, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))


servidores_summary <- denunciados_2024 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    ser_magistrado_corte_apelaciones = max(SER_mag_corte_apel, na.rm = TRUE),
    ser_juez = max(SER_juez, na.rm = TRUE),
    ser_auxiliar = max(SER_aux, na.rm = TRUE),
    ser_administrativo = max(SER_admin, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

dependencias_summary <- denunciados_2024 %>%
  group_by(NUM_denuncia) %>%
  summarise(
    dependencia_administrativa = max(DEP_admin, na.rm = TRUE),
    dependencia_org_juridica = max(DEP_org_jur, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

org_jurídicos_summary <- denunciados_2024 %>% 
  group_by(NUM_denuncia) %>%
  summarise(
    org_juridico_juzgado_paz = max(ORG_JUR_j_paz, na.rm = TRUE),
    org_juridico_juzgado_seccional = max(ORG_JUR_j_secc, na.rm = TRUE),
    org_juridico_juzgado_letras = max(ORG_JUR_j_letras, na.rm = TRUE),
    org_juridico_tribunal_sentencia = max(ORG_JUR_t_sent, na.rm = TRUE),
    org_juridico_corte_apelaciones = max(ORG_JUR_c_apel, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))


reincidencia_summary <- denunciados_2024 %>% 
  group_by(NUM_denuncia) %>% 
  summarise(
    rein_si = max(REINCIDE_si, na.rm = TRUE),
    rein_no = max(REINCIDE_no, na.rm = FALSE)
  ) %>%
  ungroup() %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))



############

library(gridExtra)
library(RColorBrewer)


crear_grafico <- function(datos, titulo) {
  datos_long <- datos %>%
    pivot_longer(cols = everything(), names_to = "categoria", values_to = "valor") %>%
    arrange(desc(valor))  # Ordena los datos de mayor a menor
  
  # Crear una paleta de colores graduada
  num_colores <- nrow(datos_long)
  paleta_colores <- colorRampPalette(brewer.pal(9, "Greys"))(num_colores)
  
  ggplot(datos_long, aes(x = reorder(categoria, -valor), y = valor, fill = valor)) +
    geom_bar(stat = "identity") +
    scale_fill_gradientn(colours = paleta_colores) +
    theme_minimal() +
    labs(title = titulo, x = "", y = "Cantidad") +
    theme(
      panel.background = element_rect(fill = "lightgrey"), 
      axis.text.x = element_text(angle = 45, hjust = 1),
      legend.position = "none",
      plot.title = element_text(hjust = 0.5)
    ) +
    geom_text(aes(label = valor), vjust = -0.5, size = 1.8)
}


# Crear lista de datos
datos_lista <- list(
 "Género" = género_summary,
 "Servidores" = servidores_summary,
 "Dependencias" = dependencias_summary,
 "Órganos Jurídicos" = org_jurídicos_summary,
 "Reincidencia" = reincidencia_summary
)

# Crear gráficos
graficos <- lapply(names(datos_lista), function(nombre) {
 crear_grafico(datos_lista[[nombre]], nombre)
})

# Organizar en grid
arranged_plot<- grid.arrange(
 graficos[[1]], graficos[[2]], 
 graficos[[3]], graficos[[4]],
 graficos[[5]],
 ncol = 3,
 top = textGrob("Resumen de Indicadores Numéricos: Denunciados 2024", 
                gp = gpar(fontsize = 14, fontface = "bold")),
 padding = unit(0.5, "lines"))

ggsave("images/resumen_denunciados_2024.png", arranged_plot, 
       width = 15, height = 12, units = "in", dpi = 300)

Datos limpios guardados

# Nuevo guardado de las 4 bases de datos

write_xlsx(denunciantes_2023, "C:/Users/USER/Desktop/codebaker/all_r/Mapa de Gestión y Fortalecimiento de la Supervisión General del Poder Judicial/data/clean/denunciantes_2023.xlsx")
write_xlsx(denunciados_2023, "C:/Users/USER/Desktop/codebaker/all_r/Mapa de Gestión y Fortalecimiento de la Supervisión General del Poder Judicial/data/clean/denunciados_2023.xlsx")
write_xlsx(denunciantes_2024, "C:/Users/USER/Desktop/codebaker/all_r/Mapa de Gestión y Fortalecimiento de la Supervisión General del Poder Judicial/data/clean/denunciantes_2024.xlsx")
write_xlsx(denunciados_2024, "C:/Users/USER/Desktop/codebaker/all_r/Mapa de Gestión y Fortalecimiento de la Supervisión General del Poder Judicial/data/clean/denunciados_2024.xlsx")