Nothing
## ---- include = FALSE---------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ---- message=FALSE-----------------------------------------------------------
library(tmap)
library(dplyr)
library(ggplot2)
## ----inputs-------------------------------------------------------------------
zones = simodels::si_zones
centroids = simodels::si_centroids
od = simodels::si_od_census
tm_shape(zones) + tm_polygons("all", palette = "viridis")
## -----------------------------------------------------------------------------
od_df = od::points_to_od(centroids)
od_sfc = od::odc_to_sfc(od_df[3:6])
sf::st_crs(od_sfc) = 4326
od_df$length = sf::st_length(od_sfc)
od_df = od_df %>% transmute(
O, D, length = as.numeric(length) / 1000,
flow = NA, fc = NA
)
od_df = sf::st_sf(od_df, geometry = od_sfc, crs = 4326)
## ----unconstrained------------------------------------------------------------
beta = 0.3
i = 1
j = 2
for(i in seq(nrow(zones))) {
for(j in seq(nrow(zones))) {
O = zones$all[i]
n = zones$all[j]
ij = which(od_df$O == zones$geo_code[i] & od_df$D == zones$geo_code[j])
od_df$fc[ij] = exp(-beta * od_df$length[ij])
od_df$flow[ij] = O * n * od_df$fc[ij]
}
}
od_top = od_df %>%
filter(O != D) %>%
top_n(n = 2000, wt = flow)
tm_shape(zones) +
tm_borders() +
tm_shape(od_top) +
tm_lines("flow")
## ----distance_decay-----------------------------------------------------------
summary(od_df$fc)
od_df %>%
ggplot() +
geom_point(aes(length, fc))
## ----constrained--------------------------------------------------------------
od_dfj = left_join(
od_df,
zones %>% select(O = geo_code, all) %>% sf::st_drop_geometry()
)
od_dfj = od_dfj %>%
group_by(O) %>%
mutate(flow_constrained = flow / sum(flow) * first(all)) %>%
ungroup()
sum(od_dfj$flow_constrained) == sum(zones$all)
od_top = od_dfj %>%
filter(O != D) %>%
top_n(n = 2000, wt = flow_constrained)
tm_shape(zones) +
tm_borders() +
tm_shape(od_top) +
tm_lines("flow_constrained")
## ----validation---------------------------------------------------------------
od_dfjc = inner_join(od_dfj %>% select(-all), od)
od_dfjc %>%
ggplot() +
geom_point(aes(all, flow_constrained))
cor(od_dfjc$all, od_dfjc$flow_constrained)^2
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.