BD1 <- read_excel("C:/Users/usuario/Downloads/bases_diccionario/BD1.xlsx")
BD2 <- read_excel("C:/Users/usuario/Downloads/bases_diccionario/BD2.xlsx")

diccionario1 <- read_excel(
  "C:/Users/usuario/Downloads/bases_diccionario/DICCIONARIO_DATOS.xlsx",
  sheet = 1
)

diccionario2 <- read_excel(
  "C:/Users/usuario/Downloads/bases_diccionario/DICCIONARIO_DATOS.xlsx",
  sheet = 2
)

datos <- BD1 %>%
  left_join(BD2, by = "REGISTRO")

diccionario2 <- diccionario2 %>%
  mutate(across(everything(), as.character))

datos_chr <- datos %>%
  mutate(across(everything(), as.character))

dic_por_variable <- split(diccionario2, diccionario2$Valor)

for (var in names(dic_por_variable)) {

  if (var %in% names(datos_chr)) {

    dic <- dic_por_variable[[var]]

    etiquetas <- setNames(
      dic$Etiqueta,
      dic$Resultado
    )

    datos_chr[[paste0(var, "_texto")]] <-
      etiquetas[datos_chr[[var]]]
  }
}

Capítulo 1. Caracterización sociodemográfica de la población

Interpretación general

La caracterización sociodemográfica evidencia una distribución relativamente equilibrada por género, con predominio de población adulta joven y adulta. Los estratos socioeconómicos se concentran principalmente en niveles medios, mientras que las ocupaciones reportadas muestran una participación importante de personas vinculadas al mercado laboral y actividades académicas. Estas características permiten contextualizar los resultados posteriores sobre percepción de seguridad y victimización, dado que factores como la edad, el género y la condición socioeconómica pueden influir en la experiencia y percepción frente a los fenómenos de seguridad ciudadana.

Género

tabla_genero <- table(datos_chr$GENERO_texto)

porcentajes <- round(
  100 * tabla_genero / sum(tabla_genero),
  1
)

bp <- barplot(
  tabla_genero,
  main = "Distribución por género",
  col = c("lightblue", "pink"),
  las = 1,
  cex.names = 1,
  ylim = c(0, max(tabla_genero) * 1.5)
)

text(
  x = bp,
  y = tabla_genero,
  labels = paste0(
    tabla_genero,
    "\n(",
    porcentajes,
    "%)"
  ),
  pos = 3,
  cex = 0.9
)

Edad

breaks <- c(0,20,40,60,80,100)

histograma <- hist(
  datos$PC_EDAD,
  breaks = breaks,
  main = "Distribución de edades",
  col = "lightgreen",
  xlab = "Edad",
  ylab = "Frecuencia"
)

porcentajes <- round(
  100 * histograma$counts /
    sum(histograma$counts),
  1
)

text(
  x = histograma$mids,
  y = histograma$counts,
  labels = paste0(
    histograma$counts,
    " (",
    porcentajes,
    "%)"
  ),
  pos = 3,
  cex = 0.7
)

Estrato

tabla_estrato <- table(datos_chr$ESTRATO_DEC_texto)

porc_estrato <- round(
  100 * tabla_estrato /
    sum(tabla_estrato),
  1
)

bp <- barplot(
  tabla_estrato,
  main = "Distribución por estrato socioeconómico",
  col = "orange",
  las = 2,
  cex.names = 0.8,
  ylim = c(0, max(tabla_estrato) * 1.5)
)

text(
  bp,
  tabla_estrato,
  labels = paste0(
    tabla_estrato,
    "\n(",
    porc_estrato,
    "%)"
  ),
  pos = 3,
  cex = 0.8
)

Ocupación

freq <- table(datos_chr$PD_texto)

df <- as.data.frame(freq)

colnames(df) <- c(
  "Etiqueta",
  "Frecuencia"
)

df <- df %>%
  mutate(
    Porcentaje = round(
      100 * Frecuencia /
        sum(Frecuencia),
      1
    )
  ) %>%
  arrange(desc(Frecuencia))

ggplot(
  df,
  aes(
    x = reorder(Etiqueta, Frecuencia),
    y = Frecuencia
  )
) +
  geom_col(fill = "steelblue") +
  geom_text(
    aes(
      label = paste0(
        Frecuencia,
        " (",
        Porcentaje,
        "%)"
      )
    ),
    hjust = -0.1,
    size = 3
  ) +
  coord_flip() +
  expand_limits(y = max(df$Frecuencia) * 1.25) +
  labs(
    title = "Participación por ocupación",
    x = "",
    y = "Frecuencia"
  ) +
  theme_minimal() +
  theme(
    axis.text.y = element_text(size = 8)
  )

Capítulo 2. Percepción de seguridad

Interpretación general

Los resultados muestran que la percepción de seguridad disminuye a medida que aumenta la escala territorial analizada. En general, los ciudadanos suelen percibir mayores niveles de seguridad en su entorno inmediato, donde existe un mayor conocimiento del territorio y de las personas que lo habitan. Por el contrario, la percepción sobre la ciudad suele estar influenciada por experiencias indirectas, noticias sobre hechos delictivos y problemáticas observadas en otros sectores urbanos. Este comportamiento evidencia que la cercanía con el entorno genera una sensación de control y confianza superior a la percepción construida sobre espacios más amplios.

tabla_p1 <- table(datos_chr$P1_texto)

porc_p1 <- round(
  100 * tabla_p1 /
    sum(tabla_p1),
  1
)

barplot(
  tabla_p1,
  main = "Percepción de seguridad en el barrio",
  col = "lightblue",
  las = 2,
  cex.names = 0.8,
  ylim = c(0, max(tabla_p1)*1.4)
)

text(
  x = seq_along(tabla_p1),
  y = tabla_p1,
  labels = paste0(
    tabla_p1,
    " (",
    porc_p1,
    "%)"
  ),
  pos = 3
)

tabla_p3 <- table(datos_chr$P3_texto)

porc_p3 <- round(
  100 * tabla_p3 /
    sum(tabla_p3),
  1
)

bp <- barplot(
  tabla_p3,
  main = "Percepción de seguridad en la comuna",
  col = "lightgreen",
  las = 2,
  cex.names = 0.8,
  ylim = c(0, max(tabla_p3) * 1.5)
)

text(
  bp,
  tabla_p3,
  labels = paste0(
    tabla_p3,
    "\n(",
    porc_p3,
    "%)"
  ),
  pos = 3,
  cex = 0.8
)

tabla_p5 <- table(datos_chr$P5_texto)

porc_p5 <- round(
  100 * tabla_p5 /
    sum(tabla_p5),
  1
)

bp <- barplot(
  tabla_p5,
  main = "Percepción de seguridad en la ciudad",
  col = "lightcoral",
  las = 2,
  cex.names = 0.8,
  ylim = c(0, max(tabla_p5) * 1.5)
)

text(
  bp,
  tabla_p5,
  labels = paste0(
    tabla_p5,
    "\n(",
    porc_p5,
    "%)"
  ),
  pos = 3,
  cex = 0.8
)

Capítulo 3. Percepción según género y estrato

Interpretación general

Se identifican diferencias en la percepción de seguridad entre grupos poblacionales. Las mujeres tienden a reportar menores niveles de seguridad, situación que puede estar asociada a una mayor percepción de vulnerabilidad frente a determinados delitos o situaciones de riesgo en el espacio público. Asimismo, los estratos socioeconómicos más bajos muestran mayores preocupaciones relacionadas con la seguridad urbana, lo que podría reflejar condiciones diferenciales de exposición al riesgo, presencia de problemáticas sociales o menores recursos para afrontar situaciones de inseguridad.

tabla_genero_seg <- datos_chr %>%
  count(GENERO_texto, P1_texto)

tabla_genero_seg <- tabla_genero_seg %>%
  group_by(GENERO_texto) %>%
  mutate(
    Porcentaje =
      round(
        100 * n / sum(n),
        1
      )
  )

ggplot(
  tabla_genero_seg,
  aes(
    x = P1_texto,
    y = n,
    fill = GENERO_texto
  )
) +
  geom_bar(
    stat = "identity",
    position = position_dodge(0.9)
  ) +
  geom_text(
    aes(
      label = paste0(
        n,
        "\n(",
        Porcentaje,
        "%)"
      )
    ),
    position = position_dodge(0.9),
    vjust = -0.2,
    size = 3
  ) +
  labs(
    title = "Percepción de seguridad en el barrio según género",
    x = "",
    y = "Frecuencia"
  ) +
  theme_minimal()

tabla_estrato_seg <- datos_chr %>%
  filter(
    !is.na(ESTRATO_DEC_texto),
    !is.na(P5_texto)
  ) %>%
  count(
    ESTRATO_DEC_texto,
    P5_texto
  ) %>%
  group_by(ESTRATO_DEC_texto) %>%
  mutate(
    Porcentaje =
      round(
        100 * n / sum(n),
        1
      )
  )

ggplot(
  tabla_estrato_seg,
  aes(
    x = P5_texto,
    y = n,
    fill = ESTRATO_DEC_texto
  )
) +
  geom_bar(
    stat = "identity",
    position = position_dodge(0.9)
  ) +
  geom_text(
    aes(
      label = paste0(
        n,
        "\n(",
        Porcentaje,
        "%)"
      )
    ),
    position = position_dodge(0.9),
    vjust = -0.2,
    size = 2.8
  ) +
  labs(
    title = "Percepción de seguridad en la ciudad según estrato",
    x = "",
    y = "Frecuencia"
  ) +
  theme_minimal()

Capítulo 4. Índice de victimización

Interpretación general

El índice de victimización permite estimar la proporción de personas que reportaron haber sido víctimas de algún delito durante el período analizado. Este indicador constituye una medida complementaria a la percepción de seguridad, ya que refleja experiencias reales de victimización. La comparación entre comunas permite identificar territorios con mayores niveles de exposición al delito y aquellos donde la ocurrencia de hechos victimizantes es relativamente menor.

indice_ciudad <-
  sum((datos$P20A == 1) * datos$FACTOR) /
  sum(datos$FACTOR)

cat(
  "El índice de victimización de la ciudad es de",
  round(indice_ciudad * 100, 1),
  "%"
)
## El índice de victimización de la ciudad es de 13 %
datos_chr <- datos_chr %>%
  mutate(
    P20A = as.numeric(as.character(P20A)),
    FACTOR = as.numeric(as.character(FACTOR))
  )

indice_comuna <- datos_chr %>%
  group_by(COMUNA) %>%
  summarise(
    indice_pct =
      100 *
      sum((P20A == 1) * FACTOR,
          na.rm = TRUE) /
      sum(FACTOR,
          na.rm = TRUE)
  ) %>%
  arrange(desc(indice_pct))

kable(
  indice_comuna,
  caption = "Tabla 4. Índice de victimización por comuna"
)
Tabla 4. Índice de victimización por comuna
COMUNA indice_pct
5 21.746892
13 16.537200
7 14.432584
9 14.286346
90 14.279884
60 14.190800
1 14.123762
80 13.555782
16 13.253222
3 12.968673
10 12.257820
2 12.244767
8 11.469986
11 11.422552
70 10.574285
4 9.971491
6 7.260102
15 5.958771
12 4.332111
50 0.000000
ggplot(
  indice_comuna,
  aes(
    x = reorder(COMUNA, indice_pct),
    y = indice_pct
  )
) +
  geom_col(fill = "darkred") +
  coord_flip() +
  labs(
    title = "Índice de victimización por comuna",
    x = "Comuna",
    y = "Porcentaje"
  ) +
  theme_minimal()

max_comuna <- indice_comuna %>%
  slice_max(indice_pct)

min_comuna <- indice_comuna %>%
  slice_min(indice_pct)

cat(
  "La comuna ",
  max_comuna$COMUNA,
  " presenta el índice de victimización más alto (",
  round(max_comuna$indice_pct,1),
  "%), mientras que la comuna ",
  min_comuna$COMUNA,
  " registra el índice más bajo (",
  round(min_comuna$indice_pct,1),
  "%). Estos resultados evidencian diferencias territoriales importantes en la ocurrencia de hechos victimizantes y sugieren la necesidad de focalizar las estrategias de prevención y seguridad en los territorios con mayor afectación."
)
## La comuna  5  presenta el índice de victimización más alto ( 21.7 %), mientras que la comuna  50  registra el índice más bajo ( 0 %). Estos resultados evidencian diferencias territoriales importantes en la ocurrencia de hechos victimizantes y sugieren la necesidad de focalizar las estrategias de prevención y seguridad en los territorios con mayor afectación.