1 Introducción

Este informe analiza la incidencia de homicidios en Colombia entre los años 2016 y 2019. Durante este período, Colombia enfrentó desafíos significativos en términos de seguridad pública, con el homicidio siendo una preocupación central. El estudio se centra en identificar patrones, tendencias geogrÔficas y posibles factores asociados con estos crímenes, utilizando datos oficiales para ofrecer una visión clara de la situación.

1.1 Importar base de datos

library(readxl)
ruta_excel <-"/Users/rodrigoarrietarueda/Desktop/SENA/R/Homicidios.xlsx"
Homicidios <- read_excel(ruta_excel)
View(Homicidios)

2 Ejercicios

tabla_anual <- table(Homicidios$`AƱo del hecho`)
df_anual <- as.data.frame(tabla_anual)
colnames(df_anual) <- c("AƱo", "Cantidad de Incidentes")
df_anual <- df_anual[order(df_anual$AƱo), ]
df_anual
tabla_sexo <- table(Homicidios$"Sexo") 
df_sexo <- as.data.frame(tabla_sexo)
colnames(df_sexo) <- c("Sexo", "Cantidad de Incidentes")
df_sexo
tabla_edad <- table(Homicidios$"Grupo de edad de la victima")
df_edad <- as.data.frame(tabla_edad)
colnames(df_edad) <- c("Grupo de Edad de la victima", "Cantidad de Incidentes")
df_edad
tabla_mes <- table(Homicidios$"Mes del hecho")
df_mes <- as.data.frame(tabla_mes)
colnames(df_mes) <- c("Mes", "Cantidad de Incidentes")
df_mes
tabla_dia <- table(Homicidios$"Dia del hecho")
df_dia <- as.data.frame(tabla_dia)
colnames(df_dia) <- c("DĆ­a", "Cantidad de Incidentes")
df_dia
tabla_departamento <- table(Homicidios$"Departamento del hecho DANE")
df_departamento <- as.data.frame(tabla_departamento)
colnames(df_departamento) <- c("Departamento", "Cantidad de Incidentes")
df_departamento
tabla_municipio <- table(Homicidios$"Municipio del hecho DANE")
df_municipio <- as.data.frame(tabla_municipio)
colnames(df_municipio) <- c("Municipio", "Cantidad de Incidentes")
df_municipio
tabla_lesiones <- table(Homicidios$"Lesion fatal de causa externa")
df_lesiones <- as.data.frame(tabla_lesiones)
colnames(df_lesiones) <- c("Lesión Fatal", "Cantidad de Incidentes")
df_lesiones
tabla_estado <- table(Homicidios$"Estado")
df_estado <- as.data.frame(tabla_estado)
colnames(df_estado) <- c("Estado", "Cantidad de Incidentes")
df_estado

2.1 Nota:(ā€œfunción which.maxā€)

  • Usamos la función ā€œfunción which.maxā€, para hallar el aƱo con mayor numero de homicidios:

La función which.max(conteo_anual) encontrarÔ del recuento el número mÔximo y la función names(conteo_anual) traerÔ el año con mayor numero de homicidios.

conteo_anual <- table(Homicidios$"AƱo del hecho")
aƱo_max <- names(conteo_anual)[which.max(conteo_anual)]
cat("El año con el mÔximo número de homicidios es:", año_max, "\n")
## El año con el mÔximo número de homicidios es: 2018
  • Usamos la función ā€œfunción which.maxā€, para buscar el departamento con mayor numero de homicidios:
#tabla de frecuencia por departamentos
tabla_departamento <- table(Homicidios$"Departamento del hecho DANE")
df_departamento <- as.data.frame(tabla_departamento)
colnames(df_departamento) <- c("Departamento", "Cantidad.de.Incidentes")
# Encontrar el valor mƔximo en la columna "Cantidad de Incidentes", na.rm me omite los valores faltantes o nulos
max_incidentes <- max(df_departamento$Cantidad.de.Incidentes, na.rm = TRUE)
# Encontrar el departamento con el mayor nĆŗmero de homicidios
departamento_max <- df_departamento$Departamento[which.max(df_departamento$Cantidad.de.Incidentes)]
#concateno entre texto y variables, la funcion as.character convierte un objeto a caracter
cat("El departamento con el mÔximo número de homicidios es:", as.character(departamento_max), "con", max_incidentes, "incidentes.\n")
## El departamento con el mÔximo número de homicidios es: Valle del Cauca con 9237 incidentes.
  • Usamos la función ā€œfunción which.maxā€, para buscar el municipio con mayor numero de homicidios
# tabla de frecuencias por municipio
tabla_municipio <- table(Homicidios$"Municipio del hecho DANE")
df_municipio <- as.data.frame(tabla_municipio)
colnames(df_municipio) <- c("Municipio", "Cantidad de Incidentes")
# Encontrar el valor mƔximo en la columna "Cantidad de Incidentes", na.rm me omite los valores faltantes o nulos
max_incidentes_municipio <- max(df_municipio$`Cantidad de Incidentes`, na.rm = TRUE)
# Encontrar el municipio con el mayor nĆŗmero de homicidios
municipio_max <- df_municipio$Municipio[which.max(df_municipio$`Cantidad de Incidentes`)]
#concateno entre texto y variables, la funcion as.character convierte un objeto a caracter
cat("El municipio con el mÔximo número de homicidios es:", as.character(municipio_max), "con", max_incidentes_municipio, "incidentes.\n")
## El municipio con el mÔximo número de homicidios es: Cali con 4862 incidentes.
  • Usamos la función ā€œfunción which.maxā€, para buscar el mes con mayor numero de homicidios:
# Crear tabla de frecuencias por mes
tabla_mes <- table(Homicidios$"Mes del hecho")
df_mes <- as.data.frame(tabla_mes)
colnames(df_mes) <- c("Mes", "Cantidad de Incidentes")
max_incidentes_mes <- max(df_mes$`Cantidad de Incidentes`, na.rm = TRUE)
mes_max <- df_mes$Mes[which.max(df_mes$`Cantidad de Incidentes`)]
cat("El mes con el mÔximo número de homicidios es:", as.character(mes_max), "con", max_incidentes_mes, "incidentes.\n")
## El mes con el mÔximo número de homicidios es: Diciembre con 4534 incidentes.
  • Usamos la función ā€œfunción which.maxā€, para buscar el dia en que hay mayor incidencia de homicidios:
tabla_dia <- table(Homicidios$"Dia del hecho")
df_dia <- as.data.frame(tabla_dia)
colnames(df_dia) <- c("Dia", "Cantidad de Incidentes")
max_incidentes_dia <- max(df_dia$`Cantidad de Incidentes`, na.rm = TRUE)
dia_max <- df_dia$Dia[which.max(df_dia$`Cantidad de Incidentes`)]
cat("El día con el mÔximo número de homicidios es:", as.character(dia_max), "con", max_incidentes_dia, "incidentes.\n")
## El día con el mÔximo número de homicidios es: Domingo con 10072 incidentes.

3 GrƔficos:

library(ggplot2)
# Crea un dataframe con la tabla de incidentes por aƱo
df_anual <- as.data.frame(table(Homicidios$"AƱo del hecho"))
colnames(df_anual) <- c("AƱo", "Cantidad de Incidentes")
df_anual <- df_anual[order(df_anual$AƱo), ]
# GrƔfico de barras
ggplot(data = df_anual, aes(x = AƱo, y = `Cantidad de Incidentes`)) +
  geom_bar(stat = "identity", fill = "skyblue", color = "black") +
  labs(title = "Cantidad de Incidentes de Homicidio por AƱo",
       x = "AƱo",
       y = "Cantidad de Incidentes") +
  theme_minimal()

library(dplyr)
# Agrupar y contar los incidentes por mes y aƱo
tabla_mes_aƱo <- Homicidios %>%
                  group_by(`AƱo del hecho`, `Mes del hecho`) %>%
                  summarise(Cantidad = n()) %>%
                  ungroup()
## `summarise()` has grouped output by 'AƱo del hecho'. You can override using the
## `.groups` argument.
tabla_mes_aƱo$`AƱo del hecho` <- factor(tabla_mes_aƱo$`AƱo del hecho`)

library(ggplot2)

# grƔfico de barras apiladas sin leyenda
ggplot(data = tabla_mes_aƱo, aes(x = `Mes del hecho`, y = Cantidad, fill = `AƱo del hecho`)) +
  geom_bar(stat = "identity", position = "stack", color = "black") +
  labs(title = "Cantidad de Incidentes de Homicidio por Mes",
       x = "Mes",
       y = "Cantidad de Incidentes") +
  theme_minimal() +
  theme(legend.position = "none")

library(ggplot2)

# Crear una tabla de frecuencias de los homicidios por sexo
tabla_sexo <- table(Homicidios$"Sexo")
df_sexo <- as.data.frame(tabla_sexo)
colnames(df_sexo) <- c("Sexo", "Cantidad de Incidentes")

# Crear el grƔfico de barras
gg <- ggplot(df_sexo, aes(x = Sexo, y = `Cantidad de Incidentes`, fill = Sexo)) +
  geom_bar(stat = "identity", color = "black") +
  labs(title = "Cantidad de Homicidios por Sexo",
       x = "Sexo",
       y = "Cantidad de Homicidios") +
  theme_minimal()  


# Mostrar el grƔfico
gg