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/s12e13/Downloads/2. bases_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
La base combinada queda con 4673 registros (encuestas) y 422
variables, resultado de unir BD1.xlsx (caracterización
sociodemográfica) y BD2.xlsx (percepción de seguridad,
victimización y confianza institucional) mediante la llave
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 se analiza cómo se sienten los encuestados en su
barrio (P1), su comuna (P3) y la ciudad en
general (P5), y si esa percepción cambia según el género o
el estrato del encuestado.
percepcion_larga <- base %>%
select(P1_lab, P3_lab, P5_lab) %>%
pivot_longer(everything(), names_to = "Nivel", values_to = "Percepcion") %>%
mutate(Nivel = recode(Nivel, P1_lab = "Barrio", P3_lab = "Comuna", P5_lab = "Ciudad"),
Nivel = factor(Nivel, levels = c("Barrio", "Comuna", "Ciudad")))
tab_percepcion <- percepcion_larga %>%
filter(!is.na(Percepcion)) %>%
count(Nivel, Percepcion) %>%
group_by(Nivel) %>%
mutate(Porcentaje = percent(n / sum(n), accuracy = 0.1)) %>%
ungroup()
tabla_dual(tab_percepcion, "Percepción de seguridad por nivel geográfico (barrio, comuna, ciudad)")
| Nivel | Percepcion | n | Porcentaje |
|---|---|---|---|
| Barrio | Muy seguro | 484 | 10.4% |
| Barrio | Seguro | 3426 | 73.3% |
| Barrio | Inseguro | 642 | 13.7% |
| Barrio | Muy inseguro | 121 | 2.6% |
| Comuna | Muy seguro | 347 | 7.4% |
| Comuna | Seguro | 3363 | 72.0% |
| Comuna | Inseguro | 773 | 16.5% |
| Comuna | Muy inseguro | 190 | 4.1% |
| Ciudad | Muy seguro | 193 | 4.1% |
| Ciudad | Seguro | 2029 | 43.4% |
| Ciudad | Inseguro | 1923 | 41.2% |
| Ciudad | Muy inseguro | 528 | 11.3% |
ggplot(percepcion_larga %>% filter(!is.na(Percepcion)),
aes(x = Nivel, fill = Percepcion)) +
geom_bar(position = "fill") +
scale_y_continuous(labels = percent) +
scale_fill_manual(values = colores_seguridad) +
labs(x = NULL, y = "Porcentaje", fill = "Percepción",
caption = "Fuente: elaboración propia a partir de BD1 y BD2.")
Percepción de seguridad: barrio, comuna y ciudad
Interpretación: la percepción de inseguridad (suma de “Inseguro” y “Muy inseguro”) aumenta claramente entre más se aleja el encuestado de su entorno cercano: en el barrio es del 16,3%, en la comuna sube a 20,6% y en la ciudad se dispara a 52,5%. En otras palabras, más de la mitad de los encuestados se siente insegura en la ciudad en general, mientras que en su propio barrio la mayoría (83,7%) se siente segura o muy segura. Esto es consistente con el patrón habitual en encuestas de percepción de seguridad, donde el entorno cercano y conocido genera más confianza que el espacio urbano amplio.
tab_perc_genero <- base %>%
filter(!is.na(P1_lab)) %>%
count(Genero, P1_lab) %>%
group_by(Genero) %>%
mutate(Porcentaje = percent(n / sum(n), accuracy = 0.1)) %>%
ungroup()
tabla_dual(tab_perc_genero, "Percepción de seguridad en el barrio según género")
| Genero | P1_lab | n | 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(base %>% filter(!is.na(P1_lab)), aes(x = Genero, fill = P1_lab)) +
geom_bar(position = "fill") +
scale_y_continuous(labels = percent) +
scale_fill_manual(values = colores_seguridad) +
labs(x = NULL, y = "Porcentaje", fill = "Percepción",
caption = "Fuente: elaboración propia a partir de BD1 y BD2.")
Percepción de seguridad en el barrio por género
Interpretación: las mujeres reportan una percepción de inseguridad en el barrio ligeramente mayor que los hombres: el 18,3% de las mujeres se siente “Inseguro” o “Muy inseguro” (15,1% + 3,2%), frente a 14,3% de los hombres (12,4% + 1,9%). Aunque la diferencia no es enorme, es consistente y muestra una mayor sensación de vulnerabilidad entre las mujeres encuestadas.
tab_perc_estrato <- base %>%
filter(!is.na(P1_lab)) %>%
count(Estrato, P1_lab) %>%
group_by(Estrato) %>%
mutate(Porcentaje = percent(n / sum(n), accuracy = 0.1)) %>%
ungroup()
tabla_dual(tab_perc_estrato, "Percepción de seguridad en el barrio según estrato")
| Estrato | P1_lab | n | 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% |
| Sin estrato | Muy seguro | 51 | 13.2% |
| Sin estrato | Seguro | 292 | 75.6% |
| Sin estrato | Inseguro | 34 | 8.8% |
| Sin estrato | Muy inseguro | 9 | 2.3% |
ggplot(base %>% filter(!is.na(P1_lab)), aes(x = Estrato, fill = P1_lab)) +
geom_bar(position = "fill") +
scale_y_continuous(labels = percent) +
scale_fill_manual(values = colores_seguridad) +
labs(x = NULL, y = "Porcentaje", fill = "Percepción",
caption = "Fuente: elaboración propia a partir de BD1 y BD2.") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Percepción de seguridad en el barrio por estrato
Interpretación: la percepción de inseguridad en el barrio (suma de “Inseguro” y “Muy inseguro”) tiende a aumentar a medida que sube el estrato: pasa de 14,6% en Estrato 1 y 13,9% en Estrato 2, a 21,0% en Estrato 3, 24,1% en Estrato 4 y 30,5% en Estrato 5. El Estrato 6 no es representativo por su tamaño de muestra tan pequeño (solo 3 encuestados). Este patrón —mayor percepción de inseguridad en estratos más altos— puede parecer contraintuitivo, pero es un hallazgo frecuente en este tipo de encuestas y suele asociarse a percepciones más exigentes de seguridad o a una menor habituación a ciertos riesgos del entorno urbano.
El índice de victimización identifica si un hogar ha sido víctima de
por lo menos uno de los siguientes delitos: hurto a personas, hurto a
residencias, hurto a establecimientos comerciales, hurto de vehículos o
extorsiones/vacunas (pregunta P20A). Su fórmula, ponderada
por el factor de expansión (FACTOR), es:
\[ \text{Índice de Victimización} = \frac{\sum_{i=1}^{4.673}\big(P20A_i \in \{\text{delitos considerados}\}\big) \times (\text{factor de ponderación}_i)}{\sum_{i=1}^{4.673}(\text{factor de ponderación}_i)} \]
# Delitos que cuentan como victimización (Hurto a personas, Hurto a
# residencias, Hurto a establecimientos comerciales, Hurto de vehículos,
# Extorsiones/Vacunas), según los códigos de P20A en el diccionario de datos.
delitos_victimizacion <- c(1, 2, 3, 4, 6)
base <- base %>%
mutate(Victima = if_else(P20A %in% delitos_victimizacion, 1, 0))
# i. Índice para toda la ciudad
indice_ciudad <- base %>%
summarise(
Indice = sum(Victima * FACTOR, na.rm = TRUE) / sum(FACTOR, na.rm = TRUE)
) %>%
mutate(Indice_pct = percent(Indice, accuracy = 0.1))
tabla_dual(indice_ciudad, "Índice de victimización - ciudad Castellana")
| Indice | Indice_pct |
|---|---|
| 0.2 | 20.0% |
i. Índice de victimización para la ciudad Castellana: 20.0%. Esto significa que, ponderando por el factor de expansión, aproximadamente 1 de cada 5 hogares de la ciudad Castellana ha sido víctima de al menos uno de los delitos considerados (hurto a personas, hurto a residencias, hurto a establecimientos comerciales, hurto de vehículos o extorsión/vacuna).
# ii. Índice de victimización por comuna
indice_comuna <- base %>%
group_by(COMUNA) %>%
summarise(
Indice = sum(Victima * FACTOR, na.rm = TRUE) / sum(FACTOR, na.rm = TRUE)
) %>%
mutate(Indice_pct = percent(Indice, accuracy = 0.1)) %>%
arrange(desc(Indice))
tabla_dual(indice_comuna, "Índice de victimización por comuna")
| COMUNA | Indice | Indice_pct |
|---|---|---|
| 5 | 0.28 | 27.6% |
| 7 | 0.23 | 23.4% |
| 60 | 0.23 | 22.9% |
| 4 | 0.23 | 22.5% |
| 8 | 0.22 | 21.6% |
| 13 | 0.21 | 20.8% |
| 16 | 0.21 | 20.8% |
| 3 | 0.21 | 20.5% |
| 2 | 0.20 | 19.7% |
| 9 | 0.19 | 18.9% |
| 1 | 0.18 | 18.2% |
| 10 | 0.18 | 18.0% |
| 80 | 0.17 | 17.0% |
| 12 | 0.15 | 15.1% |
| 90 | 0.14 | 14.3% |
| 6 | 0.14 | 13.8% |
| 11 | 0.13 | 13.1% |
| 70 | 0.13 | 12.7% |
| 15 | 0.11 | 11.3% |
| 50 | 0.00 | 0.0% |
ii. Índice de victimización por comunas: la tabla anterior está ordenada de mayor a menor. Se observa una dispersión considerable entre comunas: los valores van desde comunas con índices superiores al 27% hasta comunas por debajo del 13%, lo que indica que la victimización no se distribuye de forma homogénea en la ciudad Castellana.
ggplot(indice_comuna, aes(x = fct_reorder(as.factor(COMUNA), Indice), y = Indice)) +
geom_col(fill = "#C0392B") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(x = "Comuna", y = "Índice de victimización",
caption = "Fuente: elaboración propia a partir de BD1 y BD2.")
Índice de victimización por comuna
comuna_max <- indice_comuna %>% slice_max(Indice, n = 1)
comuna_min <- indice_comuna %>% slice_min(Indice, n = 1)
iii. Comuna con mayor índice de victimización: la comuna 5, con un índice de 27.6%.
iv. Comuna con menor índice de victimización: la comuna 50, con un índice de 0.0%. Es importante señalar que esta comuna tiene muy pocos encuestados en la muestra, por lo que su índice debe interpretarse con cautela y no necesariamente refleja la situación real de victimización en esa zona.