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/s12e07/Documents/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
[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 de seguridad de los encuestados en su barrio de residencia. La información permite identificar cómo valoran las personas las condiciones de seguridad de su entorno más cercano, así como observar la proporción de encuestados que perciben su barrio como 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(
"#3D2314", # marrón oscuro (café intenso)
"#8B5A2B", # marrón medio (canela)
"#C89D7C", # marrón claro (beige cálido)
"#F5EBE6" # marrón muy claro (crema)
)
) +
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 presenta la percepción actual de seguridad de los encuestados en su comuna de residencia. Este resultado permite analizar cómo se percibe la seguridad en un ámbito territorial más amplio que el barrio, facilitando la identificación de posibles diferencias en la percepción de seguridad según el nivel de proximidad al entorno evaluado
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(
"#4A1521", # vino / borgoña muy oscuro
"#7A2E22", # terracota rojizo medio
"#C87D55", # marrón arcilla claro
"#F4E3D7" # crema cálido / beige suave
)
) +
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
)
)
### Percepción Actual de la Seguridad en la Cuidad
La Figura 7 presenta la percepción actual de seguridad de los encuestados en la ciudad. Este indicador permite analizar cómo los ciudadanos valoran las condiciones generales de seguridad en el ámbito urbano y contrastar esta percepción con la registrada en espacios de menor escala, como 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 la percepción de seguridad de los encuestados en tres niveles territoriales: barrio, comuna y ciudad. Esta comparación permite observar cómo varía la percepción de seguridad según el ámbito geográfico evaluado y facilita el análisis de las diferencias entre el entorno más cercano y la percepción del contexto urbano en 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" = "#FCE8EC", # crema rosado / rosa muy claro
"Seguro" = "#D88399", # palo de rosa / rosa pálido
"Inseguro" = "#9E2A4B", # rosa viejo / magenta sobrio
"Muy inseguro" = "#4A1525" # borgoña / rosa vino muy oscuro
)
) +
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 significa que aproximadamente 22 de cada 100 hogares reportaron haber sido víctimas de al menos un delito durante el período de referencia. Este resultado permite dimensionar la proporción de hogares afectados por hechos delictivos dentro de la población estudiada.
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 correspondiente a cada comuna. Los resultados permiten observar diferencias en la proporción de hogares que reportaron haber sido víctimas de al menos un delito. Las comunas con valores más altos presentan una mayor proporción de hogares victimizados, mientras que aquellas con valores más bajos registran una menor proporción 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%. Este resultado indica que, frente a las demás comunas de la ciudad de Castellana, esta 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%. Este resultado indica que, dentro de la muestra analizada, no se reportaron hogares víctimas de al menos un delito en esta comuna durante el período de referencia.
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 = "#FCE8EC",
high = "#800935"
) +
labs(
title = "Figura 9. Í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
)
)