Skip to contents

Description

ngme2 (https://davidbolin.github.io/ngme2/) is a unified, efficient, and flexible framework for fitting latent non-Gaussian models in R. It extends the SPDE-based Gaussian modeling toolkit to handle skewness, heavy tails, and non-smooth behavior while keeping familiar workflows for estimation, prediction, and model assessment.

Features

  • Temporal processes: AR(1), Ornstein–Uhlenbeck, random walks, and ARMA models.
  • Spatial processes: Matérn fields (including graph-based meshes) and separable/non-separable space–time variants.
  • Non-Gaussian driven noise: NIG, generalized asymmetric Laplace, skew-(t); non-Gaussian measurement noise is also supported.
  • Joint and custom structures: bivariate type-G fields, longitudinal random-effects models, and user-defined operators via generic / generic_ns, flexible combinations of different models and driven noise.
  • Practical tools: kriging-style prediction, cross-validation helpers, and diagnostics for convergence/fit quality.

Quick start

library(ngme2)
time_index <- seq(1, 1000, by = 1)
n <- length(time_index)

# Define the AR(1) model with NIG driven noise
ar1_nig <- f(time_index,
  model = ar1(rho = 0.7),
  noise = noise_nig(mu = 3, sigma = 2, nu = 0.5)
)

# Simulate the AR(1) process with NIG driven noise
nig_field <- simulate(ar1_nig, seed = 123, nsim = 1)[[1]]
Y <- nig_field + rnorm(n, mean = 0, sd = 1)
plot(time_index, nig_field, type = "l")

# Fit the model
fit <- ngme(
  formula = Y ~ 0 + f(time_index, model = ar1(), noise = noise_nig()),
  data    = data.frame(Y = Y, time_index = time_index),
  family  = "normal" # likelihood family
)

summary(fit)

Use ngme_optimizers() to see available optimizers and configure stochastic gradient settings via control_opt.

Installation

The stable version can be installed with:

install.packages("ngme2", repos = "https://davidbolin.github.io/ngme2/")

See the Installation and Configuration vignette if compilation tools are needed.

Learn more