SpatialKWD-package | R Documentation |
The Spatial-KWD package contains efficient implementations of Discrete Optimal Transport algorithms for the computation of Kantorovich-Wasserstein distances [1], customized for large spatial maps. All the algorithms are based on an ad-hoc implementation of the Network Simplex algorithm [2]. Each implemented algorithm builds a different network, exploiting the particular structure of spatial maps.
This library contains four helper functions and two classes [4].
The four helper functions are compareOneToOne
, compareOneToMany
, compareAll
, and focusArea
. All the functions take in input the data and an options list. Using the options is possible to configure the Kantorivich-Wasserstein solver, so that it uses different algorithms with different parameters.
The helper functions are built on top of two main classes: Histogram2D
and Solver
.
Note that in non-convex maps, the algorithm builds the convex-hull of the input bins and pads the weights with zeros.
In the case of spatial histograms with weights that do not sum up to 1, all the weights can optionally be rescaled in such a way the overall sum of the weights of every single histogram is equal to 1.0: w_i ≥ts \frac{w_i}{∑_{i=1,…,n} w_i}. This way, the spatial histograms have a natural interpretation as discrete probability measures.
For a detailed introduction on Computational Optimal Transport, we refer the reader to [3].
Stefano Gualandi, stefano.gualandi@gmail.com.
Maintainer: Stefano Gualandi <stefano.gualandi@gmail.com>
[1] Bassetti, F., Gualandi, S. and Veneroni, M., 2020. "On the Computation of Kantorovich–Wasserstein Distances Between Two-Dimensional Histograms by Uncapacitated Minimum Cost Flows". SIAM Journal on Optimization, 30(3), pp.2441-2469.
[2] Cunningham, W.H., 1976. "A Network Simplex method". Mathematical Programming, 11(1), pp.105-116.
[3] Peyre, G., and Cuturi, M., 2019. "Computational optimal transport: With applications to data science". Foundations and Trends in Machine Learning, 11(5-6), pp.355-607.
[4] https://github.com/eurostat/Spatial-KWD
See also compareOneToOne
, compareOneToMany
, compareAll
, focusArea
, Histogram2D
, and Solver
.
library(SpatialKWD) # Random coordinates N = 90 Xs <- as.integer(runif(N, 0, 31)) Ys <- as.integer(runif(N, 0, 31)) coordinates <- matrix(c(Xs, Ys), ncol=2) # Random weights weights <- matrix(runif(2*N, 0, 1), ncol=2) # Compute distance print("Compare one-to-one with exact algorithm:") d <- compareOneToOne(coordinates, weights, L=3) cat("runtime:", d$runtime, " distance:", d$distance, "\n")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.