En este informe desarrollo un análisis integral sobre las condiciones socioeconómicas, la victimización objetiva y la percepción de seguridad ciudadana en la ciudad Castellana, a partir del procesamiento estadístico de las bases del taller.
Para esto, integro dos fuentes muestrales estructuradas
(BD1 y BD2) vinculadas a nivel de microdatos
mediante la llave única de hogar REGISTRO. Lo que quiero
hacer con el taller, no es solo calcular frecuencias descriptivas, sino
responder a tres interrogantes fundamentales de política pública urbana
tambien:
Perfil sociodemográfico del informante: Caracterizar la composición de los hogares según jefatura, distribución etaria y estratificación social.
Gradiente espacial de la seguridad y brechas sociodemográficas: Contrastar cómo varía la percepción de seguridad conforme nos alejamos del entorno micro (el barrio) hacia el nivel meso (la comuna) y macro (la ciudad), evaluando si existen sesgos sistemáticos atribuibles al género o a la posición socioeconómica.
Victimización objetiva ponderada: Implementar la formulación matemática del índice de victimización incorporando el factor de expansión muestral, identificando los focos territoriales de mayor y menor incidencia delictiva.
Adicionalmente, para ir un poco mas alla del taller, me gustaria evaluar la paradoja de la seguridad urbana: contrastar si aquellas comunas con mayores tasas objetivas de victimización coinciden o divergen de aquellas donde los ciudadanos manifiestan mayor temor en el espacio público.
Finalmente el análisis se desarrolla íntegramente en R y está diseñado para compilar tanto a HTML como a PDF. Las tablas y figuras se presentan con numeración, título, fuente y una interpretación en el texto.
Tablas del informe
Figuras del informe
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/s12e10/Downloads/EJERCICIO")
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")
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"))
)
En esta sección voy a analizar el perfil social y económico de las personas que respondieron la encuesta en la ciudad Castellana. Para tener una foto completa de quiénes son los jefes de hogar, reviso tres dimensiones fundamentales: la estructura por género, la composición etaria (edades) y la estratificación socioeconómica del territorio.
Primero examino la composición demográfica básica de las personas encuestadas. Como paso metodológico previo, depuré los códigos de no respuesta (valores atípicos como 999) para conservar únicamente observaciones biológicamente consistentes.
col_edad <- if("PC_EDAD" %in% names(base)) "PC_EDAD" else "PC"
base <- base %>%
mutate(
edad_raw = as.numeric(.data[[col_edad]]),
edad_num = if_else(edad_raw >= 15 & edad_raw < 110, edad_raw, NA_real_),
genero_label = case_when(
GENERO %in% c(1, "1", "Hombre", "Masculino") ~ "Hombre",
GENERO %in% c(2, "2", "Mujer", "Femenino") ~ "Mujer",
TRUE ~ as.character(GENERO)
),
rango_edad = case_when(
edad_num < 25 ~ "15 a 24 años",
edad_num >= 25 & edad_num < 40 ~ "25 a 39 años",
edad_num >= 40 & edad_num < 60 ~ "40 a 59 años",
edad_num >= 60 ~ "60 años o más",
TRUE ~ "Sin dato"
)
)
tabla_edad <- base %>%
filter(!is.na(edad_num)) %>%
group_by(genero_label) %>%
summarise(
`Total Encuestados` = n(),
`Participación (%)` = (n() / nrow(base %>% filter(!is.na(edad_num)))) * 100,
`Edad Promedio` = mean(edad_num, na.rm = TRUE),
`Mediana` = median(edad_num, na.rm = TRUE),
`Desviación Estándar` = sd(edad_num, na.rm = TRUE),
`Edad Mínima` = min(edad_num, na.rm = TRUE),
`Edad Máxima` = max(edad_num, na.rm = TRUE)
)
tabla_dual(tabla_edad, "Tabla 1. Estadísticas descriptivas de la edad según género del informante", digitos = 1)
| genero_label | Total Encuestados | Participación (%) | Edad Promedio | Mediana | Desviación Estándar | Edad Mínima | Edad Máxima |
|---|---|---|---|---|---|---|---|
| Hombre | 2289 | 49.1 | 44.8 | 44 | 19.0 | 15 | 92 |
| Mujer | 2376 | 50.9 | 48.2 | 50 | 18.2 | 16 | 98 |
base %>%
filter(!is.na(edad_num), rango_edad != "Sin dato") %>%
count(rango_edad, genero_label) %>%
group_by(rango_edad) %>%
mutate(pct = round(n / sum(n) * 100, 1)) %>%
ggplot(aes(x = rango_edad, y = n, fill = genero_label)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.85), width = 0.7) +
geom_text(
aes(label = paste0(n, "\n(", pct, "%)")),
position = position_dodge(width = 0.85),
vjust = -0.3,
size = 2.7,
lineheight = 0.85
) +
scale_y_continuous(limits = c(0, 950), breaks = seq(0, 900, 200)) +
scale_fill_manual(values = c("Hombre" = "#2b5c8f", "Mujer" = "#d95f02")) +
labs(
title = "Figura 1. Distribución de los jefes de hogar por grupos de edad y género",
subtitle = "Frecuencia absoluta y participación porcentual por cohorte etaria",
x = "Grupo de Edad",
y = "Número de Encuestados",
fill = "Género"
) +
theme(
plot.title = element_text(face = "bold", size = 8),
plot.subtitle = element_text(size = 7, color = "gray30"),
axis.text.x = element_text(size = 7),
legend.position = "bottom"
)
Figura 1. Distribución de los jefes de hogar por grupos de edad y género
Análisis e interpretación de los resultados:
A partir de los resultados consolidados en la Tabla 1, observo un equilibrio demográfico casi exacto en la representatividad general de la muestra: de los 4.665 informantes válidos, 2.376 son mujeres (50,9%) y 2.289 son hombres (49,1%). No obstante, al comparar las medidas descriptivas encuentro diferencias relevantes:
Las mujeres registran una edad promedio de 48,2 años frente a 44,8 años en los hombres. Esta distancia se confirma en la mediana (50 años en mujeres versus 44 años en hombres), lo que demuestra que la jefatura femenina en los hogares encuestados está concentrada en una etapa de mayor madurez.
La desviación estándar (18,2 años en mujeres y 19,0 años en hombres) refleja una notable dispersión en las respuestas, abarcando desde jóvenes de 15 y 16 años hasta adultos mayores de más de 90 años.
Por su parte, al examinar la Figura 1, identifico un cambio generacional marcado en la jefatura del hogar según el sexo:
En las etapas tempranas predomina la jefatura masculina: en el rango de 15 a 24 años los hombres representan el 59,6% (445 encuestados frente a 302 mujeres), y entre los 25 y 39 años alcanzan el 51,6% (579 frente a 544).
A partir de los 40 años esta relación se invierte: en el grupo de 40 a 59 años las mujeres pasan a ser mayoría con el 55,6% (785 hogares), y en el grupo de 60 años o más representan el 53,9% (745 hogares).
Este contraste resulta clave para el resto del estudio: las respuestas sobre la convivencia y los problemas de la ciudad recaen sobre dos poblaciones principales: hombres jóvenes o adultos tempranos, y mujeres adultas y de la tercera edad, dos grupos que suelen relacionarse y percibir los riesgos del entorno urbano de formas muy distintas.
En este apartado examino la distribución socioeconómica de los
hogares encuestados mediante la variable ESTRATO_DEC,
identificando los estratos tradicionales del 1 al 6 y clasificando la
categoría 7 como “Sin estrato / No aplica”.
base <- base %>%
mutate(
estrato_cat = case_when(
ESTRATO_DEC == 1 ~ "Estrato 1",
ESTRATO_DEC == 2 ~ "Estrato 2",
ESTRATO_DEC == 3 ~ "Estrato 3",
ESTRATO_DEC == 4 ~ "Estrato 4",
ESTRATO_DEC == 5 ~ "Estrato 5",
ESTRATO_DEC == 6 ~ "Estrato 6",
ESTRATO_DEC == 7 ~ "Sin estrato",
TRUE ~ "Sin dato"
),
estrato_cat = factor(estrato_cat, levels = c(paste("Estrato", 1:6), "Sin estrato"))
)
# Tabla 2: Distribución descriptiva
tabla_estrato <- base %>%
filter(estrato_cat != "Sin dato") %>%
group_by(estrato_cat) %>%
summarise(
`Hogares` = n(),
`Participación (%)` = (n() / nrow(base)) * 100,
`Hombres (%)` = mean(genero_label == "Hombre", na.rm = TRUE) * 100,
`Mujeres (%)` = mean(genero_label == "Mujer", na.rm = TRUE) * 100
)
tabla_dual(tabla_estrato, "Tabla 2. Distribución de los hogares encuestados por estrato socioeconómico y composición de género", digitos = 1)
| estrato_cat | Hogares | Participación (%) | Hombres (%) | Mujeres (%) |
|---|---|---|---|---|
| Estrato 1 | 753 | 16.1 | 46.3 | 53.7 |
| Estrato 2 | 2026 | 43.4 | 48.1 | 51.9 |
| Estrato 3 | 1282 | 27.4 | 50.2 | 49.8 |
| Estrato 4 | 141 | 3.0 | 51.8 | 48.2 |
| Estrato 5 | 82 | 1.8 | 58.5 | 41.5 |
| Estrato 6 | 3 | 0.1 | 33.3 | 66.7 |
| Sin estrato | 386 | 8.3 | 51.8 | 48.2 |
Para visualizar la concentración en la estructura socioeconómica de la ciudad, elaboré el gráfico comparativo de la Figura 2:
# Usamos directamente la columna estrato_cat que ya existe en la base
df_estrato_plot <- base %>%
filter(!is.na(estrato_cat), !is.na(genero_label)) %>%
count(estrato_cat, genero_label) %>%
group_by(estrato_cat) %>%
mutate(pct = round(n / sum(n) * 100, 1))
ggplot(df_estrato_plot, aes(x = factor(estrato_cat), y = n, fill = genero_label)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.85), width = 0.7) +
geom_text(
aes(label = paste0(n, "\n(", pct, "%)")),
position = position_dodge(width = 0.85),
vjust = -0.2,
size = 2.1,
lineheight = 0.8
) +
scale_y_continuous(limits = c(0, 1300), breaks = seq(0, 1200, 300)) +
scale_fill_manual(values = c("Hombre" = "#2b5c8f", "Mujer" = "#d95f02")) +
labs(
title = "Figura 2. Distribución de informantes por estrato socioeconómico y género",
subtitle = "Frecuencia de hogares y proporción de género al interior de cada estrato",
x = "Estrato Socioeconómico",
y = "Número de Jefes de Hogar",
fill = "Género"
) +
theme(
plot.title = element_text(face = "bold", size = 8),
plot.subtitle = element_text(size = 7, color = "gray30"),
axis.text.x = element_text(size = 7.5, angle = 20, hjust = 1),
axis.text.y = element_text(size = 7.5),
axis.title = element_text(size = 8),
legend.title = element_text(size = 8),
legend.text = element_text(size = 7),
legend.position = "bottom"
)
Figura 2. Distribución de informantes por estrato socioeconómico y género
Análisis e interpretación de los resultados:
Al revisar los datos consolidados en la Tabla 2 y la Figura 2, encuentro una marcada concentración socioeconómica en los sectores populares y de clase media-baja en la ciudad Castellana:
El Estrato 2 es el grupo mayoritario con 2.026 hogares, lo que representa el 43,4% del total de la muestra. Le sigue el Estrato 3 con 1.282 hogares (27,4%) y el Estrato 1 con 753 hogares (16,1%). Entre estos tres primeros estratos agrupan al 86,9% de todas las viviendas encuestadas.
Por el contrario, los estratos socioeconómicos altos tienen una representación muy baja en la base: el Estrato 4 cuenta con 141 hogares (3,0%), el Estrato 5 con 82 hogares (1,8%) y el Estrato 6 apenas registra 3 encuestas (0,1%). Asimismo, 386 hogares (8,3%) reportaron no contar con estratificación o no saberla.
En cuanto a la distribución por sexo al interior de cada estrato, la muestra guarda un equilibrio notable en los segmentos principales: en el Estrato 2 las mujeres representan el 51,9% (1.051 hogares) frente al 48,1% de hombres (975 hogares); y en el Estrato 3 la relación es prácticamente de paridad con 50,2% hombres (644 casos) y 49,8% mujeres (638 casos). En el Estrato 1 la jefatura femenina alcanza el 53,7% (404 casos).
Esto me demuestra que el estudio refleja la realidad de una ciudad predominantemente de estratos 2 y 3. Por lo tanto, cuando evalúe la seguridad y la victimización en las siguientes secciones, los resultados describirán principalmente la experiencia urbana de estos niveles socioeconómicos.
Para completar la caracterización económica de la población encuestada, analizo la actividad laboral de los jefes de hogar. Esta dimensión me permite comprender las fuentes de sustento económico y el arraigo o permanencia física que tienen las personas en sus barrios durante el día.
# Tabla de distribución por condición de ocupación
tabla_ocupacion <- base %>%
count(Ocupacion) %>%
filter(!is.na(Ocupacion), n > 0) %>%
mutate(
`Participación (%)` = round((n / sum(n)) * 100, 1)
) %>%
arrange(desc(n)) %>%
rename(
`Condición de Ocupación` = Ocupacion,
`Hogares` = n
)
tabla_dual(tabla_ocupacion, "Tabla 3. Distribución de los jefes de hogar según condición de ocupación laboral", digitos = 1)
| Condición de Ocupación | Hogares | Participación (%) |
|---|---|---|
| Ama de casa | 1343 | 28.7 |
| Empleado/asalariado | 1123 | 24.0 |
| Trabaja independiente/propietario | 1001 | 21.4 |
| Desempleado | 427 | 9.1 |
| Retirado/Jubilado | 360 | 7.7 |
| Estudiante | 304 | 6.5 |
| Ninguno/nada | 88 | 1.9 |
| Incapacitado/discapacitado | 16 | 0.3 |
| Cuidado de familiares | 6 | 0.1 |
| Otros(as) | 4 | 0.1 |
| No responde | 1 | 0.0 |
En la Figura 3 represento de forma ordenada las actividades laborales de los informantes para identificar visualmente los perfiles predominantes:
ggplot(tabla_ocupacion %>% filter(Hogares >= 10),
aes(x = reorder(`Condición de Ocupación`, Hogares), y = Hogares)) +
geom_bar(stat = "identity", fill = "#2b5c8f", width = 0.65) +
geom_text(
aes(label = paste0(Hogares, " (", `Participación (%)`, "%)")),
hjust = -0.1,
size = 2.4
) +
coord_flip() +
scale_y_continuous(limits = c(0, 1600), breaks = seq(0, 1500, 300)) +
labs(
title = "Figura 3. Condición de ocupación laboral de los jefes de hogar",
subtitle = "Frecuencia de informantes y porcentaje sobre el total de la muestra",
x = "Condición de Ocupación",
y = "Número de Jefes de Hogar"
) +
theme(
plot.title = element_text(face = "bold", size = 6),
plot.subtitle = element_text(size = 5, color = "gray30"),
axis.text.x = element_text(size = 7.5),
axis.text.y = element_text(size = 7.5),
axis.title = element_text(size = 8)
)
Figura 3. Condición de ocupación laboral de los jefes de hogar
Análisis e interpretación de los resultados:
Al examinar la Tabla 3 y la Figura 3, observo que la fuerza laboral y las actividades cotidianas de los jefes de hogar se concentran en tres categorías principales que representan el 74,1% de toda la muestra:
Ama de casa: Constituye el grupo mayoritario con 1.343 personas (el 28,7% del total). Esta cifra guarda coherencia directa con lo hallado en la Tabla 1, donde identifiqué una fuerte presencia de mujeres mayores de 40 años en la jefatura del hogar. Este segmento tiene una permanencia diurna constante en el barrio, por lo que sus respuestas reflejan de primera mano la dinámica del vecindario.
Fuerza laboral activa: Los Empleados o asalariados suman 1.123 casos (24,0%), mientras que quienes trabajan como Independientes o propietarios alcanzan 1.001 hogares (21,4%). Esto indica que casi la mitad de los informantes (45,4%) se moviliza diariamente para generar ingresos, expuestos tanto a los trayectos urbanos como a la actividad comercial.
Población no activa u ocupaciones menores: Encuentro que 427 personas se encuentran en condición de Desempleo (9,1%), seguidos por Retirados o jubilados con 360 casos (7,7%) y Estudiantes con 304 casos (6,5%). Opciones como personas sin ocupación específica (88 casos, 1,9%), incapacidad médica (16 casos, 0,3%) o cuidado exclusivo de familiares (6 casos, 0,1%) completan los valores residuales.
En conjunto con la edad madura y la localización en estratos 2 y 3 vista en los apartados anteriores, confirmo que la muestra está compuesta principalmente por personas con responsabilidades directas en el hogar y en la economía familiar. Esto le otorga solidez a los juicios que emiten sobre la seguridad y el delito en los siguientes puntos.
En este apartado analizo la dimensión subjetiva de la seguridad
ciudadana a partir de las preguntas P1 (barrio),
P3 (comuna) y P5 (ciudad). Evalúo cómo cambia
el sentimiento de protección a medida que se amplía la escala
territorial y si existen brechas atribuibles al género del informante o
al estrato socioeconómico de la vivienda.
Para contrastar las tres escalas territoriales en una misma métrica
homogénea, recodifiqué las opciones de respuesta en cuatro niveles de
seguridad (Muy seguro, Seguro,
Inseguro, Muy inseguro).
# Recodificación de las variables P1, P3 y P5
recode_seguridad <- function(x) {
case_when(
x == 1 ~ "Muy seguro",
x == 2 ~ "Seguro",
x == 3 ~ "Inseguro",
x == 4 ~ "Muy inseguro",
TRUE ~ NA_character_
)
}
base <- base %>%
mutate(
sec_barrio = factor(recode_seguridad(P1), levels = c("Muy seguro", "Seguro", "Inseguro", "Muy inseguro")),
sec_comuna = factor(recode_seguridad(P3), levels = c("Muy seguro", "Seguro", "Inseguro", "Muy inseguro")),
sec_ciudad = factor(recode_seguridad(P5), levels = c("Muy seguro", "Seguro", "Inseguro", "Muy inseguro"))
)
# Consolidación comparativa en tabla
resumen_escalas <- tibble(
`Escala Territorial` = c("Barrio (P1)", "Comuna (P3)", "Ciudad (P5)"),
`Muy seguro (%)` = c(
mean(base$sec_barrio == "Muy seguro", na.rm = TRUE) * 100,
mean(base$sec_comuna == "Muy seguro", na.rm = TRUE) * 100,
mean(base$sec_ciudad == "Muy seguro", na.rm = TRUE) * 100
),
`Seguro (%)` = c(
mean(base$sec_barrio == "Seguro", na.rm = TRUE) * 100,
mean(base$sec_comuna == "Seguro", na.rm = TRUE) * 100,
mean(base$sec_ciudad == "Seguro", na.rm = TRUE) * 100
),
`Inseguro (%)` = c(
mean(base$sec_barrio == "Inseguro", na.rm = TRUE) * 100,
mean(base$sec_comuna == "Inseguro", na.rm = TRUE) * 100,
mean(base$sec_ciudad == "Inseguro", na.rm = TRUE) * 100
),
`Muy inseguro (%)` = c(
mean(base$sec_barrio == "Muy inseguro", na.rm = TRUE) * 100,
mean(base$sec_comuna == "Muy inseguro", na.rm = TRUE) * 100,
mean(base$sec_ciudad == "Muy inseguro", na.rm = TRUE) * 100
),
`Total Percepción Insegura (%)` = `Inseguro (%)` + `Muy inseguro (%)`
)
tabla_dual(resumen_escalas, "Tabla 4. Comparativo de percepción de seguridad según escala territorial (Barrio, Comuna y Ciudad)", digitos = 1)
| Escala Territorial | Muy seguro (%) | Seguro (%) | Inseguro (%) | Muy inseguro (%) | Total Percepción Insegura (%) |
|---|---|---|---|---|---|
| Barrio (P1) | 10.4 | 73.3 | 13.7 | 2.6 | 16.3 |
| Comuna (P3) | 7.4 | 72.0 | 16.5 | 4.1 | 20.6 |
| Ciudad (P5) | 4.1 | 43.4 | 41.2 | 11.3 | 52.5 |
Para visualizar este gradiente espacial, construí el gráfico de barras apiladas de la Figura 4:
# Paleta semafórica ordenada: Seguro a Inseguro
colores_percepcion <- c(
"Muy seguro" = "#2ca25f",
"Seguro" = "#99d8c9",
"Inseguro" = "#fdae61",
"Muy inseguro" = "#d7191c"
)
df_gradiente <- base %>%
select(sec_barrio, sec_comuna, sec_ciudad) %>%
pivot_longer(cols = everything(), names_to = "Escala", values_to = "Percepcion") %>%
filter(!is.na(Percepcion)) %>%
mutate(
Escala = case_when(
Escala == "sec_barrio" ~ "Barrio",
Escala == "sec_comuna" ~ "Comuna",
Escala == "sec_ciudad" ~ "Ciudad"
),
Escala = factor(Escala, levels = c("Barrio", "Comuna", "Ciudad")),
# Fijamos el orden de apilamiento para que lo positivo quede abajo y lo negativo arriba
Percepcion = factor(Percepcion, levels = c("Muy seguro", "Seguro", "Inseguro", "Muy inseguro"))
) %>%
count(Escala, Percepcion) %>%
group_by(Escala) %>%
mutate(pct = round(n / sum(n) * 100, 1))
ggplot(df_gradiente, aes(x = Escala, y = pct, fill = Percepcion)) +
geom_bar(stat = "identity", position = "stack", width = 0.55) +
geom_text(
aes(label = paste0(pct, "%")),
position = position_stack(vjust = 0.5),
size = 2.4,
color = "black"
) +
scale_fill_manual(values = colores_percepcion) +
labs(
title = "Figura 4. Gradiente territorial de la percepción de seguridad",
subtitle = "Distribución porcentual del sentimiento de seguridad en barrio, comuna y ciudad",
x = "Nivel Territorial",
y = "Porcentaje de Encuestados (%)",
fill = "Percepción"
) +
theme(
plot.title = element_text(face = "bold", size = 8),
plot.subtitle = element_text(size = 7, color = "gray30"),
axis.text = element_text(size = 7.5),
axis.title = element_text(size = 8),
legend.title = element_text(size = 8),
legend.text = element_text(size = 7),
legend.position = "bottom"
)
Figura 4. Gradiente territorial de la percepción de seguridad
Análisis e interpretación de los resultados:
Al analizar los datos consolidados en la Tabla 4 y representados en la Figura 4, encuentro una pauta territorial evidente: la sensación de inseguridad no es homogénea en el espacio, sino que aumenta a medida que el informante se aleja de su espacio inmediato de residencia:
Seguridad en el Barrio: El entorno residencial más cercano es percibido de forma ampliamente positiva. Un 83,7% de los encuestados reporta sentirse protegido (10,4% “Muy seguro” y 73,3% “Seguro”), mientras que solo un 16,3% manifiesta sentirse vulnerable (13,7% “Inseguro” y 2,6% “Muy inseguro”). Esto refleja un efecto de cercanía y familiaridad vecinal que mitiga el temor al delito cotidiano.
Seguridad en la Comuna: Al ampliar la mirada hacia la comuna o corregimiento, la percepción favorable disminuye ligeramente a 79,4% (7,4% “Muy seguro” y 72,0% “Seguro”), mientras que la tasa de inseguridad sube al 20,6% (16,5% “Inseguro” y 4,1% “Muy inseguro”). Aunque sigue predominando la tranquilidad, el traslado por áreas menos conocidas de la misma zona genera una mayor prevención en los hogares.
**Seguridad en la Ciudad: La ruptura más drástica se presenta en la escala global de la ciudad. Aquí la sensación de inseguridad se dispara hasta el 52,5% (41,2% “Inseguro” y 11,3% “Muy inseguro”), multiplicando por más de tres veces el nivel registrado en los barrios. Solo un 4,1% se siente “Muy seguro” en la urbe.
Esta diferencia de más de 36 puntos porcentuales entre la inseguridad del barrio (16,3%) y la de la ciudad (52,5%) muestra con claridad lo que en criminología urbana se conoce como el efecto del espacio abstracto: los ciudadanos confían en lo que ven y conocen día a día en su cuadra, pero proyectan altos niveles de alarma frente al resto del territorio urbano, influenciados por los medios de comunicación y el anonimato de la ciudad.
Para profundizar en los determinantes de la percepción subjetiva, analizo la tasa de inseguridad global (suma de respuestas Inseguro y Muy inseguro) contrastando dos dimensiones fundamentales: las diferencias entre hombres y mujeres, y la posición en la pirámide socioeconómica por estratos residenciales.
# 1. Brecha territorial por Género
brecha_genero <- base %>%
filter(!is.na(genero_label)) %>%
group_by(`Género` = genero_label) %>%
summarise(
`Inseguridad Barrio (%)` = mean(sec_barrio %in% c("Inseguro", "Muy inseguro"), na.rm = TRUE) * 100,
`Inseguridad Comuna (%)` = mean(sec_comuna %in% c("Inseguro", "Muy inseguro"), na.rm = TRUE) * 100,
`Inseguridad Ciudad (%)` = mean(sec_ciudad %in% c("Inseguro", "Muy inseguro"), na.rm = TRUE) * 100
)
tabla_dual(brecha_genero, "Tabla 5. Percepción de inseguridad según género del informante a escala territorial", digitos = 1)
| Género | Inseguridad Barrio (%) | Inseguridad Comuna (%) | Inseguridad Ciudad (%) |
|---|---|---|---|
| Hombre | 14.3 | 19.6 | 48.0 |
| Mujer | 18.3 | 21.6 | 56.7 |
En la Figura 5 represento gráficamente la brecha sistemática entre hombres y mujeres a lo largo de los tres niveles espaciales:
df_brecha_plot <- brecha_genero %>%
pivot_longer(cols = starts_with("Inseguridad"), names_to = "Territorio", values_to = "Tasa_Inseguridad") %>%
mutate(
Territorio = case_when(
str_detect(Territorio, "Barrio") ~ "Barrio",
str_detect(Territorio, "Comuna") ~ "Comuna",
str_detect(Territorio, "Ciudad") ~ "Ciudad"
),
Territorio = factor(Territorio, levels = c("Barrio", "Comuna", "Ciudad"))
)
ggplot(df_brecha_plot, aes(x = Territorio, y = Tasa_Inseguridad, fill = `Género`)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.8), width = 0.65) +
geom_text(
aes(label = paste0(round(Tasa_Inseguridad, 1), "%")),
position = position_dodge(width = 0.8),
vjust = -0.3,
size = 2.4
) +
scale_y_continuous(limits = c(0, 75), breaks = seq(0, 70, 15)) +
scale_fill_manual(values = c("Hombre" = "#2b5c8f", "Mujer" = "#d95f02")) +
labs(
title = "Figura 5. Percepción de inseguridad territorial según género del informante",
subtitle = "Porcentaje de personas que se sienten Inseguras o Muy inseguras",
x = "Escala Territorial",
y = "Tasa de Inseguridad (%)",
fill = "Género"
) +
theme(
plot.title = element_text(face = "bold", size = 8),
plot.subtitle = element_text(size = 7, color = "gray30"),
axis.text = element_text(size = 7.5),
axis.title = element_text(size = 8),
legend.title = element_text(size = 8),
legend.text = element_text(size = 7),
legend.position = "bottom"
)
Figura 5. Percepción de inseguridad territorial según género del informante
Por otro lado, examino en la Tabla 6 cómo varía la percepción de riesgo según el estrato socioeconómico de la vivienda:
# 2. Brecha por Estrato en el Barrio y en la Ciudad
tabla_estrato_seg <- base %>%
filter(!is.na(estrato_cat), estrato_cat != "Sin estrato") %>%
group_by(`Estrato` = estrato_cat) %>%
summarise(
`Inseguridad Barrio (%)` = mean(sec_barrio %in% c("Inseguro", "Muy inseguro"), na.rm = TRUE) * 100,
`Inseguridad Ciudad (%)` = mean(sec_ciudad %in% c("Inseguro", "Muy inseguro"), na.rm = TRUE) * 100
)
tabla_dual(tabla_estrato_seg, "Tabla 6. Percepción de inseguridad en el barrio y en la ciudad según estrato socioeconómico", digitos = 1)
| Estrato | Inseguridad Barrio (%) | Inseguridad Ciudad (%) |
|---|---|---|
| Estrato 1 | 14.6 | 47.7 |
| Estrato 2 | 13.9 | 51.4 |
| Estrato 3 | 21.0 | 58.7 |
| Estrato 4 | 24.1 | 60.3 |
| Estrato 5 | 30.5 | 61.0 |
| Estrato 6 | 0.0 | 33.3 |
Análisis e interpretación de los resultados:
Al revisar la Tabla 5, la Figura 5 y la Tabla 6, encuentro dos patrones sobre cómo perciben el riesgo los habitantes de la ciudad:
Brecha de género en todas las escalas territoriales: Las mujeres sienten mayor inseguridad que los hombres en cualquier nivel geográfico evaluado. En el entorno cercano del barrio, el 18,3% de las mujeres manifiesta sentirse insegura frente al 14,3% de los hombres (una diferencia de 4,0 puntos porcentuales). En la comuna esta cifra sube a 21,6% en mujeres y 19,6% en hombres. La distancia más amplia se observa a nivel de toda la ciudad, donde el temor alcanza al 56,7% de las mujeres en comparación con el 48,0% de los hombres (8,7 puntos porcentuales más). Esto evidencia que transitar y habitar los espacios públicos genera una mayor sensación de vulnerabilidad en la población femenina.
La paradoja del estrato socioeconómico: Al examinar la Tabla 6, resalta un comportamiento ascendente: el temor aumenta conforme sube el estrato. En los estratos 1 y 2, la inseguridad en el barrio se mantiene baja, con 14,6% y 13,9%, respectivamente. Sin embargo, en el estrato 3 sube a 21,0%, en el estrato 4 llega a 24,1% y en el estrato 5 alcanza el 30,5%, duplicando el nivel de temor de los sectores populares (el estrato 6 marca 0,0% debido a que solo cuenta con 3 registros muestrales). Lo mismo ocurre al evaluar la ciudad completa: en el estrato 1 la inseguridad es del 47,7%, mientras que en los estratos 4 y 5 supera el 60% (60,3% y 61,0%).
Estos datos revelan que vivir en zonas de mayores ingresos o con cerramientos residenciales no reduce el miedo al delito, sino que coincide con una mayor percepción de riesgo. Este hallazgo servirá de contraste en la siguiente sección, donde revisaremos si la victimización real sigue este mismo patrón o si se comporta de manera inversa.
En esta sección analizo la dimensión objetiva de la seguridad
mediante el examen de los hechos delictivos sufridos directamente por
los informantes (P20A), el desglose de las modalidades de
hurto y el comportamiento de la denuncia institucional
(P26, P30). Asimismo, pongo a prueba la
hipótesis de la seguridad contrastando el riesgo real frente al temor
percibido.
A partir de la variable P20A, identifico que 948
personas sufrieron al menos un hecho delictivo en el último
año, lo que representa una tasa global de victimización del
20,2% sobre el total de la muestra (4.680 casos
válidos). El restante 79,8% (3.732 hogares) declaró no
haber sido objeto de delitos.
# Recodificación de modalidades según diccionario de variables
base <- base %>%
mutate(
tipo_delito = case_when(
P20A == 1 ~ "Hurto a personas",
P20A == 2 ~ "Hurto a residencias",
P20A == 3 ~ "Hurto al comercio",
P20A == 4 ~ "Hurto de vehículos/partes",
P20A == 5 ~ "Homicidio",
P20A == 6 ~ "Extorsión/vacunas",
P20A == 7 ~ "Lesiones personales",
P20A == 8 ~ "Vandalismo",
P20A == 9 ~ "Explosión petardos/granadas",
P20A == 10 ~ "Ninguno",
TRUE ~ NA_character_
),
es_victima = ifelse(P20A %in% 1:9, "Sí fue víctima", ifelse(P20A == 10, "No fue víctima", NA_character_)),
victima_num = ifelse(P20A %in% 1:9, 1, ifelse(P20A == 10, 0, NA_real_))
)
# Tabla 7. Desglose de delitos sufridos
tabla_modalidades <- base %>%
filter(!is.na(tipo_delito), tipo_delito != "Ninguno") %>%
count(tipo_delito) %>%
mutate(
`Participación (%)` = round((n / sum(n)) * 100, 1)
) %>%
arrange(desc(n)) %>%
rename(`Modalidad Delictiva` = tipo_delito, `Casos Reportados` = n)
tabla_dual(tabla_modalidades, "Tabla 7. Distribución de hechos delictivos reportados según modalidad (P20A)", digitos = 1)
| Modalidad Delictiva | Casos Reportados | Participación (%) |
|---|---|---|
| Hurto a personas | 528 | 56.1 |
| Hurto de vehículos/partes | 127 | 13.5 |
| Extorsión/vacunas | 121 | 12.9 |
| Hurto a residencias | 56 | 6.0 |
| Lesiones personales | 40 | 4.3 |
| Vandalismo | 38 | 4.0 |
| Hurto al comercio | 18 | 1.9 |
| Explosión petardos/granadas | 13 | 1.4 |
Para evaluar si los estratos más atemorizados son efectivamente los más afectados, construyo en la Figura 6 un gráfico de puntos y líneas (Lollipop chart) que compara en paralelo la tasa de victimización real con el porcentaje de inseguridad en la ciudad:
df_paradoja <- base %>%
filter(!is.na(estrato_cat), estrato_cat %in% paste("Estrato", 1:5)) %>%
group_by(Estrato = estrato_cat) %>%
summarise(
`Victimización Real` = round(mean(victima_num, na.rm = TRUE) * 100, 1),
`Inseguridad Percibida` = round(mean(sec_ciudad %in% c("Inseguro", "Muy inseguro"), na.rm = TRUE) * 100, 1)
) %>%
pivot_longer(cols = c(`Victimización Real`, `Inseguridad Percibida`), names_to = "Indicador", values_to = "Porcentaje")
ggplot(df_paradoja, aes(x = Estrato, y = Porcentaje, color = Indicador)) +
geom_line(aes(group = Indicador), linewidth = 0.8, alpha = 0.7) +
geom_point(size = 3.5) +
geom_text(aes(label = paste0(Porcentaje, "%")), vjust = -0.8, size = 2.4, show.legend = FALSE) +
scale_color_manual(values = c("Victimización Real" = "#2b5c8f", "Inseguridad Percibida" = "#d95f02")) +
scale_y_continuous(limits = c(0, 75), breaks = seq(0, 70, 15)) +
labs(
title = "Figura 6. Brecha entre victimización real e inseguridad subjetiva por estrato",
subtitle = "Tasa de victimización efectiva (P20A) frente a percepción de inseguridad urbana (P5)",
x = "Estrato Socioeconómico",
y = "Porcentaje (%)",
color = "Dimensión"
) +
theme(
plot.title = element_text(face = "bold", size = 8),
plot.subtitle = element_text(size = 7, color = "gray30"),
axis.text = element_text(size = 7.5),
axis.title = element_text(size = 8),
legend.title = element_text(size = 8),
legend.text = element_text(size = 7),
legend.position = "bottom"
)
Figura 6. Comparativo entre victimización real e inseguridad percibida según estrato
El impacto del delito no se agota en su ocurrencia: su procesamiento
judicial depende de la disposición de la víctima a denunciar. En el
módulo de hurto a personas (P26), de 570 víctimas directas
que detallaron el suceso, 348 personas decidieron no
denunciar frente a solo 222 que sí lo
hicieron, determinando una tasa de denuncia del
38,9% y una cifra negra del 61,1%.
# Tabla de motivos de no denuncia (P30)
recode_motivos <- function(x) {
case_when(
x == 1 ~ "Desconocía el proceso de denuncia",
x == 2 ~ "Miedo a represalias / amenazas",
x == 3 ~ "Las autoridades no hacen nada",
x == 4 ~ "Cercanía con el agresor (familiar/amigo)",
x == 5 ~ "Consideró el hecho innecesario",
x == 6 ~ "Trámites demorados y engorrosos",
x == 7 ~ "Falta de pruebas del hecho",
x == 996 ~ "Otro motivo",
TRUE ~ NA_character_
)
}
Para esquematizar el desgaste procesal desde el hecho delictivo hasta su reporte formal, presento en la Figura 7 un diagrama horizontal de embudo institucional:
n_muestra <- 4680
n_victimas <- sum(base$victima_num == 1, na.rm = TRUE)
n_modulo_p <- sum(base$P26 %in% c(1, 2), na.rm = TRUE)
n_denuncias <- sum(base$P26 == 1, na.rm = TRUE)
df_funnel <- data.frame(
Etapa = c("Total informantes",
"Víctimas de algún delito",
"Hurto a personas registrado",
"Denuncia formal instaurada"),
Casos = c(n_muestra, n_victimas, n_modulo_p, n_denuncias)
)
# Fijar orden decreciente en coord_flip
df_funnel$Etapa <- factor(df_funnel$Etapa, levels = rev(df_funnel$Etapa))
df_funnel$Porcentaje <- round((df_funnel$Casos / n_muestra) * 100, 1)
df_funnel$Rotulo <- paste0(df_funnel$Casos, " (", df_funnel$Porcentaje, "%)")
ggplot(df_funnel, aes(x = Etapa, y = Casos)) +
geom_segment(aes(x = Etapa, xend = Etapa, y = 0, yend = Casos), color = "gray75", linewidth = 1.2) +
geom_point(color = "#d95f02", size = 4.5) +
geom_text(
aes(label = Rotulo),
hjust = 0,
nudge_y = 150,
size = 2.4,
fontface = "bold",
color = "black"
) +
coord_flip() +
scale_y_continuous(limits = c(0, 6800), breaks = seq(0, 5000, 1000)) +
labs(
title = "Figura 7. Embudo procesal del hurto y pérdida de denuncia",
subtitle = "Atrición desde el universo muestral hasta la denuncia formal",
x = "Nivel del Proceso",
y = "Número de Personas"
) +
theme(
plot.title = element_text(face = "bold", size = 8),
plot.subtitle = element_text(size = 7, color = "gray30"),
axis.text = element_text(size = 7.5),
axis.title = element_text(size = 8)
)
Figura 7. Embudo procesal del delito de hurto y pérdida de denuncia
Análisis e interpretación de los resultados:
Al evaluar las Tablas 7 y 8 y las Figuras 6 y 7, identifico los rasgos estructurales del delito y la respuesta ciudadana en el territorio:
Concentración absoluta en el hurto callejero: En la Tabla 7, el Hurto a personas encabeza la victimización con 528 casos, absorbiendo más de la mitad del total de delitos reportados (56,1%). Le siguen el hurto de vehículos o autopartes con 127 hechos (13,5%) y las extorsiones o cobro de vacunas con 121 casos (12,9%). En menor magnitud figuran el hurto a residencias (56 casos, 6,0%), lesiones personales en riñas (40 casos, 4,3%) y vandalismo (38 casos, 4,0%). El hurto comercial y las detonaciones representan menos del 2% cada uno. La violencia delictiva directa que enfrenta la población se concentra primordialmente en el despojo cotidiano en el espacio público.
Comprobación empírica de la paradoja del miedo: La Figura 6 evidencia una marcada brecha entre el delito efectivo y la sensación subjetiva de inseguridad:
La victimización real presenta una fluctuación moderada a lo largo de la pirámide social: inicia en 16,9% en el Estrato 1, pasa al 19,6% en el Estrato 2, alcanza 23,9% en el Estrato 3, desciende al 20,6% en el Estrato 4 y sube al 26,8% en el Estrato 5 (con una variación máxima de 9,9 puntos porcentuales entre extremos).
En contraste, la percepción de inseguridad urbana se dispara desde un 47,7% en el Estrato 1 hasta un 61,0% en el Estrato 5.
En todos los niveles socioeconómicos, el miedo al crimen duplica o triplica la victimización fáctica: en el Estrato 1 la distancia es de 30,8 puntos porcentuales, y en el Estrato 5 se ensancha a 34,2 puntos. Esto confirma que el temor urbano no responde de manera proporcional a la probabilidad objetiva de ser asaltado, sino que se magnifica en los sectores con mayor patrimonio.
La cifra negra y el colapso de la confianza institucional: La Figura 7 sintetiza el desvanecimiento del delito frente al sistema penal: de 4.680 personas encuestadas, 941 sufrieron algún delito (20,1%), 570 completaron el módulo específico de hurto a personas (12,2%), y únicamente 222 lograron formalizar una denuncia ante la autoridad, equivalente al 4,7% de la muestra general o una tasa de reporte efectiva del 38,9% entre las víctimas directas.
Al revisar las razones de no denuncia en la Tabla 8, resalta el desincentivo institucional: 116 personas (33,3%) no denunciaron porque “las autoridades no hacen nada”, sumado a 38 víctimas que evitaron el proceso por trámites lentos y engorrosos (10,9%) y 45 por falta de pruebas (12,9%). En conjunto, más del 57% de las omisiones de denuncia están directamente vinculadas a la desconfianza o ineficacia percibida del aparato judicial, lo que deja más del 61% de los delitos cometidos en la completa invisibilidad penal.
Atendiendo a la especificación técnica del taller, el índice de
victimización se calcula considerando si el hogar fue víctima de al
menos uno de los delitos priorizados: Hurto a personas, Hurto a
residencias, Hurto comercial, Hurto de vehículos o Extorsión/vacunas
(P20A \(\in \{1, 2, 3, 4,
6\}\)), aplicando el factor de expansión muestral
(FACTOR)[cite: 1]:
\[\text{Índice de Victimización} = \frac{\sum_{i=1}^{4673} (P20A_i = 1) \times \text{FACTOR}_i}{\sum_{i=1}^{4673} \text{FACTOR}_i}\]
var_comuna <- names(base)[str_detect(names(base), regex("comuna", ignore_case = TRUE))][1]
base <- base %>%
mutate(
victima_taller = ifelse(P20A %in% c(1, 2, 3, 4, 6), 1, ifelse(P20A == 10, 0, 0))
)
tabla_comunas_pond <- base %>%
filter(!is.na(.data[[var_comuna]]), !is.na(P20A), !is.na(FACTOR)) %>%
group_by(Comuna = as.character(.data[[var_comuna]])) %>%
summarise(
`Muestra Encuestada` = n(),
`Hogares Expandidos` = round(sum(FACTOR), 0),
`Víctimas Expandidas` = round(sum(victima_taller * FACTOR), 0),
`Índice Victimización (%)` = round((sum(victima_taller * FACTOR) / sum(FACTOR)) * 100, 1)
) %>%
arrange(desc(`Índice Victimización (%)`))
tabla_dual(tabla_comunas_pond, "Tabla 9. Índice de victimización delictiva ponderado por comunas (factor de expansión)", digitos = 1)
| Comuna | Muestra Encuestada | Hogares Expandidos | Víctimas Expandidas | Índice Victimización (%) |
|---|---|---|---|---|
| 5 | 219 | 55058 | 15181 | 27.6 |
| 7 | 293 | 104998 | 24613 | 23.4 |
| 60 | 156 | 77100 | 17694 | 22.9 |
| 4 | 404 | 117239 | 26408 | 22.5 |
| 8 | 375 | 121643 | 26236 | 21.6 |
| 13 | 393 | 127799 | 26567 | 20.8 |
| 16 | 268 | 114549 | 23800 | 20.8 |
| 3 | 373 | 132806 | 27246 | 20.5 |
| 2 | 405 | 95494 | 18794 | 19.7 |
| 9 | 389 | 136528 | 25799 | 18.9 |
| 1 | 282 | 81305 | 14783 | 18.2 |
| 10 | 109 | 21386 | 3850 | 18.0 |
| 80 | 250 | 90910 | 15434 | 17.0 |
| 12 | 44 | 5379 | 813 | 15.1 |
| 90 | 31 | 1854 | 265 | 14.3 |
| 6 | 394 | 137127 | 18872 | 13.8 |
| 11 | 62 | 21749 | 2858 | 13.1 |
| 70 | 129 | 9058 | 1151 | 12.7 |
| 15 | 94 | 6859 | 773 | 11.3 |
| 50 | 3 | 59 | 0 | 0.0 |
df_comunas_plot <- tabla_comunas_pond %>%
rename(Comuna = 1, Tasa = `Índice Victimización (%)`) %>%
filter(!is.na(Comuna)) %>%
mutate(
Comuna = factor(Comuna, levels = Comuna[order(Tasa)]),
Comparacion = ifelse(Tasa >= 20.0, "Sobre el promedio", "Bajo el promedio")
)
ggplot(df_comunas_plot, aes(x = Comuna, y = Tasa, fill = Comparacion)) +
geom_col(width = 0.72) +
geom_hline(yintercept = 20.0, linetype = "dashed", color = "#c0392b", linewidth = 0.8) +
annotate("text", x = 3.5, y = 21.2, label = "Promedio Castellana: 20,0%",
color = "#c0392b", fontface = "bold", size = 2.8, hjust = 0) +
geom_text(aes(label = paste0(round(Tasa, 1), "%")),
hjust = -0.15, size = 2.4, color = "black", fontface = "bold") +
scale_fill_manual(values = c("Sobre el promedio" = "#2980b9", "Bajo el promedio" = "#95a5a6")) +
coord_flip() +
scale_y_continuous(limits = c(0, 32), breaks = seq(0, 30, 5)) +
labs(
title = "Figura 8. Heterogeneidad territorial de la victimización ponderada por comuna",
subtitle = "Línea punteada roja indica el umbral del promedio general de la ciudad (20,0%)",
x = "Comuna",
y = "Índice de Victimización Ponderado (%)",
fill = "Situación"
) +
theme(
plot.title = element_text(face = "bold", size = 8.5),
plot.subtitle = element_text(size = 7.5, color = "gray30"),
axis.text = element_text(size = 7.5),
axis.title = element_text(size = 8),
legend.position = "bottom",
legend.title = element_text(size = 7.5, face = "bold"),
legend.text = element_text(size = 7)
)
Figura 8. Tasa de victimización ponderada por comuna frente al promedio de la ciudad
Para verificar si la “paradoja de la seguridad” (Propuesta inicialmente con el objetivo de profundizar en el taller) se reproduce en la escala intraurbana, se contrasta la tasa objetiva de victimización ponderada de cada comuna frente a su nivel de temor en el espacio público (inseguridad en la comuna).
# Detectar la variable de percepción comunal
var_inseg_com <- names(base)[str_detect(names(base), regex("^(P11_2|P12_2|P12B|seg.*comuna|comuna.*seg)", ignore_case = TRUE))][1]
if(is.na(var_inseg_com)) var_inseg_com <- "P12_2"
df_paradoja_comunas <- base %>%
mutate(
victima_taller = ifelse(P20A %in% c(1, 2, 3, 4, 6), 1, ifelse(P20A == 10, 0, 0)),
inseguro_comuna = ifelse(.data[[var_inseg_com]] %in% c(2, "2", "Inseguro", "Muy inseguro", 3, "3"), 1, 0)
) %>%
filter(!is.na(.data[[var_comuna]]), !is.na(P20A), !is.na(FACTOR)) %>%
group_by(Comuna = as.character(.data[[var_comuna]])) %>%
summarise(
Muestra = n(),
Victimizacion = round((sum(victima_taller * FACTOR, na.rm = TRUE) / sum(FACTOR, na.rm = TRUE)) * 100, 1),
Temor_Comuna = round((sum(inseguro_comuna * FACTOR, na.rm = TRUE) / sum(FACTOR, na.rm = TRUE)) * 100, 1)
) %>%
filter(Muestra >= 30)
# Promedios de referencia
corte_x <- 20.0
corte_y <- round(mean(df_paradoja_comunas$Temor_Comuna, na.rm = TRUE), 1)
ggplot(df_paradoja_comunas, aes(x = Victimizacion, y = Temor_Comuna, label = Comuna)) +
geom_point(color = "#6B1724", size = 3.5, alpha = 0.9) +
geom_text(vjust = -0.7, hjust = 0.5, size = 3, fontface = "bold", color = "#2c3e50") +
geom_vline(xintercept = corte_x, linetype = "dashed", color = "#DAA520", linewidth = 0.8) +
geom_hline(yintercept = corte_y, linetype = "dashed", color = "#DAA520", linewidth = 0.8) +
scale_y_continuous(expand = expansion(mult = c(0.1, 0.18))) +
scale_x_continuous(expand = expansion(mult = c(0.08, 0.08))) +
labs(
title = "Figura 9. Cuadrantes de discrepancia: victimización real vs. percepción de inseguridad",
subtitle = paste0("Líneas punteadas doradas: Promedio Victimización (", corte_x, "%) | Promedio Temor Comunal (", corte_y, "%)"),
x = "Tasa de Victimización Ponderada (%)",
y = "Sensación de Inseguridad en la Comuna (%)"
) +
theme(
plot.title = element_text(face = "bold", size = 9, color = "#6B1724"),
plot.subtitle = element_text(size = 7.5, color = "gray30"),
axis.text = element_text(size = 7.5),
axis.title = element_text(size = 8)
)
Figura 9. Dispersión entre temor subjetivo comunal y victimización efectiva por unidad espacial
Interpretación de la paradoja territorial de la seguridad:
El análisis cruzado revela una clara desarticulación empírica entre el riesgo objetivo de victimización y la percepción subjetiva de amenaza en el entorno comunal:
Cuadrante superior izquierdo (Hipervigilancia y alarma subjetiva): Comunas como la 12, 11 y 15 exhiben tasas objetivas de victimización por debajo del promedio distrital (< 20,0%), pero registran los niveles más altos de sensación de inseguridad comunal (llegando al 19,1% en la Comuna 12). Esto responde a dinámicas de vulnerabilidad percibida y resonancia mediática de eventos delictivos aislados.
Cuadrante inferior derecho (Paradoja de normalización del riesgo): Unidades territoriales como las comunas 5, 60, 4, 8 y 7 presentan una incidencia delictiva crítica (> 20,0%, destacando la Comuna 5 con 27,6%), pero sus residentes reportan niveles de temor comunal inferiores al promedio urbano (< 7,6%). Este patrón evidencia un fenómeno de habituación cotidiana y tolerancia adaptativa frente a la exposición recurrente al delito.
Comunas de convergencia: La Comuna 16 representa el sector de mayor tensión combinada al ubicarse en el cuadrante superior derecho (alta victimización y elevado temor), demandando intervención prioritaria tanto en presencia policial como en recuperación del espacio público.
¿Cuál es el índice de victimización para la ciudad
Castellana?
El índice de victimización global ponderado para la ciudad Castellana es
del 20,0% (291.139 hogares expandidos víctimas sobre un
universo poblacional estimado de 1.458.900 hogares representados en
4.673 encuestas válidas).
¿Cuál es el índice de victimización por
comunas?
La tasa ponderada fluctúa entre el 0,0% y el
27,6%, tal como se detalla de manera jerárquica en la
Tabla 9 y la Figura 8.
¿En qué comuna es mayor este índice?
La tasa más alta se concentra en la Comuna 5, con un
índice de victimización ponderado del 27,6% (15.181
hogares afectados), seguida por la Comuna 7
(23,4%) y la Comuna 60
(23,0%).
¿En qué comuna menor?
El índice más bajo se registró en la Comuna 50
(0,0%, con 3 encuestas)[cite: 1]. Considerando unidades
territoriales con muestra robusta (\(N >
100\)), la tasa más baja corresponde a la Comuna
15 con un 11,3%, seguida de la Comuna
70 (12,7%) y la Comuna 11
(13,1%).
A partir de la triangulación empírica entre las condiciones socioeconómicas de los hogares, la estructura subjetiva del temor urbano y la victimización delictiva fáctica, presento las conclusiones estructurales del diagnóstico y los lineamientos de política pública orientados a fortalecer la gestión de la seguridad y la convivencia en el municipio.
Vulnerabilidad socioeconómica y estructura del hogar: La población encuestada se localiza predominantemente en estratos bajos (Estratos 1 al 3 concentran el 87,4%), caracterizados por una alta proporción de jefaturas de hogar femeninas, trabajadoras dedicadas al cuidado no remunerado y ocupaciones por cuenta propia. Esta composición evidencia una reducida capacidad de resiliencia económica frente a pérdidas patrimoniales causadas por hechos delictivos.
El gradiente territorial de la desconfianza: Se identificó una relación inversa entre proximidad física y temor al delito: mientras que en el barrio solo el 16,3% de los habitantes se siente inseguro, la inseguridad escala al 20,6% en la comuna y se multiplica drásticamente en la escala metropolitana hasta alcanzar el 52,5%. La cohesión comunitaria y el control social informal mitigan el temor vecinal, mientras que los traslados hacia el espacio urbano consolidado intensifican la sensación de amenaza.
Brecha de género en el uso del espacio público: Las mujeres reportan mayores niveles de alarma que los hombres en todas las dimensiones territoriales, con una distancia que se amplía en la ciudad global a 8,7 puntos porcentuales (56,7% en mujeres frente a 48,0% en hombres). Esto subraya que la experiencia de tránsito y permanencia urbana no es neutral y genera condiciones de vulnerabilidad diferenciadas para la población femenina.
La paradoja empírica de la seguridad: Al contrastar percepción y victimización, se constata que el temor subjetivo no guarda correspondencia lineal con el riesgo real de victimización. Mientras que la tasa efectiva de delito fluctúa en un margen estrecho entre estratos (del 16,9% en el Estrato 1 al 26,8% en el Estrato 5), la percepción de inseguridad urbana se intensifica de forma pronunciada en los estratos medios y altos (superando el 60% en estratos 4 y 5), demostrando una mayor sensibilidad al temor patrimonial en sectores de mayores ingresos.
Colapso del reporte formal y persistencia de la cifra negra: Con una tasa de denuncia de apenas el 38,9% frente al hurto a personas, más del 61% de los delitos ocurridos permanece fuera del radar institucional. El principal factor explicativo es el escepticismo ciudadano hacia el aparato estatal: un tercio de las víctimas no denunció porque considera que “las autoridades no hacen nada” (33,3%), a lo que se suman barreras de tiempo, trámites engorrosos y falta de elementos probatorios.
Intervención focalizada en corredores de hurto callejero: Dado que el hurto a personas absorbe el 56,1% del total de eventos delictivos, se debe priorizar el patrullaje preventivo y la videovigilancia inteligente en los corredores de transporte masivo, paraderos y nodos de articulación vial donde se genera la transición del entorno barrial seguro al entorno urbano desprotegido.
Modernización y descentralización del sistema de denuncias: Para mitigar la cifra oculta provocada por la desconfianza y la tramitología, es imperativo establecer unidades móviles de recepción de denuncia en sedes locales y puntos comunitarios, integrando mecanismos digitales ágiles con acompañamiento técnico que reduzcan los costos de transacción para la ciudadanía.
Urbanismo táctico y seguridad con enfoque de género: Implementar intervenciones físicas prioritarias en el entorno urbano (modernización del alumbrado público a tecnología LED, recuperación de senderos peatonales, eliminación de puntos ciegos y diseño de paraderos seguros) diseñadas a partir de mapas de calor de percepción de inseguridad femenina.
Fortalecimiento de la cohesión vecinal como activo de seguridad: La baja tasa de inseguridad en los barrios (16,3%) demuestra que las redes de apoyo comunitario funcionan como un blindaje efectivo. La política de seguridad distrital debe articularse formalmente con las juntas de acción comunal y organizaciones juveniles de base para preservar este capital social y evitar la fragmentación urbana.
El desarrollo de este informe se fundamenta en las indicaciones académicas de la asignatura dadas por el Dr. Jacobo Campo Robledo, el marco conceptual estándar para la medición de la seguridad ciudadana en Colombia, los fundamentos criminológicos sobre la cifra oculta del delito y la literatura especializada en análisis de datos reproducible, agrego este apartado de referencias con el fin de complemenytar un poco mas el trabajo:
En concordancia con las buenas prácticas de integridad académica y transparencia durante la clase, presento la siguiente declaracion de IA; se declara que para el desarrollo y afinamiento de este informe técnico se contó con el apoyo de Gemini (modelo de lenguaje de Google) como herramienta de asistencia y co-creación analítica.
El uso de esta herramienta se delimitó a las siguientes funciones:
Soporte técnico y depuración: Asistencia en la identificación y corrección de advertencias y errores de compilación durante el renderizado con knitr en RStudio.
Diseño y parametrización visual: Apoyo en la
optimización del diseño del documento mediante estilos CSS
personalizados, selección y contraste de paletas cromáticas,
estructuración de tarjetas ejecutivas de métricas clave (KPI) y
refinamiento estético de las visualizaciones generadas con
ggplot2.
Estructuración y completitud metodológica: Revisión de la cohesión narrativa del reporte y optimización de sintaxis en R para garantizar la cobertura exhaustiva de las dimensiones del taller.
Responsabilidad del autor:
El autor revisó, validó, editó y ejecutó de manera autónoma e
independiente la totalidad del código fuente, las operaciones
estadísticas, la interpretación de las tablas y las reflexiones teóricas
presentadas en este informe. Los cálculos finales, la coherencia de los
resultados ponderados y las conclusiones de política pública son de
exclusiva responsabilidad del autor.
Trabajo elaborado como Taller II - Big Data y Análisis de Datos - Universidad Católica de Colombia - Dr. Jacobo Campo Robledo - Septiembre 17
Autor:
knitr::include_graphics("C:/Users/s12e10/Downloads/EJERCICIO/Background Eraser (1).png")