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)