1 Introducción

El presente análisis tiene como objetivo caracterizar las condiciones socioeconómicas de la población, evaluar la percepción de seguridad en distintos niveles territoriales (barrio, comuna y ciudad) y construir un índice ponderado de victimización. Para ello, se integran dos fuentes de información sobre jefes de hogar mediante la llave única de identificación REGISTRO, complementadas con un diccionario de datos institucional.

Todo el procedimiento analítico se desarrolló de manera reproducible en R, estructurado para su compilación fluida en formatos HTML y PDF. La presentación de los resultados incluye tablas y figuras debidamente numeradas, tituladas y referenciadas, acompañadas de su correspondiente interpretación sintética.

2 Preparación de los datos

2.1 Carga de las bases y del diccionario

El archivo bases_diccionario.zip contiene BD1.xlsx, BD2.xlsx y DICCIONARIO_DATOS.xlsx. El siguiente bloque permite trabajar tanto si los archivos ya fueron extraídos como si solamente se encuentra disponible el archivo comprimido.

setwd("C:/Users/s12e18/Downloads/Clase17_09_2026")


bd1 <- read_excel("BD1.xlsx")
bd2 <- read_excel("BD2.xlsx")
dic_info <- read_excel("DICCIONARIO_DATOS.xlsx", sheet = "información_variables")
dic_valores <- read_excel("DICCIONARIO_DATOS.xlsx", sheet = "valores_variables")

# Verificamos que REGISTRO sea una llave única antes de unir las bases.
if (anyDuplicated(bd1$REGISTRO) > 0 || anyDuplicated(bd2$REGISTRO) > 0) {
  stop("REGISTRO no es único en alguna de las bases. Revise la llave antes de hacer el merge.")
}

base <- inner_join(bd1, bd2, by = "REGISTRO")

dim(base)
## [1] 4673  422

2.2 Recodificación de variables

De acuerdo con el diccionario, vamos a recodificar las variables principales para trabajar con etiquetas comprensibles en las tablas y gráficos que se presentan a lo largo del estudio.

base <- base %>%
  mutate(
    Genero = factor(GENERO,
                    levels = c(1, 2),
                    labels = c("Masculino", "Femenino")),
    RangoEdad = factor(EDAD_RANGO,
                       levels = 1:10,
                       labels = c("16-17", "18-24", "25-28", "29-34", "35-38",
                                  "39-44", "45-54", "55-59", "60-66", "67 o más")),
    Estrato = factor(ESTRATO_DEC,
                     levels = c(1, 2, 3, 4, 5, 6, 7),
                     labels = c("Estrato 1", "Estrato 2", "Estrato 3", "Estrato 4",
                                "Estrato 5", "Estrato 6", "Sin estrato")),
    Ocupacion = factor(PD,
                       levels = c(1, 2, 3, 4, 5, 6, 10, 11, 77, 88, 99, 996),
                       labels = c("Empleado/asalariado",
                                  "Trabaja independiente/propietario",
                                  "Retirado/Jubilado",
                                  "Desempleado",
                                  "Ama de casa",
                                  "Estudiante",
                                  "Incapacitado/discapacitado",
                                  "Cuidado de familiares",
                                  "Otros(as)",
                                  "Ninguno/nada",
                                  "No responde",
                                  "Otro ¿Cuál?")),
    P1_lab = factor(P1, levels = 1:4,
                    labels = c("Muy seguro", "Seguro", "Inseguro", "Muy inseguro")),
    P3_lab = factor(P3, levels = 1:4,
                    labels = c("Muy seguro", "Seguro", "Inseguro", "Muy inseguro")),
    P5_lab = factor(P5, levels = 1:4,
                    labels = c("Muy seguro", "Seguro", "Inseguro", "Muy inseguro")),
    P2_lab = factor(P2, levels = c(1, 2, 3, 999),
                    labels = c("Más seguro", "Menos seguro", "Igual", "NS/NR")),
    P4_lab = factor(P4, levels = c(1, 2, 3, 999),
                    labels = c("Más seguro", "Menos seguro", "Igual", "NS/NR")),
    P6_lab = factor(P6, levels = c(1, 2, 3, 999),
                    labels = c("Más seguro", "Menos seguro", "Igual", "NS/NR"))
  )

3 Caracterizacion social y economica

En esta sección se presenta la distribución sociodemográfica de la muestra analizada, evaluando las variables clave de género, estructura por edad, estratificación socioeconómica y condición de ocupación de los jefes de hogar.

3.1 Distribución según género y grupos de edad

Para comprender la composición demográfica de la muestra, se analizan conjuntamente las variables de género y rango de edad de los encuestados.

# Tabla cruzada de Género vs Rango de Edad
tabla_demo <- base %>%
  filter(!is.na(Genero), !is.na(RangoEdad)) %>%
  group_by(RangoEdad, Genero) %>%
  summarise(Conteo = n(), .groups = "drop") %>%
  pivot_wider(names_from = Genero, values_from = Conteo, values_fill = 0) %>%
  mutate(
    Total = Masculino + Femenino,
    `Porcentaje (%)` = round((Total / sum(Total)) * 100, 2)
  )

tabla_dual(
  tabla_demo, 
  titulo = "Tabla 1. Distribución de la población por rango de edad y género"
)
Tabla 1. Distribución de la población por rango de edad y género
RangoEdad Masculino Femenino Total Porcentaje (%)
16-17 72 40 112 2.40
18-24 373 263 636 13.61
25-28 183 164 347 7.43
29-34 229 219 448 9.59
35-38 134 138 272 5.82
39-44 178 170 348 7.45
45-54 304 377 681 14.57
55-59 179 263 442 9.46
60-66 288 327 615 13.16
67 o más 350 422 772 16.52
ggplot(base %>% filter(!is.na(Genero), !is.na(RangoEdad)), 
       aes(x = RangoEdad, fill = Genero)) +
  geom_bar(position = "dodge", alpha = 0.85, color = "white") +
  scale_fill_manual(values = c("Masculino" = "#8DEEEE", "Femenino" = "#EE1289")) +
  labs(
    title = "Distribución por rango de edad según género",
    x = "Rango de Edad",
    y = "Número de encuestados",
    fill = "Género"
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

## 1. Distribución por Género

# Preparación de datos de Género con porcentajes
df_genero <- base %>%
  filter(!is.na(Genero)) %>%
  count(Genero) %>%
  mutate(
    Porcentaje = round((n / sum(n)) * 100, 1),
    Etiqueta = paste0(Genero, "\n", Porcentaje, "%")
  )

# Gráfico de Dona / Pastel
ggplot(df_genero, aes(x = 2, y = Porcentaje, fill = Genero)) +
  geom_bar(stat = "identity", width = 1, color = "black") +
  coord_polar(theta = "y") +
  xlim(0.5, 2.5) +
  geom_text(aes(label = Etiqueta), 
            position = position_stack(vjust = 0.5), 
            color = "black", fontface = "bold", size = 4) +
  scale_fill_manual(values = c("Masculino" = "#8DEEEE", "Femenino" = "#EE1289")) +
  labs(
    title = "Distribución por Género",
    subtitle = "Porcentaje de participantes según género",
    fill = "Género"
  ) +
  theme_void() +
  theme(
    plot.title = element_text(face = "bold", size = 14, color = "#404040", hjust = 0.5),
    plot.subtitle = element_text(size = 10, color = "gray30", hjust = 0.5),
    legend.position = "none"
  )

Interpretación de la Distribución por Género:

  • La muestra presenta una composición paritaria y equilibrada entre ambos sexos, con una ligera participación mayoritaria del género femenino correspondiente al 51% (Femenino) frente al 49% del género masculino. Esto garantiza una representatividad equitativa sin sesgos significativos por razón de género en las opiniones recogidas. Interpretación resúmen

Grupos mayoritarios:

  • La muestra se concentra en los adultos mayores (67 años o más) y en la edad adulta intermedia (45-54 años), con un predominio de mujeres en ambos rangos. Segmento juvenil: En el grupo de 18-24 años se observa un pico secundario alto, pero con mayor presencia de hombres. Menor participación: Los menores de edad (16-17 años) registran la menor representación, mientras que las edades entre 25 y 44 años mantienen niveles moderados y estables.
# Resumen por Estrato
estrato_resumen <- base %>%
  filter(!is.na(Estrato)) %>%
  count(Estrato, name = "Frecuencia") %>%
  mutate(Porcentaje = round((Frecuencia / sum(Frecuencia)) * 100, 2))

tabla_dual(
  estrato_resumen, 
  titulo = "Tabla 2. Distribución de la muestra por estrato socioeconómico"
)
Tabla 2. Distribución de la muestra por estrato socioeconómico
Estrato Frecuencia Porcentaje
Estrato 1 753 16.11
Estrato 2 2026 43.36
Estrato 3 1282 27.43
Estrato 4 141 3.02
Estrato 5 82 1.75
Estrato 6 3 0.06
Sin estrato 386 8.26
# Preparación de datos de Ocupación
df_ocupacion <- base %>%
  filter(!is.na(Ocupacion)) %>%
  count(Ocupacion) %>%
  mutate(Porcentaje = round((n / sum(n)) * 100, 1))
# 1. Gráfico de Barras Porcentual con etiquetas claras
df_estrato <- base %>%
  filter(!is.na(Estrato)) %>%
  count(Estrato) %>%
  mutate(Porcentaje = round((n / sum(n)) * 100, 1))

ggplot(df_estrato, aes(x = Estrato, y = Porcentaje, fill = Estrato)) +
  geom_bar(stat = "identity", alpha = 0.85, show.legend = FALSE) +
  geom_text(aes(label = paste0(Porcentaje, "%")), 
            vjust = -0.5, fontface = "bold", size = 3.5, color = "#1F4E79") +
  scale_fill_brewer(palette = "Blues") +
  scale_y_continuous(labels = function(x) paste0(x, "%"), 
                     limits = c(0, max(df_estrato$Porcentaje) + 8)) +
  labs(
    title = "Distribución Porcentual por Estrato Socioeconómico",
    x = "Estrato",
    y = "Porcentaje (%)"
  ) +
  theme_minimal(base_size = 11) +
  theme(
    plot.title = element_text(face = "bold", color = "#1F4E79"),
    axis.text.x = element_text(angle = 30, hjust = 1)
  )
Figura 2b. Distribución porcentual acumulada por estrato socioeconómico

Figura 2b. Distribución porcentual acumulada por estrato socioeconómico

df_estrato <- base %>%
  filter(!is.na(Estrato)) %>%
  count(Estrato) %>%
  mutate(Porcentaje = round((n / sum(n)) * 100, 1))

ggplot(df_estrato, aes(x = Estrato, y = Porcentaje)) +
  geom_segment(aes(x = Estrato, xend = Estrato, y = 0, yend = Porcentaje), 
               color = "#191970", size = 1) +
  geom_point(color = "#EE82EE", size = 4) +
  geom_text(aes(label = paste0(Porcentaje, "%")), 
            vjust = -0.8, fontface = "bold", size = 3.5, color = "#1F4E79") +
  scale_y_continuous(labels = function(x) paste0(x, "%"), 
                     limits = c(0, max(df_estrato$Porcentaje) + 8)) +
  labs(
    title = "Distribución de Estrato Socioeconómico",
    subtitle = "Representación mediante gráfico de puntos y líneas",
    x = "Estrato",
    y = "Porcentaje (%)"
  ) +
  theme_minimal(base_size = 11) +
  theme(
    plot.title = element_text(face = "bold", color = "#708090"),
    axis.text.x = element_text(angle = 30, hjust = 1)
  )
Figura 2b. Distribución porcentual acumulada por estrato socioeconómico

Figura 2b. Distribución porcentual acumulada por estrato socioeconómico

Interpretación de la Distribución por Estrato Socioeconómico

  • Existe una alta concentración poblacional en los niveles socioeconómicos bajos y medio-bajos. El Estrato 2 representa el grupo predominantemente mayoritario (superando las 2,000 observaciones), seguido por el Estrato 3 y el Estrato 1. En contraste, los estratos altos (4, 5 y 6) tienen una presencia marginal en la muestra, observándose además un segmento menor clasificado dentro de la categoría “Sin estrato”.
# Gráfico de Barras Horizontales por Ocupación
ggplot(df_ocupacion, aes(x = reorder(Ocupacion, Porcentaje), y = Porcentaje)) +
  geom_bar(stat = "identity", fill = "#FFE4B5", alpha = 0.85) +
  geom_text(aes(label = paste0(Porcentaje, "%")), 
            hjust = -0.15, fontface = "bold", size = 3.5, color = "black") +
  coord_flip() +
  scale_y_continuous(labels = function(x) paste0(x, "%"), 
                     limits = c(0, max(df_ocupacion$Porcentaje) + 12)) +
  labs(
    title = "Distribución por Ocupación Principal",
    x = "Ocupación",
    y = "Porcentaje (%)"
  ) +
  theme_minimal(base_size = 11) +
  theme(
    plot.title = element_text(face = "bold", color = "#1F4E79")
  )

Interpretación de la Distribución por Ocupación * La actividad principal con mayor participación corresponde a Ama de casa con un 28.7%, seguida de cerca por los trabajadores en condición de Empleado/asalariado (24%) y Trabaja independiente/propietario (21.4%). En conjunto, estas tres categorías abarcan más del 74% de la población total. En proporciones menores se ubican los desempleados (9.1%), retirados/jubilados (7.7%) y estudiantes (6.5%), mientras que las demás opciones presentan participaciones residuales inferiores al 2%.

4 Análisis de percepción de seguridad

En esta sección se evalúa la percepción de seguridad de los habitantes en tres escalas territoriales: el barrio (P1), la comuna (P3) y la ciudad (P5), así como la variación percibida en el último año (P2, P4, P6).

4.1 1. Percepción de seguridad por nivel territorial

# Consolidación de datos de percepción de seguridad
percepcion_resumen <- base %>%
  select(P1_lab, P3_lab, P5_lab) %>%
  pivot_longer(
    cols = everything(),
    names_to = "Nivel",
    values_to = "Percepcion"
  ) %>%
  filter(!is.na(Percepcion)) %>%
  mutate(
    Nivel = case_when(
      Nivel == "P1_lab" ~ "Barrio",
      Nivel == "P3_lab" ~ "Comuna",
      Nivel == "P5_lab" ~ "Ciudad"
    ),
    Nivel = factor(Nivel, levels = c("Barrio", "Comuna", "Ciudad"))
  ) %>%
  group_by(Nivel, Percepcion) %>%
  summarise(Conteo = n(), .groups = "drop_last") %>%
  mutate(Porcentaje = round((Conteo / sum(Conteo)) * 100, 1))

# Tabla de frecuencias relativas
tabla_percepcion <- percepcion_resumen %>%
  select(-Conteo) %>%
  pivot_wider(names_from = Percepcion, values_from = Porcentaje, values_fill = 0)

tabla_dual(
  tabla_percepcion, 
  titulo = "Tabla 4. Percepción de seguridad por nivel territorial (%)"
)
Tabla 4. Percepción de seguridad por nivel territorial (%)
Nivel Muy seguro Seguro Inseguro Muy inseguro
Barrio 10.4 73.3 13.7 2.6
Comuna 7.4 72.0 16.5 4.1
Ciudad 4.1 43.4 41.2 11.3
# Paleta combinada y equilibrada para las 4 categorías
colores_percepcion <- c(
  "Muy seguro"   = "#000080", # Azul oscuro institucional
  "Seguro"       = "#B0E0E6", # Azul medio claro
  "Inseguro"     = "#FFEBCD", # Naranja / Coral
  "Muy inseguro" = "#EE82EE"  # Rojo borgoña
)

ggplot(percepcion_resumen, aes(x = Nivel, y = Porcentaje, fill = Percepcion)) +
  geom_bar(stat = "identity", position = "fill", alpha = 0.9) +
  scale_fill_manual(values = colores_percepcion) +
  scale_y_continuous(labels = scales::percent) +
  labs(
    title = "Percepción de Seguridad según Nivel Territorial",
    subtitle = "Comparación entre Barrio, Comuna y Ciudad",
    x = "Nivel Territorial",
    y = "Proporción (%)",
    fill = "Percepción"
  ) +
  theme_minimal(base_size = 11) +
  theme(
    plot.title = element_text(face = "bold", color = "#1F4E79"),
    plot.subtitle = element_text(color = "gray30"),
    legend.position = "right"
  )
Figura 4. Comparativo de percepción de seguridad según nivel territorial

Figura 4. Comparativo de percepción de seguridad según nivel territorial

Interpretación de la percepción territorial

  • Existe un gradiente claro en la percepción de seguridad a medida que se amplía el entorno geográfico:

  • Barrio: Es el espacio donde los ciudadanos reportan los mayores niveles de seguridad (“Seguro” y “Muy seguro”), debido a la familiaridad con el entorno y las redes comunitarias directas.

  • Comuna y Ciudad: A medida que el análisis escala hacia la comuna y la ciudad, se observa un incremento progresivo en las categorías de “Inseguro” y “Muy inseguro”, siendo la ciudad el entorno percibido como más riesgoso por los encuestados.

# Consolidación de la evolución de la percepción (P2, P4, P6)
evolucion_resumen <- base %>%
  select(P2_lab, P4_lab, P6_lab) %>%
  pivot_longer(
    cols = everything(),
    names_to = "Nivel",
    values_to = "Cambio"
  ) %>%
  filter(!is.na(Cambio), Cambio != "NS/NR") %>%
  mutate(
    Nivel = case_when(
      Nivel == "P2_lab" ~ "Barrio",
      Nivel == "P4_lab" ~ "Comuna",
      Nivel == "P6_lab" ~ "Ciudad"
    ),
    Nivel = factor(Nivel, levels = c("Barrio", "Comuna", "Ciudad"))
  ) %>%
  group_by(Nivel, Cambio) %>%
  summarise(Conteo = n(), .groups = "drop_last") %>%
  mutate(Porcentaje = round((Conteo / sum(Conteo)) * 100, 1))

# Gráfico de evolución
ggplot(evolucion_resumen, aes(x = Nivel, y = Porcentaje, fill = Cambio)) +
  geom_bar(stat = "identity", position = "dodge", alpha = 0.85) +
  geom_text(aes(label = paste0(Porcentaje, "%")), 
            position = position_dodge(width = 0.9), vjust = -0.5, size = 3) +
  scale_fill_manual(values = c("Más seguro" = "#EE82EE", "Menos seguro" = "#8470FF", "Igual" = "#6495ED")) +
  labs(
    title = "Evolución de la Percepción de Seguridad en el Último Año",
    x = "Nivel Territorial",
    y = "Porcentaje (%)",
    fill = "Cambio Percibido"
  ) +
  scale_y_continuous(limits = c(0, max(evolucion_resumen$Porcentaje) + 10)) +
  theme_minimal(base_size = 11) +
  theme(plot.title = element_text(face = "bold", color = "#000000"))

Interpretación del cambio percibido

*La evaluación de la evolución de la seguridad refleja el deterioro generalizado en la percepción ciudadana a escala urbana, donde la opción “Menos seguro” predomina al calificar la ciudad, mientras que a nivel del barrio se mantiene una mayor proporción de estabilidad en la categoría “Igual”.

# Cálculo del índice de percepción de inseguridad individual
base <- base %>%
  mutate(
    score_p1 = case_when(P1 == 4 ~ 4, P1 == 3 ~ 3, P1 == 2 ~ 2, P1 == 1 ~ 1, TRUE ~ NA_real_),
    score_p3 = case_when(P3 == 4 ~ 4, P3 == 3 ~ 3, P3 == 2 ~ 2, P3 == 1 ~ 1, TRUE ~ NA_real_),
    score_p5 = case_when(P5 == 4 ~ 4, P5 == 3 ~ 3, P5 == 2 ~ 2, P5 == 1 ~ 1, TRUE ~ NA_real_),
    # Índice promedio ponderado (escala de 1 a 4)
    indice_inseguridad = (score_p1 * 0.2) + (score_p3 * 0.3) + (score_p5 * 0.5)
  )

# Resumen estadístico del índice por Estrato
resumen_indice <- base %>%
  filter(!is.na(Estrato), !is.na(indice_inseguridad)) %>%
  group_by(Estrato) %>%
  summarise(
    `Promedio Índice` = round(mean(indice_inseguridad, na.rm = TRUE), 2),
    `Desv. Estándar` = round(sd(indice_inseguridad, na.rm = TRUE), 2),
    `Mediana` = round(median(indice_inseguridad, na.rm = TRUE), 2),
    .groups = "drop"
  )

tabla_dual(
  resumen_indice, 
  titulo = "Tabla 5. Índice de percepción de inseguridad promedio según estrato socioeconómico"
)
Tabla 5. Índice de percepción de inseguridad promedio según estrato socioeconómico
Estrato Promedio Índice Desv. Estándar Mediana
Estrato 1 2.32 0.52 2.2
Estrato 2 2.33 0.51 2.3
Estrato 3 2.45 0.57 2.5
Estrato 4 2.55 0.58 2.5
Estrato 5 2.53 0.63 2.5
Estrato 6 2.47 0.50 2.4
Sin estrato 2.26 0.51 2.0
ggplot(base %>% filter(!is.na(Estrato), !is.na(indice_inseguridad)), 
       aes(x = Estrato, y = indice_inseguridad, fill = Estrato)) +
  geom_boxplot(alpha = 0.7, show.legend = FALSE) +
  scale_fill_brewer(palette = "Blues") +
  labs(
    title = "Índice Ponderado de Inseguridad según Estrato Socioeconómico",
    subtitle = "1 = Muy Seguro, 4 = Muy Inseguro",
    x = "Estrato",
    y = "Índice de Inseguridad"
  ) +
  theme_minimal(base_size = 11) +
  theme(
    plot.title = element_text(face = "bold", color = "#262626"),
    axis.text.x = element_text(angle = 30, hjust = 1)
  )

Interpretación del Índice de Inseguridad

  • El índice ponderado combina la percepción a nivel de barrio (20%), comuna (30%) y ciudad (50%). Un puntaje cercano a 4 representa una alta percepción de inseguridad global. Como refleja el gráfico de caja y la tabla de resúmenes estadísticos, la percepción de inseguridad varía de forma descendente o diferenciada según el nivel socioeconómico, evidenciando las heterogeneidades territoriales de la ciudad.

5 Índice de Victimización

  • El índice de victimización mide la proporción de hogares que han sido víctimas de al menos un delito de la lista (Hurto a personas, residencias, establecimientos comerciales, vehículos o extorsiones/vacunas), ponderado por el factor de expansión de la muestra.

\[\text{Índice de Victimización} = \frac{\sum_{i=1}^{4673} (P20A_i = 1) \cdot (\text{factor de ponderación})}{\sum_{i=1}^{4673} (\text{factor de ponderación})}\]

# Nota: Asegúrate de verificar el nombre exacto de la variable del factor de expansión en tu base.
# Si en el diccionario se llama 'FACTOR_EXP' o 'FACTOR', ajusta la variable según corresponda.

# Asumiendo la variable P20A (1 = Ha sido víctima de al menos un delito, 2/0 = No)
# Asumiendo 'FACTOR' o 'FACTOR_EXP' como el factor de expansión:
base <- base %>%
  mutate(
    victima_dummy = ifelse(P20A == 1, 1, 0)
  )

# Cálculo del índice global ponderado
# Si la columna del factor de expansión se llama FACTOR:
indice_global <- base %>%
  filter(!is.na(victima_dummy), !is.na(FACTOR)) %>%
  summarise(
    Total_Hogares_Victimas = sum(victima_dummy * FACTOR, na.rm = TRUE),
    Total_Poblacion = sum(FACTOR, na.rm = TRUE),
    `Índice de Victimización (%)` = round((Total_Hogares_Victimas / Total_Poblacion) * 100, 2)
  )

tabla_dual(
  indice_global, 
  titulo = "Tabla 6. Índice de victimización global ponderado"
)
Tabla 6. Índice de victimización global ponderado
Total_Hogares_Victimas Total_Poblacion Índice de Victimización (%)
189180.8 1458900 12.97
# Desagregación del Índice de Victimización por Estrato Socioeconómico
indice_estrato <- base %>%
  filter(!is.na(victima_dummy), !is.na(FACTOR), !is.na(Estrato)) %>%
  group_by(Estrato) %>%
  summarise(
    Hogares_Victimas = sum(victima_dummy * FACTOR, na.rm = TRUE),
    Total_Hogares = sum(FACTOR, na.rm = TRUE),
    `Victimización (%)` = round((Hogares_Victimas / Total_Hogares) * 100, 2),
    .groups = "drop"
  )

tabla_dual(
  indice_estrato, 
  titulo = "Tabla 7. Tasa de victimización ponderada según estrato socioeconómico"
)
Tabla 7. Tasa de victimización ponderada según estrato socioeconómico
Estrato Hogares_Victimas Total_Hogares Victimización (%)
Estrato 1 25271.64 191004.37 13.23
Estrato 2 70499.35 625237.33 11.28
Estrato 3 76156.71 427089.76 17.83
Estrato 4 3194.17 64822.83 4.93
Estrato 5 2274.77 24433.10 9.31
Estrato 6 0.00 532.37 0.00
Sin estrato 11784.11 125780.26 9.37
ggplot(indice_estrato, aes(x = Estrato, y = `Victimización (%)`, fill = Estrato)) +
  geom_bar(stat = "identity", alpha = 0.85, show.legend = FALSE) +
  geom_text(aes(label = paste0(`Victimización (%)`, "%")), 
            vjust = -0.5, fontface = "bold", size = 3.5, color = "#6C7B8B") +
  scale_fill_brewer(palette = "Blues") +
  scale_y_continuous(labels = function(x) paste0(x, "%"), 
                     limits = c(0, max(indice_estrato$`Victimización (%)`) + 8)) +
  labs(
    title = "Índice de Victimización Ponderado por Estrato",
    subtitle = "Porcentaje de hogares victimizados ponderado por el factor de expansión",
    x = "Estrato Socioeconómico",
    y = "Tasa de Victimización (%)"
  ) +
  theme_minimal(base_size = 11) +
  theme(
    plot.title = element_text(face = "bold", color = "#8B7B8B"),
    axis.text.x = element_text(angle = 30, hjust = 1)
  )

Interpretación del Índice de Victimización por Estrato Socioeconómico

  • Punto crítico en Estrato 3: El Estrato 3 registra la tasa de victimización ponderada más alta de la población, donde un 17.83% de los hogares reporta haber sido víctima de al menos un delito.

  • Alta afectación en estratos bajos: Le siguen los estratos 1 y 2, con un 13.23% y un 11.28% de hogares victimizados respectivamente, lo que evidencia que la concentración de la problemática delictiva afecta predominantemente a los niveles socioeconómicos medios y bajos.

  • Menor incidencia en estratos altos: El Estrato 4 presenta la tasa más baja entre los estratos clasificados con un 4.93%, mientras que el Estrato 5 alcanza un 9.31%. El Estrato 6 registra un 0%, resultado condicionado por su baja o nula representatividad dentro del tamaño muestral.

  • Segmento sin estratificación: La categoría “Sin estrato” mantiene un comportamiento similar a los estratos medios, situándose en un 9.37% de victimización ponderada.

# 1. Índice de Victimización para la ciudad Castellana (Global)
ind_ciudad <- base %>%
  filter(!is.na(victima_dummy), !is.na(FACTOR)) %>%
  summarise(
    `Índice Ciudad (%)` = round((sum(victima_dummy * FACTOR, na.rm = TRUE) / sum(FACTOR, na.rm = TRUE)) * 100, 2)
  )

# 2. Índice de Victimización por Comunas
# Nota: Verifica si la variable de comuna se llama 'COMUNA' o 'P_COMUNA' en tu base.
ind_comunas <- base %>%
  filter(!is.na(victima_dummy), !is.na(FACTOR), !is.na(COMUNA)) %>%
  group_by(COMUNA) %>%
  summarise(
    `Victimización (%)` = round((sum(victima_dummy * FACTOR, na.rm = TRUE) / sum(FACTOR, na.rm = TRUE)) * 100, 2),
    .groups = "drop"
  ) %>%
  arrange(desc(`Victimización (%)`))

tabla_dual(
  ind_ciudad, 
  titulo = "Tabla 8. Índice de victimización total para la ciudad Castellana"
)
Tabla 8. Índice de victimización total para la ciudad Castellana
Índice Ciudad (%)
12.97
tabla_dual(
  ind_comunas, 
  titulo = "Tabla 9. Índice de victimización ponderado según comuna"
)
Tabla 9. Índice de victimización ponderado según comuna
COMUNA Victimización (%)
5 21.75
13 16.54
7 14.43
9 14.29
90 14.28
60 14.19
1 14.12
80 13.56
16 13.25
3 12.97
10 12.26
2 12.24
8 11.47
11 11.42
70 10.57
4 9.97
6 7.26
15 5.96
12 4.33
50 0.00

6 Respuestas finales

  1. ¿Cuál es el índice de victimización para la ciudad Castellana?
  • El índice de victimización ponderado calculado para el total de la ciudad Castellana se sitúa en un 12.97%. Esta cifra global representa el porcentaje consolidado de hogares o ciudadanos que reportaron haber sido víctimas de algún hecho delictivo dentro del periodo analizado en la encuesta, sirviendo como el indicador base de referencia para evaluar las condiciones generales de seguridad urbana en todo el territorio.
  1. ¿Cuál es el índice de victimización por comunas?
  • Al desglosar el análisis a nivel territorial, se observa que el comportamiento del indicador es heterogéneo, ya que el índice de victimización por comunas experimenta una variación amplia que oscila desde un 0.00% en las zonas con menor afectación hasta un 21.75% en los sectores más críticos. Esta distribución detallada, que puede apreciarse de forma visual en las gráficas del estudio, pone de manifiesto la marcada disparidad espacial que existe en materia de seguridad y la concentración del fenómeno delictivo en determinadas áreas específicas de la ciudad.
  1. ¿En qué comuna es mayor este índice?
  • El punto más crítico y elevado de afectación delictiva se concentra en la Comuna 5, la cual registra el índice de victimización más alto de todo el estudio al alcanzar un 21.75% de hogares victimizados. Este resultado señala a dicha zona como el sector prioritario donde convergen los mayores problemas de seguridad, lo que amerita una revisión focalizada por parte de las autoridades locales y la implementación de estrategias institucionales orientadas a mitigar la exposición al delito en esa comunidad.
  1. ¿En qué comuna es menor?
  • En contraste con las zonas más afectadas, la menor tasa de victimización de todo el análisis se registra en la Comuna 50, la cual presenta un valor nulo del 0.00%. Este comportamiento excepcional indica una ausencia total de reportes de hechos victimizantes en la muestra correspondiente a dicha comuna dentro del marco de la encuesta, posicionándola como el sector con el entorno más favorable en términos de seguridad percibida y ausencia de delitos registrados.