High-performance implementations of geostatistical algorithms for the Julia programming language.
- Design a comprehensive framework for geostatistics (or spatial statistics) in a modern programming language.
- Address the lack of a platform for scientific comparison of different geostatistical algorithms in the literature.
- Exploit modern hardware aggressively, including GPUs and computer clusters.
- Educate people outside of the field about the existence of geostatistics.
-
GaussianProcesses.jl — Gaussian processes (the method) and Simple Kriging are essentially two names for the same concept. The derivation of Kriging estimators, however; does not require distributional assumptions. It is a beautiful coincidence that for multivariate Gaussian distributions, Simple Kriging gives the conditional expectation. Matheron and other important geostatisticians have generalized Gaussian processes to more general random fields with locally-varying mean and for situations where the mean is unknown. GeoStats.jl includes Gaussian processes as a special case as well as other more practical Kriging variants, see the Gaussian processes example.
-
MLKernels.jl — Spatial structure can be represented in many different forms: covariance, variogram, correlogram, etc. Variograms are more general than covariance kernels according to the intrinsically stationary property. This means that there are variogram models with no covariance counterpart. Furthermore, empirical variograms can be easily estimated from the data (in various directions) with an efficient procedure. GeoStats.jl treats variograms as first-class objects, see the Variogram modeling example.
-
Interpolations.jl — Kriging and Spline interpolation have different purposes, yet these two methods are sometimes listed as competing alternatives. Kriging estimation is about minimizing variance (or estimation error), whereas Spline interpolation is about forcedly smooth estimators derived for computer visualization. Kriging is a generalization of Splines in which one has the freedom to customize spatial structure based on data. Besides the estimate itself, Kriging also provides the variance map as a function of knots configuration.
Get the latest stable release with Julia's package manager:
Pkg.add("GeoStats")
The project is split into various packages:
Package | Description |
---|---|
GeoStats.jl | Main package containing Kriging-based solvers, and other geostatistical tools. |
GeoStatsImages.jl | Training images for multiple-point geostatistical simulation. |
GslibIO.jl | Utilities to read/write extended GSLIB files. |
GeoStatsBase.jl | Base package containing problem and solution specifications (for developers). |
GeoStatsDevTools.jl | Developer tools for writing new solvers (for developers). |
The main package (i.e. GeoStats.jl) is self-contained, and provides high-performance Kriging-based estimation/simulation algorithms over arbitrary domains. Other packages can be installed from the list above for additional functionality.
Solvers for geostatistical problems can be installed separately depending on the application. They are automatically integrated with GeoStats.jl thanks to Julia's multiple dispatch features.
Solver | Description | Build | Coverage | References |
---|---|---|---|---|
Kriging | Kriging (SK, OK, UK, EDK) | Matheron 1971 | ||
InvDistWeight | Inverse distance weighting | Shepard 1968 | ||
LocalWeightRegress | Locally weighted regression | Cleveland 1979 |
All simulation solvers generate realizations in parallel unless otherwise noted.
Solver | Description | Build | Coverage | References |
---|---|---|---|---|
SeqGaussSim | Sequential Gaussian simulation | Deutsch 1997, Olea 1999 | ||
ImgQuilt | Fast 3D image quilting | Hoffimann 2017 |
If you are a developer and your solver is not listed above, please open a pull request and we will be happy to review and add it to the list. Please check GeoStatsBase.jl for instructions on how to write your own solvers and GeoStatsDevTools.jl for additional developer tools.
- STABLE — most recently tagged version of the documentation.
- LATEST — in-development version of the documentation.
A set of Jupyter notebooks demonstrating the current functionality of the package is available
in the examples
folder. These notebooks are distributed with GeoStats.jl and can be launched locally with
GeoStats.examples()
.
Below is a quick preview of the high-level API, for the full example, please check this notebook.
using GeoStats
using Plots
# data.csv:
# x, y, station, precipitation
# 25.0, 25.0, palo alto, 1.0
# 50.0, 75.0, redwood city, 0.0
# 75.0, 50.0, mountain view, 1.0
# read spreadsheet file containing spatial data
geodata = readtable("data.csv", coordnames=[:x,:y])
# define spatial domain (e.g. regular grid, point collection)
grid = RegularGrid{Float64}(100, 100)
# define estimation problem for any data column(s) (e.g. :precipitation)
problem = EstimationProblem(geodata, grid, :precipitation)
# solve the problem with any solver
solution = solve(problem, Kriging())
# plot the solution
plot(solution)
Contributions are very welcome, as are feature requests and suggestions. Please open an issue if you encounter any problems or if you have questions. GeoStats.jl was developed as part of academic research. If you would like to help support the project, please star the repository and share it with your colleagues.