El ejercicio utiliza dos bases de encuesta que deben combinarse
mediante la variable REGISTRO, junto con un diccionario de
datos. Cada registro corresponde a una encuesta realizada a un jefe de
hogar. El propósito es caracterizar social y económicamente a la
población, analizar la percepción de seguridad en el barrio, la comuna y
la ciudad, y calcular un índice ponderado de victimización.
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.
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/s12e09/Desktop/base diccionario")
bd1 <- read_excel("BD1.xlsx")
bd2 <- read_excel("BD2.xlsx")
dic_info <- read_excel("DICCIONARIO_DATOS.xlsx", sheet = "información_variables")
dic_valores <- read_excel("DICCIONARIO_DATOS.xlsx", sheet = "valores_variables")
# Verificamos que REGISTRO sea una llave única antes de unir las bases.
if (anyDuplicated(bd1$REGISTRO) > 0 || anyDuplicated(bd2$REGISTRO) > 0) {
stop("REGISTRO no es único en alguna de las bases. Revise la llave antes de hacer el merge.")
}
base <- inner_join(bd1, bd2, by = "REGISTRO")
dim(base)
## [1] 4673 422
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"))
)
La Figura 5 presenta la percepción actual de seguridad en el barrio de residencia de los encuestados. Los resultados permiten identificar el nivel de seguridad percibido en el entorno más cercano y determinar la proporción de personas que consideran su barrio seguro o inseguro.
barrio_tab <- base %>%
count(P1_lab) %>%
mutate(
Porcentaje = round(n/sum(n)*100,1)
)
ggplot(
barrio_tab,
aes(
x = P1_lab,
y = Porcentaje,
fill = P1_lab
)
) +
geom_col(width = 0.75) +
geom_text(
aes(label = paste0(Porcentaje,"%")),
vjust = -0.3,
fontface = "bold"
) +
scale_fill_manual(
values = c(
"#003049", # azul oscuro
"#669BBC", # azul medio
"#A8DADC", # azul claro
"#E9F5F9" # azul muy claro
)
) +
labs(
title = "Figura 5. Percepción Actual de Seguridad en el Barrio",
x = "",
y = "Porcentaje (%)"
) +
theme_minimal() +
theme(
legend.position = "none",
plot.title = element_text(
face = "bold",
hjust = 0.5
)
)
La Figura 6 muestra la percepción actual de seguridad en la comuna. Este resultado permite comparar la sensación de seguridad cuando los encuestados evalúan un territorio más amplio que su barrio de residencia.
comuna_tab <- base %>%
count(P3_lab) %>%
mutate(
Porcentaje = round(n/sum(n)*100,1)
)
ggplot(
comuna_tab,
aes(
x = P3_lab,
y = Porcentaje,
fill = P3_lab
)
) +
geom_col(width = 0.75) +
geom_text(
aes(label = paste0(Porcentaje,"%")),
vjust = -0.3,
fontface = "bold"
) +
scale_fill_manual(
values = c(
"#264653", # azul petróleo
"#2A9D8F", # verde azulado
"#E9C46A", # amarillo suave
"#E76F51" # naranja coral
)
) +
labs(
title = "Figura 6. Percepción Actual de Seguridad en la Comuna",
x = "",
y = "Porcentaje (%)"
) +
theme_minimal() +
theme(
legend.position = "none",
plot.title = element_text(
face = "bold",
hjust = 0.5
)
)
La Figura 7 presenta la percepción actual de seguridad en la ciudad. Este indicador permite identificar cómo los ciudadanos valoran las condiciones generales de seguridad a escala urbana y compararlas con las percepciones reportadas para el barrio y la comuna.
ciudad_tab <- base %>%
count(P5_lab) %>%
mutate(
Porcentaje = round(n/sum(n)*100,1)
)
ggplot(
ciudad_tab,
aes(
x = P5_lab,
y = Porcentaje,
fill = P5_lab
)
) +
geom_col(width = 0.75) +
geom_text(
aes(label = paste0(Porcentaje,"%")),
vjust = -0.3,
fontface = "bold"
) +
scale_fill_manual(
values = c(
"#3A0CA3",
"#4361EE",
"#4CC9F0",
"#BDE0FE"
)
) +
labs(
title = "Figura 7. Percepción Actual de Seguridad en la Ciudad",
x = "",
y = "Porcentaje (%)"
) +
theme_minimal() +
theme(
legend.position = "none",
plot.title = element_text(
face = "bold",
hjust = 0.5
)
)
La Figura 8 compara simultáneamente la percepción de seguridad en el barrio, la comuna y la ciudad. El análisis permite identificar cambios en la sensación de seguridad a medida que aumenta la escala territorial evaluada y facilita la identificación de posibles diferencias entre el entorno inmediato y el contexto urbano general.
seguridad <- base %>%
select(P1_lab, P3_lab, P5_lab) %>%
pivot_longer(
everything(),
names_to = "Territorio",
values_to = "Percepcion"
)
seguridad$Territorio <- factor(
seguridad$Territorio,
levels = c("P1_lab","P3_lab","P5_lab"),
labels = c("Barrio","Comuna","Ciudad")
)
ggplot(
seguridad,
aes(
x = Territorio,
fill = Percepcion
)
) +
geom_bar(position = "fill") +
scale_y_continuous(labels = scales::percent) +
scale_fill_manual(
values = c(
"Muy seguro" = "#264653", # azul petróleo
"Seguro" = "#2A9D8F", # verde azulado
"Inseguro" = "#E9C46A", # amarillo suave
"Muy inseguro" = "#E76F51" # naranja coral
)
) +
labs(
title = "Figura 8. Comparación de la Percepción de Seguridad",
x = "",
y = "Porcentaje"
) +
theme_minimal() +
theme(
legend.title = element_blank(),
plot.title = element_text(
face = "bold",
hjust = 0.5
)
)
El índice de victimización de la ciudad de Castellana fue de 22.2%, lo que indica que aproximadamente 22 de cada 100 hogares reportaron haber sido víctimas de al menos un delito durante el período de referencia.
base <- base %>%
mutate(
victima = ifelse(P20A == 10, 0, 1)
)
library(knitr)
indice_ciudad <- base %>%
summarise(
`Índice de victimización (%)` =
sum(victima * FACTOR, na.rm = TRUE) /
sum(FACTOR, na.rm = TRUE) * 100
) %>%
mutate(
`Índice de victimización (%)` =
round(`Índice de victimización (%)`, 1)
)
kable(
indice_ciudad,
caption = "Tabla 1. Índice de victimización de la ciudad de Castellana"
)
| Índice de victimización (%) |
|---|
| 22.2 |
La tabla presenta el índice de victimización por comuna. Se observa que las comunas con mayores valores registran una mayor proporción de hogares víctimas de al menos un delito, mientras que las comunas con menores valores presentan una menor incidencia de victimización.
library(dplyr)
library(knitr)
indice_comuna <- base %>%
group_by(COMUNA) %>%
summarise(
`Índice de victimización (%)` =
sum(victima * FACTOR, na.rm = TRUE) /
sum(FACTOR, na.rm = TRUE) * 100
) %>%
mutate(
`Índice de victimización (%)` =
round(`Índice de victimización (%)`, 1)
) %>%
arrange(desc(`Índice de victimización (%)`))
kable(
indice_comuna,
caption = "Tabla 2. Índice de victimización por comuna"
)
| COMUNA | Índice de victimización (%) |
|---|---|
| 5 | 27.7 |
| 7 | 24.9 |
| 8 | 24.2 |
| 60 | 24.2 |
| 1 | 23.7 |
| 80 | 23.0 |
| 3 | 22.9 |
| 4 | 22.9 |
| 9 | 22.7 |
| 16 | 22.4 |
| 11 | 22.1 |
| 13 | 21.7 |
| 2 | 20.2 |
| 10 | 20.0 |
| 6 | 15.3 |
| 12 | 15.1 |
| 90 | 15.1 |
| 70 | 13.1 |
| 15 | 11.4 |
| 50 | 0.0 |
La comuna 5 registró el mayor índice de victimización, con un valor de 27.7%. Esto indica que, en comparación con las demás comunas de la ciudad de Castellana, presenta la mayor proporción de hogares que reportaron haber sido víctimas de al menos un delito durante el período de referencia.
comuna_mayor <- indice_comuna %>%
slice_max(`Índice de victimización (%)`, n = 1)
library(knitr)
comuna_mayor %>%
mutate(
`Índice de victimización (%)` =
round(`Índice de victimización (%)`, 1)
) %>%
kable(
col.names = c("Comuna", "Índice de victimización (%)"),
caption = "Tabla 3. Comuna con mayor índice de victimización"
)
| Comuna | Índice de victimización (%) |
|---|---|
| 5 | 27.7 |
La comuna 50 registró el menor índice de victimización, con un valor de 0%, lo que indica una menor proporción de hogares víctimas de al menos un delito en comparación con las demás comunas evaluadas.
library(dplyr)
library(knitr)
comuna_menor <- indice_comuna %>%
slice_min(`Índice de victimización (%)`, n = 1)
comuna_menor %>%
mutate(
`Índice de victimización (%)` =
round(`Índice de victimización (%)`, 1)
) %>%
kable(
col.names = c("Comuna", "Índice de victimización (%)"),
caption = "Tabla 4. Comuna con menor índice de victimización"
)
| Comuna | Índice de victimización (%) |
|---|---|
| 50 | 0 |
library(ggplot2)
ggplot(
indice_comuna,
aes(
x = reorder(as.factor(COMUNA), `Índice de victimización (%)`),
y = `Índice de victimización (%)`,
fill = `Índice de victimización (%)`
)
) +
geom_col(width = 0.75) +
geom_text(
aes(label = round(`Índice de victimización (%)`, 1)),
hjust = -0.2,
fontface = "bold"
) +
coord_flip() +
scale_fill_gradient(
low = "#A8DADC",
high = "#264653"
) +
labs(
title = "Índice de Victimización por Comuna",
x = "Comuna",
y = "Índice de victimización (%)"
) +
theme_minimal() +
theme(
legend.position = "none",
plot.title = element_text(
face = "bold",
hjust = 0.5
)
)
UNIVERSIDAD CATÓLICA DE COLOMBIA
Elaborado por
Nicole Eliana Jiménez Varón
Bogotá D. C.
2025