Choosing and Building Covariance Models

Why this vignette?

The main modelling decision in mcgf is the covariance structure. The package separates it into:

  1. a symmetric base model, and
  2. an optional Lagrangian component for directional space-time asymmetry.

The combined model is

\[ C(\mathbf h,u) = (1-\lambda)C_{\mathrm{base}}(\mathbf h,u) + \lambda C_{\mathrm{Lagr}}(\mathbf h,u). \]

This vignette shows how the available functions fit together.

library(mcgf)

h1 <- array(
    c(0, -1, 1, 0),
    dim = c(2, 2, 3)
)
h2 <- array(
    c(0, -2, 2, 0),
    dim = c(2, 2, 3)
)
h <- sqrt(h1^2 + h2^2)
u <- array(
    rep(0:2, each = 4),
    dim = c(2, 2, 3)
)

Pure spatial and temporal kernels

cor_exp() implements the powered exponential correlation.

c_exp <- cor_exp(
    h,
    c = 0.2,
    gamma = 0.5,
    nugget = 0.05,
    is.dist = TRUE
)

cor_cauchy() implements the Cauchy correlation and is commonly used for the temporal component.

c_time <- cor_cauchy(
    u,
    a = 0.4,
    alpha = 0.5
)

Separable covariance

A separable model multiplies the spatial and temporal components:

par_s <- list(
    nugget = 0.05,
    c = 0.2,
    gamma = 0.5
)

par_t <- list(
    a = 0.4,
    alpha = 0.5
)

c_sep <- cor_sep(
    spatial = "exp",
    temporal = "cauchy",
    par_s = par_s,
    par_t = par_t,
    h = h,
    u = u
)

This is a good baseline because it is simple and easy to interpret.

Fully symmetric Gneiting model

cor_fs() introduces the space-time interaction parameter beta (Gneiting 2002).

c_fs <- cor_fs(
    nugget = 0.05,
    c = 0.2,
    gamma = 0.5,
    a = 0.4,
    alpha = 0.5,
    beta = 0.5,
    h = h,
    u = u
)

When beta = 0, this formulation reduces to the corresponding separable model.

Use the fully symmetric model when the strength or scale of spatial dependence changes with temporal lag but you do not yet need directional asymmetry.

Lagrangian covariance functions

The Lagrangian functions use signed distances and a prevailing velocity \(\mathbf v=(v_1,v_2)^\top\).

Triangular

c_tri <- cor_lagr_tri(
    v1 = 2,
    v2 = 1,
    k = 3,
    h1 = h1,
    h2 = h2,
    u = u
)

The triangular form has compact support: correlations become exactly zero outside its support.

Askey

c_askey <- cor_lagr_askey(
    v1 = 2,
    v2 = 1,
    k = 3,
    h1 = h1,
    h2 = h2,
    u = u
)

The Askey form also has compact support but uses a smoother \(3/2\) power.

Exponential

c_lagr_exp <- cor_lagr_exp(
    v1 = 2,
    v2 = 1,
    k = 3,
    h1 = h1,
    h2 = h2,
    u = u
)

The exponential Lagrangian model decays continuously rather than being truncated at zero.

Combine the base and Lagrangian terms

cor_stat() constructs the general stationary model.

par_base_fs <- list(
    nugget = 0.05,
    c = 0.2,
    gamma = 0.5,
    a = 0.4,
    alpha = 0.5,
    beta = 0.3
)

par_lagr <- list(
    v1 = 2,
    v2 = 1,
    k = 3
)

c_stat <- cor_stat(
    base = "fs",
    lagrangian = "lagr_exp",
    par_base = par_base_fs,
    par_lagr = par_lagr,
    lambda = 0.2,
    h = h,
    h1 = h1,
    h2 = h2,
    u = u
)

A practical model-selection sequence

For a new dataset, the following progression is usually easiest to diagnose:

  1. Fit a separable model (model = "sep").
  2. Fit a fully symmetric model (model = "fs").
  3. Compare their errors and fitted correlations.
  4. Inspect empirical lagged cross-correlations for directional asymmetry.
  5. If asymmetry is scientifically meaningful, fit a Lagrangian component with fit_lagr().
  6. For known atmospheric or operating regimes, move to mcgf_rs() and allow selected parameters to vary by regime.

The Lagrangian regime-switching framework is used for short-term wind forecasting in Jia and Sezer (2025).

Parameter interpretation

Parameter Role
nugget spatial nugget effect
c spatial scale
gamma spatial smoothness/power parameter
a temporal scale
alpha temporal smoothness/power parameter
beta space-time interaction in the fully symmetric model
v1, v2 components of prevailing velocity
k Lagrangian scale
lambda weight of the Lagrangian component

References

Gneiting, Tilmann. 2002. “Nonseparable, Stationary Covariance Functions for Space–Time Data.” Journal of the American Statistical Association 97 (458): 590–600. https://doi.org/10.1198/016214502760047113.
Jia, Tianxia, and Deniz Sezer. 2025. “Improving Short-Term Wind Speed Forecasts Using Regime-Switching Spatio-Temporal Covariance Models.” Journal of Renewable and Sustainable Energy 17 (5): 053304. https://doi.org/10.1063/5.0285012.