En este informe se realiza 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 es evaluar diferencias entre hombres y mujeres, comparar tendencias temporales, distribución territorial y patrones de victimización.
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")
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.
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.
Los delitos sexuales se clasifican según la conducta y la afectación al bien jurídico. Los más graves y comunes incluyen:
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.
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.
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.
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.
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.
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.
Se hace uso de tres bases de datos diferentes:
Delitos sexuales (2024-2025) obtenida de la policia
Violencia intrafamiliar (2024-2025) obtenida de la policia
Lesiones fatales de causa externa obtenida de datos abiertos.gov
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:
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.
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")
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.1 Distribucion de casos por sexo
library(ggplot2)
library(dplyr)
# Preparar datos con porcentajes
datos_sexo <- base_unificada %>%
count(SEXO) %>%
mutate(
porcentaje = round(n / sum(n) * 100, 1),
etiqueta = paste0(scales::comma(n), "\n(", porcentaje, "%)")
) %>%
arrange(desc(n)) %>%
mutate(
ypos = cumsum(n) - 0.5 * n
)
# Gráfico circular con etiquetas mixtas
ggplot(datos_sexo, aes(x = "", y = n, fill = SEXO)) +
geom_bar(stat = "identity", width = 1, color = "white", size = 2) +
coord_polar("y", start = 0) +
# Etiquetas dentro del círculo (MUJER y HOMBRE)
geom_text(data = filter(datos_sexo, SEXO != "NO REPORTA"),
aes(y = ypos, label = etiqueta),
x = 1,
color = "white",
fontface = "bold",
size = 5) +
# Etiqueta fuera del círculo (NO REPORTA)
geom_text(data = filter(datos_sexo, SEXO == "NO REPORTA"),
aes(y = ypos, label = etiqueta),
x = 1.8,
color = "#000000",
fontface = "bold",
size = 4.5,
hjust = 0) +
scale_fill_manual(values = c(
"MUJER" = "#800080", # Morado principal
"HOMBRE" = "#FF8C00", # Naranja principal
"NO REPORTA" = "#a64da6" # Morado claro
)) +
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,
margin = margin(b = 5)
),
plot.subtitle = element_text(
color = "#FF8C00",
size = 12,
hjust = 0.5,
margin = margin(b = 15)
),
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.2 Tendencias temporales ¿Se observan picos de violencia según meses y sexo?
library(dplyr)
library(ggplot2)
meses_orden <- c(
"ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO",
"JULIO", "AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE"
)
# Preparar datos con etiquetas
datos_tendencia <- base_unificada %>%
filter(AÑO == 2024) %>%
mutate(MES = factor(MES, levels = meses_orden)) %>%
group_by(MES, SEXO) %>%
summarise(casos = n(), .groups = "drop")
# Gráfico de líneas con la paleta del documento
ggplot(datos_tendencia, aes(x = MES, y = casos, color = SEXO, group = SEXO)) +
# Expandir el eje Y para dar espacio a las etiquetas
scale_y_continuous(expand = expansion(mult = c(0.05, 0.15))) +
geom_line(size = 1.5, alpha = 0.9) +
geom_point(size = 3.5) +
# Etiquetas de datos en cada punto
geom_text(aes(label = scales::comma(casos)),
vjust = -0.8,
size = 3,
fontface = "bold",
show.legend = FALSE) +
scale_color_manual(values = c(
"MUJER" = "#800080", # Morado principal
"HOMBRE" = "#FF8C00", # Naranja principal
"NO REPORTA" = "#a64da6" # Morado claro
)) +
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,
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.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.3 Distribución por etapa de vida
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.4 Delitos sexuales: comparación de prevalencias por sexo
4.5 Distribución geográfica
library(RColorBrewer)
# 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)
# 3. Preparar etiqueta con número de casos
top10_departamentos <- top10_departamentos %>%
mutate(label = paste0(DEPARTAMENTO, " (", casos, ")"))
# 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 paleta de colores
paleta <- brewer.pal(10, "Set3")
# 7. Graficar mapa
ggplot() +
geom_sf(data = mapa, fill = "gray90", color = "white") + # Todos los departamentos en gris
geom_sf(data = subset(mapa, !is.na(casos)),
aes(fill = label), color = "white") + # Top 10 coloreados
scale_fill_manual(values = paleta, name = "Departamento (casos)") +
labs(
title = "Top 10 departamentos con más casos de violencia de género"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(face = "bold", size = 16),
legend.title = element_text(face = "bold"),
legend.text = element_text(size = 11)
)