Este informe aplica un modelo de regresión múltiple a datos sobre accidentes en Barranquilla, con el objetivo de identificar qué factores numéricos están asociados a la cantidad de accidentes.
# Librerías necesarias
library(tidyverse)
library(car)
library(corrplot)
# Leer el archivo CSV (ajusta si el archivo está en otra ruta)
datos <- read.csv("Accidentalidad_en_Barranquilla.csv", encoding = "UTF-8")
# Instalar (si no tienes) y cargar librerías útiles
if (!require("skimr")) install.packages("skimr")
if (!require("DT")) install.packages("DT")
library(skimr)
library(DT)
# 1. Vista general del conjunto de datos
skim(datos)
| Name | datos |
| Number of rows | 31542 |
| Number of columns | 11 |
| _______________________ | |
| Column type frequency: | |
| character | 6 |
| numeric | 5 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| FECHA_ACCIDENTE | 0 | 1 | 22 | 22 | 0 | 1886 | 0 |
| DIA_ACCIDENTE | 0 | 1 | 3 | 3 | 0 | 7 | 0 |
| HORA_ACCIDENTE | 0 | 1 | 11 | 11 | 0 | 871 | 0 |
| GRAVEDAD_ACCIDENTE | 0 | 1 | 10 | 11 | 0 | 3 | 0 |
| CLASE_ACCIDENTE | 0 | 1 | 4 | 14 | 0 | 6 | 0 |
| SITIO_EXACTO_ACCIDENTE | 0 | 1 | 0 | 64 | 1 | 17398 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| AÑO_ACCIDENTE | 0 | 1.00 | 2017.02 | 1.46 | 2015 | 2016 | 2017 | 2018 | 2020 | ▇▅▃▃▁ |
| MES_ACCIDENTE | 0 | 1.00 | 6.47 | 3.48 | 1 | 3 | 6 | 10 | 12 | ▇▅▅▅▇ |
| CANT_HERIDOS_EN._SITIO_ACCIDENTE | 25652 | 0.19 | 1.44 | 1.07 | 1 | 1 | 1 | 2 | 22 | ▇▁▁▁▁ |
| CANT_MUERTOS_EN._SITIO_ACCIDENTE | 31351 | 0.01 | 1.03 | 0.17 | 1 | 1 | 1 | 1 | 2 | ▇▁▁▁▁ |
| CANTIDAD_ACCIDENTES | 0 | 1.00 | 1.00 | 0.01 | 1 | 1 | 1 | 1 | 2 | ▇▁▁▁▁ |
# 2. Tabla interactiva para explorar los datos fácilmente
datatable(head(datos, 100),
options = list(pageLength = 10),
caption = "Vista previa de los primeros 100 registros")
# 3. Ver cuántos valores faltan por columna
colSums(is.na(datos))
## FECHA_ACCIDENTE AÑO_ACCIDENTE
## 0 0
## MES_ACCIDENTE DIA_ACCIDENTE
## 0 0
## HORA_ACCIDENTE GRAVEDAD_ACCIDENTE
## 0 0
## CLASE_ACCIDENTE SITIO_EXACTO_ACCIDENTE
## 0 0
## CANT_HERIDOS_EN._SITIO_ACCIDENTE CANT_MUERTOS_EN._SITIO_ACCIDENTE
## 25652 31351
## CANTIDAD_ACCIDENTES
## 0
# Ver nombres de columnas
colnames(datos)
## [1] "FECHA_ACCIDENTE" "AÑO_ACCIDENTE"
## [3] "MES_ACCIDENTE" "DIA_ACCIDENTE"
## [5] "HORA_ACCIDENTE" "GRAVEDAD_ACCIDENTE"
## [7] "CLASE_ACCIDENTE" "SITIO_EXACTO_ACCIDENTE"
## [9] "CANT_HERIDOS_EN._SITIO_ACCIDENTE" "CANT_MUERTOS_EN._SITIO_ACCIDENTE"
## [11] "CANTIDAD_ACCIDENTES"
# Ver estructura general
glimpse(datos)
## Rows: 31,542
## Columns: 11
## $ FECHA_ACCIDENTE <chr> "01/01/2015 12:00:00 AM", "01/01/2015…
## $ AÑO_ACCIDENTE <int> 2015, 2015, 2015, 2015, 2015, 2015, 2…
## $ MES_ACCIDENTE <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ DIA_ACCIDENTE <chr> "Jue", "Jue", "Jue", "Jue", "Jue", "J…
## $ HORA_ACCIDENTE <chr> "02:10:00:PM", "02:15:00:PM", "02:20:…
## $ GRAVEDAD_ACCIDENTE <chr> "Con heridos", "Solo daños", "Solo da…
## $ CLASE_ACCIDENTE <chr> "Choque", "Choque", "Choque", "Choque…
## $ SITIO_EXACTO_ACCIDENTE <chr> "VIA 40 CON 77", "CALLE 14 CR 13", "C…
## $ CANT_HERIDOS_EN._SITIO_ACCIDENTE <int> 1, NA, NA, 2, NA, 2, 1, NA, NA, NA, N…
## $ CANT_MUERTOS_EN._SITIO_ACCIDENTE <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ CANTIDAD_ACCIDENTES <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
# Normalizar los nombres de columnas
names(datos) <- make.names(names(datos))
# Verifica los nombres corregidos
print(names(datos))
## [1] "FECHA_ACCIDENTE" "AÑO_ACCIDENTE"
## [3] "MES_ACCIDENTE" "DIA_ACCIDENTE"
## [5] "HORA_ACCIDENTE" "GRAVEDAD_ACCIDENTE"
## [7] "CLASE_ACCIDENTE" "SITIO_EXACTO_ACCIDENTE"
## [9] "CANT_HERIDOS_EN._SITIO_ACCIDENTE" "CANT_MUERTOS_EN._SITIO_ACCIDENTE"
## [11] "CANTIDAD_ACCIDENTES"
# Seleccionar columnas relevantes y omitir NA
datos_numericos <- datos %>%
select(CANT_HERIDOS_EN._SITIO_ACCIDENTE,
CANT_MUERTOS_EN._SITIO_ACCIDENTE,
CANTIDAD_ACCIDENTES) %>%
na.omit()
# Ver resumen
summary(datos_numericos)
## CANT_HERIDOS_EN._SITIO_ACCIDENTE CANT_MUERTOS_EN._SITIO_ACCIDENTE
## Min. : 1.000 Min. :1.000
## 1st Qu.: 1.000 1st Qu.:1.000
## Median : 1.000 Median :1.000
## Mean : 1.706 Mean :1.044
## 3rd Qu.: 2.000 3rd Qu.:1.000
## Max. :12.000 Max. :2.000
## CANTIDAD_ACCIDENTES
## Min. :1
## 1st Qu.:1
## Median :1
## Mean :1
## 3rd Qu.:1
## Max. :1
# Correlación
correlaciones <- cor(datos_numericos);correlaciones
## CANT_HERIDOS_EN._SITIO_ACCIDENTE
## CANT_HERIDOS_EN._SITIO_ACCIDENTE 1.00000000
## CANT_MUERTOS_EN._SITIO_ACCIDENTE -0.04510406
## CANTIDAD_ACCIDENTES NA
## CANT_MUERTOS_EN._SITIO_ACCIDENTE
## CANT_HERIDOS_EN._SITIO_ACCIDENTE -0.04510406
## CANT_MUERTOS_EN._SITIO_ACCIDENTE 1.00000000
## CANTIDAD_ACCIDENTES NA
## CANTIDAD_ACCIDENTES
## CANT_HERIDOS_EN._SITIO_ACCIDENTE NA
## CANT_MUERTOS_EN._SITIO_ACCIDENTE NA
## CANTIDAD_ACCIDENTES 1
corrplot(correlaciones, method = "color", type = "upper", tl.cex = 0.9)
# Ajustar modelo de regresión
modelo <- lm(CANTIDAD_ACCIDENTES ~ ., data = datos_numericos)
# Ver resumen
summary(modelo)
##
## Call:
## lm(formula = CANTIDAD_ACCIDENTES ~ ., data = datos_numericos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.265e-17 -3.265e-17 -3.265e-17 -2.645e-17 1.798e-15
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.000e+00 1.451e-16 6.89e+15 <2e-16 ***
## CANT_HERIDOS_EN._SITIO_ACCIDENTE -6.196e-18 1.540e-17 -4.02e-01 0.689
## CANT_MUERTOS_EN._SITIO_ACCIDENTE -3.058e-17 1.330e-16 -2.30e-01 0.819
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.251e-16 on 65 degrees of freedom
## Multiple R-squared: 0.4893, Adjusted R-squared: 0.4736
## F-statistic: 31.14 on 2 and 65 DF, p-value: 3.267e-10
# Verificar VIF
vif(modelo)
## CANT_HERIDOS_EN._SITIO_ACCIDENTE CANT_MUERTOS_EN._SITIO_ACCIDENTE
## 1.002039 1.002039
# Diagnósticos gráficos
par(mfrow = c(2, 2))
plot(modelo)
CANT_HERIDOS_EN_.SITIO_ACCIDENTE podría
tener un peso mayor según el coeficiente estimado.