The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Type: Package
Title: Multi-Resolution Thin-Plate Splines on the Sphere
Version: 0.1.2
Description: Constructs multi-resolution thin-plate spline basis functions on the sphere for use in spatial regression and large-scale spatial prediction problems. Implements the basis system described in Huang, Huang, and Ing (2025) "Multi-Resolution Spatial Methods on the Sphere: Efficient Prediction for Global Data", Environmetrics, <doi:10.1002/env.70092>. Heavy computations are written in 'C++' via 'Rcpp' with optional 'OpenMP' parallelism.
License: GPL-2 | GPL-3 [expanded from: GPL (≥ 2)]
Encoding: UTF-8
Depends: R (≥ 4.0)
Imports: Rcpp, RSpectra
LinkingTo: Rcpp, RcppEigen, RcppNumerical
Suggests: fields, testthat (≥ 3.0.0)
SystemRequirements: GNU make
RoxygenNote: 7.3.2
URL: https://github.com/STLABTW/multi-resolution-sphere
BugReports: https://github.com/STLABTW/multi-resolution-sphere/issues
Config/testthat/edition: 3
NeedsCompilation: yes
Packaged: 2026-04-28 23:07:49 UTC; hyhuang
Author: Hao-Yun Huang ORCID iD [aut, cre], Hsin-Cheng Huang ORCID iD [aut], Ching-Kang Ing ORCID iD [aut]
Maintainer: Hao-Yun Huang <hhuscout@gmail.com>
Repository: CRAN
Date/Publication: 2026-04-29 18:40:07 UTC

mrtsSphere: Multi-Resolution Thin-Plate Splines on the Sphere

Description

Constructs multi-resolution thin-plate spline basis functions on the sphere for use in spatial regression and large-scale spatial prediction problems.

Details

The main user-facing function is mrts_sphere().

Author(s)

Maintainer: Hao-Yun Huang hhuscout@gmail.com (ORCID)

Authors:

References

Multi-resolution approximations of Gaussian processes for large spatial datasets on the sphere. Environmetrics, 2025. doi:10.1002/env.70092

See Also

Useful links:


Multi-resolution thin-plate spline basis on the sphere

Description

Builds a set of k multi-resolution thin-plate spline (MRTS) basis functions on the sphere from a set of knot locations, and evaluates them at the prediction locations X.

Usage

mrts_sphere(knot, k, X)

Arguments

knot

Numeric matrix with two columns giving knot locations as ⁠(latitude, longitude)⁠ in degrees.

k

Integer. Number of basis functions to construct (the rank of the basis). Must satisfy ⁠2 <= k <= nrow(knot)⁠.

X

Numeric matrix with two columns giving prediction locations as ⁠(latitude, longitude)⁠ in degrees, where the basis is evaluated.

Details

The first basis function is constant (sqrt(1/n)); the remaining k - 1 basis functions are obtained from the eigen-decomposition of the centered knot kernel matrix, following the construction described in the reference.

Value

A list with one element:

mrts

An ⁠nrow(X) x k⁠ numeric matrix whose columns are the basis functions evaluated at the rows of X.

References

Multi-resolution approximations of Gaussian processes for large spatial datasets on the sphere. Environmetrics, 2025. doi:10.1002/env.70092

Examples

## Build a small global grid in (lat, lon) degrees.
n_lon <- 12
n_lat <- 8
lon_seq <- seq(-180, 150, length.out = n_lon)
lat_seq <- seq( -80,  80, length.out = n_lat)
grid <- as.matrix(expand.grid(lat = lat_seq, lon = lon_seq))

## Pick 30 knots and evaluate the MRTS basis at every grid point.
set.seed(1)
knots <- grid[sample(nrow(grid), 30), ]
res <- mrts_sphere(knots, k = 5, X = grid)
dim(res$mrts)   # nrow(grid) x k

## Recovering a simulated spherical exponential field with the basis.
if (requireNamespace("fields", quietly = TRUE)) {
  # Great-circle distance (km) -> exponential covariance.
  d_grid    <- fields::rdist.earth(grid[, 2:1], miles = FALSE)
  cov_field <- exp(-d_grid / 2000)
  y_true    <- as.numeric(t(chol(cov_field + diag(1e-8, nrow(grid)))) %*%
                          rnorm(nrow(grid)))

  # Noisy observations at the knot locations.
  obs_idx <- match(data.frame(t(knots)), data.frame(t(grid)))
  z_obs   <- y_true[obs_idx] + rnorm(nrow(knots), sd = 0.3)

  # Project into the MRTS basis (least squares) and predict on the grid.
  B_obs    <- res$mrts[obs_idx, , drop = FALSE]
  beta_hat <- qr.solve(B_obs, z_obs)
  y_hat    <- res$mrts %*% beta_hat
  sqrt(mean((y_hat - y_true)^2))   # RMSE
}

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.