library(readxl)
library(tidyverse)
library(knitr)
library(kableExtra)
library(scales)
library(ggplot2)
# Cargar las dos bases y el diccionario
BD1 <- read_excel("C:/Users/joans/Downloads/BD1.xlsx")
BD2 <- read_excel("C:/Users/joans/Downloads/BD2.xlsx")
# Unir por la llave REGISTRO
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
# Etiquetas de variables categoricas
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)
En esta sección se describe la población encuestada a partir de las variables de género, edad, estrato y ocupación, apoyados en estadísticas descriptivas, tablas y gráficos.
tab_genero <- df %>%
count(GENERO_LBL) %>%
mutate(Porcentaje = n / sum(n) * 100) %>%
rename(Genero = GENERO_LBL, Frecuencia = n)
tab_genero %>%
kable(caption = "Tabla 1. Distribucion por genero",
digits = 1,
format.args = list(big.mark = ",")) %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width = FALSE)
| Genero | Frecuencia | Porcentaje |
|---|---|---|
| Masculino | 2,290 | 49 |
| Femenino | 2,383 | 51 |
ggplot(tab_genero, aes(x = Genero, y = Porcentaje, fill = Genero)) +
geom_col(width = 0.5, show.legend = FALSE) +
geom_text(aes(label = paste0(round(Porcentaje, 1), "%")),
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.
tab_edad <- df %>%
count(EDAD_LBL) %>%
mutate(Porcentaje = n / sum(n) * 100) %>%
rename(Rango_edad = EDAD_LBL, Frecuencia = n)
tab_edad %>%
kable(caption = "Tabla 2. Distribucion por rango de edad",
digits = 1) %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width = FALSE)
| 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(round(Porcentaje, 1), "%")),
vjust = -0.4, size = 3) +
scale_fill_viridis_d(option = "plasma") +
labs(title = "Distribucion por rango de edad",
x = "Rango_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.
tab_estrato <- df %>%
filter(!is.na(ESTRATO_LBL)) %>%
count(ESTRATO_LBL) %>%
mutate(Porcentaje = n / sum(n) * 100) %>%
rename(Estrato = ESTRATO_LBL, Frecuencia = n)
tab_estrato %>%
kable(caption = "Tabla 3. Distribucion por estrato socioeconomico",
digits = 1) %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width = FALSE)
| 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(round(Porcentaje, 1), "%")),
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.
tab_ocup <- df %>%
filter(!is.na(OCUPACION_LBL),
!OCUPACION_LBL %in% c("Ninguno","No responde")) %>%
count(OCUPACION_LBL) %>%
mutate(Porcentaje = n / sum(n) * 100) %>%
arrange(desc(Porcentaje)) %>%
rename(Ocupacion = OCUPACION_LBL, Frecuencia = n)
tab_ocup %>%
kable(caption = "Tabla 4. Distribucion por ocupacion",
digits = 1) %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width = FALSE)
| 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(round(Porcentaje, 1), "%")),
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.
## 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(bootstrap_options = c("striped","hover","condensed"),
full_width = FALSE)
| 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.
df$INGRESO_LBL <- factor(df$P111,
levels = c(1, 2, 3, 4, 5, 6, 7, 8, 999),
labels = c("Menos de $100.000",
"$100.000 - $350.000",
"$350.001 - $700.000",
"$700.001 - $1.000.000",
"$1.000.001 - $2.000.000",
"$2.000.001 - $3.500.000",
"$3.500.001 - $5.000.000",
"Mas de $5.000.000",
"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(bootstrap_options = c("striped","hover","condensed"),
full_width = FALSE)
| Rango_ingreso | Frecuencia | Porcentaje |
|---|---|---|
| Menos de $100.000 | 164 | 3.8 |
| $100.000 - $350.000 | 334 | 7.7 |
| $350.001 - $700.000 | 515 | 11.9 |
| $700.001 - $1.000.000 | 1158 | 26.8 |
| $1.000.001 - $2.000.000 | 1422 | 32.9 |
| $2.000.001 - $3.500.000 | 450 | 10.4 |
| $3.500.001 - $5.000.000 | 189 | 4.4 |
| Mas de $5.000.000 | 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.
La muestra está compuesta 4673 observaciones de las cuales 2290 pertenecen al género masculino y 2383 al género femenino, lo que refleja una distribución relativamente equilibrada entre géneros como se puede observar 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. Por último, en la Figura 6 muestra que en la distribución del ingreso mensual la mayoría de los hogares encuestados se concentra en los rangos de ingreso medio-bajo (entre $700.001 y $2.000.000), lo que es coherente con el perfil de estratos 2 y 3 predominante en la muestra. Los hogares con ingresos superiores a $3.500.000 representan una minoría.’
Las variables P1, P3 y P5 miden cómo se sienten los encuestados en su barrio, comuna y ciudad, respectivamente (escala: Muy seguro – Seguro – Inseguro – Muy inseguro).
# Construir tabla larga para comparacion
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 = n / sum(n) * 100) %>%
ungroup()
# Tabla resumen
tab_seg %>%
select(Ambito, Percepcion, Frecuencia = n, Porcentaje) %>%
pivot_wider(names_from = Ambito,
values_from = c(Frecuencia, Porcentaje)) %>%
kable(caption = "Tabla 7. Percepcion de seguridad por ambito (frecuencias y %)",
digits = 1) %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"))
| Percepcion | Frecuencia_Barrio | Frecuencia_Ciudad | Frecuencia_Comuna | Porcentaje_Barrio | Porcentaje_Ciudad | Porcentaje_Comuna |
|---|---|---|---|---|---|---|
| Muy seguro | 484 | 193 | 347 | 10.4 | 4.1 | 7.4 |
| Seguro | 3426 | 2029 | 3363 | 73.3 | 43.4 | 72.0 |
| Inseguro | 642 | 1923 | 773 | 13.7 | 41.2 | 16.5 |
| Muy inseguro | 121 | 528 | 190 | 2.6 | 11.3 | 4.1 |
ggplot(tab_seg,
aes(x = Percepcion,
y = Porcentaje,
fill = Ambito)) +
geom_col(position = "dodge") +
geom_text(aes(label = paste0(round(Porcentaje, 1), "%")),
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.
Como se puede observar en la Figura 7 y Tabla 7, la sensación de “Seguro” predomina tanto en el barrio como en la comuna. Sin embargo, la percepción de seguridad disminuye a medida que el ámbito se amplía: en la ciudad, la proporción de encuestados que se sienten “Inseguros” o “Muy inseguros” es notablemente mayor que en el barrio y la comuna, sugiriendo que los ciudadanos perciben su entorno más inmediato como más seguro que la ciudad en su conjunto.
# Barrio (P1) 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 = n / sum(n) * 100) %>%
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(bootstrap_options = c("striped","hover","condensed"),
full_width = FALSE)
| 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(round(Porcentaje,1),"%")),
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.
# Ciudad (P5) por 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 = n / sum(n) * 100) %>%
ungroup()
tab_gen_ciu %>%
select(Genero = GENERO_LBL, Percepcion = P5_LBL,
Frecuencia = n, Porcentaje) %>%
kable(caption = "Tabla 9. Percepcion de seguridad en la ciudad por genero",
digits = 1) %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width = FALSE)
| Genero | Percepcion | Frecuencia | Porcentaje |
|---|---|---|---|
| Masculino | Muy seguro | 104 | 4.5 |
| Masculino | Seguro | 1086 | 47.4 |
| Masculino | Inseguro | 894 | 39.0 |
| Masculino | Muy inseguro | 206 | 9.0 |
| Femenino | Muy seguro | 89 | 3.7 |
| Femenino | Seguro | 943 | 39.6 |
| Femenino | Inseguro | 1029 | 43.2 |
| Femenino | Muy inseguro | 322 | 13.5 |
ggplot(tab_gen_ciu,
aes(x = P5_LBL, y = Porcentaje, fill = GENERO_LBL)) +
geom_col(position = "dodge") +
geom_text(aes(label = paste0(round(Porcentaje,1),"%")),
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.
En las Figuras 8 y 9 se observa que las mujeres tienden a reportar una mayor percepción de inseguridad que los hombres, tanto en el barrio como en la ciudad. Esto es consistente con evidencia empírica que documenta que las mujeres experimentan el espacio público de manera distinta, asociada a factores como el acoso y la violencia de género.
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 = n / sum(n) * 100) %>%
ungroup()
tab_est_seg %>%
select(Estrato = ESTRATO_LBL, Percepcion = P1_LBL,
Frecuencia = n, Porcentaje) %>%
kable(caption = "Tabla 10. Percepcion de seguridad en el barrio por estrato",
digits = 1) %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width = FALSE) %>%
scroll_box(height = "300px")
| 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.
Interpretación – En la Figura 10 y Tabla 10 se puede observar que la percepción de seguridad varía notablemente según el estrato: los estratos bajos (1 y 2) muestran una mayor proporción de respuestas “Inseguro” y “Muy inseguro”, mientras que en los estratos medios y altos (4, 5 y 6) predomina la percepción de “Seguro”. Esto sugiere una desigualdad territorial en las condiciones de seguridad percibida.
El Índice de Victimización mide la proporción ponderada de hogares que han sido víctimas de al menos uno de los siguientes delitos: hurto a personas, hurto a residencias, hurto a establecimientos comerciales, hurto de vehículos o extorsiones/vacunas (P20A = 1, 2, 3, 4 o 6). Su fórmula es:
\[\text{Índice de Victimización} = \frac{\sum_{i=1}^{4{,}673} \mathbf{1}(P20A_i = 1) \times w_i}{\sum_{i=1}^{4{,}673} w_i}\]
donde \(w_i\) es el factor de
ponderación (FACTOR) del hogar \(i\).
# Construir indicador de victimizacion
# P20A = 1 (hurto personas), 2 (residencias), 3 (establecimientos),
# 4 (vehiculos), 6 (extorsiones/vacunas)
delitos_victimizacion <- c(1, 2, 3, 4, 6)
df <- df %>%
mutate(
VICTIMA = if_else(P20A %in% delitos_victimizacion, 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 índice de victimización para la ciudad Castellana es de aproximadamente 19.96%, lo que significa que cerca de ese porcentaje de los hogares han sido víctimas de al menos uno de los delitos considerados.
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 = Indice * 100,
Rango = row_number()
)
indice_comunas %>%
select(Rango, COMUNA, `Indice` = Indice, `Porcentaje (%)` = Porcentaje) %>%
kable(caption = "Tabla 11. Indice de Victimizacion por comuna",
digits = 4) %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width = FALSE) %>%
row_spec(1, bold = TRUE, color = "white", background = "#d62828") %>%
row_spec(nrow(indice_comunas), bold = TRUE, color = "white",
background = "#2d6a4f")
| Rango | COMUNA | Indice | Porcentaje (%) |
|---|---|---|---|
| 1 | 5 | 0.2757 | 27.5735 |
| 2 | 7 | 0.2344 | 23.4415 |
| 3 | 60 | 0.2295 | 22.9498 |
| 4 | 4 | 0.2252 | 22.5247 |
| 5 | 8 | 0.2157 | 21.5679 |
| 6 | 13 | 0.2079 | 20.7877 |
| 7 | 16 | 0.2078 | 20.7770 |
| 8 | 3 | 0.2052 | 20.5160 |
| 9 | 2 | 0.1968 | 19.6810 |
| 10 | 9 | 0.1890 | 18.8964 |
| 11 | 1 | 0.1818 | 18.1827 |
| 12 | 10 | 0.1800 | 18.0033 |
| 13 | 80 | 0.1698 | 16.9776 |
| 14 | 12 | 0.1512 | 15.1208 |
| 15 | 90 | 0.1428 | 14.2799 |
| 16 | 6 | 0.1376 | 13.7626 |
| 17 | 11 | 0.1314 | 13.1406 |
| 18 | 70 | 0.1271 | 12.7091 |
| 19 | 15 | 0.1128 | 11.2756 |
| 20 | 50 | 0.0000 | 0.0000 |
ggplot(indice_comunas,
aes(x = reorder(factor(COMUNA), Porcentaje),
y = Porcentaje,
fill = Porcentaje)) +
geom_col() +
geom_text(aes(label = paste0(round(Porcentaje, 1), "%")),
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.
comuna_max <- indice_comunas %>% slice_max(Indice, n = 1)
comuna_min <- indice_comunas %>% slice_min(Indice, n = 1)
cat(sprintf(">> Comuna con MAYOR indice de victimizacion: Comuna %s (%.2f%%)\n",
comuna_max$COMUNA, comuna_max$Porcentaje))
## >> Comuna con MAYOR indice de victimizacion: Comuna 5 (27.57%)
cat(sprintf(">> Comuna con MENOR indice de victimizacion: Comuna %s (%.2f%%)\n",
comuna_min$COMUNA, comuna_min$Porcentaje))
## >> Comuna con MENOR indice de victimizacion: Comuna 50 (0.00%)
Se puede identificar en Figura 11 el índice de victimización varía considerablemente entre comunas. La Comuna 5 registra el mayor nivel (27.57%), lo que la identifica como el territorio con mayor proporción ponderada de hogares victimizados. En contraste, la Comuna 50 presenta el índice más bajo (0.00%), sugiriendo condiciones de seguridad relativamente mejores. Estas diferencias intermunicipales apuntan a la necesidad de focalizar políticas de seguridad ciudadana en las comunas con mayor victimización.*
Fuente: Encuesta de Seguridad, Convivencia Ciudadana y Confianza Institucional – Ciudad Castellana.