1. Carga y preparación de los datos

1.1 Lectura de las bases

Los archivos BD1.csv y BD2_reducida.csv deben estar guardados en la misma carpeta que este archivo .Rmd.

ruta <- "."

bd1 <- readr::read_csv(file.path(ruta, "BD1.csv"), show_col_types = FALSE)
bd2 <- readr::read_csv(file.path(ruta, "BD2_reducida.csv"), show_col_types = FALSE)

dim(bd1)
## [1] 4673   14
dim(bd2)
## [1] 4673    9
  • BD1: variables sociodemográficas (COMUNA, GENERO, EDAD_RANGO, PC_EDAD, ESTRATO_DEC, PD).
  • BD2: respuestas del cuestionario (P1 a P6, P20A y FACTOR).
  • Llave de unión: REGISTRO.

1.2 Verificación de la llave y unión

# Verificar que REGISTRO no esté duplicado en ninguna base
stopifnot(!anyDuplicated(bd1$REGISTRO))
stopifnot(!anyDuplicated(bd2$REGISTRO))

# Seleccionar explícitamente las variables que se necesitan de BD2
bd2_sel <- bd2 %>%
  select(REGISTRO, P1, P2, P3, P4, P5, P6, P20A, FACTOR)

# Unir las bases
base <- left_join(bd1, bd2_sel, by = "REGISTRO")

# Verificaciones de la unión
nrow(base)
## [1] 4673
sum(is.na(base$FACTOR))
## [1] 0

1.3 Etiquetas y variables derivadas

niv_seg <- c("Muy seguro", "Seguro", "Inseguro", "Muy inseguro")
niv_cam <- c("Más seguro", "Menos seguro", "Igual", "NS/NR")

base <- base %>%
  mutate(
    genero = factor(
      GENERO,
      levels = 1:2,
      labels = c("Masculino", "Femenino")
    ),
    estrato = factor(
      ESTRATO_DEC,
      levels = 1:7,
      labels = c(paste("Estrato", 1:6), "Sin estrato")
    ),
    edad_rango = 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"
      )
    ),
    ocupacion = case_when(
      PD == 1 ~ "Empleado/a asalariado/a",
      PD == 2 ~ "Independiente/propietario/a",
      PD == 3 ~ "Retirado/a o jubilado/a",
      PD == 4 ~ "Desempleado/a",
      PD == 5 ~ "Ama/o de casa",
      PD == 6 ~ "Estudiante",
      TRUE ~ "Otras/Sin dato"
    ),
    ocupacion = factor(ocupacion),
    comuna = factor(COMUNA),
    seg_barrio = factor(P1, levels = 1:4, labels = niv_seg),
    seg_comuna = factor(P3, levels = 1:4, labels = niv_seg),
    seg_ciudad = factor(P5, levels = 1:4, labels = niv_seg),
    cam_barrio = factor(if_else(P2 == 999, 4, P2), levels = 1:4, labels = niv_cam),
    cam_comuna = factor(if_else(P4 == 999, 4, P4), levels = 1:4, labels = niv_cam),
    cam_ciudad = factor(if_else(P6 == 999, 4, P6), levels = 1:4, labels = niv_cam),

    # Mantener como NA los registros sin respuesta en P20A.
    # Así no se clasifican automáticamente como hogares no victimizados.
    victima = case_when(
      is.na(P20A) ~ NA_real_,
      P20A %in% c(1, 2, 3, 4, 6) ~ 1,
      TRUE ~ 0
    )
  )

1.4 Valores faltantes

faltantes <- base %>%
  select(
    genero, estrato, edad_rango, PC_EDAD, ocupacion,
    comuna, P1, P3, P5, P20A, FACTOR
  ) %>%
  summarise(across(everything(), ~ sum(is.na(.)))) %>%
  pivot_longer(
    everything(),
    names_to = "Variable",
    values_to = "Faltantes"
  ) %>%
  mutate(
    Porcentaje = percent(Faltantes / nrow(base), accuracy = 0.1)
  )

tabla_kable(
  faltantes,
  "Tabla 1. Valores faltantes en las variables utilizadas"
)
Tabla 1. Valores faltantes en las variables utilizadas
Variable Faltantes Porcentaje
genero 0 0.0%
estrato 0 0.0%
edad_rango 0 0.0%
PC_EDAD 8 0.2%
ocupacion 0 0.0%
comuna 0 0.0%
P1 0 0.0%
P3 0 0.0%
P5 0 0.0%
P20A 0 0.0%
FACTOR 0 0.0%

Fuente: BD1 y BD2. Cálculos propios.

1.5 Diseño muestral

# Crear el diseño muestral
diseno <- survey::svydesign(
  ids = ~1,
  weights = ~FACTOR,
  data = base
)

2. Punto a) Caracterización social y económica

2.1 Población por género

tab_genero <- tabla_pond(base, genero)

tabla_kable(
  tab_genero %>% mutate(Porcentaje = percent(Porcentaje, accuracy = 0.1)),
  "Tabla 2. Población por género"
)
Tabla 2. Población por género
genero Encuestas Población Porcentaje
Femenino 2.383 789.735,5 54.1%
Masculino 2.290 669.164,5 45.9%

Fuente: BD1 y BD2. Cálculos propios con factor de expansión.

2.2 Población por estrato

tab_estrato <- tabla_pond(base, estrato)

tabla_kable(
  tab_estrato %>% mutate(Porcentaje = percent(Porcentaje, accuracy = 0.1)),
  "Tabla 3. Población por estrato"
)
Tabla 3. Población por estrato
estrato Encuestas Población Porcentaje
Estrato 2 2.026 625.237,3324 42.9%
Estrato 3 1.282 427.089,7557 29.3%
Estrato 1 753 191.004,3678 13.1%
Sin estrato 386 125.780,2602 8.6%
Estrato 4 141 64.822,8269 4.4%
Estrato 5 82 24.433,1005 1.7%
Estrato 6 3 532,3704 0.0%

Fuente: BD1 y BD2. Cálculos propios con factor de expansión.

2.3 Población por rango de edad

tab_edad <- tabla_pond(base, edad_rango)

tabla_kable(
  tab_edad %>% mutate(Porcentaje = percent(Porcentaje, accuracy = 0.1)),
  "Tabla 4. Población por rango de edad"
)
Tabla 4. Población por rango de edad
edad_rango Encuestas Población Porcentaje
18-24 636 231.381,42 15.9%
45-54 681 215.962,43 14.8%
29-34 448 194.351,54 13.3%
67 o más 772 157.021,92 10.8%
39-44 348 143.512,85 9.8%
25-28 347 139.563,53 9.6%
35-38 272 112.899,18 7.7%
60-66 615 112.773,39 7.7%
55-59 442 100.234,80 6.9%
16-17 112 51.198,96 3.5%

Fuente: BD1 y BD2. Cálculos propios con factor de expansión.

2.4 Población por ocupación

tab_ocupacion <- tabla_pond(base, ocupacion) %>%
  arrange(desc(Encuestas))

tabla_kable(
  tab_ocupacion %>% mutate(Porcentaje = percent(Porcentaje, accuracy = 0.1)),
  "Tabla 5. Población por ocupación"
)
Tabla 5. Población por ocupación
ocupacion Encuestas Población Porcentaje
Ama/o de casa 1.343 399.655,73 27.4%
Empleado/a asalariado/a 1.123 381.757,72 26.2%
Independiente/propietario/a 1.001 329.814,23 22.6%
Desempleado/a 427 127.585,37 8.7%
Retirado/a o jubilado/a 360 68.869,29 4.7%
Estudiante 304 124.744,35 8.6%
Otras/Sin dato 115 26.473,32 1.8%

Fuente: BD1 y BD2. Cálculos propios con factor de expansión.

2.5 Edad promedio ponderada

edad_media <- weighted.mean(
  base$PC_EDAD,
  base$FACTOR,
  na.rm = TRUE
)

edad_media
## [1] 41.61907

La población encuestada es mayoritariamente femenina (54,1 %) frente a un 45,9 % masculina (Tabla 2). Predominan los estratos bajos: los estratos 1, 2 y 3 reúnen el 85,5 % de la población, y el estrato 2 es el más numeroso con 42,9 %, mientras que los estratos 4, 5 y 6 suman solo 6,3 % (Tabla 3 y Gráfico 1). La edad promedio ponderada es de r round(edad_media, 1) años. El grupo más grande es el de 18 a 24 años (15,9 %), seguido por el de 45 a 54 años (14,8 %) (Tabla 4 y Gráfico 2). En ocupación, las categorías más frecuentes son ama/o de casa (27,4 %), empleado/a asalariado/a (26,2 %) e independiente (22,6 %); el desempleo alcanza el 8,7 % (Tabla 5).

2.6 Gráfico de población por estrato

tab_estrato %>%
  ggplot(aes(x = estrato, y = Porcentaje)) +
  geom_col(fill = "#003A5D") +
  geom_text(
    aes(label = percent(Porcentaje, accuracy = 0.1)),
    vjust = -0.4,
    size = 3.5
  ) +
  scale_y_continuous(
    labels = percent,
    expand = expansion(mult = c(0, 0.12))
  ) +
  labs(
    x = NULL,
    y = "Porcentaje de la población",
    caption = "Fuente: BD1 y BD2. Cálculos propios con factor de expansión."
  ) +
  theme_minimal()
Gráfico 1. Distribución de la población por estrato (ponderada)

Gráfico 1. Distribución de la población por estrato (ponderada)

2.7 Gráfico de edad por género

base %>%
  filter(!is.na(genero), !is.na(edad_rango), !is.na(FACTOR)) %>%
  group_by(edad_rango, genero) %>%
  summarise(pob = sum(FACTOR), .groups = "drop") %>%
  group_by(genero) %>%
  mutate(p = pob / sum(pob)) %>%
  ggplot(aes(x = edad_rango, y = p, fill = genero)) +
  geom_col(position = "dodge") +
  scale_y_continuous(labels = percent) +
  scale_fill_manual(values = c("#003A5D", "#F5A800")) +
  labs(
    x = "Rango de edad",
    y = "Porcentaje dentro de cada género",
    fill = "Género",
    caption = "Fuente: BD1 y BD2. Cálculos propios con factor de expansión."
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
Gráfico 2. Distribución de la población por rango de edad y género (ponderada)

Gráfico 2. Distribución de la población por rango de edad y género (ponderada)

3. Punto b) Percepción de seguridad en barrio, comuna y ciudad

3.1 Distribución de percepción de seguridad

percepcion <- base %>%
  select(
    FACTOR,
    Barrio = seg_barrio,
    Comuna = seg_comuna,
    Ciudad = seg_ciudad
  ) %>%
  pivot_longer(
    cols = c(Barrio, Comuna, Ciudad),
    names_to = "ambito",
    values_to = "nivel"
  ) %>%
  filter(!is.na(nivel), !is.na(FACTOR)) %>%
  mutate(
    ambito = factor(
      ambito,
      levels = c("Barrio", "Comuna", "Ciudad")
    )
  ) %>%
  group_by(ambito, nivel) %>%
  summarise(pob = sum(FACTOR), .groups = "drop") %>%
  group_by(ambito) %>%
  mutate(p = pob / sum(pob)) %>%
  ungroup()

tab_perc <- percepcion %>%
  select(ambito, nivel, p) %>%
  mutate(p = percent(p, accuracy = 0.1)) %>%
  pivot_wider(names_from = ambito, values_from = p)

tabla_kable(
  tab_perc,
  "Tabla 6. Percepción de seguridad según ámbito (ponderada)"
)
Tabla 6. Percepción de seguridad según ámbito (ponderada)
nivel Barrio Comuna Ciudad
Muy seguro 10.8% 8.2% 4.3%
Seguro 72.2% 70.4% 44.9%
Inseguro 13.6% 16.9% 40.2%
Muy inseguro 3.4% 4.5% 10.6%

Fuente: BD2, preguntas P1, P3 y P5. Cálculos propios con factor de expansión.

3.2 Porcentaje de personas que se sienten inseguras

inseguro <- percepcion %>%
  filter(nivel %in% c("Inseguro", "Muy inseguro")) %>%
  group_by(ambito) %>%
  summarise(p = sum(p), .groups = "drop") %>%
  arrange(ambito)

tabla_kable(
  inseguro %>% mutate(Porcentaje = percent(p, accuracy = 0.1)),
  "Tabla 6A. Porcentaje de percepción de inseguridad por ámbito"
)
Tabla 6A. Porcentaje de percepción de inseguridad por ámbito
ambito p Porcentaje
Barrio 0,1703150 17.0%
Comuna 0,2140448 21.4%
Ciudad 0,5079558 50.8%

El porcentaje que se siente inseguro o muy inseguro es de 17.0% en el barrio, 21.4% en la comuna y 50.8% en la ciudad.

3.3 Gráfico de percepción de seguridad

ggplot(percepcion, aes(x = ambito, y = p, fill = nivel)) +
  geom_col() +
  geom_text(
    aes(label = percent(p, accuracy = 1)),
    position = position_stack(vjust = 0.5),
    size = 3.5,
    colour = "white"
  ) +
  scale_y_continuous(labels = percent) +
  scale_fill_manual(
    values = c(
      "Muy seguro" = "#1B7837",
      "Seguro" = "#7FBF7B",
      "Inseguro" = "#F4A582",
      "Muy inseguro" = "#B2182B"
    )
  ) +
  labs(
    x = NULL,
    y = "Porcentaje de la población",
    fill = NULL,
    caption = "Fuente: BD2, P1, P3 y P5. Cálculos propios con factor de expansión."
  ) +
  theme_minimal()
Gráfico 3. Percepción de seguridad según ámbito (ponderada)

Gráfico 3. Percepción de seguridad según ámbito (ponderada)

3.4 Percepción frente a hace un año

cambio <- base %>%
  select(
    FACTOR,
    Barrio = cam_barrio,
    Comuna = cam_comuna,
    Ciudad = cam_ciudad
  ) %>%
  pivot_longer(
    cols = c(Barrio, Comuna, Ciudad),
    names_to = "ambito",
    values_to = "nivel"
  ) %>%
  filter(!is.na(nivel), !is.na(FACTOR)) %>%
  mutate(
    ambito = factor(
      ambito,
      levels = c("Barrio", "Comuna", "Ciudad")
    )
  ) %>%
  group_by(ambito, nivel) %>%
  summarise(pob = sum(FACTOR), .groups = "drop") %>%
  group_by(ambito) %>%
  mutate(p = pob / sum(pob)) %>%
  ungroup()

tab_cambio <- cambio %>%
  select(ambito, nivel, p) %>%
  mutate(p = percent(p, accuracy = 0.1)) %>%
  pivot_wider(names_from = ambito, values_from = p)

tabla_kable(
  tab_cambio,
  "Tabla 7. Percepción de seguridad frente a hace un año (ponderada)"
)
Tabla 7. Percepción de seguridad frente a hace un año (ponderada)
nivel Barrio Comuna Ciudad
Más seguro 15.7% 14.1% 9.8%
Menos seguro 13.8% 11.9% 23.4%
Igual 70.3% 68.1% 64.8%
NS/NR 0.2% 6.0% 2.0%

Fuente: BD2, preguntas P2, P4 y P6. Cálculos propios con factor de expansión.

La percepción de seguridad empeora a medida que el ámbito se aleja del hogar. El 83,0 % de los encuestados se siente seguro o muy seguro en su barrio y el 78,6 % en su comuna, pero solo el 49,2 % en la ciudad (Tabla 6 y Gráfico 3). Así, el porcentaje que se siente inseguro o muy inseguro es 17,0 % en el barrio, 21,4 % en la comuna y 50,8 % en la ciudad (Tabla 6A). En comparación con hace un año, la mayoría percibe que todo sigue igual, pero en la ciudad el 23,4 % cree que está menos seguro y solo el 9,8 % más seguro. En el barrio y la comuna las opiniones están más equilibradas (Tabla 7)

4. Punto c) Percepción según género y estrato

Se compara el porcentaje que se siente inseguro o muy inseguro (códigos 3 y 4), según género y estrato.

4.1 Preparación de los datos

perc_largo <- base %>%
  select(
    FACTOR, genero, estrato,
    Barrio = P1,
    Comuna = P3,
    Ciudad = P5
  ) %>%
  pivot_longer(
    cols = c(Barrio, Comuna, Ciudad),
    names_to = "ambito",
    values_to = "codigo"
  ) %>%
  filter(!is.na(codigo), !is.na(FACTOR)) %>%
  mutate(
    ambito = factor(
      ambito,
      levels = c("Barrio", "Comuna", "Ciudad")
    ),
    inseguro = codigo >= 3
  )

4.2 Percepción de inseguridad por género

por_genero <- perc_largo %>%
  filter(!is.na(genero)) %>%
  group_by(ambito, genero) %>%
  summarise(
    p = sum(FACTOR * inseguro) / sum(FACTOR),
    .groups = "drop"
  )

tab_genero_inseg <- por_genero %>%
  mutate(p = percent(p, accuracy = 0.1)) %>%
  pivot_wider(names_from = genero, values_from = p)

tabla_kable(
  tab_genero_inseg,
  "Tabla 8. Porcentaje que se siente inseguro o muy inseguro, según género"
)
Tabla 8. Porcentaje que se siente inseguro o muy inseguro, según género
ambito Masculino Femenino
Barrio 13.1% 20.4%
Comuna 18.0% 24.3%
Ciudad 43.4% 57.1%

Fuente: BD2, P1, P3 y P5. Cálculos propios con factor de expansión.

ggplot(por_genero, aes(x = ambito, y = p, fill = genero)) +
  geom_col(position = "dodge") +
  geom_text(
    aes(label = percent(p, accuracy = 0.1)),
    position = position_dodge(width = 0.9),
    vjust = -0.4,
    size = 3.5
  ) +
  scale_y_continuous(
    labels = percent,
    expand = expansion(mult = c(0, 0.12))
  ) +
  scale_fill_manual(values = c("#003A5D", "#F5A800")) +
  labs(
    x = NULL,
    y = "% inseguro o muy inseguro",
    fill = "Género",
    caption = "Fuente: BD2, P1, P3 y P5. Cálculos propios con factor de expansión."
  ) +
  theme_minimal()
Gráfico 4. Inseguridad percibida según género y ámbito

Gráfico 4. Inseguridad percibida según género y ámbito

4.3 Percepción de inseguridad por estrato

por_estrato <- perc_largo %>%
  filter(!is.na(estrato), estrato != "Sin estrato") %>%
  group_by(ambito, estrato) %>%
  summarise(
    p = sum(FACTOR * inseguro) / sum(FACTOR),
    .groups = "drop"
  )

tab_estrato_inseg <- por_estrato %>%
  mutate(p = percent(p, accuracy = 0.1)) %>%
  pivot_wider(names_from = ambito, values_from = p)

tabla_kable(
  tab_estrato_inseg,
  "Tabla 9. Porcentaje que se siente inseguro o muy inseguro, según estrato"
)
Tabla 9. Porcentaje que se siente inseguro o muy inseguro, según estrato
estrato Barrio Comuna Ciudad
Estrato 1 16.7% 19.3% 45.8%
Estrato 2 14.1% 18.9% 48.8%
Estrato 3 19.7% 23.8% 55.5%
Estrato 4 29.1% 35.5% 64.2%
Estrato 5 40.0% 44.5% 58.9%
Estrato 6 0.0% 31.9% 42.1%

Fuente: BD2, P1, P3 y P5. Cálculos propios con factor de expansión. Se excluye “Sin estrato”.

ggplot(por_estrato, aes(x = estrato, y = p, fill = ambito)) +
  geom_col(position = "dodge") +
  scale_y_continuous(labels = percent) +
  scale_fill_manual(values = c("#003A5D", "#5B9BD5", "#F5A800")) +
  labs(
    x = NULL,
    y = "% inseguro o muy inseguro",
    fill = "Ámbito",
    caption = "Fuente: BD2, P1, P3 y P5. Cálculos propios con factor de expansión."
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
Gráfico 5. Inseguridad percibida según estrato y ámbito

Gráfico 5. Inseguridad percibida según estrato y ámbito

4.4 Pruebas de independencia chi-cuadrado ajustadas por diseño

Se incorporan las variables al diseño muestral y se prueba la independencia entre la inseguridad percibida y el género y el estrato (Tabla 10).

diseno <- update(
  diseno,
  genero = base$genero,
  estrato = base$estrato,
  insegBarrio = ifelse(is.na(base$P1), NA, base$P1 >= 3),
  insegComuna = ifelse(is.na(base$P3), NA, base$P3 >= 3),
  insegCiudad = ifelse(is.na(base$P5), NA, base$P5 >= 3)
)

p_valores <- c(
  survey::svychisq(~insegBarrio + genero, diseno)$p.value,
  survey::svychisq(~insegComuna + genero, diseno)$p.value,
  survey::svychisq(~insegCiudad + genero, diseno)$p.value,
  survey::svychisq(~insegBarrio + estrato, diseno)$p.value,
  survey::svychisq(~insegComuna + estrato, diseno)$p.value,
  survey::svychisq(~insegCiudad + estrato, diseno)$p.value
)

tab_chi <- tibble(
  Variable = rep(c("Género", "Estrato"), each = 3),
  Ámbito = rep(c("Barrio", "Comuna", "Ciudad"), 2),
  `Valor p` = round(p_valores, 4),
  Conclusión = ifelse(p_valores < 0.05,
                      "Hay asociación (p < 0,05)",
                      "No hay evidencia de asociación")
)

tabla_kable(tab_chi, "Tabla 10. Pruebas chi-cuadrado ajustadas por diseño")
Tabla 10. Pruebas chi-cuadrado ajustadas por diseño
Variable Ámbito Valor p Conclusión
Género Barrio 0,0001 Hay asociación (p < 0,05)
Género Comuna 0,0012 Hay asociación (p < 0,05)
Género Ciudad 0,0000 Hay asociación (p < 0,05)
Estrato Barrio 0,0014 Hay asociación (p < 0,05)
Estrato Comuna 0,0007 Hay asociación (p < 0,05)
Estrato Ciudad 0,0127 Hay asociación (p < 0,05)

Fuente: BD2. Cálculos propios con factor de expansión.

Sí cambia la percepción según el género. En los tres ámbitos las mujeres se sienten más inseguras que los hombres: 20,4 % frente a 13,1 % en el barrio, 24,3 % frente a 18,0 % en la comuna y 57,1 % frente a 43,4 % en la ciudad (Tabla 8 y Gráfico 4). La diferencia es mayor en la ciudad, con 13,7 puntos porcentuales. La prueba chi-cuadrado ajustada por diseño confirma que la asociación es significativa en los tres ámbitos (p < 0,05; Tabla 10).

También cambia según el estrato. La inseguridad percibida es más alta en los estratos 3, 4 y 5 que en los estratos 1 y 2. Por ejemplo, en el barrio pasa de 14,1 % en el estrato 2 a 40,0 % en el estrato 5, y en la ciudad el máximo es 64,2 % en el estrato 4 (Tabla 9 y Gráfico 5). Las pruebas chi-cuadrado indican asociación significativa en los tres ámbitos (Tabla 10), aunque en la ciudad es la más débil (p = 0,0127). El estrato 6 no se interpreta porque tiene solo 3 encuestas. Estas pruebas muestran que existe asociación, pero no su magnitud ni una relación de causa y efecto.

5. Punto d) Índice de victimización

Se considera víctima si P20A toma los valores 1, 2, 3, 4 o 6. Los registros sin respuesta en P20A se excluyen del numerador y del denominador.

5.1 Índice para la ciudad

# Proporción ponderada, excluyendo respuestas faltantes
base_victimas <- base %>%
  filter(!is.na(victima), !is.na(FACTOR), is.finite(FACTOR))

indice_ciudad <- with(
  base_victimas,
  sum(victima * FACTOR) / sum(FACTOR)
)

# Intervalo de confianza al 95% con el diseño muestral
ic <- survey::svyciprop(
  ~I(victima == 1),
  subset(diseno, !is.na(victima)),
  method = "logit"
)

ic_95 <- confint(ic)

tabla_indice_ciudad <- tibble(
  Indicador = "Índice de victimización - Ciudad",
  Valor = percent(indice_ciudad, accuracy = 0.1),
  `IC 95%` = paste0(
    percent(ic_95[1], accuracy = 0.1),
    " - ",
    percent(ic_95[2], accuracy = 0.1)
  )
)

tabla_kable(
  tabla_indice_ciudad,
  "Tabla 11. Índice de victimización de la ciudad"
)
Tabla 11. Índice de victimización de la ciudad
Indicador Valor IC 95%
Índice de victimización - Ciudad 20.0% 18.1% - 21.9%

Fuente: BD2, P20A y FACTOR. Cálculos propios.

El índice de victimización de la ciudad es 20.0%.

5.2 Índice por comuna

indice_comuna <- base %>%
  filter(!is.na(victima), !is.na(FACTOR), is.finite(FACTOR)) %>%
  group_by(comuna) %>%
  summarise(
    Encuestas = n(),
    Hogares_expandidos = sum(FACTOR),
    Indice = sum(victima * FACTOR) / sum(FACTOR),
    .groups = "drop"
  ) %>%
  arrange(desc(Indice))

tabla_indice_comuna <- indice_comuna %>%
  mutate(
    Hogares_expandidos = round(Hogares_expandidos),
    Indice = percent(Indice, accuracy = 0.1)
  ) %>%
  rename(
    Comuna = comuna,
    `Hogares expandidos` = Hogares_expandidos,
    `Índice de victimización` = Indice
  )

tabla_kable(
  tabla_indice_comuna,
  "Tabla 12. Índice de victimización por comuna"
)
Tabla 12. Índice de victimización por comuna
Comuna Encuestas Hogares expandidos Índice de victimización
5 219 55.058 27.6%
7 293 104.998 23.4%
60 156 77.100 22.9%
4 404 117.239 22.5%
8 375 121.643 21.6%
13 393 127.799 20.8%
16 268 114.549 20.8%
3 373 132.806 20.5%
2 405 95.494 19.7%
9 389 136.528 18.9%
1 282 81.305 18.2%
10 109 21.386 18.0%
80 250 90.910 17.0%
12 44 5.379 15.1%
90 31 1.854 14.3%
6 394 137.127 13.8%
11 62 21.749 13.1%
70 129 9.058 12.7%
15 94 6.859 11.3%
50 3 59 0.0%

Fuente: BD1 y BD2. Cálculos propios con factor de expansión.

ggplot(
  indice_comuna,
  aes(x = reorder(comuna, Indice), y = Indice)
) +
  geom_col(fill = "#003A5D") +
  geom_hline(
    yintercept = indice_ciudad,
    linetype = "dashed",
    colour = "#B2182B"
  ) +
  geom_text(
    aes(label = percent(Indice, accuracy = 0.1)),
    hjust = -0.1,
    size = 3
  ) +
  coord_flip() +
  scale_y_continuous(
    labels = percent,
    expand = expansion(mult = c(0, 0.15))
  ) +
  labs(
    x = "Comuna",
    y = "Índice de victimización",
    caption = "Línea punteada: índice de la ciudad. Fuente: BD1 y BD2."
  ) +
  theme_minimal()
Gráfico 6. Índice de victimización por comuna

Gráfico 6. Índice de victimización por comuna

5.3 Comunas con mayor y menor índice

mayor <- indice_comuna %>%
  slice_max(Indice, n = 1, with_ties = FALSE)

menor <- indice_comuna %>%
  slice_min(Indice, n = 1, with_ties = FALSE)

menor_robusto <- indice_comuna %>%
  filter(Encuestas >= 30) %>%
  slice_min(Indice, n = 1, with_ties = FALSE)
  • Mayor índice: comuna 5, con 27.6%.
  • Menor índice: comuna 50, con 0.0%, basada en 3 encuestas.
  • Menor índice entre comunas con al menos 30 encuestas: comuna 15 (11.3%).

El índice de victimización de la ciudad es 20,0 % (IC 95 %: 18,1 % a 21,9 %), es decir, aproximadamente uno de cada cinco hogares fue víctima de al menos un delito (Tabla 11). Por comunas, el índice más alto es el de la comuna 5, con 27,6 %, seguida de las comunas 7 (23,4 %) y 60 (22,9 %) (Tabla 12 y Gráfico 6). El índice más bajo aparece en la comuna 50 (0,0 %), pero se basa en solo 3 encuestas y no es confiable. Entre las comunas con al menos 30 encuestas, la más baja es la comuna 15, con 11,3 %

6. Conclusiones

  • Perfil de la población: los hogares encuestados son mayoritariamente de estratos bajos (los estratos 1, 2 y 3 suman 85,5 %), con predominio de mujeres (54,1 %) y una edad promedio de 41.6 años. Las ocupaciones más frecuentes son ama/o de casa, empleado/a asalariado/a e independiente.

  • Percepción de seguridad: la sensación de inseguridad aumenta a medida que el ámbito se aleja del hogar. Es de 17,0 % en el barrio, 21,4 % en la comuna y 50,8 % en la ciudad. Además, en la ciudad el 23,4 % cree que la seguridad empeoró respecto a hace un año, frente a solo 9,8 % que cree que mejoró.

  • Diferencias por género y estrato: las mujeres se sienten más inseguras que los hombres en los tres ámbitos, con la mayor brecha en la ciudad (13,7 puntos porcentuales). La inseguridad percibida también es mayor en los estratos 3, 4 y 5 que en los estratos 1 y 2. Las pruebas chi-cuadrado ajustadas por diseño confirman que ambas asociaciones son significativas (p < 0,05), aunque no establecen causalidad.

  • Victimización: aproximadamente uno de cada cinco hogares (20,0 %; IC 95 %: 18,1 % a 21,9 %) fue víctima de al menos un delito. La comuna 5 tiene el índice más alto (27,6 %). El valor más bajo, de la comuna 50 (0,0 %), no es confiable porque se basa en solo 3 encuestas. Entre las comunas con muestra suficiente, la más baja es la comuna 15 (11,3 %).

  • Lectura conjunta: la percepción de inseguridad en la ciudad (50,8 %) es mucho mayor que la victimización efectivamente reportada (20,0 %). Esto sugiere que la sensación de inseguridad no depende solo de haber sido víctima de un delito, y que las políticas de seguridad deberían atender tanto los hechos delictivos como la percepción ciudadana, en especial la de las mujeres y la de los estratos medios.

  • Limitaciones: algunas categorías tienen muestras muy pequeñas (estrato 6 y comunas 50 y 90), por lo que sus resultados deben interpretarse con cautela. Las cifras corresponden a jefes de hogar encuestados, no a toda la población de la ciudad.