Floating Catchment Area (FCA) methods to Calculate Spatial Accessibility.
Perform various floating catchment area methods to calculate a spatial accessibility index (SPAI) for demand point data. The distance matrix used for weighting is normalized in a preprocessing step using common functions (gaussian, gravity, exponential or logistic).
You can install the released version of fca from CRAN with:
install.packages("fca")
And the development version from GitHub with:
# install.packages("devtools")
devtools::install_github("egrueebler/fca")
This is a basic example which shows you how to calculate a SPAI for demand point data using FCA methods.
Create an example population, supply and distances:
# Population df with column for size
pop <- data.frame(
orig_id = letters[1:10],
size = c(100, 200, 50, 100, 500, 50, 100, 100, 50, 500)
)
# Supply df with column for capacity
sup <- data.frame(
dest_id = as.character(1:3),
capacity = c(1000, 200, 500)
)
# Distance matrix with travel times from 0 to 30
D <- matrix(
runif(30, min = 0, max = 30),
ncol = 10, nrow = 3, byrow = TRUE,
dimnames = list(c(1:3), c(letters[1:10]))
)
D
#> a b c d e f g
#> 1 9.112911 0.2250393 28.81470 22.307320 11.54901 11.813675 28.61906
#> 2 12.126782 27.5932440 16.87612 26.552688 21.31737 9.444521 14.61809
#> 3 22.473089 11.9313407 17.60196 2.898803 26.26707 0.020982 24.01361
#> h i j
#> 1 20.3611736 27.79044 21.24925
#> 2 0.9615546 11.37095 16.07453
#> 3 18.0320749 22.05473 14.04698
Normalize distance matrix with gaussian function, apply a threshold of 20 minutes (to compute beta for the function) and formatting input data as named vectors for the FCA method (match IDs of distance weight matrix with demand and supply data).
library(fca)
# Normalize distances
W <- dist_normalize(
D,
d_max = 20,
imp_function = "gaussian", function_d_max = 0.01
)
# Ensure order of ids
pop <- pop[order(pop$orig_id), ]
sup <- sup[order(sup$dest_id), ]
# Named vectors
(p <- setNames(pop$size, as.character(pop$orig_id)))
#> a b c d e f g h i j
#> 100 200 50 100 500 50 100 100 50 500
(s <- setNames(sup$capacity, as.character(sup$dest_id)))
#> 1 2 3
#> 1000 200 500
Apply FCA method on formatted input, get SPAI for each origin location (p
):
(spai <- spai_3sfca(p, s, W))
#> step3
#> a 0.95155325
#> b 2.89084430
#> c 0.06906368
#> d 2.77743905
#> e 0.70064761
#> f 2.17895087
#> g 0.12489150
#> h 1.42512068
#> i 0.32975980
#> j 0.22943634