This aims at providing a set of fast, memory efficient functions to perform spatial interaction modelling, also called gravity modelling. Currently, the doubly and singly constrained models are implemented for canonical set of constraints. Future versions will aim to implement more origin and destination constraints as well. It was developed in the context of studying commuter flows by active travel (cycling & walking ) in Great Britain as part of a project at CASA, UCL.
Installation
Not yet on CRAN, so please install the development version of cppSim
with:
# install.packages(C("devtools","pak"))
devtools::install_github("ischlo/cppSim")
# pak::pak("ischlo/cppSim")
Built in data sets
The package comes with sample data sets that allow to test the functions right away as well as see the type of input that is recommended.
- flows_test : using the official census data in England from 2011, it’s a 983x983 matrix representing the flows of cyclists and pedestrians from each to each MSOA in London.
- distance_test : the distances between centroids of MSOAs. Computed with the London road network from OpenStreetMap and using the
cppRouting
package.
Spatial interaction models
Refer to the vignette to find some theory on SIMs and a naive implementation in R
.
Example
Using the built-in data sets flows_test
and distance_test
, we can run a test by following the example This is a basic example which shows you how to solve a common problem:
Source
For an example of what can be done with this package, please refer to the publication on active travel spatial interaction models in London for which it was originally developed.
The accompanying code for the analysis is provided in the ischlo/quant_cycle_walk
repository.
Dependencies
This package has some dependencies that might need manual installation, although the most important external ones have been provided with the source code.
External
The package uses the armadillo
library, which is imported and linked automatically when the package is installed.
Performance
Compared to the equivalent functions implemented in pure R, it runs about x10 faster for a ∼ 1000 × 1000 OD matrix, the speed up is increasignly more significant as matrices get bigger.