R Markdown

library(readxl)            # readxl: Para la carga de datos desde archivos Excel.
## Warning: package 'readxl' was built under R version 4.3.3
library(dplyr)             # dplyr: Para la manipulación y transformación de datos.
## Warning: package 'dplyr' was built under R version 4.3.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(lubridate)         # lubridate: Para el manejo y procesamiento de fechas y tiempos.
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(leaflet)           # leaflet: Para la creación de mapas interactivos.
## Warning: package 'leaflet' was built under R version 4.3.3
library(sf)                # sf: Para trabajar con datos geoespaciales.
## Warning: package 'sf' was built under R version 4.3.3
## Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(mapview)           # mapview: Para la visualización interactiva de mapas.
## Warning: package 'mapview' was built under R version 4.3.3
library(spatstat)          # spatstat: Para el análisis de patrones espaciales y análisis de densidad.
## Warning: package 'spatstat' was built under R version 4.3.3
## Loading required package: spatstat.data
## Warning: package 'spatstat.data' was built under R version 4.3.3
## Loading required package: spatstat.univar
## Warning: package 'spatstat.univar' was built under R version 4.3.3
## spatstat.univar 3.1-1
## Loading required package: spatstat.geom
## Warning: package 'spatstat.geom' was built under R version 4.3.3
## spatstat.geom 3.3-4
## Loading required package: spatstat.random
## Warning: package 'spatstat.random' was built under R version 4.3.3
## spatstat.random 3.3-2
## Loading required package: spatstat.explore
## Warning: package 'spatstat.explore' was built under R version 4.3.3
## Loading required package: nlme
## 
## Attaching package: 'nlme'
## The following object is masked from 'package:dplyr':
## 
##     collapse
## spatstat.explore 3.3-3
## Loading required package: spatstat.model
## Warning: package 'spatstat.model' was built under R version 4.3.3
## Loading required package: rpart
## spatstat.model 3.3-3
## Loading required package: spatstat.linnet
## Warning: package 'spatstat.linnet' was built under R version 4.3.3
## spatstat.linnet 3.2-3
## 
## spatstat 3.3-0 
## For an introduction to spatstat, type 'beginner'
library(terra)             # terra: Para el manejo de datos raster y análisis espacial.
## terra 1.7.71
## 
## Attaching package: 'terra'
## The following objects are masked from 'package:spatstat.geom':
## 
##     area, delaunay, is.empty, rescale, rotate, shift, where.max,
##     where.min
library(leaflet.extras)    # leaflet.extras: Para añadir funciones adicionales a los mapas de leaflet
## Warning: package 'leaflet.extras' was built under R version 4.3.3
library(ggplot2)           # ggplot2: Para la creación de gráficos y visualizaciones.
## Warning: package 'ggplot2' was built under R version 4.3.3
library(leafsync)          # leafsync: Para la sincronización de múltiples mapas interactivos.
## Warning: package 'leafsync' was built under R version 4.3.3
Trama_Waze = read_excel("C:/Users/Daniel Restrepo/Desktop/TramaWaze.xlsx")
## Warning: Expecting numeric in O3 / R3C15: got a date
## Warning: Expecting numeric in O6 / R6C15: got a date
## Warning: Expecting numeric in O9 / R9C15: got a date
## Warning: Expecting numeric in O12 / R12C15: got a date
## Warning: Expecting numeric in O15 / R15C15: got a date
## Warning: Expecting numeric in O18 / R18C15: got a date
## Warning: Expecting numeric in O21 / R21C15: got a date
## Warning: Expecting numeric in O24 / R24C15: got a date
## Warning: Expecting numeric in O27 / R27C15: got a date
## Warning: Expecting numeric in O29 / R29C15: got a date
## Warning: Expecting numeric in O31 / R31C15: got a date
## Warning: Expecting numeric in O33 / R33C15: got a date
## Warning: Expecting numeric in O34 / R34C15: got a date
## Warning: Expecting numeric in O35 / R35C15: got a date
## Warning: Expecting numeric in O36 / R36C15: got a date
## Warning: Expecting numeric in O37 / R37C15: got a date
## Warning: Expecting numeric in O38 / R38C15: got a date
## Warning: Expecting numeric in O336 / R336C15: got a date
## Warning: Expecting numeric in O341 / R341C15: got a date
## Warning: Expecting numeric in O346 / R346C15: got a date
## Warning: Expecting numeric in O385 / R385C15: got a date
## Warning: Expecting numeric in O390 / R390C15: got a date
## Warning: Expecting numeric in O395 / R395C15: got a date
## Warning: Expecting numeric in O400 / R400C15: got a date
## Warning: Expecting numeric in O405 / R405C15: got a date
## Warning: Expecting numeric in O672 / R672C15: got a date
## Warning: Expecting numeric in O676 / R676C15: got a date
## Warning: Expecting numeric in O679 / R679C15: got a date
## Warning: Expecting numeric in O682 / R682C15: got a date
## Warning: Expecting numeric in O685 / R685C15: got a date
## Warning: Expecting numeric in O688 / R688C15: got a date
## Warning: Expecting numeric in O691 / R691C15: got a date
## Warning: Expecting numeric in O694 / R694C15: got a date
## Warning: Expecting numeric in O698 / R698C15: got a date
## Warning: Expecting numeric in O702 / R702C15: got a date
## Warning: Expecting numeric in O707 / R707C15: got a date
## Warning: Expecting numeric in O713 / R713C15: got a date
## Warning: Expecting numeric in O719 / R719C15: got a date
## Warning: Expecting numeric in O728 / R728C15: got a date
## Warning: Expecting numeric in O731 / R731C15: got a date
## Warning: Expecting numeric in O737 / R737C15: got a date
## Warning: Expecting numeric in O1271 / R1271C15: got a date
## Warning: Expecting numeric in O1278 / R1278C15: got a date
## Warning: Expecting numeric in O1285 / R1285C15: got a date
## Warning: Expecting numeric in O1292 / R1292C15: got a date
## Warning: Expecting numeric in O1298 / R1298C15: got a date
## Warning: Expecting numeric in O1304 / R1304C15: got a date
## Warning: Expecting numeric in O1309 / R1309C15: got a date
## Warning: Expecting numeric in O1314 / R1314C15: got a date
## Warning: Expecting numeric in O1319 / R1319C15: got a date
## Warning: Expecting numeric in O1324 / R1324C15: got a date
## Warning: Expecting numeric in O1330 / R1330C15: got a date
## Warning: Expecting numeric in O1336 / R1336C15: got a date
## Warning: Expecting numeric in O1342 / R1342C15: got a date
## Warning: Expecting numeric in O1348 / R1348C15: got a date
## Warning: Expecting numeric in O1354 / R1354C15: got a date
## Warning: Expecting numeric in O1361 / R1361C15: got a date
## Warning: Expecting numeric in O3268 / R3268C15: got a date
## Warning: Expecting numeric in O3281 / R3281C15: got a date
## Warning: Expecting numeric in O3296 / R3296C15: got a date
## Warning: Expecting numeric in O3309 / R3309C15: got a date
## Warning: Expecting numeric in O3323 / R3323C15: got a date
## Warning: Expecting numeric in O3337 / R3337C15: got a date
## Warning: Expecting numeric in O3350 / R3350C15: got a date
## Warning: Expecting numeric in O3364 / R3364C15: got a date
## Warning: Expecting numeric in O3374 / R3374C15: got a date
## Warning: Expecting numeric in O3384 / R3384C15: got a date
## Warning: Expecting numeric in O3396 / R3396C15: got a date
## Warning: Expecting numeric in O3409 / R3409C15: got a date
## Warning: Expecting numeric in O3426 / R3426C15: got a date
## Warning: Expecting numeric in O3433 / R3433C15: got a date
## Warning: Expecting numeric in O3444 / R3444C15: got a date
## Warning: Expecting numeric in O3455 / R3455C15: got a date
## Warning: Expecting numeric in O3466 / R3466C15: got a date
# Convertir la columna de fechas a formato adecuado
Trama_Waze$fecha = as.Date(Trama_Waze$creation_Date, format ="%Y-%m-%d %H:%M")

# Cambiar los nombres de los tipos de eventos a español
Trama_Waze$tipo_evento <- recode(Trama_Waze$type,
                                 "ACCIDENT" = "ACCIDENTE",
                                 "HAZARD" = "PELIGRO",
                                 "JAM" = "CONGESTIÓN",
                                 "ROAD_CLOSED" = "VÍA CERRADA")
# Cargar la librería lubridate
library(lubridate)

# Convertir la fecha y extraer la hora y el día
fecha_hora = ymd_hms(Trama_Waze$creation_Date)
hora = hour(fecha_hora)
dia = day(fecha_hora)

# Agregar la columna de hora a los datos
Trama_Waze$hora = hora

# Mostrar la tabla de frecuencia de tipos de eventos
table(Trama_Waze$tipo_evento)
## 
##   ACCIDENTE  CONGESTIÓN     PELIGRO VÍA CERRADA 
##         125        3205         719        1021
# Calcular la frecuencia de cada tipo de evento en Trama_Waze
frecuencia_eventos <- Trama_Waze %>%
  group_by(tipo_evento) %>%                 # Agrupar por tipo de evento
  summarise(Frecuencia = n()) %>%     # Contar la frecuencia de cada tipo
  arrange(desc(Frecuencia))           # Ordenar por frecuencia descendente

# Crear un gráfico de barras con ggplot2 usando los datos de Trama_Waze
ggplot(frecuencia_eventos, aes(x = tipo_evento, y = Frecuencia, fill = tipo_evento)) +
  geom_bar(stat = "identity") +
  theme_minimal() +
  labs(title = "Distribución de Tipos de Eventos en Trama Waze", 
       x = "Tipo de Evento", y = "Frecuencia") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +  # Rotar etiquetas para mejor visualización
  scale_fill_brewer(palette = "Set2")  # Utilizar una paleta de colores predefinida

# Identificar eventos PELIGRO del día 26
pos <- which(Trama_Waze$tipo_evento == "PELIGRO" & dia == 26)
peligro26 <- Trama_Waze[pos,]
# Cargar librerías necesarias para visualización
library(mapview)
library(leaflet)

# Ajustar las coordenadas de latitud y longitud
peligro26$lat <- peligro26$location_y / 10^(nchar(peligro26$location_y) - 1)
peligro26$long <- peligro26$location_x / 10^(nchar(peligro26$location_x) - 3)

# Filtrar eventos dentro del rango geográfico adecuado
peligro26 <- peligro26[peligro26$lat > 4 & peligro26$lat < 5,]

# Crear un mapa interactivo con leaflet
m26_peligro <- leaflet() %>%
  addTiles() %>%
  addCircleMarkers(lng = peligro26$long, lat = peligro26$lat,
                   clusterOptions = markerClusterOptions(),
                   label = peligro26$hora) %>%
  addControl(html = "<h3>Mapa de Riesgos</h3>", position = "topleft")

# Mostrar el mapa
m26_peligro
library(leaflet.extras)
# Cargar las librerías necesarias
library(leaflet)
library(dplyr)
library(leaflet.extras)

# Filtrar datos relevantes de peligro26
peligro26 <- peligro26 %>%
  filter(lat > 4 & lat < 5, long > -75 & long < -73)  # Ajustar las coordenadas de interés

# Crear un mapa interactivo con leaflet y addHeatmap
leaflet(peligro26) %>%
  addProviderTiles("OpenStreetMap") %>%  # Añadir la capa base del mapa
  addHeatmap(
    lng = ~long, lat = ~lat,               # Especificar las columnas de longitud y latitud
    intensity = ~hora,                     # Intensidad opcional basada en la hora (o cualquier otra variable)
    blur = 20,                             # Nivel de desenfoque del mapa de calor
    max = 0.08,                            # Ajustar el valor máximo para la intensidad
    radius = 15                            # Radio de cada punto en el mapa de calor
  ) %>%
  addLegend("bottomright",                 # Añadir leyenda
            title = "Mapa de Calor de Riesgos",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))
# Filtrar eventos VÍA CERRADA del día 26
pos <- which(Trama_Waze$tipo_evento == "VÍA CERRADA" & dia == 26)
via_cerrada_26 <- Trama_Waze[pos,]

# Ajustar las coordenadas de latitud y longitud
via_cerrada_26$lat <- via_cerrada_26$location_y / 10^(nchar(via_cerrada_26$location_y) - 1)
via_cerrada_26$long <- via_cerrada_26$location_x / 10^(nchar(via_cerrada_26$location_x) - 3)

# Filtrar eventos dentro del rango geográfico adecuado
via_cerrada_26 <- via_cerrada_26[via_cerrada_26$lat > 4 & via_cerrada_26$lat < 5,]
# Cargar librería leaflet
require(leaflet)

# Crear el mapa interactivo
m26_via_cerrada = leaflet(via_cerrada_26) %>%
  addTiles() %>%
  addCircleMarkers(lng = ~long, lat = ~lat,
                   clusterOptions = markerClusterOptions(),
                   label = ~hora) %>%
  addControl(html = "<h3>Mapa de Cierre de Vías<h3>", position = "topleft")

# Mostrar el mapa interactivo
m26_via_cerrada
install.packages("spatstat")
## Warning: package 'spatstat' is in use and will not be installed
library(spatstat)
library(leaflet.extras)
# Cargar las librerías necesarias
library(spatstat)

# Definir la zona de interés
zona <- owin(xrange = c(-74.04331, -73.9929), yrange = c(4.885736, 4.948562))

# Crear un patrón de puntos espaciales a partir de los eventos VÍA CERRADA
patron_via_cerrada <- ppp(x = via_cerrada_26$long, y = via_cerrada_26$lat, window = zona)
## Warning: data contain duplicated points
# Graficar el test de cuadrantes
plot(quadratcount(patron_via_cerrada), main = "Patrón de Puntos y Test de Cuadrantes")

# Superponer los puntos sobre los cuadrantes
points(patron_via_cerrada, col = "red")

# Gráfico independiente: Función K-Estimación
plot(Kest(patron_via_cerrada), main = "Función K-Estimación")

# Cargar las librerías necesarias
library(terra)
library(leaflet)
library(spatstat)

# Asegurarse de que el objeto patron_via_cerrada esté correctamente definido
# Crear un patrón de puntos espaciales utilizando los datos correctos (via_cerrada_26)
zona <- owin(xrange = c(-74.04331, -73.9929), yrange = c(4.885736, 4.948562))
patron_via_cerrada <- ppp(x = via_cerrada_26$long, y = via_cerrada_26$lat, window = zona)
## Warning: data contain duplicated points
# Calcular la densidad espacial
im1 <- density(patron_via_cerrada, sigma = 0.01)  # Ajusta sigma según sea necesario

# Convertir la densidad a un objeto raster usando terra
mapa_via_cerrada <- rast(im1)

# Convertir el raster a data.frame para leaflet
df_via_cerrada <- as.data.frame(mapa_via_cerrada, xy = TRUE)
colnames(df_via_cerrada) <- c("long", "lat", "intensity")

# Normalizar los valores de intensidad entre 0 y 1
df_via_cerrada$intensity <- (df_via_cerrada$intensity - min(df_via_cerrada$intensity)) / 
                            (max(df_via_cerrada$intensity) - min(df_via_cerrada$intensity))

# Crear un mapa interactivo usando leaflet
leaflet(df_via_cerrada) %>%
  addProviderTiles("OpenStreetMap") %>%  # Añadir la capa base
  addHeatmap(
    lng = ~long, lat = ~lat,              # Coordenadas de longitud y latitud
    intensity = ~intensity,               # Intensidad normalizada
    blur = 20,                            # Nivel de desenfoque
    max = 1,                              # Valor máximo de la intensidad normalizada
    radius = 15                           # Radio para reflejar la densidad
  ) %>%
  addLegend("bottomright",                # Añadir la leyenda
            title = "Mapa de Calor de Cierres de Vías",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))
# Filtrar eventos de accidentes del día 26
pos <- which(Trama_Waze$tipo_evento == "ACCIDENTE" & dia == 26)
accidente_26 <- Trama_Waze[pos,]

# Ajustar las coordenadas de latitud y longitud
accidente_26$lat <- accidente_26$location_y / 10^(nchar(accidente_26$location_y) - 1)
accidente_26$long <- accidente_26$location_x / 10^(nchar(accidente_26$location_x) - 3)

# Filtrar eventos dentro del rango geográfico adecuado
accidente_26 <- accidente_26[accidente_26$lat > 4 & accidente_26$lat < 5,]
# Cargar librerías necesarias
library(leaflet)

# Crear el mapa interactivo
m26_accidente <- leaflet(accidente_26) %>%
  addTiles() %>%
  addCircleMarkers(lng = ~long, lat = ~lat,
                   clusterOptions = markerClusterOptions(),
                   label = ~hora) %>%
  addControl(html = "<h3>Mapa de Accidentes</h3>", position = "topleft")

# Mostrar el mapa interactivo
m26_accidente
# Cargar las librerías necesarias
require(spatstat)

# Definir la zona de interés
zona = owin(xrange = c(-74.04331, -73.9929), yrange = c(4.885736, 4.948562))

# Crear un patrón de puntos espaciales a partir de los eventos ACCIDENTE
patron_accidente = ppp(x = accidente_26$long, y = accidente_26$lat, window = zona)
## Warning: data contain duplicated points
# Gráfico combinado: Test de Cuadrantes y Patrón de Puntos
par(mfrow = c(1, 1))  # Asegurarse de que solo haya una gráfica

# Graficar el test de cuadrantes
plot(quadratcount(patron_accidente), main = "Patrón de Puntos y Test de Cuadrantes")

# Superponer los puntos sobre los cuadrantes
points(patron_accidente, col = "red" )

# Calcular la función K-estimación
plot(Kest(patron_accidente))

# Cargar las librerías necesarias
library(terra)
library(leaflet)
library(spatstat)

# Asegurarse de que el objeto patron_accidente esté correctamente definido
# Usar las coordenadas correctas de los accidentes
zona <- owin(xrange = c(-74.04331, -73.9929), yrange = c(4.885736, 4.948562))
patron_accidente <- ppp(x = accidente_26$long, y = accidente_26$lat, window = zona)
## Warning: data contain duplicated points
# Calcular la densidad espacial
im1 <- density(patron_accidente)

# Convertir la densidad a un objeto raster usando terra
mapa_accidente <- rast(im1)

# Convertir el raster a data.frame para leaflet
df_accidente <- as.data.frame(mapa_accidente, xy = TRUE)
colnames(df_accidente) <- c("long", "lat", "intensity")

# Normalizar los valores de intensidad entre 0 y 1
df_accidente$intensity <- (df_accidente$intensity - min(df_accidente$intensity)) / 
                          (max(df_accidente$intensity) - min(df_accidente$intensity))

# Crear un mapa interactivo usando leaflet
leaflet(df_accidente) %>%
  addProviderTiles("OpenStreetMap") %>%  # Añadir la capa base
  addHeatmap(
    lng = ~long, lat = ~lat,              # Coordenadas de longitud y latitud
    intensity = ~intensity,               # Intensidad normalizada
    blur = 15,                            # Nivel de desenfoque
    max = 0.5,                              # Valor máximo de la intensidad normalizada
    radius = 10                           # Ajustar el radio de los puntos
  ) %>%
  addLegend("bottomright",                # Añadir la leyenda para interpretar el mapa de calor
            title = "Mapa de Calor de Accidentes",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))
# Filtrar eventos de congestión del día 26
pos <- which(Trama_Waze$tipo_evento == "CONGESTIÓN" & dia == 26)
congestion_26 <- Trama_Waze[pos,]

# Ajustar las coordenadas de latitud y longitud
congestion_26$lat <- congestion_26$location_y / 10^(nchar(congestion_26$location_y) - 1)
congestion_26$long <- congestion_26$location_x / 10^(nchar(congestion_26$location_x) - 3)

# Filtrar eventos dentro del rango geográfico adecuado
congestion_26 <- congestion_26[congestion_26$lat > 4 & congestion_26$lat < 5,]
# Cargar las librerías necesarias
library(leaflet)

# Crear el mapa interactivo
m26_congestion <- leaflet(congestion_26) %>%
  addTiles() %>%
  addCircleMarkers(lng = ~long, lat = ~lat,
                   clusterOptions = markerClusterOptions(),
                   label = ~hora) %>%
  addControl(html = "<h3>Mapa de Congestión</h3>", position = "topleft")

# Mostrar el mapa interactivo
m26_congestion
# Cargar las librerías necesarias
library(spatstat)

# Definir la zona de interés
zona <- owin(xrange = c(-74.04331, -73.9929), yrange = c(4.885736, 4.948562))

# Crear un patrón de puntos espaciales a partir de los eventos CONGESTIÓN
patron_congestion <- ppp(x = congestion_26$long, y = congestion_26$lat, window = zona)
## Warning: data contain duplicated points
# Visualizar el patrón de puntos
par(mfrow = c(1, 1))  # Asegurarse de que solo haya una gráfica

# Graficar el test de cuadrantes
plot(quadratcount(patron_congestion), main = "Patrón de Puntos y Test de Cuadrantes")

# Superponer los puntos sobre los cuadrantes
points(patron_congestion, col = "red")

# Calcular la función K-estimación
plot(Kest(patron_congestion))

# Cargar las librerías necesarias
library(leaflet)
library(terra)

# Definir el patrón de puntos
zona <- owin(xrange = c(-74.04331, -73.9929), yrange = c(4.885736, 4.948562))
patron_congestion <- ppp(x = congestion_26$long, y = congestion_26$lat, window = zona)
## Warning: data contain duplicated points
# Calcular la densidad espacial del patrón de puntos
im1 <- density(patron_congestion)

# Convertir la densidad en un raster utilizando terra
mapa_congestion <- rast(im1)

# Convertir el objeto raster a un data.frame para usarlo en leaflet
df_congestion <- as.data.frame(mapa_congestion, xy = TRUE)
colnames(df_congestion) <- c("long", "lat", "intensity")

# Normalizar los valores de intensidad entre 0 y 1
df_congestion$intensity <- (df_congestion$intensity - min(df_congestion$intensity)) / 
                           (max(df_congestion$intensity) - min(df_congestion$intensity))

# Crear un mapa interactivo usando leaflet
leaflet(df_congestion) %>%
  addProviderTiles("OpenStreetMap") %>%  # Añadir la capa base
  addHeatmap(
    lng = ~long, lat = ~lat,              # Coordenadas de longitud y latitud
    intensity = ~intensity,               # Intensidad normalizada
    blur = 35,                            # Incrementar el desenfoque para suavizar el mapa
    max = max(df_congestion$intensity) * 2,  # Ajustar el valor máximo de intensidad
    radius = 25                           # Aumentar el radio para que se vea más suave
  ) %>%
  addLegend("bottomright",                # Añadir la leyenda para interpretar el mapa de calor
            title = "Mapa de Calor de Congestión",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))
install.packages("leafsync")
## Warning: package 'leafsync' is in use and will not be installed
library(leafsync)
# Sincronizar los mapas interactivos de distintos tipos de eventos
leafsync::sync(m26_peligro, m26_accidente, m26_congestion, m26_via_cerrada)
  1. Distribución de Tipos de Eventos El primer gráfico muestra la distribución de eventos clasificados en cuatro tipos principales: accidentes, congestión, peligro y vías cerradas. Los resultados indican:

Congestión : Representa la mayor cantidad de eventos reportados (3205), lo que sugiere que los problemas de tráfico son predominantes en el área analizada. Vías Cerradas : Con 1021 reportes, también son un factor significativo, posiblemente debido a obras, bloqueos o condiciones climáticas adversas. Peligro : Con 719 casos, destaca la necesidad de analizar puntos críticos de riesgo. Accidentes : Aunque menos frecuentes (125), estos eventos suelen tener mayor impacto en la movilidad. 2. Patrón de Puntos y Prueba de Cuadrantes El patrón espacial sugiere mediciones significativas de eventos en ciertas áreas, destacadas en el análisis de cuadrantes:

Mapa 1 : Muestra una gran concentración en un cuadrante, indicando agrupamiento en esa región específica. Mapa 2 : Los patrones de puntos están menos dispersos y más localizados en áreas particulares. Mapa 3 : La concentración parece más dispersa, con varios puntos distribuidos en una línea específica. Estos patrones refuerzan la idea de agrupamientos no aleatorios, posiblemente asociados a factores como infraestructura vial, condiciones climáticas o zonas con alta densidad de vehículos.

  1. Análisis de la Función K-Estimación Los gráficos de la función K ( r )permiten evaluar la naturaleza del agrupamiento espacial:

Congestión y Peligro : Mostrarán un aumento progresivo, indicando una distribución más homogénea en distancias mayores. Accidentes : Tiene una pendiente más pronunciada, lo que podría sugerir agrupamientos más definidos en áreas específicas. Vías Cerradas : Similar a la congestión, presenta un patrón disperso pero significativo en ciertos rangos de distancia. 4. Conclusiones y Recomendaciones Congestión : Es necesario implementar estrategias de gestión del tráfico en las áreas más afectadas. Medidas como semaforización inteligente o redirección de flujo vehicular podrían ser efectivas. Peligro y Accidentes : Identificar las zonas críticas para instalar señalización adecuada y preventivas. Vías Cerradas : Mejorar la comunicación a los usuarios sobre cierres y desvíos podría reducir el impacto en la movilidad.