I want to estimate a spatial logistic regression model for car crashes in Milan using R. I downloaded data from OSM for several highways segments in Milan using the R package osmdata. The response variable of my model is a binary variable which is equal to 1 if at least one car crash happened less than approximately 10m from a street segment, otherwise is 0. I'd like to add to the covariates of the model a new variable that expresses the shortest-path distance between the middle-point of each segment and the nearest roundabout/school/hospital. The shortest-path distance should be estimated on a street network.

This is a small example to show what I mean.

# packages

Download highways data from OSM. This is just a small part of the complete dataset of all highways, which means that the resulting street network is not connected. I can also provide the code to create the complete dataset of all connected highways if it's important to answer my question.

# highways data
milan_highways <- opq("Milan, Italy") %>% 
  add_osm_feature(key = "highway", value = "primary") %>% 
  osmdata_sf() %>% 
  trim_osmdata(bb_poly = getbb("Milan, Italy", format_out = "sf_polygon")) %>% 
  magrittr::use_series(osm_lines) %>% 
  st_transform(crs = 32632) %>% 
  select(osm_id, name, highway)

Download data for all roundabout and estimate the coordinate of the centroid of each polygon.

# roundabout data
milan_roundabouts_lines <- opq("Milan, Italy") %>% 
  add_osm_feature(key = "junction", value = "roundabout") %>% 
  osmdata_sf() %>% 
  osm_poly2line() %>% 
  magrittr::use_series(osm_lines) %>% 
  st_transform(crs = 32632)

my_roundabouts_centroids <- milan_roundabouts_lines %>% 
  st_cast("MULTIPOINT") %>% 
  mutate(at_least_five_points = purrr::map_int(geometry, length) >= 5L) %>% 
  filter(at_least_five_points) %>% 
  st_cast("POLYGON") %>% 
#> Warning in st_centroid.sf(.): st_centroid assumes attributes are constant
#> over geometries of x

Now I use the function SpatialLinesNetwork of the stplanr package to estimate the street network.

# highways network 
milan_highways_network <- SpatialLinesNetwork(milan_highways)

Now I'm not sure on how to proceed. My idea is to use the function find_network_nodes to determine the closest node to each segment and each roundabout and the function sum_network_links to estimate the network shortest-path distance between every combination of nodes and take the minimum. The problem is that I'm not sure how to code this idea and if it's good or not.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.