Son importadas las siguientes librerias:
library(readr)
library(readxl)
library(plotly)
library(data.table)
library(plyr)
library(dplyr)
library(data.table)
library(fastDummies)
library(factoextra)
library(ggplot2)
library(tidyr)En total en el agrupamiento se usaron 63 variables, discriminando por 4 bloques principales que consideramos importantes Promedios días de la Semana: Corresponde a cada uno de los días de la semana promediado en las 261 veces que se registraba en los años del 2014-2018
Promedios meses del año: Corresponde al promedio de cada uno de los meses en los 5 años, buscando encontrar el comportamiento de cada uno de los meses con respecto al número de accidentes ocurridos.
Promedio mensual ocurrido en cada uno de los diseños viales registrados: para este caso se registraron el promedio de accidentes mensuales en los 5 años que ocurrían en cada uno de las categorías registradas como diseño en las bases iniciales como lo son- Ciclo Ruta – Glorieta – Intersección–Lote–Paso a nivel–*Paso elevado– Paso inferior–Ponton Mes–Puente–Tramo Via–Tunel–Via Peatonal**
Promedio días especiales: Se definieron fechas especiales a analizar y se realizó un promedio de los accidentes ocurridos durante los 5 años analizados en las siguientes fechas D_madre–N_buena–Navidad–Feria_Flores–1_enero Y adicional bajo un previo análisis se escogieron días puntuales del mes que registraron altos indices de accidentalidad. Dia_5 Prom Dia 10 Prom Dia 21 Prom Dia 23 Prom Dia 16 Prom Dia 17 Prom Dia 18 Prom
NOTA: El cálculo de los promedios y el orden de las variables se obtuvo a través de un proceso en Excel realizado previamente, donde se ordenaron la variables desde la base de datos inicial obtenida en la limpieza de los datos y se obtuvo la siguiente tabla.
Comenzamos a través de un summary que nos permita identificar condiciones particulares de cada una de las variables.
## Barrio Miercoles.prom Domingo.Prome
## Aguas Frias : 1 Min. :0.00000 Min. :0.00000
## Aldea Pablo Vi : 1 1st Qu.:0.06538 1st Qu.:0.06801
## Alejandría : 1 Median :0.23269 Median :0.18391
## Alejandro Echavarría: 1 Mean :0.39546 Mean :0.24375
## Alfonso López : 1 3rd Qu.:0.50865 3rd Qu.:0.35632
## Altamira : 1 Max. :3.23461 Max. :1.36782
## (Other) :306
## Jueves.Prom Lunes.Promedio Martes.Prome Sabado.Promedio
## Min. :0.0000 Min. :0.00000 Min. :0.00000 Min. :0.0000
## 1st Qu.:0.0728 1st Qu.:0.06897 1st Qu.:0.06513 1st Qu.:0.0728
## Median :0.2203 Median :0.21648 Median :0.22414 Median :0.2452
## Mean :0.3870 Mean :0.36779 Mean :0.39934 Mean :0.3710
## 3rd Qu.:0.5048 3rd Qu.:0.47893 3rd Qu.:0.50000 3rd Qu.:0.4770
## Max. :3.0996 Max. :2.83525 Max. :3.34100 Max. :2.8659
##
## Viernes.Prome Promedio.Ene Promedio.Feb Promedio.Marz
## Min. :0.00000 Min. : 0.000 Min. : 0.00 Min. : 0.00
## 1st Qu.:0.06513 1st Qu.: 1.750 1st Qu.: 1.80 1st Qu.: 2.40
## Median :0.22989 Median : 6.200 Median : 6.70 Median : 7.00
## Mean :0.40880 Mean : 9.656 Mean :10.77 Mean :11.52
## 3rd Qu.:0.52969 3rd Qu.:12.000 3rd Qu.:14.00 3rd Qu.:15.70
## Max. :3.15709 Max. :73.200 Max. :78.20 Max. :84.20
##
## Promedio.Abril Promedio.Mayo Promedio.Junio Promo.Julio
## Min. : 0.00 Min. : 0.00 Min. : 0.00 Min. : 0.00
## 1st Qu.: 1.95 1st Qu.: 2.00 1st Qu.: 1.80 1st Qu.: 2.20
## Median : 7.00 Median : 6.80 Median : 6.50 Median : 7.00
## Mean :11.02 Mean :11.68 Mean :10.75 Mean :11.46
## 3rd Qu.:14.20 3rd Qu.:15.65 3rd Qu.:14.45 3rd Qu.:15.20
## Max. :78.80 Max. :88.80 Max. :87.20 Max. :92.80
##
## Promedio.Agosto Promedio.Sept Promedio.Oct Promedio.Nov
## Min. : 0.00 Min. : 0.00 Min. : 0.00 Min. : 0.00
## 1st Qu.: 2.20 1st Qu.: 2.15 1st Qu.: 2.35 1st Qu.: 2.15
## Median : 7.20 Median : 7.40 Median : 6.60 Median : 6.70
## Mean :11.98 Mean :11.72 Mean :11.58 Mean :10.87
## 3rd Qu.:16.05 3rd Qu.:15.60 3rd Qu.:15.20 3rd Qu.:13.40
## Max. :87.20 Max. :85.20 Max. :94.80 Max. :78.80
##
## Promedio.Dic Atropello.Mensual Caida.de.Ocupante.Mensual Choque.Mensual
## Min. : 0.00 Min. : 0.0000 Min. :0.0000 Min. : 0.0000
## 1st Qu.: 2.15 1st Qu.: 0.2500 1st Qu.:0.2000 1st Qu.: 0.9625
## Median : 6.40 Median : 0.7167 Median :0.6667 Median : 3.9000
## Mean :11.23 Mean : 1.1044 Mean :0.9923 Mean : 7.5551
## 3rd Qu.:13.60 3rd Qu.: 1.5333 3rd Qu.:1.4333 3rd Qu.: 8.9083
## Max. :89.00 Max. :15.3333 Max. :6.0500 Max. :59.0333
##
## Herido.Mensual Muerto.Mensual Solo.Daños.Mes X2014
## Min. : 0.000 Min. :0.00000 Min. : 0.000 Min. : 0.00
## 1st Qu.: 1.363 1st Qu.:0.01667 1st Qu.: 0.600 1st Qu.: 23.75
## Median : 4.050 Median :0.03333 Median : 2.342 Median : 82.00
## Mean : 6.100 Mean :0.06693 Mean : 5.020 Mean : 133.31
## 3rd Qu.: 8.588 3rd Qu.:0.08333 3rd Qu.: 5.504 3rd Qu.: 167.50
## Max. :37.617 Max. :0.56667 Max. :48.917 Max. :1151.00
##
## X2015 X2016 X2017 X2018
## Min. : 0.0 Min. : 0.0 Min. : 0.0 Min. : 0.0
## 1st Qu.: 25.0 1st Qu.: 25.0 1st Qu.: 25.0 1st Qu.: 25.5
## Median : 82.0 Median : 87.0 Median : 79.5 Median : 77.0
## Mean : 134.9 Mean :137.3 Mean :136.4 Mean :129.3
## 3rd Qu.: 178.0 3rd Qu.:174.0 3rd Qu.:180.0 3rd Qu.:170.0
## Max. :1069.0 Max. :948.0 Max. :929.0 Max. :998.0
##
## Prom_año Ciclo.Ruta.Mes Glorieta.Mes Interseccion.Mes
## Min. : 0.20 Min. :0.00000 Min. :0.0000 Min. : 0.0000
## 1st Qu.: 24.15 1st Qu.:0.00000 1st Qu.:0.0000 1st Qu.: 0.1458
## Median : 81.30 Median :0.01667 Median :0.0000 Median : 0.9500
## Mean : 134.24 Mean :0.03766 Mean :0.2683 Mean : 1.7845
## 3rd Qu.: 178.55 3rd Qu.:0.05000 3rd Qu.:0.0375 3rd Qu.: 2.3750
## Max. :1017.20 Max. :0.40000 Max. :9.7833 Max. :16.3167
##
## Lote.Mensual Paso.a.nivel.Mensual Paso.elevado.Mes Paso.inferior.mes
## Min. :0.0000 Min. :0.000000 Min. :0.00000 Min. :0.00000
## 1st Qu.:0.2000 1st Qu.:0.000000 1st Qu.:0.00000 1st Qu.:0.00000
## Median :0.5583 Median :0.000000 Median :0.00000 Median :0.00000
## Mean :0.7772 Mean :0.004487 Mean :0.05358 Mean :0.02521
## 3rd Qu.:1.1167 3rd Qu.:0.000000 3rd Qu.:0.01667 3rd Qu.:0.00000
## Max. :5.6333 Max. :0.200000 Max. :1.83333 Max. :1.65000
##
## Ponton.Mes Puente.mes Tramo.Via.Me.s Tunel.Mes
## Min. :0.000000 Min. :0.00000 Min. : 0.000 Min. :0.000000
## 1st Qu.:0.000000 1st Qu.:0.00000 1st Qu.: 1.596 1st Qu.:0.000000
## Median :0.000000 Median :0.00000 Median : 4.817 Median :0.000000
## Mean :0.001068 Mean :0.03835 Mean : 8.130 Mean :0.001442
## 3rd Qu.:0.000000 3rd Qu.:0.01667 3rd Qu.:10.117 3rd Qu.:0.000000
## Max. :0.033333 Max. :1.03333 Max. :64.433 Max. :0.183333
##
## Via.Peat.Mes Prom_D_madre Prom_N_buena Prom_Navidad
## Min. :0.000000 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.000000 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0000
## Median :0.000000 Median :0.2000 Median :0.2500 Median :0.0000
## Mean :0.002564 Mean :0.3558 Mean :0.3261 Mean :0.2292
## 3rd Qu.:0.000000 3rd Qu.:0.6000 3rd Qu.:0.5000 3rd Qu.:0.2500
## Max. :0.050000 Max. :2.6000 Max. :2.7500 Max. :1.5000
##
## Prom_Feria_Flores Prom_1_enero Dia_5.Prom Dia.10.Prom
## Min. :0.0000 Min. :0.0000 Min. :0.00000 Min. :0.00000
## 1st Qu.:0.0800 1st Qu.:0.0000 1st Qu.:0.06667 1st Qu.:0.06667
## Median :0.2100 Median :0.2000 Median :0.21667 Median :0.23333
## Mean :0.3959 Mean :0.2199 Mean :0.37409 Mean :0.37842
## 3rd Qu.:0.5400 3rd Qu.:0.4000 3rd Qu.:0.50000 3rd Qu.:0.48333
## Max. :2.8600 Max. :1.6000 Max. :2.78333 Max. :2.85000
##
## Dia.21.Prom Dia.23.Prom Dia.16.Prom Dia.17.Prom
## Min. :0.00000 Min. :0.00000 Min. :0.00000 Min. :0.00000
## 1st Qu.:0.06667 1st Qu.:0.06667 1st Qu.:0.06667 1st Qu.:0.06667
## Median :0.21667 Median :0.21667 Median :0.23333 Median :0.22500
## Mean :0.37559 Mean :0.37244 Mean :0.38114 Mean :0.38125
## 3rd Qu.:0.51667 3rd Qu.:0.48750 3rd Qu.:0.48750 3rd Qu.:0.47083
## Max. :2.73333 Max. :3.15000 Max. :2.93333 Max. :3.13333
##
## Dia.18.Prom semaforos estrato grupo
## Min. :0.00000 Min. : 0.000 Min. :1.000 Min. :1.00
## 1st Qu.:0.06667 1st Qu.: 0.000 1st Qu.:2.000 1st Qu.:2.00
## Median :0.21667 Median : 0.000 Median :3.000 Median :3.00
## Mean :0.37826 Mean : 2.186 Mean :2.878 Mean :3.59
## 3rd Qu.:0.46667 3rd Qu.: 3.000 3rd Qu.:3.000 3rd Qu.:6.00
## Max. :2.70000 Max. :46.000 Max. :6.000 Max. :7.00
##
Comenzamos a través de un summary que nos permita identificar condiciones particulares de cada una de las variables.
Analizamos como cambia la cantidad de Accidentes por día de la semana
Como se puede observar los viernes corresponde al día de más accidentalidad en la ciudad teniendo en cuenta sus actividades e industria, adicional a esto también, identificamos que los domingos al bajar la actividad laboral y ser el día considerado de descanso podemos encontrar baja circulación en las calles, lo que hace que sea el día con el # de accidentes más bajo.
Ahora analicemos la accidentalidad presentada mes a mes que nos permita identificar en que momento del años se presentan picos considerables en esta medición.
Cuando analizamos a nivel de mes encontramos elementos muy particulares como los meses de enero donde los promedios de accidentalidad en los 5 años son más bajos que los del resto de meses en el año, contemplando la baja actividad comercial y que gran parte de las personas en la ciudad se encuentran por fuera, adicional a esto encontramos que agosto es el mes con un promedio de accidentalidad más alto, motivado principalmente por los eventos de ciudad como feria de flores fecha en la cual ampliaremos más el estudio en el siguiente análisis.
La bases de datos fue almacena y a partir de este punto, siempre se leyó dicha base de datos.
Son indexados los nombres de los barrios a cada fila. La varible Barrio es eliminada del dataframe.
# Se guarda la variable Barrio en un vector
barrios <- data$Barrio
# Indexación
row.names(data) <- data$Barrio
# Eliminación de la variable del dataframe
data$Barrio <- NULLGeneración de variables dummies.
El parecido o similitud es cuantificable aplicando coeficientes de similitud. Con el uso de estos coeficientes, pudo determinarse la similitud respecto a cada posible dato de barrio de la matriz básica de datos.
Según la clasificación de Sneath y Sokal (1973), en esta aproximación fueron usados coeficientes de distancia.
Las relaciones entre todos los barrios, fueron determinadas y sintetizadas a través de técnicas de análisis de matrices de similitud.
El análisis de agrupamientos a través de reglas arbitrarias, formó grupos de barrios que se asociaron por su grado de similitud. Teniendo en cuenta, el escaso acuerdo para reconocer los límites entre grupos y la enorme cantidad de técnicas propuestas, esta aproximación es correcta en la medida que es útil en el problema planteado.
Las técnicas grupo par son las técnicas más sencillas y utilizadas. Está técnica hace parte a un grupo de técnicas conocidas por ser exclusivas, jerárquicas, aglomerativas, secuenciales, directas y no supervisadas.
Grupo par es una técnica en la cual un barrio o unidad solo puede ser admitida a un solo grupo por nivel. Esto se traduce a que los grupos formados en cualquier etapa del agrupamiento solo contienen dos miembros.
La función scale() fue usada para relizar la estandarización de todas las variables en el marco de los datos. Esto se traduce en la generación de un nuevo set de datos donde las medias son iguales a cero y las varianzas iguales a uno.
Fue usada la distancia euclidiana y la distancia de Manhattan.
Se construyó una nueva matriz de similitud derivada de la matriz de similitud original. Para ello, se usó la función hclust() y el argumento method para indicar los métodos de agrupamiento a aplicar. Se usaron como métodos:
Ligamiento simple
Ligamiento completo
Ligamiento promedio
# Cluster generados a partir de la matriz de distancias euclidianas
clusterSe <- hclust(Se, method = "single")
clusterCe <- hclust(Se, method = "complete")
clusterAe <- hclust(Se, method = "average")
# Cluster generados a partir de la matriz de distancias de Manhattan
clusterSm <- hclust(Sm, method = "single")
clusterCm <- hclust(Sm, method = "complete")
clusterAm <- hclust(Sm, method = "average")Existe la imposibilidad de que el dendograma sea un reflejo exacto de la matriz de similitud, pues necesariamente las relaciones son distorsionadas al realizar una representación bidimensional de la matriz.
Buscando que el dendograma representara en mayor grado los valores de la matriz de similitud, se determinó el coeficiente de correlación cofenética. Una correlación alta es señal de escasa distorsión, por lo que valores superiores a 0.80 indican un buen dendograma.
mat.cofSe <- cophenetic(clusterSe)
c1<-cor(mat.cofSe, Se, method = "pearson")
mat.cofCe <- cophenetic(clusterCe)
c2<-cor(mat.cofCe, Se, method = "pearson")
mat.cofAe <- cophenetic(clusterAe)
c3<-cor(mat.cofAe, Se, method = "pearson")
mat.cofSm <- cophenetic(clusterSm)
c5<-cor(mat.cofSm, Sm, method = "pearson")
mat.cofCm <- cophenetic(clusterCm)
c6<-cor(mat.cofCm, Sm, method = "pearson")
mat.cofAm <- cophenetic(clusterAm)
c7<-cor(mat.cofAm, Sm, method = "pearson")Los mejores coeficientes fueron 0.92 para la matriz de similitud de distancias Euclidianas y 0.92 para la matriz con distancia de Manhattan. En ambos casos la técnica de ligamiento promedio fue la que originó menor distorsión.
Los dos mejores clusters fueron los analizados a través del dendograma. Se buscaba generar de 4 a 7 grupos, pues de esta forma los clusters podrían dar una mejor idea del grado de accidentalidad.
Fueron generados 4,5,6 y 7 grupos. Sin embargo, los dendogramas siempre arrojaron un grupo con un único miembro que correspondía al barrio con la mayor accidentalidad de la ciudad; por lo que se exploró otra técnica que pudiera agrupar los barrios de otra manera.
A continuación se reporta la distribución de barrios por grupo para los dos dendogramas elegidos con 4 grupos.
Contrario a los grupos pares, en este método el número de grupos se establece a priori del análisis (supervisado). En este caso a partir de una matriz de datos, se determina el agrupamiento de los barrios en K grupos, de forma que los barrios en un grupo son más cercanos entre si que a otros barrios de otros grupos. Este método también es considerado no jerárquico, no aglomerativo y no divisivo.
K-medias puede aplicarse tanto a la matriz original como a una matriz estandarizada. En este caso particular se sabe que muchas variables en la matriz original tienen diferentes unidades e incluso hay variables que representan variables categóricas, por tal razón se opta por realizar estandarización.
Si bien el número de grupos es determinado a priori, se evaluó cuál es el número óptimo de grupos utilizando el método del codo. Este método analiza la variación intra-grupo como función de la cantidad de grupos: el número óptimo será aquel que, al ir subdiviendo los grupos, los subgrupos resultantes no disminuyen de manera considerable la variación intra-grupo.
fA <- fviz_nbclust(z, FUNcluster = kmeans, method = "wss", k.max = 15,
linecolor = "#05668d") +xlab("Número de grupos")+ ylab("Variación intra-grupo")
fB <- fviz_nbclust(z, FUNcluster = kmeans, method = "wss", k.max = 7,
linecolor = "#006d77") +xlab("Número de grupos")+ ylab("Variación intra-grupo")
subplot(fA,fB,shareX = TRUE,shareY = TRUE)Las gráficas anteriores son claras en mostrar una disminución considerable entre k=1 y K=4. Además se observa una tendencia en la gráfica a partir del grupo 6, donde empieza a ‘aplanarse’.
Se determina que serán generados 6 centros, es decir que K=6. Se considera para aplicar el modelo 1000 configuraciones iniciales de centroides aleatorios dadas por el argumento nstart, ya que una sola configuración inicial puede no ser óptima.
Como resultado se obtuvo un porcentaje de variación explicada por el agrupamiento de 79.9%, calculada como variación entre grupos sobre la variación total.
Finalmente, para idenificar puntualmente a que grupo fue asignado cada barrio, se usó el siguiente comando:
El tamaño de cada grupo generado se explica a través del siguiente grafico de barras.
Los grupos generados se analizaron nuevamente a la luz de la variables originales y se determinó que los barrios se podian clasificar por accidentalidad asi:
10 barrios pertenecen a Muy alto.
22 barrios pertencen a Alto
62 barrios pertenecen a Medio alto.
94 barrios pertencen a Medio
99 barrios pertenecen a Bajo.
25 barrios pertencen a Muy bajo
La clasificación de los grupos se realizó con respecto al promedio de accidentalidad que se presentó durante los años evaluados, bajo diferentes variables: accidentalidad por día, por mes, por año, por día especial o festivo, entre otras.
Después del previo análisis descriptivo sobre el total de datos, se encontró que los grupos tienen una tendencia muy clara para todos los días de la semana y se corresponde con la clasificación asignada; donde el promedio de accidentalidad los viernes es el mas alto de la semana y el domingo siempre es el mas bajo, sin importar el grado de accidentalidad que tenga cada grupo.
La accidentalidad puede estar afectadas por elementos importantes que se identificaron en la matriz de agrupamiento como semáforos e infraestructura, estrato, Gravedad de los incidentes, días festivos y días especiales, que lograban mediante el análisis, justificar el nivel de accidentalidad evaluado por grupo.
Los semáforos son los encargados de regular el flujo vehicular, lo que los convierte en una medida directa de flujo y riesgos de accidentes de tránsito, por lo que al analizar esta variable dentro de los grupos, se encuentra que su cantidad promedio por barrio depende directamente del grado de accidentalidad de este, justificando además uso de estos es esas zonas.
Cuando se analiza la variable estrato se encuentra que el promedio de estrato para los barrios de Medellín es 3, lo que no difiere en ninguno de los 3 primeros grupos. Cuando se valida en los grupos de Bajo y Muy bajo encontramos que esta baja accidentalidad se relaciona por el estrato, y explicada quizá por la falta de vías e infraestructura que permita la movilización de gran flujo de vehículos por la zona; adicional a esto, al georreferenciarse se nota que estos barrios suelen ubicarse principalmente en las periferias de la ciudad.
Las clasificaciones de accidente por gravedad, se conservan en los grupos, siendo solo daños y heridos las más altas en todos los grupos de accidentalidad, en comparación con las muertes.
Finalmente, identificar fechas o eventos de ciudad particulares, posibilita que puedan destinarse esfuerzos y recursos en la solución de problemas de movilidad en esas fechas. Como parte del análisis se validaron algunas fechas y se compararon con dos días importantes de la semana (el más accidentado y el menos accidentado), buscando identificar si estas fechas son importantes y particulares para los incidentes de tránsito en la ciudad de Medellín. Se infiere por lo observado, que días como el día de la madre y que los días en los que transcurre la feria de flores, pueden compararse con la actividad de un viernes e inclusive, en muchas ocasiones superarla; y que el 1 de enero y 25 de diciembre, pueden compararse con los incidentes que ocurren en un domingo promedio.
Preprocesamiento de base de datos de MEData
GitHub: Movimed_GitHub
Video Promocional: MoviMed(Analítica predictiva)
Aplicación: MoviMed
Proceso de predicción de la accidentalidad en la ciudad de Medellín con base en los años 2014-2018
APODACA, F. X. P. M. J., & CRISCI, J. V. ANÁLISIS MULTIVARIADO PARA DATOS BIOLÓGICOS.
James, G., Witten, D., Hastie, T., & Tibshirani, R. (2013). An introduction to statistical learning (Vol. 112, p. 18). New York: springer.
Peng, R. D. (2016). R programming for data science. Leanpub.
Zumel, N., Mount, J., & Porzak, J. (2014). Practical data science with R (pp. 101-104). Shelter Island, NY: Manning.