Taller 2 Desarrollado

Estudiante : Judith Eliana Ramos Sanchez - Norman Mauricio Triana

Directorio de trabajo

setwd(“C:/Users/judith.ramos/OneDrive - SEMILLAS ELITE DE PALMA PARA LAS AMÉRICAS S.A.S/Escritorio/Taller 2 R”)

library(tidyverse) library(readxl) library(knitr) library(ggplot)

###install.packages("tinytex")
####tinytex::install_tinytex()
####install.packages("ggplot")
####install.packages("tidyverse")



library(tidyverse)
library(readxl)
library(knitr)
# 1. Carga de datos y unión:
bd1 <- read_excel("BD1.xlsx")
bd2 <- read_excel("BD2.xlsx")
base_completa <- left_join(bd1, bd2, by = "REGISTRO")
# 2. Estructura unificada:
##### Punto A
base_analisis <- base_completa %>%
  mutate(
    # A) Género
    genero_txt = case_when(
      GENERO == 1 ~ "Masculino",
      GENERO == 2 ~ "Femenino",
      TRUE ~ "No informa"
    ),
    
    # B) Estrato (usando la columna real ESTRATO_DEC)
    estrato_txt = 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",
      TRUE ~ "Sin Estrato / No Sabe"
    ),
    
    # C) Edad (limpiando códigos del sistema como 999)
    edad_num = if_else(PC_EDAD == 999, NA_real_, as.numeric(PC_EDAD)),
    
    # D) Ocupación (según las etiquetas del diccionario de datos)
    ocupacion_txt = case_when(
      PD == 1 ~ "Empleado",
      PD == 2 ~ "Independiente",
      PD == 3 ~ "Jubilado",
      PD == 4 ~ "Desempleado",
      PD == 5 ~ "Ama de Casa",
      PD == 6 ~ "Estudiante",
      TRUE ~ "Otra / No Responde"
    )
  ) %>%
  # Filtramos los datos sin estrato para limpiar las tablas y gráficos
  filter(estrato_txt != "Sin Estrato / No Sabe")

# TABLA NUMERADA # 1

tabla_caracterizacion <- base_analisis %>%
  group_by(estrato_txt, ocupacion_txt, genero_txt) %>%
  summarise(
    Cantidad_Hogares = n(),
    Edad_Promedio    = mean(edad_num, na.rm = TRUE),
    .groups = 'drop'
  )

kable(tabla_caracterizacion, digits = 1,
      caption = "Tabla 1: Caracterización Socioeconómica de los jefes de hogar", 
      booktabs = TRUE)
Tabla 1: Caracterización Socioeconómica de los jefes de hogar
estrato_txt ocupacion_txt genero_txt Cantidad_Hogares Edad_Promedio
Estrato 1 Ama de Casa Femenino 243 48.8
Estrato 1 Desempleado Femenino 18 38.2
Estrato 1 Desempleado Masculino 62 42.4
Estrato 1 Empleado Femenino 59 32.8
Estrato 1 Empleado Masculino 114 34.3
Estrato 1 Estudiante Femenino 18 18.9
Estrato 1 Estudiante Masculino 37 18.7
Estrato 1 Independiente Femenino 56 39.3
Estrato 1 Independiente Masculino 100 45.0
Estrato 1 Jubilado Femenino 4 71.0
Estrato 1 Jubilado Masculino 16 67.6
Estrato 1 Otra / No Responde Femenino 6 35.5
Estrato 1 Otra / No Responde Masculino 20 49.9
Estrato 2 Ama de Casa Femenino 590 53.7
Estrato 2 Ama de Casa Masculino 7 44.3
Estrato 2 Desempleado Femenino 48 40.5
Estrato 2 Desempleado Masculino 143 52.7
Estrato 2 Empleado Femenino 167 37.2
Estrato 2 Empleado Masculino 343 36.8
Estrato 2 Estudiante Femenino 54 20.9
Estrato 2 Estudiante Masculino 84 19.5
Estrato 2 Independiente Femenino 144 43.0
Estrato 2 Independiente Masculino 267 44.1
Estrato 2 Jubilado Femenino 32 68.5
Estrato 2 Jubilado Masculino 97 68.1
Estrato 2 Otra / No Responde Femenino 16 59.3
Estrato 2 Otra / No Responde Masculino 34 59.8
Estrato 3 Ama de Casa Femenino 340 58.9
Estrato 3 Ama de Casa Masculino 6 60.0
Estrato 3 Desempleado Femenino 21 38.5
Estrato 3 Desempleado Masculino 80 52.5
Estrato 3 Empleado Femenino 94 38.4
Estrato 3 Empleado Masculino 191 40.8
Estrato 3 Estudiante Femenino 29 19.6
Estrato 3 Estudiante Masculino 47 20.1
Estrato 3 Independiente Femenino 108 47.6
Estrato 3 Independiente Masculino 192 48.0
Estrato 3 Jubilado Femenino 41 67.8
Estrato 3 Jubilado Masculino 109 69.4
Estrato 3 Otra / No Responde Femenino 5 56.2
Estrato 3 Otra / No Responde Masculino 19 57.3
Estrato 4 Ama de Casa Femenino 34 58.5
Estrato 4 Desempleado Femenino 3 31.0
Estrato 4 Desempleado Masculino 6 56.5
Estrato 4 Empleado Femenino 12 43.3
Estrato 4 Empleado Masculino 20 46.0
Estrato 4 Estudiante Femenino 3 19.3
Estrato 4 Estudiante Masculino 4 20.5
Estrato 4 Independiente Femenino 11 44.7
Estrato 4 Independiente Masculino 26 45.6
Estrato 4 Jubilado Femenino 4 74.5
Estrato 4 Jubilado Masculino 15 69.1
Estrato 4 Otra / No Responde Femenino 1 18.0
Estrato 4 Otra / No Responde Masculino 2 68.0
Estrato 5 Ama de Casa Femenino 14 65.4
Estrato 5 Ama de Casa Masculino 1 59.0
Estrato 5 Desempleado Masculino 1 85.0
Estrato 5 Empleado Femenino 8 40.6
Estrato 5 Empleado Masculino 15 44.6
Estrato 5 Estudiante Femenino 2 21.5
Estrato 5 Estudiante Masculino 1 28.0
Estrato 5 Independiente Femenino 6 49.7
Estrato 5 Independiente Masculino 14 54.3
Estrato 5 Jubilado Femenino 4 66.8
Estrato 5 Jubilado Masculino 15 69.1
Estrato 5 Otra / No Responde Masculino 1 82.0
Estrato 6 Ama de Casa Femenino 1 50.0
Estrato 6 Empleado Femenino 1 45.0
Estrato 6 Independiente Masculino 1 18.0
# =========================================================================
# GRÁFICA 1: OCUPACIÓN
# =========================================================================

ggplot(base_analisis, aes(x = ocupacion_txt, fill = ocupacion_txt)) +
  geom_bar() +
  labs(
    title = "Gráfica 1: Distribución según la Ocupación Actual",
    x = "Ocupación",
    y = "Cantidad de Encuestados",
    caption = "Fuente: Elaboración propia a partir de datos de la encuesta."
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1), legend.position = "none")

# =========================================================================
# GRÁFICA 2: ESTRATO Y GÉNERO
# =========================================================================
ggplot(base_analisis, aes(x = estrato_txt, fill = genero_txt)) +
  geom_bar(position = "dodge") +
  labs(
    title = "Gráfica 2: Distribución por Estrato Socioeconómico y Género",
    x = "Estrato",
    y = "Cantidad de Hogares",
    fill = "Género",
    caption = "Fuente: Elaboración propia a partir de datos de la encuesta."
  ) +
  theme_minimal()

##### Punto B

# 2. Definicion de Variables: 
mis_niveles <- c("Muy seguro", "Seguro", "Inseguro", "Muy inseguro", "No responde")

# 3. Codificar variables nuevas:
base_analisis <- base_completa %>%
  mutate(
    # Percepción en el Barrio (P1)
    percepcion_barrio = case_when(
      P1 == 1 ~ "Muy seguro",
      P1 == 2 ~ "Seguro",
      P1 == 3 ~ "Inseguro",
      P1 == 4 ~ "Muy inseguro",
      TRUE ~ "No responde"
    ),
    # Percepción en la Comuna (P3)
    percepcion_comuna = case_when(
      P3 == 1 ~ "Muy seguro",
      P3 == 2 ~ "Seguro",
      P3 == 3 ~ "Inseguro",
      P3 == 4 ~ "Muy inseguro",
      TRUE ~ "No responde"
    ),
    # Percepción en la Ciudad (P5)
    percepcion_ciudad = case_when(
      P5 == 1 ~ "Muy seguro",
      P5 == 2 ~ "Seguro",
      P5 == 3 ~ "Inseguro",
      P5 == 4 ~ "Muy inseguro",
      TRUE ~ "No responde"
    )
  )

# 4. Aplicar el orden jerárquico a los factores usando la variable externa
base_analisis$percepcion_barrio <- factor(base_analisis$percepcion_barrio, levels = mis_niveles)
base_analisis$percepcion_comuna <- factor(base_analisis$percepcion_comuna, levels = mis_niveles)
base_analisis$percepcion_ciudad <- factor(base_analisis$percepcion_ciudad, levels = mis_niveles)
# =========================================================================
# GRÁFICA 3: PERCEPCIÓN DE SEGURIDAD EN EL BARRIO (P1)
# =========================================================================
ggplot(base_analisis, aes(x = percepcion_barrio, weight = FACTOR, fill = percepcion_barrio)) +
  geom_bar() +
  scale_fill_brewer(palette = "RdYlGn", direction = -1) + 
  labs(
    title = "Gráfica 3: Percepción de Seguridad en el Barrio",
    x = "Nivel de Percepción",
    y = "Población Estimada (Ponderada)",
    caption = "Fuente: Elaboración propia a partir de datos de la encuesta."
  ) +
  theme_minimal() +
  theme(legend.position = "none")

# =========================================================================
# GRÁFICA 4: PERCEPCIÓN DE SEGURIDAD EN LA COMUNA 
# =========================================================================
ggplot(base_analisis, aes(x = percepcion_comuna, weight = FACTOR, fill = percepcion_comuna)) +
  geom_bar() +
  scale_fill_brewer(palette = "RdYlGn", direction = -1) +
  labs(
    title = "Gráfica 4: Percepción de Seguridad en la Comuna o Corregimiento (P3)",
    x = "Nivel de Percepción",
    y = "Población Estimada (Ponderada)",
    caption = "Fuente: Elaboración propia a partir de datos de la encuesta."
  ) +
  theme_minimal() +
  theme(legend.position = "none")

# =========================================================================
# GRÁFICA 5: PERCEPCIÓN DE SEGURIDAD EN LA CIUDAD (P5)
# =========================================================================
ggplot(base_analisis, aes(x = percepcion_ciudad, weight = FACTOR, fill = percepcion_ciudad)) +
  geom_bar() +
  scale_fill_brewer(palette = "RdYlGn", direction = -1) +
  labs(
    title = "Gráfica 5: Percepción de Seguridad General en la Ciudad (P5)",
    x = "Nivel de Percepción",
    y = "Población Estimada (Ponderada)",
    caption = "Fuente: Elaboración propia a partir de datos de la encuesta."
  ) +
  theme_minimal() +
  theme(legend.position = "none")

### varible seguridad, genero y estrato

base_analisis <- base_completa %>%
  mutate(
    genero_txt = case_when(GENERO == 1 ~ "Masculino", GENERO == 2 ~ "Femenino", TRUE ~ "No informa"),
    estrato_txt = 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",
      TRUE ~ "Sin Estrato"
    ),
    # Creamos variables binarias (1 si se siente Inseguro o Muy Inseguro, 0 si no)
    inseguro_barrio = if_else(P1 %in% c(3, 4), 1, 0),
    inseguro_comuna = if_else(P3 %in% c(3, 4), 1, 0),
    inseguro_ciudad = if_else(P5 %in% c(3, 4), 1, 0)
  ) %>%
  filter(estrato_txt != "Sin Estrato")

# =========================================================================
# TABLA DE PORCENTAJES DE INSEGURIDAD CRUZA
# =========================================================================
tabla_impacto <- base_analisis %>%
  group_by(estrato_txt, genero_txt) %>%
  summarise(
    `% Inseguridad Barrio` = (sum(inseguro_barrio * FACTOR, na.rm = TRUE) / sum(FACTOR, na.rm = TRUE)) * 100,
    `% Inseguridad Comuna` = (sum(inseguro_comuna * FACTOR, na.rm = TRUE) / sum(FACTOR, na.rm = TRUE)) * 100,
    `% Inseguridad Ciudad` = (sum(inseguro_ciudad * FACTOR, na.rm = TRUE) / sum(FACTOR, na.rm = TRUE)) * 100,
    .groups = 'drop'
  )

kable(tabla_impacto, digits = 1, 
      caption = "Tabla 3: Porcentaje de Percepción de Inseguridad por Estrato y Género (Datos Ponderados)", 
      booktabs = TRUE)
Tabla 3: Porcentaje de Percepción de Inseguridad por Estrato y Género (Datos Ponderados)
estrato_txt genero_txt % Inseguridad Barrio % Inseguridad Comuna % Inseguridad Ciudad
Estrato 1 Femenino 20.4 19.7 51.1
Estrato 1 Masculino 11.7 18.7 38.8
Estrato 2 Femenino 16.8 23.0 56.4
Estrato 2 Masculino 11.2 14.5 40.4
Estrato 3 Femenino 21.0 24.5 59.2
Estrato 3 Masculino 18.3 23.1 51.1
Estrato 4 Femenino 45.5 43.1 76.2
Estrato 4 Masculino 6.4 25.1 47.6
Estrato 5 Femenino 52.0 57.8 70.1
Estrato 5 Masculino 21.8 24.1 41.8
Estrato 6 Femenino 0.0 43.1 56.9
Estrato 6 Masculino 0.0 0.0 0.0
# =========================================================================
# GRÁFICA INDEPENDIENTE: IMPACTO EN LA CIUDAD (P5)
# =========================================================================
ggplot(tabla_impacto, aes(x = estrato_txt, y = `% Inseguridad Ciudad`, fill = genero_txt)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "Gráfica 6: Tasa de Inseguridad en la Ciudad por Estrato y Género",
    x = "Estrato Socioeconómico",
    y = "Porcentaje que se siente Inseguro (%)",
    fill = "Género",
    caption = "Fuente: Elaboración propia basada en microdatos."
  ) +
  theme_minimal()

####### indice de victimizacion

# 2. Adecuación de la variable de victimización (P20A)
# Creamos una variable binaria: 1 si fue víctima (P20A == 1), 0 en cualquier otro caso
base_analisis <- base_completa %>%
  mutate(
    victima_binaria = if_else(P20A == 1, 1, 0)
  )
### varible seguridad, genero y estrato

base_analisis <- base_completa %>%
  mutate(
    genero_txt = case_when(GENERO == 1 ~ "Masculino", GENERO == 2 ~ "Femenino", TRUE ~ "No informa"),
    estrato_txt = 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",
      TRUE ~ "Sin Estrato"
    ),
    # Creamos variables binarias (1 si se siente Inseguro o Muy Inseguro, 0 si no)
    inseguro_barrio = if_else(P1 %in% c(3, 4), 1, 0),
    inseguro_comuna = if_else(P3 %in% c(3, 4), 1, 0),
    inseguro_ciudad = if_else(P5 %in% c(3, 4), 1, 0)
  ) %>%
  filter(estrato_txt != "Sin Estrato")

# =========================================================================
# TABLA DE PORCENTAJES DE INSEGURIDAD CRUZA
# =========================================================================
tabla_impacto <- base_analisis %>%
  group_by(estrato_txt, genero_txt) %>%
  summarise(
    `% Inseguridad Barrio` = (sum(inseguro_barrio * FACTOR, na.rm = TRUE) / sum(FACTOR, na.rm = TRUE)) * 100,
    `% Inseguridad Comuna` = (sum(inseguro_comuna * FACTOR, na.rm = TRUE) / sum(FACTOR, na.rm = TRUE)) * 100,
    `% Inseguridad Ciudad` = (sum(inseguro_ciudad * FACTOR, na.rm = TRUE) / sum(FACTOR, na.rm = TRUE)) * 100,
    .groups = 'drop'
  )

kable(tabla_impacto, digits = 1, 
      caption = "Tabla 3: Porcentaje de Percepción de Inseguridad por Estrato y Género (Datos Ponderados)", 
      booktabs = TRUE)
Tabla 3: Porcentaje de Percepción de Inseguridad por Estrato y Género (Datos Ponderados)
estrato_txt genero_txt % Inseguridad Barrio % Inseguridad Comuna % Inseguridad Ciudad
Estrato 1 Femenino 20.4 19.7 51.1
Estrato 1 Masculino 11.7 18.7 38.8
Estrato 2 Femenino 16.8 23.0 56.4
Estrato 2 Masculino 11.2 14.5 40.4
Estrato 3 Femenino 21.0 24.5 59.2
Estrato 3 Masculino 18.3 23.1 51.1
Estrato 4 Femenino 45.5 43.1 76.2
Estrato 4 Masculino 6.4 25.1 47.6
Estrato 5 Femenino 52.0 57.8 70.1
Estrato 5 Masculino 21.8 24.1 41.8
Estrato 6 Femenino 0.0 43.1 56.9
Estrato 6 Masculino 0.0 0.0 0.0
# =========================================================================
# GRÁFICA INDEPENDIENTE: IMPACTO EN LA CIUDAD (P5)
# =========================================================================
ggplot(tabla_impacto, aes(x = estrato_txt, y = `% Inseguridad Ciudad`, fill = genero_txt)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "Gráfica 6: Tasa de Inseguridad en la Ciudad por Estrato y Género",
    x = "Estrato Socioeconómico",
    y = "Porcentaje que se siente Inseguro (%)",
    fill = "Género",
    caption = "Fuente: Elaboración propia basada en microdatos."
  ) +
  theme_minimal()

####### indice de victimizacion

# 2. Adecuación de la variable de victimización (P20A)
# Creamos una variable binaria: 1 si fue víctima (P20A == 1), 0 en cualquier otro caso
base_analisis <- base_completa %>%
  mutate(
    victima_binaria = if_else(P20A == 1, 1, 0)
  )

# =========================================================================
# CALCULO 1: ÍNDICE DE VICTIMIZACIÓN GLOBAL (Para la Ciudad Castellana)
# =========================================================================
resultado_global <- base_analisis %>%
  summarise(
    Numerador_Pond = sum(victima_binaria * FACTOR, na.rm = TRUE),
    Denominador_Pond = sum(FACTOR, na.rm = TRUE),
    Indice_Global = (Numerador_Pond / Denominador_Pond) * 100
  )

# Extraemos el valor para poder usarlo en el texto explicativo
valor_global <- round(resultado_global$Indice_Global, 2)


# =========================================================================
# CALCULO 2: ÍNDICE DE VICTIMIZACIÓN DESAGREGADO POR COMUNAS
# =========================================================================
tabla_comunas <- base_analisis %>%
  group_by(COMUNA) %>%
  summarise(
    `Hogares Víctimas (Ponderado)` = sum(victima_binaria * FACTOR, na.rm = TRUE),
    `Población Total (Ponderada)`  = sum(FACTOR, na.rm = TRUE),
    `Índice de Victimización (%)`   = (`Hogares Víctimas (Ponderado)` / `Población Total (Ponderada)`) * 100,
    .groups = 'drop'
  ) %>%
  # Ordenamos de mayor a menor índice para responder la pregunta del taller
  arrange(desc(`Índice de Victimización (%)`))

# Imprimir la tabla formateada de forma elegante para el PDF
kable(tabla_comunas, digits = 2,
      caption = "Tabla 4: Índice de Victimización Expandido por Comuna (Ordenado de Mayor a Menor)", 
      booktabs = TRUE)
Tabla 4: Índice de Victimización Expandido por Comuna (Ordenado de Mayor a Menor)
COMUNA Hogares Víctimas (Ponderado) Población Total (Ponderada) Índice de Victimización (%)
5 11973.44 55058.18 21.75
13 21134.45 127799.47 16.54
7 15153.87 104997.62 14.43
9 19504.85 136527.92 14.29
90 264.79 1854.27 14.28
60 10941.15 77100.32 14.19
1 11483.33 81305.06 14.12
80 12323.54 90909.83 13.56
16 15181.39 114548.67 13.25
3 17223.18 132806.02 12.97
10 2621.48 21386.19 12.26
2 11693.03 95494.07 12.24
8 13952.38 121642.54 11.47
11 2484.33 21749.33 11.42
70 957.81 9057.91 10.57
4 11690.43 117238.55 9.97
6 9955.54 137126.79 7.26
15 408.73 6859.35 5.96
12 233.02 5378.88 4.33
50 0.00 59.05 0.00
# Conclusiones

##### Para el Punto B, identifica que la percepcion de la seguridad del Barrio es seguro, para la comuna es seguro y para la generalidad de la ciudad tambien seguro a pesar que para varias personas lo consideran inseguro.

##### Para el Punto C, identifica que la percepcion de la seguridad por genero femenino en varios de los estratos es inseguro, esto se puede dar a la vulnerabilidad y para el genero masculino se mantiene por debajo.

##### Para el Punto D, El indice de Victimizacion para la ciudad de castellana es de 12.97%.

#### La respuesta de la comuna con el mayor indice es : la comuna 5
#### La respuesta de la comuna con el menor indice es : la comuna 50