knitr::opts_chunk$set( collapse = TRUE, comment = "#>", dev = "png", dev.args = list(type = "cairo-png"), fig.path = "man/figures/README-", out.width = "100%" )
This is a R package to implement certain spatial and spatio-temporal models,
including some of the spatio-temporal models proposed
here.
It uses the cgeneric
interface in the INLA package,
to implement models by writing C
code to build the precision matrix compiling it so that
INLA can use it internally.
some of the models presented in A diffusion-based spatio-temporal extension of Gaussian Matérn fields (2024). Finn Lindgren, Haakon Bakka, David Bolin, Elias Krainski and Håvard Rue. SORT 48 (1) January-June 2024, 3-66. (https://www.idescat.cat/sort/sort481/48.1.1.Lindgren-etal.pdf)
the barrier (and transparent barriers) model proposed in https://doi.org/10.1016/j.spasta.2019.01.002
Please check here
The 'INLA' package is a suggested one, but you will need it for actually fitting a model. You can install it with
install.packages("INLA",repos=c(getOption("repos"),INLA="https://inla.r-inla-download.org/R/testing"), dep=TRUE)
You can install the current CRAN version of INLAspacetime:
install.packages("INLAspacetime")
You can install the latest version of INLAspacetime from GitHub with
## install.packages("remotes") remotes::install_github("eliaskrainski/INLAspacetime", build_vignettes=TRUE)
Simulate some fake data.
set.seed(1) n <- 5 dataf <- data.frame( s1 = runif(n, -1, 1), s2 = runif(n, -1, 1), time = runif(n, 1, 4), y = rnorm(n, 0, 1)) str(dataf)
Loading packages:
library(fmesher) library(INLA) library(INLAspacetime)
Define spatial and temporal discretization meshes
smesh <- fm_mesh_2d( loc = cbind(0,0), max.edge = 5, offset = 2) tmesh <- fm_mesh_1d( loc = 0:5)
Define the spacetime model object to be used
stmodel <- stModel.define( smesh = smesh, ## spatial mesh tmesh = tmesh, ## temporal mesh model = '121', ## model, see the paper control.priors = list( prs = c(1, 0.1), ## P(spatial range < 1) = 0.1 prt = c(5, 0), ## temporal range fixed to 5 psigma = c(1, 0.1) ## P(sigma > 1) = 0.1 ) )
stmodel <- stModel.define( smesh = smesh, ## spatial mesh tmesh = tmesh, ## temporal mesh model = '121', ## model, see the paper control.priors = list( prs = c(1, 0.1), ## P(spatial range < 1) = 0.1 prt = c(5, 0), ## temporal range fixed to 5 psigma = c(1, 0.1) ## P(sigma > 1) = 0.1 ), useINLAprecomp = FALSE )
Define a projector matrix from the spatial and temporal meshes to the data
Aproj <- inla.spde.make.A( mesh = smesh, loc = cbind(dataf$s1, dataf$s2), group = dataf$time, group.mesh = tmesh )
Create a 'fake' column to be used as index.
in the f()
term
dataf$st <- NA
Setting the likelihood precision (as fixed)
ctrl.lik <- list( hyper = list( prec = list( initial = 10, fixed = TRUE) ) )
Combine a 'fake' index column with A.local
fmodel <- y ~ f(st, model = stmodel, A.local = Aproj)
Call the main INLA
function:
fit <- inla( formula = fmodel, data = dataf, control.family = ctrl.lik)
Posterior marginal summaries for fixed effect and the model parameters that were not fixed.
fit$summary.fixed fit$summary.hyperpar
library(inlabru)
Setting the observation (likelihood) model object
data_model <- bru_obs( formula = y ~ ., family = "gaussian", control.family = ctrl.lik, data = dataf)
Define the data model: the linear predictor terms
linpred <- ~ 1 + field(list(space = cbind(s1, s2), time = time), model = stmodel)
Fitting
result <- bru( components = linpred, data_model)
Summary of the model parameters
result$summary.fixed result$summary.hyperpar
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.