1 Introducción

El presente informe desarrolla un análisis comparativo de tres fenómenos asociados a la violencia basada en género en Colombia:

  • Lesiones fatales de causa externa (incluyendo feminicidios)

  • Delitos sexuales

  • Violencia intrafamiliar

El objetivo principal es identificar diferencias entre hombres y mujeres, examinar tendencias temporales, caracterizar la distribución territorial y analizar patrones de victimización. Con ello se busca aportar una visión integral del comportamiento reciente de estos tipos de violencia, utilizando como insumo datos oficiales provenientes de instituciones del Estado.

1.1 ¿Qué es la violencia basada en género?

La Violencia Basada en Género (VBG) se refiere a cualquier acto dañino o amenaza que se dirige contra una persona o grupo de personas a causa de sus diferencias socialmente atribuidas entre hombres y mujeres, es decir, a causa de su género.

Es una manifestación de las relaciones de poder históricamente desiguales entre hombres y mujeres, donde la supremacía masculina tradicionalmente ha llevado a la subordinación y discriminación de las mujeres, las niñas, y otras personas que no se ajustan a las normas de género establecidas

knitr::include_graphics("Tipo_violencia.png")

1.1.1 Feminicidio

El Feminicidio en Colombia está tipificado como un delito autónomo en el Código Penal (Ley 599 de 2000), mediante la adición del Artículo 104A por la Ley 1761 de 2015 (conocida como la Ley Rosa Elvira Cely). En este se define que para que un homicidio se tipifique como feminicidio, debe estar motivado por la condición de ser mujer o la identidad de género de la víctima, y se considera que esto ocurre cuando concurre o ha antecedido cualquiera de las siguientes circunstancias (entre otras, destacando las más relevantes):

  • Violencia Íntima o Antecedente de Violencia: Tener o haber tenido una relación familiar, íntima o de convivencia con la víctima, de amistad, de compañerismo o de trabajo, y ser perpetrador de un ciclo de violencia física, sexual, psicológica o patrimonial que antecedió el crimen contra ella.

  • Aprovechamiento de Relaciones de Poder: Cometer el delito en aprovechamiento de las relaciones de poder ejercidas sobre la mujer, expresadas en la jerarquización personal, económica, sexual, militar, política o sociocultural.

  • Violencia Extrema y Degradación: Ejercer sobre el cuerpo y la vida de la mujer actos de instrumentalización de género o sexual, mutilación genital femenina, o cualquier forma de tortura o tratos crueles, inhumanos o degradantes.

  • Generar Terror o Humillación: Cometer el delito para generar terror o humillación a quien se considere enemigo.

  • Incomunicación: Que la víctima haya sido incomunicada o privada de su libertad de locomoción (secuestro o retención), cualquiera que sea el tiempo previo a su muerte.

1.1.2 Delito sexual

El término delito sexual es una categoría amplia que agrupa una serie de conductas tipificadas en el Código Penal colombiano (Ley 599 de 2000) que atentan contra la libertad, integridad y formación sexual de las personas.

En Colombia, estos delitos se encuentran principalmente en el Título IV del Código Penal, y su definición y clasificación han sido modificadas y complementadas por leyes como la Ley 1236 de 2008 y la Ley 1773 de 2016, entre otras.

1.1.2.1 Principales Delitos Sexuales en Colombia

Los delitos sexuales se clasifican según la conducta y la afectación al bien jurídico. Los más graves y comunes incluyen:

  1. Acceso Carnal Violento (Art. 205)

    Quien realice acceso carnal con otra persona, empleando la fuerza, amenaza o coacción, o cuando la víctima se encuentre en incapacidad de resistir (por ejemplo, sedada o inconsciente). Este delito es lo que comúnmente se conoce como violación.

  2. Acto Sexual Violento (Art. 206)

    Quien realice con otra persona un acto sexual diferente al acceso carnal, empleando la fuerza, amenaza o coacción, o cuando la víctima se encuentre en incapacidad de resistir. Ejemplo: Manoseos, tocamientos o frotamientos forzados.

  3. Acoso Sexual (Art. 210A)

    Quien se valga de su posición jerárquica, autoridad, poder o análogas (laborales, educativas, familiares, etc.) para persuadir, constreñir o solicitar a otra persona a realizar actos sexuales.

  4. Abuso Sexual (Art. 208)

    Quien realice actos sexuales con una persona sin su consentimiento, pero sin emplear la fuerza o violencia física o moral necesaria para configurar los delitos anteriores. Se aplica a situaciones donde hay aprovechamiento de vulnerabilidad o confianza.

1.1.2.2 Delitos Agravados contra Menores de Edad

La ley colombiana establece penas mucho más severas y específicas cuando las víctimas son menores de 18 años. Entre ellos se encuentran:

  • Actos Sexuales con Menor de Catorce Años (Art. 208): La mera realización de actos sexuales con un menor de 14 años se considera un delito grave, sin necesidad de probar violencia o consentimiento.

  • Acceso Carnal Abusivo con Menor de Catorce Años (Art. 209): Acceso carnal con un menor de 14 años.

  • Corrupción de Menores (Art. 217): Inducir, constreñir o facilitar a un menor a participar en actividades sexuales, pornográficas o de explotación.

1.1.3 Violencia intrafamiliar

La Violencia Intrafamiliar es un delito grave tipificado en el Código Penal colombiano (Artículo 229) y es regulado por diversas normas que buscan proteger a los miembros del núcleo familiar.

Se define como todo daño físico, psicológico, sexual, patrimonial o económico causado por un miembro de la familia a otro, dentro o fuera del domicilio familiar.

2 Descripción de las bases de datos

Para el análisis se utilizaron tres fuentes de información oficiales:

  • Delitos sexuales (2024–2025) – Policía Nacional

  • Violencia intrafamiliar (2024–2025) – Policía Nacional

  • Lesiones fatales de causa externa – Datos Abiertos Colombia

    Versiones de paquetes utilizados

    Las siguientes librerías de R fueron empleadas para el procesamiento, análisis y visualización de los datos. Las versiones corresponden al entorno en el que se generó este informe:

    Paquetes principales utilizados:

    • tidyverse – Manipulación y transformación de datos

    • readxl – Lectura de archivos Excel

    • ggplot2 – Visualización de datos

    • dplyr – Manejo de data frames

    • scales – Formatos y escalas para gráficos

    • tidyr – Limpieza y reestructuración de datos

    • sf – Manejo de datos espaciales y shapefiles

    • rnaturalearth – Obtención de mapas base

    • viridis – Paletas de color perceptualmente uniformes

    • RColorBrewer – Paletas de color cualitativas y secuenciales

3 Metodología

3.1 Proceso de limpieza, estandarización y unificación de las bases de datos

Para realizar el análisis comparativo entre feminicidios/homicidios, delitos sexuales y violencia intrafamiliar, fue necesario integrar las tres bases de datos en un único conjunto de información. Sin embargo, cada fuente presentaba estructuras y nombres de columnas distintos, lo que impedía analizarlas de manera conjunta. Por ello, se llevó a cabo un proceso de limpieza, homologación de variables y consolidación. El procedimiento se desarrolló en tres pasos principales:

3.1.1 Homologación de nombres de columnas

Cada base contenía variables fundamentales como año, mes, día, sexo, etapa de vida, departamento, municipio, descripción del delito y arma/medio. No obstante, dichas variables aparecían con nombres diferentes según la fuente.
Para garantizar la consistencia entre los tres conjuntos, se renombraron las columnas de manera uniforme. Esto permitió que todas las bases compartieran la misma estructura y que pudieran integrarse posteriormente sin conflicto.

3.1.2 Estandarización de estructura y selección de variables

Una vez renombradas las columnas, se realizó una selección explícita de las variables relevantes para el estudio. De esta forma, las tres bases quedaron con el mismo orden y tipo de información, preservando únicamente los campos necesarios para los análisis posteriores.
Además, se añadió una columna denominada fuente, con la cual fue posible identificar de qué base provenía cada registro (violencia intrafamiliar, delitos sexuales o homicidios/feminicidios). Esta variable facilitó la clasificación y comparación entre tipos de violencia.

library(tidyverse)

# Violencia intrafamiliar
vif_limpia <- Violencia_intrafamiliar %>% 
  select(AÑO, MES, DIA, `ETAPA DE VIDA`, SEXO, DEPARTAMENTO, MUNICIPIO, `DESCRIPCIÓN DEL DELITO`, `ARMAS MEDIOS`) %>% 
  mutate(fuente = "Violencia_intrafamiliar")

# Delitos sexuales
sex_limpia <- Delitos_sexuales %>%
   select(AÑO, MES, DIA, `ETAPA DE VIDA`, SEXO, DEPARTAMENTO, MUNICIPIO, `DESCRIPCIÓN DEL DELITO`, `ARMAS MEDIOS`) %>%
  mutate(fuente = "Delitos_sexuales")

# Feminicidios / homicidios
les_limpia <- Lesiones_fatales_de_causa_externa %>%
  select(AÑO, MES, DIA, `ETAPA DE VIDA`, SEXO, DEPARTAMENTO, MUNICIPIO, `DESCRIPCIÓN DEL DELITO`, `ARMAS MEDIOS`) %>%
  mutate(fuente = "Lesiones_fatales_de_causa_externa")

3.1.3 Integración de las bases de datos en un solo conjunto

Con las tres tablas ya estandarizadas, se procedió a unificarlas mediante una función de concatenación vertical. Este paso generó una única base consolidada llamada base_unificada, que contiene todos los registros provenientes de las tres fuentes.
De esta manera, se obtuvo un dataset homogéneo, ordenado y listo para realizar análisis comparativos, cálculos de prevalencias, tendencias temporales y visualizaciones geográficas.

base_unificada <- bind_rows(vif_limpia, sex_limpia, les_limpia)

4 Resultados

4.1 Distribución geográfica de casos VBG

Este mapa ilustra los 10 departamentos de Colombia con el mayor número de casos de Violencia Basada en Género (VBG) reportados en 2024. Los datos están representados por colores y tamaños en la leyenda, y la ubicación geográfica de los departamentos está resaltada en el mapa.

Los casos de VBG están fuertemente concentrados en las regiones con mayor densidad de población o con problemas de orden público más severos.

  • Líder Absoluto: Cundinamarca (70,609 casos). Este departamento, que incluye la capital (Bogotá), tiene una incidencia de casos masiva, representando más del doble de los casos del segundo departamento en la lista.

  • Segundo Lugar: Antioquia (29,702 casos). También uno de los departamentos más poblados y económicamente activos del país, con un alto número de reportes.

  • Tercer Lugar: Santander (10,723 casos). Es el tercer departamento en superar la barrera de los 10,000 casos.

    library(dplyr)
    library(ggplot2)
    library(sf)
    library(rnaturalearth)
    library(RColorBrewer)
    library(scales)
    
    # 1. Contar casos por departamento
    casos_departamento <- base_unificada %>%
      group_by(DEPARTAMENTO) %>%
      summarise(casos = n(), .groups = "drop")
    
    # 2. Seleccionar Top 10 departamentos
    top10_departamentos <- casos_departamento %>%
      slice_max(casos, n = 10) %>%
      arrange(desc(casos))
    
    # 3. Preparar etiqueta con número de casos formateado
    top10_departamentos <- top10_departamentos %>%
      mutate(
        label = paste0(DEPARTAMENTO, " (", comma(casos), ")"),
        rank = row_number()
      )
    
    # 4. Obtener mapa de Colombia
    colombia <- ne_states(country = "Colombia", returnclass = "sf")
    
    # Normalizar nombres
    top10_departamentos$DEPARTAMENTO <- toupper(trimws(top10_departamentos$DEPARTAMENTO))
    colombia$name <- toupper(trimws(colombia$name))
    
    # 5. Unir datos con shapefile
    mapa <- colombia %>%
      left_join(top10_departamentos, by = c("name" = "DEPARTAMENTO"))
    
    # 6. Crear gradiente de colores morado a naranja
    colores_top10 <- colorRampPalette(c("#800080", "#b366b3", "#FF8C00"))(10)
    
    # 7. Graficar mapa con estética mejorada
    ggplot() +
      # Todos los departamentos en gris claro
      geom_sf(data = mapa, fill = "#f0f0f0", color = "white", size = 0.3) +
    
      # Top 10 coloreados con gradiente
      geom_sf(data = subset(mapa, !is.na(casos)),
              aes(fill = reorder(label, -rank)), 
              color = "white", 
              size = 0.5) +
    
      # Gradiente de colores (morado = más casos, naranja = menos casos del top 10)
      scale_fill_manual(
        values = setNames(colores_top10, 
                          top10_departamentos$label[order(top10_departamentos$rank)]),
        name = "Departamento (casos)"
      ) +
    
      labs(
        title = "Top 10 departamentos con más casos de VBG",
        subtitle = "Colombia - Datos 2024"
      ) +
    
      # Ajustar coordenadas para hacer zoom al mapa de Colombia
      coord_sf(xlim = c(-79.5, -66.5), ylim = c(-4.5, 13.5), expand = FALSE) +
    
      theme_minimal(base_size = 13) +
      theme(
        plot.title = element_text(
          color = "#800080", 
          face = "bold", 
          size = 15, 
          hjust = 0.3,  # Mueve el título a la derecha (0 = izquierda, 0.5 = centro, 1 = derecha)
          margin = margin(b = 3, t = 10)
        ),
        plot.subtitle = element_text(
          color = "#FF8C00", 
          size = 11, 
          hjust = 0.5,
          margin = margin(b = 15)
        ),
        legend.title = element_text(
          color = "#800080", 
          face = "bold", 
          size = 9
        ),
        legend.text = element_text(
          color = "#000000", 
          size = 7.5,
          hjust = 0
        ),
        legend.text.align = 0,
        legend.position = "right",
        legend.justification = c(0, 0.5),
        legend.box.margin = margin(l = 15),
        legend.key.size = unit(0.45, "cm"),
        legend.key.width = unit(0.35, "cm"),
        legend.spacing.x = unit(0.3, "cm"),
        legend.spacing.y = unit(0.05, "cm"),
        panel.grid = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        plot.background = element_rect(fill = "white", color = NA),
        panel.background = element_rect(fill = "white", color = NA),
        plot.margin = margin(5, 15, 10, 5),
        axis.title = element_blank()
      )

4.2 Tasa geografica de VBG

Para analizar la Violencia Basada en Género (VBG) a nivel territorial no basta con comparar el número absoluto de casos entre departamentos. Las cifras brutas suelen favorecer a las regiones con mayor población, lo que puede ocultar realidades donde, aun con menos habitantes, la intensidad del fenómeno es más elevada.

Por esta razón, el informe utiliza tasas por cada 100.000 habitantes, un indicador estandarizado que permite comparar departamentos entre sí bajo una misma escala demográfica. La tasa se calcula dividiendo el número de casos reportados en cada departamento entre su población estimada, y multiplicando el resultado por 100.000. De esta manera, cada valor representa cuántos casos ocurrirían en ese territorio si tuviera exactamente cien mil habitantes.

library(dplyr)
library(ggplot2)
library(sf)
library(rnaturalearth)
library(leaflet)
library(htmltools)
library(scales)

# 1. Normalizar nombres
base_unificada$DEPARTAMENTO <- base_unificada$DEPARTAMENTO |> toupper() |> trimws()
poblacion_departamento$DEPARTAMENTO <- poblacion_departamento$DEPARTAMENTO |> toupper() |> trimws()

# 2. Contar casos por departamento
casos_tasa <- base_unificada %>%
  count(DEPARTAMENTO, name = "casos") %>%
  left_join(poblacion_departamento, by = "DEPARTAMENTO") %>%
  mutate(
    tasa_100k = (casos / poblacion) * 100000
  )

# 3. Cargar mapa de Colombia
colombia <- ne_states(country = "Colombia", returnclass = "sf")
colombia$name <- colombia$name |> toupper() |> trimws()

# 4. Unir datos al mapa
mapa <- colombia %>%
  left_join(casos_tasa, by = c("name" = "DEPARTAMENTO"))

########################################################################
###########   MAPA INTERACTIVO CON LEAFLET  ###########################
########################################################################

# Etiquetas para hover
mapa$label <- sprintf(
  "<strong>%s</strong><br/>
   Casos reportados: <strong>%s</strong><br/>
   Población: <strong>%s</strong><br/>
   Tasa por 100 mil hab.: <strong>%s</strong>",
  mapa$name,
  comma(mapa$casos, accuracy = 1),
  comma(mapa$poblacion, accuracy = 1),
  round(mapa$tasa_100k, 1)
) |> lapply(HTML)

# Paleta de colores: naranja a morado
pal <- colorNumeric(
  palette = c("#FFC080", "#FF8C00", "#b366b3", "#800080"),
  domain = mapa$tasa_100k
)

# Mapa interactivo
leaflet(mapa) %>%
  addProviderTiles(providers$CartoDB.Positron) %>%
  addPolygons(
    weight = 1,
    color = "white",
    fillColor = ~pal(tasa_100k),
    fillOpacity = 0.85,
    smoothFactor = 0.3,
    highlightOptions = highlightOptions(
      weight = 2,
      color = "#800080",
      fillOpacity = 0.95,
      bringToFront = TRUE
    ),
    label = mapa$label,
    labelOptions = labelOptions(
      style = list("font-size" = "12px", "font-weight" = "normal"),
      direction = "auto"
    )
  ) %>%
  addLegend(
    pal = pal,
    values = ~tasa_100k,
    title = "Tasa por 100 mil hab.",
    opacity = 0.9,
    position = "bottomright"
  )
########################################################################
###########   MAPA ESTÁTICO CON ESTÉTICA UNIFICADA  ####################
########################################################################

ggplot(mapa) +
  geom_sf(aes(fill = tasa_100k), color = "white", size = 0.3) +
  
  # Gradiente de naranja a morado
  scale_fill_gradient(
    low = "#FFC080",
    high = "#800080",
    name = "Tasa por\n100 mil hab.",
    labels = comma
  ) +
  
  labs(
    title = "Tasa de Violencia Basada en Género por 100.000 habitantes",
    subtitle = "Colombia - Datos 2024"
  ) +
  
  # Ajustar zoom a Colombia
  coord_sf(xlim = c(-79.5, -66.5), ylim = c(-4.5, 13.5), expand = FALSE) +
  
  theme_minimal(base_size = 13) +
  theme(
    # Títulos
    plot.title = element_text(
      color = "#800080",
      face = "bold",
      size = 15,
      hjust = 0.3,
      margin = margin(b = 3, t = 10)
    ),
    plot.subtitle = element_text(
      color = "#FF8C00",
      size = 11,
      hjust = 0.5,
      margin = margin(b = 15)
    ),
    
    # Leyenda
    legend.title = element_text(
      color = "#800080",
      face = "bold",
      size = 9
    ),
    legend.text = element_text(
      color = "#000000",
      size = 8
    ),
    legend.position = "right",
    legend.key.size = unit(0.8, "cm"),
    legend.key.width = unit(0.4, "cm"),
    
    # Panel
    panel.grid = element_blank(),
    axis.text = element_blank(),
    axis.ticks = element_blank(),
    axis.title = element_blank(),
    plot.background = element_rect(fill = "white", color = NA),
    panel.background = element_rect(fill = "white", color = NA),
    plot.margin = margin(5, 15, 10, 5)
  )

El mapa de tasas por 100.000 habitantes revela una distribución desigual de la Violencia Basada en Género (VBG) en el territorio colombiano durante 2024. Al normalizar los casos por población, emergen patrones que no eran evidentes cuando se observaban únicamente los valores absolutos.

Los departamentos con las tonalidades más intensas concentran las tasas más elevadas, lo que indica una mayor incidencia relativa del fenómeno. Estas áreas presentan un riesgo proporcionalmente superior, incluso cuando no figuran entre las zonas con mayor número de habitantes. El contraste es especialmente visible en los departamentos del centro del país, donde se observan tasas que superan con amplitud el promedio nacional, lo que sugiere dinámicas locales más críticas y posiblemente subregistradas en otros indicadores sociales.

4.3 Distribucion de casos por sexo

La gran mayoría de los casos reportados de violencia de género corresponden a Mujeres, representando el 74.5% del total, con 161,534 casos. Esto indica una marcada desproporción en la distribución de las víctimas por sexo, donde las mujeres son el grupo más afectado. La proporción de los casos de mujeres es aproximadamente tres veces mayor que la proporción de hombres (74.5%/24.3% = 3.06). Un pequeño porcentaje de los casos, el 1.2%, no especifica el sexo de la víctima (“No reporta”). Este porcentaje es marginal, lo que sugiere que en la gran mayoría de los casos se tiene el dato del sexo.

library(ggplot2)
library(dplyr)
library(scales)

# Preparar datos
datos_sexo <- base_unificada %>%
  count(SEXO) %>%
  mutate(
    porcentaje = round(n / sum(n) * 100, 1),
    etiqueta_interna = paste0(comma(n), "\n(", porcentaje, "%)")
  )

# Definir el orden de niveles que quieres que aparezca en la leyenda/gráfico
# Ajusta el vector c(...) si quieres otro orden
datos_sexo$SEXO <- factor(datos_sexo$SEXO, levels = c("MUJER", "HOMBRE", "NO REPORTA"))

# Construir las etiquetas para la leyenda en el mismo orden de los niveles
legend_labels <- paste0(levels(datos_sexo$SEXO), " (", 
                        datos_sexo %>% 
                          arrange(match(SEXO, levels(datos_sexo$SEXO))) %>% 
                          pull(porcentaje), 
                        "%)")

# Mapa de colores (mismos colores tuyos)
colores <- c("MUJER" = "#800080", "HOMBRE" = "#FF8C00", "NO REPORTA" = "#a64da6")

# Gráfico: mantener el segmento NO REPORTA en el pastel (para conservar color y proporción)
# pero NO dibujar su etiqueta interna; en su lugar aparece en la leyenda con porcentaje.
ggplot(datos_sexo, aes(x = "", y = n, fill = SEXO)) +
  geom_bar(stat = "identity", width = 1, color = "white", size = 1.2) +
  coord_polar("y", start = 0) +

  # Etiquetas internas solo para MUJER y HOMBRE (NO_REPORTA se excluye)
  geom_text(
    data = filter(datos_sexo, SEXO %in% c("MUJER", "HOMBRE")),
    aes(label = etiqueta_interna),
    position = position_stack(vjust = 0.5),
    color = "white",
    fontface = "bold",
    size = 5
  ) +

  scale_fill_manual(
    values = colores,
    labels = legend_labels
  ) +
  labs(
    title = "Distribución de casos por sexo",
    subtitle = "Violencia de género en Colombia",
    fill = "Sexo"
  ) +
  theme_void() +
  theme(
    plot.title = element_text(color = "#800080", face = "bold", size = 16, hjust = 0.5),
    plot.subtitle = element_text(color = "#FF8C00", size = 12, hjust = 0.5),
    legend.title = element_text(color = "#800080", face = "bold", size = 11),
    legend.text = element_text(color = "#000000", size = 10),
    legend.position = "right",
    plot.margin = margin(20, 60, 20, 20)
  )

4.4 Tendencias temporales ¿Se observan picos de violencia según meses y sexo?

Este gráfico de líneas muestra la Tendencia mensual de casos por sexo relacionados con la Violencia de género en Colombia a lo largo del año 2024. El análisis se centra en la evolución y comparación de los casos reportados entre mujeres, hombres y casos no reportados.

  • Tendencia General Creciente (Enero - Septiembre): El número total de casos (la suma de las tres líneas) mostró una tendencia general al aumento desde enero hasta septiembre, alcanzando su pico en este último mes.

    • Pico de Casos: El mayor número de casos en el año se registró en Septiembre para las mujeres (5,821) y en Octubre para los hombres (2,014).
  • Caída Marcada (Noviembre - Diciembre): Hay una notable disminución en el número de casos en los últimos dos meses del año, especialmente en Diciembre, donde los casos de mujeres caen a 3,483 y los de hombres a 1,189.

  • Baja Proporción: La línea de No Reportado (1.5%) se mantiene en un nivel muy bajo y estable durante todo el año, oscilando entre 57 y 152 casos mensuales, lo que confirma que el sexo es un dato casi siempre disponible en los reportes.

library(dplyr)
library(ggplot2)

meses_orden <- c(
  "ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO",
  "JULIO", "AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE"
)

# ---- 1) Calcular porcentajes por sexo (INCLUYENDO NO REPORTADO) ----
porcentajes <- base_unificada %>%
  filter(AÑO == 2024) %>%
  count(SEXO) %>%
  mutate(pct = round(n / sum(n) * 100, 1)) %>%
  mutate(nombre_legenda = paste0(SEXO, " (", pct, "%)"))

# ---- 2) Preparar datos de tendencia ----
datos_tendencia <- base_unificada %>%
  filter(AÑO == 2024) %>%
  mutate(MES = factor(MES, levels = meses_orden)) %>%
  group_by(MES, SEXO) %>%
  summarise(casos = n(), .groups = "drop")

# ---- 3) Crear vector de nuevos nombres para la leyenda ----
nombres_leyenda <- setNames(porcentajes$nombre_legenda, porcentajes$SEXO)

# ---- 4) Gráfico con leyenda actualizada ----
ggplot(datos_tendencia, aes(x = MES, y = casos, color = SEXO, group = SEXO)) +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.15))) +
  geom_line(size = 1.5, alpha = 0.9) +
  geom_point(size = 3.5) +
  geom_text(aes(label = scales::comma(casos)),
            vjust = -0.8,
            size = 3,
            fontface = "bold",
            show.legend = FALSE) +
  
  # COLORES PARA TODOS LOS GRUPOS
  scale_color_manual(
    values = c(
      "MUJER" = "#800080",
      "HOMBRE" = "#FF8C00",
      "NO REPORTADO" = "#a64da6"
    ),
    labels = nombres_leyenda,
    breaks = names(nombres_leyenda),
    drop = FALSE  # NO eliminar niveles aunque tengan pocos datos
  ) +
  labs(
    title = "Tendencia mensual de casos por sexo (2024)",
    subtitle = "Violencia de género en Colombia",
    x = "Mes",
    y = "Número de casos",
    color = "Sexo"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(color = "#800080", face = "bold", size = 16, hjust = 0.5),
    plot.subtitle = element_text(color = "#FF8C00", size = 12, hjust = 0.5),
    axis.title = element_text(color = "#000000", face = "bold", size = 11),
    axis.text = element_text(color = "#666666", size = 10),
    axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1),
    legend.title = element_text(color = "#800080", face = "bold", size = 11),
    legend.text = element_text(color = "#000000", size = 10),
    legend.position = "right",
    panel.grid.major = element_line(color = "#f4f4f4"),
    panel.grid.minor = element_blank(),
    plot.margin = margin(20, 20, 20, 20)
  )

4.5 Distribución por etapa de vida

Este gráfico de barras horizontales presenta la distribución de los casos de Violencia de género en Colombia segmentados por Etapa de vida (Menor de 14 años, Adolescencia, Adultez, No Reportado) y por Sexo (Mujer, Hombre, No Reportado).

  • Mujeres Adultas: La categoría más grande y dominante en todo el gráfico es la de Mujeres en la Adultez, con 132,805 casos. Este grupo representa la mayor proporción de víctimas de la violencia de género reportada en Colombia.

  • Hombres Adultos: Le sigue el grupo de Hombres en la Adultez, con 41,443 casos, un número significativo, pero aproximadamente un tercio de los casos reportados en mujeres adultas.

  • Disparidad por sexo en las etapas de vida: La prevalencia de la violencia de género reportada afecta consistentemente más a las mujeres que a los hombres en todas las etapas de vida donde el sexo es identificado.

library(dplyr)
library(ggplot2)

# Limpiar espacios y mayúsculas
base_limpia <- base_unificada %>%
  mutate(
    `ETAPA DE VIDA` = toupper(trimws(`ETAPA DE VIDA`)),
    SEXO = toupper(trimws(SEXO))
  )

# Orden lógico de las etapas de vida
niveles_etapa <- c(
  "MENOR DE 14 AÑOS",
  "ADOLESCENCIA",
  "ADULTEZ",
  "NO REPORTADO"
)

base_limpia$`ETAPA DE VIDA` <- factor(base_limpia$`ETAPA DE VIDA`,
                                      levels = niveles_etapa)

# Preparar datos con conteos para las etiquetas y ELIMINAR NAs
datos_etapa <- base_limpia %>%
  filter(!is.na(`ETAPA DE VIDA`)) %>%
  group_by(`ETAPA DE VIDA`, SEXO) %>%
  summarise(casos = n(), .groups = "drop") %>%
  filter(!is.na(`ETAPA DE VIDA`))

# Gráfico de barras horizontales agrupadas con paleta del documento
ggplot(datos_etapa, aes(y = `ETAPA DE VIDA`, x = casos, fill = SEXO)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.8), width = 0.75) +
  geom_text(aes(label = scales::comma(casos)), 
            position = position_dodge(width = 0.8),
            hjust = -0.2,
            size = 3.5,
            fontface = "bold",
            color = "#000000") +
  scale_fill_manual(values = c(
    "MUJER" = "#800080",
    "HOMBRE" = "#FF8C00",
    "NO REPORTA" = "#a64da6",
    "NO REPORTADO" = "#a64da6"
  )) +
  scale_x_continuous(
    expand = expansion(mult = c(0, 0.15)),
    labels = scales::comma_format()
  ) +
  labs(
    title = "Casos por etapa de vida y sexo",
    subtitle = "Violencia de género en Colombia",
    y = "Etapa de vida",
    x = "Número de casos",
    fill = "Sexo"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(color = "#800080", face = "bold", size = 16, hjust = 0.5, margin = margin(b = 5)),
    plot.subtitle = element_text(color = "#FF8C00", size = 12, hjust = 0.5, margin = margin(b = 15)),
    axis.title = element_text(color = "#000000", face = "bold", size = 11),
    axis.text = element_text(color = "#666666", size = 10),
    axis.text.y = element_text(hjust = 1),
    legend.title = element_text(color = "#800080", face = "bold", size = 11),
    legend.text = element_text(color = "#000000", size = 10),
    legend.position = "right",
    panel.grid.major.y = element_blank(),
    panel.grid.major.x = element_line(color = "#f4f4f4"),
    panel.grid.minor = element_blank(),
    plot.margin = margin(20, 20, 20, 20)
  )

4.6 ¿Qué tipo de violencia es mas común según la etapa de vida?

Este gráfico es un Mapa de calor que proporciona el análisis más detallado de la violencia de género, cruzando tres variables clave: Sexo, Etapa de vida, y Tipo de violencia (Delitos sexuales, Homicidios y feminicidios, y Violencia intrafamiliar). El color de las celdas indica la magnitud de los casos, según la leyenda (de naranja claro para pocos casos a morado oscuro para la mayor concentración).

  • Punto Crítico (Celda más oscura): La violencia intrafamiliar es, por mucho, el tipo de violencia más reportado, con la concentración más alta en la categoría Mujer / Adultez (110,347 casos). Esta cifra es el punto focal de la violencia de género reportada. Los delitos sexuales muestran un patrón similar a la violencia intrafamiliar, con las Mujeres siendo el grupo más afectado en todas las etapas de vida.

  • Los hombres adultos también reportan una alta incidencia de violencia intrafamiliar (35,965 casos), aunque es casi tres veces menor que la de las mujeres en la misma etapa. El mayor número de casos se concentra en la categoría Mujer / Adultez (241 casos), lo que refleja la incidencia de feminicidios.

  • Los casos de homicidios y feminicidios son los menos frecuentes en términos de volumen total, lo que es esperable para un evento de letalidad extrema.

  • En la violencia intrafamiliar, los casos en la niñez y adolescencia son altos:

    • Mujeres (Menor de 14 años): 5,208 casos.

    • Mujeres (Adolescencia): 4,952 casos.

library(dplyr)
library(ggplot2)

# Preparar base con etiquetas limpias
base_unificada <- base_unificada %>%
  mutate(
    fuente_simple = recode(fuente,
      "Delitos_sexuales" = "Delitos sexuales",
      "Lesiones_fatales_de_causa_externa" = "Homicidios y feminicidios",
      "Violencia_intrafamiliar" = "Violencia intrafamiliar"
    ),
    SEXO = factor(SEXO, levels = c("HOMBRE", "MUJER", "NO REPORTADO")),
    `ETAPA DE VIDA` = factor(`ETAPA DE VIDA`,
      levels = c("ADOLESCENCIA", "ADULTEZ", "MENOR DE 14 AÑOS", "NO REPORTADO")
    )
  )

# Agrupar datos
df_heat <- base_unificada %>%
  count(SEXO, `ETAPA DE VIDA`, fuente_simple)

# Gráfico con estética unificada
ggplot(df_heat, aes(x = SEXO, y = `ETAPA DE VIDA`, fill = n)) +
  geom_tile(color = "white", linewidth = 1) +
  geom_text(aes(label = scales::comma(n)),
            color = "white",
            size = 3.5,
            fontface = "bold") +
  
  # Gradiente de morado a naranja
  scale_fill_gradient(
    low = "#FFC080",   # Naranja claro
    high = "#800080",  # Morado oscuro
    labels = scales::comma
  ) +
  
  facet_wrap(~ fuente_simple, ncol = 3) +
  
  labs(
    title = "Mapa de calor: Sexo vs Etapa de vida por tipo de violencia",
    subtitle = "Colombia - Datos 2024",
    x = "Sexo",
    y = "Etapa de vida",
    fill = "Casos"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    # Títulos
    plot.title = element_text(
      color = "#800080",
      face = "bold",
      size = 16,
      hjust = 0.5,
      margin = margin(b = 5)
    ),
    plot.subtitle = element_text(
      color = "#FF8C00",
      size = 12,
      hjust = 0.5,
      margin = margin(b = 15)
    ),
    
    # Facetas
    strip.text = element_text(
      size = 12,
      face = "bold",
      color = "#800080"
    ),
    strip.background = element_rect(
      fill = "#f4f4f4",
      color = NA
    ),
    
    # Ejes
    axis.title = element_text(
      color = "#000000",
      face = "bold",
      size = 11
    ),
    axis.text.x = element_text(
      angle = 45,
      hjust = 1,
      vjust = 1,
      size = 10,
      color = "#666666"
    ),
    axis.text.y = element_text(
      size = 10,
      color = "#666666"
    ),
    
    # Leyenda
    legend.title = element_text(
      color = "#800080",
      face = "bold",
      size = 11
    ),
    legend.text = element_text(
      color = "#000000",
      size = 10
    ),
    legend.position = "right",
    
    # Panel
    panel.grid = element_blank(),
    panel.spacing = unit(1.5, "lines"),
    plot.margin = margin(20, 20, 20, 20)
  )

5 Conclusión

El análisis de los seis gráficos sobre la Violencia Basada en Género (VBG) en Colombia durante 2024 revela un fenómeno persistente y amplio, que opera como una grieta estructural en la salud pública y la seguridad del país. La evidencia estadística muestra una problemática masiva, profundamente desigual entre mujeres y hombres, y concentrada tanto geográfica como socialmente.

Prevalencia y desequilibrio por sexo
La conclusión transversal es contundente: la VBG afecta de manera desproporcionada a las mujeres, quienes representan el 74.5% de los casos reportados. Esta diferencia no es un efecto aislado, sino un patrón sostenido que se mantiene en todas las etapas de la vida y en los distintos tipos de violencia examinados. El desequilibrio indica no solo mayor exposición, sino también diferencias en riesgo, denuncia y vulnerabilidad estructural.

Tipos de violencia dominantes y vulnerabilidad etaria
La Violencia Intrafamiliar es el núcleo del problema y emerge como el principal tipo de reporte, especialmente en mujeres adultas, con más de 110.000 casos. Paralelamente, los Delitos Sexuales dibujan un panorama aún más crítico entre niñas y adolescentes, donde la incidencia es significativamente mayor. Este comportamiento evidencia que la violencia opera de forma diferenciada según la etapa del ciclo vital, afectando de manera más severa a las mujeres en momentos de desarrollo físico, emocional y económico particularmente sensibles.

Distribución temporal del fenómeno
A lo largo del año, los reportes muestran una trayectoria ascendente que culmina en el tercer trimestre (septiembre y octubre). Esta curva no solo insinúa estacionalidad, sino que también revela que las acciones de prevención, contención o atención no están logrando desacelerar la tendencia. La persistencia del crecimiento sugiere la necesidad de intervenciones más tempranas y sostenidas durante el año.

Concentración geográfica: carga de casos y carga de riesgo
El mapa de distribución absoluta ya mostraba que Cundinamarca (junto con Bogotá) y Antioquia concentran la mayor cantidad de casos, con 70.609 y 29.702 reportes respectivamente. Sin embargo, el análisis de la tasa por 100.000 habitantes aporta una capa crítica adicional: no todos los territorios enfrentan el problema en la misma magnitud relativa.

El mapa de tasas revela que departamentos con menor población, como Putumayo, Vaupés o Guaviare, exhiben niveles proporcionalmente más altos de VBG en relación con su tamaño demográfico. Estos territorios no solo registran violencia, sino que muestran una intensidad del fenómeno que supera ampliamente el promedio nacional. Esta perspectiva de riesgo ajustado por población permite identificar zonas donde la presión sobre la institucionalidad y los sistemas de protección puede ser más severa de lo que indican las cifras absolutas.

En conjunto, los datos cuantitativos dibujan un escenario donde la VBG se comporta como un fenómeno extendido, persistente y desigualmente distribuido, cuya comprensión exige mirar simultáneamente el volumen de casos y la tasa relativa en cada territorio. Esta lectura combinada señala con claridad que las respuestas deben ser diferenciadas, territorializadas y sensibles a las dinámicas específicas de género, edad y contexto regional.

knitr::include_graphics("Sena.jpg")