Carga de paquetes y datos

library(readxl)
library(tidyverse)
library(knitr)
library(kableExtra)
library(scales)
library(ggplot2)
BD1 <- read_excel("C:/Users/joans/Downloads/BD1.xlsx")
BD2 <- read_excel("C:/Users/joans/Downloads/BD2.xlsx")
df  <- BD1 %>% left_join(BD2, by = "REGISTRO")
cat("Dimensiones de la base unificada:", nrow(df), "filas x", ncol(df), "columnas\n")
## Dimensiones de la base unificada: 4673 filas x 422 columnas
seg_levels <- c("Muy seguro", "Seguro", "Inseguro", "Muy inseguro")

df$GENERO_LBL <- factor(df$GENERO,
                        levels = c(1, 2),
                        labels = c("Masculino", "Femenino"))

df$ESTRATO_LBL <- factor(df$ESTRATO_DEC,
                         levels = 1:7,
                         labels = c("Estrato 1","Estrato 2","Estrato 3",
                                    "Estrato 4","Estrato 5","Estrato 6",
                                    "Sin estrato"))

df$EDAD_LBL <- factor(df$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 mas"))

df$OCUPACION_LBL <- factor(df$PD,
                           levels = c(1,2,3,4,5,6,10,11,77,88,99),
                           labels = c("Empleado/asalariado",
                                      "Independiente/propietario",
                                      "Retirado/Jubilado",
                                      "Desempleado",
                                      "Ama de Casa",
                                      "Estudiante",
                                      "Incapacitado/discapacitado",
                                      "Cuidado de familiares",
                                      "Otros",
                                      "Ninguno",
                                      "No responde"))

df$P1_LBL <- factor(df$P1, levels = 1:4, labels = seg_levels)
df$P3_LBL <- factor(df$P3, levels = 1:4, labels = seg_levels)
df$P5_LBL <- factor(df$P5, levels = 1:4, labels = seg_levels)

Caracterizacion socieconomica de la poblacion encuestada (Punto a)

En esta seccion se describe la poblacion encuestada a partir de las variables de genero, edad, estrato, ocupacion, nivel educativo e ingreso mensual del hogar.

Distribucion por genero

tab_genero <- df %>%
  count(GENERO_LBL) %>%
  mutate(Porcentaje = round(n / sum(n) * 100, 1)) %>%
  rename(Genero = GENERO_LBL, Frecuencia = n)

tab_genero %>%
  kable(caption = "Tabla 1. Distribucion por genero", digits = 1) %>%
  kable_styling(latex_options = c("striped","hold_position"), full_width = FALSE)
Tabla 1. Distribucion por genero
Genero Frecuencia Porcentaje
Masculino 2290 49
Femenino 2383 51
ggplot(tab_genero, aes(x = Genero, y = Porcentaje, fill = Genero)) +
  geom_col(width = 0.5, show.legend = FALSE) +
  geom_text(aes(label = paste0(Porcentaje, "%")), vjust = -0.4, size = 4) +
  scale_fill_manual(values = c("#3A86FF","#FF006E")) +
  labs(title = "Distribucion por genero", x = NULL, y = "Porcentaje (%)") +
  theme_minimal(base_size = 12)
Figura 1. Distribucion por genero de la poblacion encuestada.

Figura 1. Distribucion por genero de la poblacion encuestada.

La muestra esta compuesta por 2290 hombres (49%) y 2383 mujeres (51%), lo que refleja una distribucion relativamente equilibrada entre generos, como se observa en la Figura 1 y la Tabla 1.

Distribucion por rango de edad

tab_edad <- df %>%
  count(EDAD_LBL) %>%
  mutate(Porcentaje = round(n / sum(n) * 100, 1)) %>%
  rename(Rango_edad = EDAD_LBL, Frecuencia = n)

tab_edad %>%
  kable(caption = "Tabla 2. Distribucion por rango de edad", digits = 1) %>%
  kable_styling(latex_options = c("striped","hold_position"), full_width = FALSE)
Tabla 2. Distribucion por rango de edad
Rango_edad Frecuencia Porcentaje
16-17 112 2.4
18-24 636 13.6
25-28 347 7.4
29-34 448 9.6
35-38 272 5.8
39-44 348 7.4
45-54 681 14.6
55-59 442 9.5
60-66 615 13.2
67 o mas 772 16.5
ggplot(tab_edad, aes(x = Rango_edad, y = Porcentaje, fill = Rango_edad)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = paste0(Porcentaje, "%")), vjust = -0.4, size = 3) +
  scale_fill_viridis_d(option = "plasma") +
  labs(title = "Distribucion por rango de edad",
       x = "Rango de edad", y = "Porcentaje (%)") +
  theme_minimal(base_size = 11) +
  theme(axis.text.x = element_text(angle = 30, hjust = 1))
Figura 2. Distribucion por rango de edad.

Figura 2. Distribucion por rango de edad.

Los grupos de edad con mayor representacion son el rango de 67 o mas (16.5%), seguido de 45-54 (14.6%) y 18-24 (13.6%), como se observa en la Figura 2 y la Tabla 2.

Distribucion por estrato socioeconomico

tab_estrato <- df %>%
  filter(!is.na(ESTRATO_LBL)) %>%
  count(ESTRATO_LBL) %>%
  mutate(Porcentaje = round(n / sum(n) * 100, 1)) %>%
  rename(Estrato = ESTRATO_LBL, Frecuencia = n)

tab_estrato %>%
  kable(caption = "Tabla 3. Distribucion por estrato socioeconomico", digits = 1) %>%
  kable_styling(latex_options = c("striped","hold_position"), full_width = FALSE)
Tabla 3. Distribucion por estrato socioeconomico
Estrato Frecuencia Porcentaje
Estrato 1 753 16.1
Estrato 2 2026 43.4
Estrato 3 1282 27.4
Estrato 4 141 3.0
Estrato 5 82 1.8
Estrato 6 3 0.1
Sin estrato 386 8.3
ggplot(tab_estrato, aes(x = Estrato, y = Porcentaje, fill = Estrato)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = paste0(Porcentaje, "%")), vjust = -0.4, size = 3.5) +
  scale_fill_brewer(palette = "Blues") +
  labs(title = "Distribucion por estrato socioeconomico",
       x = NULL, y = "Porcentaje (%)") +
  theme_minimal(base_size = 11) +
  theme(axis.text.x = element_text(angle = 20, hjust = 1))
Figura 3. Distribucion por estrato socioeconomico.

Figura 3. Distribucion por estrato socioeconomico.

La mayor parte de los encuestados pertenece a los estratos 2 (43.4%) y 3 (27.4%), como se observa en la Figura 3 y la Tabla 3. Los estratos 4, 5 y 6 tienen una participacion considerablemente menor.

Distribucion por ocupacion

tab_ocup <- df %>%
  filter(!is.na(OCUPACION_LBL),
         !OCUPACION_LBL %in% c("Ninguno","No responde")) %>%
  count(OCUPACION_LBL) %>%
  mutate(Porcentaje = round(n / sum(n) * 100, 1)) %>%
  arrange(desc(Porcentaje)) %>%
  rename(Ocupacion = OCUPACION_LBL, Frecuencia = n)

tab_ocup %>%
  kable(caption = "Tabla 4. Distribucion por ocupacion", digits = 1) %>%
  kable_styling(latex_options = c("striped","hold_position"), full_width = FALSE)
Tabla 4. Distribucion por ocupacion
Ocupacion Frecuencia Porcentaje
Ama de Casa 1343 29.3
Empleado/asalariado 1123 24.5
Independiente/propietario 1001 21.8
Desempleado 427 9.3
Retirado/Jubilado 360 7.9
Estudiante 304 6.6
Incapacitado/discapacitado 16 0.3
Cuidado de familiares 6 0.1
Otros 4 0.1
ggplot(tab_ocup, aes(x = reorder(Ocupacion, Porcentaje),
                     y = Porcentaje, fill = Ocupacion)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = paste0(Porcentaje, "%")), hjust = -0.1, size = 3) +
  scale_fill_brewer(palette = "Set2") +
  coord_flip() +
  labs(title = "Distribucion por ocupacion", x = NULL, y = "Porcentaje (%)") +
  theme_minimal(base_size = 11)
Figura 4. Distribucion por ocupacion.

Figura 4. Distribucion por ocupacion.

Las ocupaciones mas frecuentes son Ama de Casa (29.3%), Empleado/asalariado (24.5%) e Independiente/propietario (21.8%), como se observa en la Figura 4 y la Tabla 4.

Distribucion por nivel educativo

df$EDUC_LBL <- factor(df$P110,
                      levels = c(1, 2, 3, 4, 5, 6, 990),
                      labels = c("Preescolar","Primaria","Secundaria",
                                 "Tecnico","Superior/universitario",
                                 "Postgrado","Ninguno"))

tab_educ <- df %>%
  filter(!is.na(EDUC_LBL)) %>%
  count(EDUC_LBL) %>%
  mutate(Porcentaje = round(n / sum(n) * 100, 1)) %>%
  arrange(desc(Porcentaje)) %>%
  rename(Nivel_educativo = EDUC_LBL, Frecuencia = n)

tab_educ %>%
  kable(caption = "Tabla 5. Distribucion por nivel educativo", digits = 1) %>%
  kable_styling(latex_options = c("striped","hold_position"), full_width = FALSE)
Tabla 5. Distribucion por nivel educativo
Nivel_educativo Frecuencia Porcentaje
Secundaria 1984 42.5
Primaria 1149 24.6
Tecnico 787 16.8
Superior/universitario 477 10.2
Ninguno 122 2.6
Postgrado 114 2.4
Preescolar 40 0.9
ggplot(tab_educ, aes(x = reorder(Nivel_educativo, Porcentaje),
                     y = Porcentaje, fill = Nivel_educativo)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = paste0(Porcentaje, "%")), hjust = -0.1, size = 3.5) +
  coord_flip() +
  scale_fill_brewer(palette = "Greens") +
  labs(title = "Distribucion por nivel educativo",
       x = NULL, y = "Porcentaje (%)") +
  theme_minimal(base_size = 11)
Figura 5. Distribucion por nivel educativo.

Figura 5. Distribucion por nivel educativo.

El nivel educativo predominante es Secundaria (42.5%), seguido de Primaria (24.6%) y Tecnico (16.8%), como se observa en la Figura 5 y la Tabla 5.

Distribucion por ingreso mensual del hogar

df$INGRESO_LBL <- factor(df$P111,
                         levels = c(1,2,3,4,5,6,7,8,999),
                         labels = c("Menos de 100k",
                                    "100k - 350k",
                                    "350k - 700k",
                                    "700k - 1MM",
                                    "1MM - 2MM",
                                    "2MM - 3.5MM",
                                    "3.5MM - 5MM",
                                    "Mas de 5MM",
                                    "Ns/Nr"))

tab_ingreso <- df %>%
  filter(!is.na(INGRESO_LBL), INGRESO_LBL != "Ns/Nr") %>%
  count(INGRESO_LBL) %>%
  mutate(Porcentaje = round(n / sum(n) * 100, 1)) %>%
  rename(Rango_ingreso = INGRESO_LBL, Frecuencia = n)

tab_ingreso %>%
  kable(caption = "Tabla 6. Distribucion por ingreso mensual del hogar", digits = 1) %>%
  kable_styling(latex_options = c("striped","hold_position"), full_width = FALSE)
Tabla 6. Distribucion por ingreso mensual del hogar
Rango_ingreso Frecuencia Porcentaje
Menos de 100k 164 3.8
100k - 350k 334 7.7
350k - 700k 515 11.9
700k - 1MM 1158 26.8
1MM - 2MM 1422 32.9
2MM - 3.5MM 450 10.4
3.5MM - 5MM 189 4.4
Mas de 5MM 92 2.1
ggplot(tab_ingreso, aes(x = Rango_ingreso, y = Porcentaje, fill = Porcentaje)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = paste0(Porcentaje, "%")), vjust = -0.4, size = 3) +
  scale_fill_gradient(low = "#a8dadc", high = "#1d3557") +
  scale_x_discrete(limits = levels(tab_ingreso$Rango_ingreso)) +
  labs(title = "Distribucion por ingreso mensual del hogar",
       x = "Rango de ingreso", y = "Porcentaje (%)") +
  theme_minimal(base_size = 10) +
  theme(axis.text.x = element_text(angle = 35, hjust = 1))
Figura 6. Distribucion por ingreso mensual del hogar.

Figura 6. Distribucion por ingreso mensual del hogar.

La muestra esta compuesta de 4673 observaciones de las cuales 2290 pertenecen a la categoria masculino y 2383 pertencen a la categoria femenino como se observa en la figura 1.Los grupos de edad con mayor representación son los rangos intermedios (45-54 y 18-24 años) y el rango de edades superiores, mientras que los extremos (16-17 ) concentran la menor proporción de encuestados todo lo anterior se puede observar en la Figura 2. En la figura 3 la mayor parte de los encuestados pertenece a los estratos 2 y 3, los estratos 4, 5 y 6 tienen una participación considerablemente menor. En la Figura 4 y Tabla 4 las ocupaciones más frecuentes son Ama de Casa, Empleado/asalariado e Independiente/propietario, lo que refleja la estructura laboral predominante entre los jefes de hogar encuestados y que recibieron las encuestas. El nivel educativo predominante entre los encuestados es Secundaria, seguido de Primaria y técnico. Una proporción menor cuenta con educación superior o universitaria, lo que refleja el perfil socioeducativo de los jefes de hogar de la ciudad Castellana. La distribucion del ingreso mensual muestra que la mayoria de los hogares se concentra en los rangos de 1MM a 2MM (32.9%) y 700k a 1MM (26.8%), como se observa en la Figura 6 y la Tabla 6. Los hogares con ingresos superiores a 3.5MM representan una minoria.

Percepcion de seguridad en barrios, comunas y ciudad (Punto b)

Las variables P1, P3 y P5 miden como se sienten los encuestados en su barrio, comuna y ciudad, respectivamente (escala: Muy seguro - Seguro - Inseguro - Muy inseguro).

seg_long <- df %>%
  select(P1_LBL, P3_LBL, P5_LBL) %>%
  pivot_longer(cols = everything(),
               names_to  = "Ambito",
               values_to = "Percepcion") %>%
  mutate(Ambito = recode(Ambito,
                         P1_LBL = "Barrio",
                         P3_LBL = "Comuna",
                         P5_LBL = "Ciudad")) %>%
  filter(!is.na(Percepcion))

tab_seg <- seg_long %>%
  count(Ambito, Percepcion) %>%
  group_by(Ambito) %>%
  mutate(Porcentaje = round(n / sum(n) * 100, 1)) %>%
  ungroup()

tab_seg %>%
  select(Ambito, Percepcion, Frecuencia = n, Porcentaje) %>%
  kable(caption = "Tabla 7. Percepcion de seguridad por ambito", digits = 1) %>%
  kable_styling(latex_options = c("striped","hold_position"), full_width = FALSE)
Tabla 7. Percepcion de seguridad por ambito
Ambito Percepcion Frecuencia Porcentaje
Barrio Muy seguro 484 10.4
Barrio Seguro 3426 73.3
Barrio Inseguro 642 13.7
Barrio Muy inseguro 121 2.6
Ciudad Muy seguro 193 4.1
Ciudad Seguro 2029 43.4
Ciudad Inseguro 1923 41.2
Ciudad Muy inseguro 528 11.3
Comuna Muy seguro 347 7.4
Comuna Seguro 3363 72.0
Comuna Inseguro 773 16.5
Comuna Muy inseguro 190 4.1
ggplot(tab_seg, aes(x = Percepcion, y = Porcentaje, fill = Ambito)) +
  geom_col(position = "dodge") +
  geom_text(aes(label = paste0(Porcentaje, "%")),
            position = position_dodge(width = 0.9), vjust = -0.4, size = 2.8) +
  scale_fill_manual(values = c("#4361EE","#F72585","#4CC9F0")) +
  labs(title = "Percepcion de seguridad por ambito",
       x = "Percepcion", y = "Porcentaje (%)", fill = "Ambito") +
  theme_minimal(base_size = 11)
Figura 7. Percepcion de seguridad por ambito.

Figura 7. Percepcion de seguridad por ambito.

La sensacion de Seguro predomina tanto en el barrio como en la comuna, como se observa en la Figura 7 y la Tabla 7. Sin embargo, la percepcion de seguridad disminuye a medida que el ambito se amplia: en la ciudad, la proporcion de encuestados que se sienten Inseguros o Muy inseguros es notablemente mayor que en el barrio y la comuna.

Percepcion de seguridad segun genero y estrato (Punto c)

Percepcion por genero

tab_gen_seg <- df %>%
  filter(!is.na(P1_LBL), !is.na(GENERO_LBL)) %>%
  count(GENERO_LBL, P1_LBL) %>%
  group_by(GENERO_LBL) %>%
  mutate(Porcentaje = round(n / sum(n) * 100, 1)) %>%
  ungroup()

tab_gen_seg %>%
  select(Genero = GENERO_LBL, Percepcion = P1_LBL,
         Frecuencia = n, Porcentaje) %>%
  kable(caption = "Tabla 8. Percepcion de seguridad en el barrio por genero",
        digits = 1) %>%
  kable_styling(latex_options = c("striped","hold_position"), full_width = FALSE)
Tabla 8. Percepcion de seguridad en el barrio por genero
Genero Percepcion Frecuencia Porcentaje
Masculino Muy seguro 277 12.1
Masculino Seguro 1686 73.6
Masculino Inseguro 283 12.4
Masculino Muy inseguro 44 1.9
Femenino Muy seguro 207 8.7
Femenino Seguro 1740 73.0
Femenino Inseguro 359 15.1
Femenino Muy inseguro 77 3.2
ggplot(tab_gen_seg, aes(x = P1_LBL, y = Porcentaje, fill = GENERO_LBL)) +
  geom_col(position = "dodge") +
  geom_text(aes(label = paste0(Porcentaje, "%")),
            position = position_dodge(0.9), vjust = -0.4, size = 3) +
  scale_fill_manual(values = c("#3A86FF","#FF006E"), name = "Genero") +
  labs(title = "Percepcion de seguridad en el barrio segun genero",
       x = "Percepcion", y = "Porcentaje (%)") +
  theme_minimal(base_size = 11)
Figura 8. Percepcion de seguridad en el barrio segun genero.

Figura 8. Percepcion de seguridad en el barrio segun genero.

tab_gen_ciu <- df %>%
  filter(!is.na(P5_LBL), !is.na(GENERO_LBL)) %>%
  count(GENERO_LBL, P5_LBL) %>%
  group_by(GENERO_LBL) %>%
  mutate(Porcentaje = round(n / sum(n) * 100, 1)) %>%
  ungroup()

ggplot(tab_gen_ciu, aes(x = P5_LBL, y = Porcentaje, fill = GENERO_LBL)) +
  geom_col(position = "dodge") +
  geom_text(aes(label = paste0(Porcentaje, "%")),
            position = position_dodge(0.9), vjust = -0.4, size = 3) +
  scale_fill_manual(values = c("#3A86FF","#FF006E"), name = "Genero") +
  labs(title = "Percepcion de seguridad en la ciudad segun genero",
       x = "Percepcion", y = "Porcentaje (%)") +
  theme_minimal(base_size = 11)
Figura 9. Percepcion de seguridad en la ciudad segun genero.

Figura 9. Percepcion de seguridad en la ciudad segun genero.

Como se observa en las Figuras 8 y 9, las mujeres tienden a reportar una mayor percepcion de inseguridad que los hombres, tanto en el barrio como en la ciudad.

Percepcion por estrato socioeconomico

tab_est_seg <- df %>%
  filter(!is.na(P1_LBL), !is.na(ESTRATO_LBL),
         ESTRATO_LBL != "Sin estrato") %>%
  count(ESTRATO_LBL, P1_LBL) %>%
  group_by(ESTRATO_LBL) %>%
  mutate(Porcentaje = round(n / sum(n) * 100, 1)) %>%
  ungroup()

tab_est_seg %>%
  select(Estrato = ESTRATO_LBL, Percepcion = P1_LBL,
         Frecuencia = n, Porcentaje) %>%
  kable(caption = "Tabla 9. Percepcion de seguridad en el barrio por estrato",
        digits = 1) %>%
  kable_styling(latex_options = c("striped","hold_position"), full_width = FALSE)
Tabla 9. Percepcion de seguridad en el barrio por estrato
Estrato Percepcion Frecuencia Porcentaje
Estrato 1 Muy seguro 63 8.4
Estrato 1 Seguro 580 77.0
Estrato 1 Inseguro 100 13.3
Estrato 1 Muy inseguro 10 1.3
Estrato 2 Muy seguro 228 11.3
Estrato 2 Seguro 1516 74.8
Estrato 2 Inseguro 241 11.9
Estrato 2 Muy inseguro 41 2.0
Estrato 3 Muy seguro 126 9.8
Estrato 3 Seguro 887 69.2
Estrato 3 Inseguro 222 17.3
Estrato 3 Muy inseguro 47 3.7
Estrato 4 Muy seguro 9 6.4
Estrato 4 Seguro 98 69.5
Estrato 4 Inseguro 26 18.4
Estrato 4 Muy inseguro 8 5.7
Estrato 5 Muy seguro 6 7.3
Estrato 5 Seguro 51 62.2
Estrato 5 Inseguro 19 23.2
Estrato 5 Muy inseguro 6 7.3
Estrato 6 Muy seguro 1 33.3
Estrato 6 Seguro 2 66.7
ggplot(tab_est_seg, aes(x = ESTRATO_LBL, y = Porcentaje, fill = P1_LBL)) +
  geom_col(position = "fill") +
  scale_y_continuous(labels = percent_format()) +
  scale_fill_brewer(palette = "RdYlGn", direction = -1, name = "Percepcion") +
  labs(title    = "Percepcion de seguridad en el barrio segun estrato",
       subtitle = "Grafico de barras apiladas al 100%",
       x = "Estrato", y = "Proporcion") +
  theme_minimal(base_size = 11) +
  theme(axis.text.x = element_text(angle = 20, hjust = 1))
Figura 10. Percepcion de seguridad en el barrio segun estrato.

Figura 10. Percepcion de seguridad en el barrio segun estrato.

Como se observa en la Figura 10 y la Tabla 9, los estratos bajos (1 y 2) muestran una mayor proporcion de respuestas Inseguro y Muy inseguro, mientras que en los estratos altos predomina la percepcion de Seguro.

Indice de Victimizacion (Punto d)

El indice de victimizacion mide la proporcion ponderada de hogares que han sido victimas de al menos uno de los siguientes delitos: hurto a personas, hurto a residencias, hurto a establecimientos comerciales, hurto de vehiculos o extorsiones/vacunas (P20A = 1, 2, 3, 4 o 6).

Indice para la ciudad Castellana

delitos <- c(1, 2, 3, 4, 6)
df$VICTIMA <- ifelse(df$P20A %in% delitos, 1L, 0L)

indice_ciudad <- sum(df$VICTIMA * df$FACTOR, na.rm = TRUE) /
                 sum(df$FACTOR, na.rm = TRUE)

cat(sprintf("Indice de Victimizacion - Ciudad Castellana: %.4f (%.2f%%)\n",
            indice_ciudad, indice_ciudad * 100))
## Indice de Victimizacion - Ciudad Castellana: 0.1996 (19.96%)

El indice de victimizacion para la ciudad Castellana es de 19.96%, lo que significa que cerca de ese porcentaje de los hogares han sido victimas de al menos uno de los delitos considerados.

Indice de victimizacion por comunas

indice_comunas <- df %>%
  group_by(COMUNA) %>%
  summarise(
    Victimas_pond = sum(VICTIMA * FACTOR, na.rm = TRUE),
    Total_pond    = sum(FACTOR,           na.rm = TRUE),
    Indice        = Victimas_pond / Total_pond,
    .groups = "drop"
  ) %>%
  arrange(desc(Indice)) %>%
  mutate(Porcentaje = round(Indice * 100, 2),
         Rango      = row_number())

indice_comunas %>%
  select(Rango, COMUNA, Indice, Porcentaje) %>%
  kable(caption = "Tabla 10. Indice de Victimizacion por comuna", digits = 4) %>%
  kable_styling(latex_options = c("striped","hold_position"), full_width = FALSE)
Tabla 10. Indice de Victimizacion por comuna
Rango COMUNA Indice Porcentaje
1 5 0.2757 27.57
2 7 0.2344 23.44
3 60 0.2295 22.95
4 4 0.2252 22.52
5 8 0.2157 21.57
6 13 0.2079 20.79
7 16 0.2078 20.78
8 3 0.2052 20.52
9 2 0.1968 19.68
10 9 0.1890 18.90
11 1 0.1818 18.18
12 10 0.1800 18.00
13 80 0.1698 16.98
14 12 0.1512 15.12
15 90 0.1428 14.28
16 6 0.1376 13.76
17 11 0.1314 13.14
18 70 0.1271 12.71
19 15 0.1128 11.28
20 50 0.0000 0.00
ggplot(indice_comunas,
       aes(x = reorder(factor(COMUNA), Porcentaje),
           y = Porcentaje, fill = Porcentaje)) +
  geom_col() +
  geom_text(aes(label = paste0(Porcentaje, "%")), hjust = -0.15, size = 3) +
  scale_fill_gradient(low = "#a8dadc", high = "#e63946", name = "% Victimas") +
  coord_flip() +
  labs(title    = "Indice de Victimizacion por comuna",
       subtitle = "Ciudad Castellana",
       x = "Comuna", y = "Indice de Victimizacion (%)") +
  theme_minimal(base_size = 11)
Figura 11. Indice de victimizacion por comuna.

Figura 11. Indice de victimizacion por comuna.

comuna_max <- indice_comunas %>% slice_max(Indice, n = 1)
comuna_min <- indice_comunas %>% slice_min(Indice, n = 1)

cat(sprintf(">> Comuna con MAYOR indice: Comuna %s (%.2f%%)\n",
            comuna_max$COMUNA, comuna_max$Porcentaje))
## >> Comuna con MAYOR indice: Comuna 5 (27.57%)
cat(sprintf(">> Comuna con MENOR indice: Comuna %s (%.2f%%)\n",
            comuna_min$COMUNA, comuna_min$Porcentaje))
## >> Comuna con MENOR indice: Comuna 50 (0.00%)

Como se observa en la Figura 11 y la Tabla 10, la comuna 5 registra el mayor indice de victimizacion (27.57%), mientras que la comuna 50 presenta el indice mas bajo (0.00%).


Fuente: Encuesta de Seguridad, Convivencia Ciudadana y Confianza Institucional - Ciudad Castellana.