Introduction
This vignette describes the statistical model underlying sdmTMB. Further details are available in the sdmTMB paper (Anderson et al. 2024), which should be referenced and cited when using sdmTMB in a publication.
Other vignettes available
If this vignette is being viewed on CRAN, note that many other vignettes describing how to use sdmTMB are available on the documentation site under Articles.
Notation conventions
This appendix uses the following notation conventions, which generally follow the guidance in Edwards & Auger-Méthé (2019):
Greek symbols for parameters,
the Latin/Roman alphabet for data except for cases where another symbol is used by convention,
bold symbols for vectors or matrices (e.g., is a vector and is the value of at point in space ), with Latin/Roman symbols in non-italics (e.g., , ),
for all distribution dispersion parameters for consistency with the code,
to define the expected value (mean) of variable ,
to define the expected variance of the variable ,
a superscript represents interpolated or projected values as opposed to values at knot locations (e.g., vs. ), and
where possible, notation has been chosen to match VAST (Thorson 2019) to maintain consistency (e.g., for spatial fields and for spatiotemporal fields).
Tables of indices and symbols are summarized in notation reference tables at the end of this vignette.
sdmTMB model structure
The complete sdmTMB model can be written as
where
- represents the response data at point and time ;
- represents the linear predictor (i.e., in link space)
- represents the conditional mean on the response/data scale (after applying the inverse link);
- represents a link function (e.g., log or logit) and represents its inverse, and represents the linear predictor before applying ;
- , , and represent design matrices (the superscript identifiers ‘main’ = main effects, ‘tvc’ = time varying coefficients, and ‘svc’ = spatially varying coefficients);
- represents a vector of fixed-effect coefficients;
- represents an offset: a covariate (usually log transformed) with a coefficient fixed at one that enters on the linear predictor scale (before the inverse link);
- represents the random-effect design row(s) for group (a subset of the matrix ) corresponding to ; these random effects enter on the linear predictor scale; the scalar special case is a random intercept , and more generally random slopes and intercepts are vector-valued with full covariance as described below;
- represents a vector of time-varying coefficients, where each coefficient can follow a random walk or AR(1) process;
- represents a vector of spatially varying coefficients (random fields), where each coefficient ;
- represents a spatial component (a Gaussian Markov random field, GMRF), with Matérn covariance built from the mesh; and
- represents a spatiotemporal component (a GMRF), with Matérn covariance over space and temporal evolution as specified.
A single sdmTMB model will rarely, if ever, contain all of the above components. Next, we will split the model to describe the various parts in more detail using ‘’ to represent the other optional components.
Main effects
Within sdmTMB(),
is defined by the formula argument and represents the
main-effect model matrix and a corresponding vector of coefficients.
This main effect formula can contain optional penalized smoothers or
non-linear functions as defined below.
Smoothers
Smoothers in sdmTMB are implemented with the same formula syntax
familiar to mgcv (Wood 2017) users fitting
GAMs (generalized additive models). Smooths are implemented in the
formula using + s(x), which implements a smooth from
mgcv::s(). Within these smooths, the same syntax commonly
used in mgcv::s() can be applied, e.g. 2-dimensional
smooths may be constructed with + s(x, y); smooths can be
specific to various factor levels, + s(x, by = group);
smooths can vary according to a continuous variable,
+ s(x, by = x2); the basis function dimensions may be
specified, e.g. + s(x, k = 4) (see
?mgcv::choose.k); and various types of splines may be
constructed such as cyclic splines to model seasonality,
e.g. + s(month, bs = "cc", k = 12).
While mgcv can fit unpenalized (e.g., B-splines) or penalized splines
(P-splines), sdmTMB only implements penalized splines. The penalized
splines are constructed in sdmTMB using the function
mgcv::smooth2random(), which transforms splines into random
effects (and associated design matrices) that are estimable in a
mixed-effects modelling framework. This is the same approach as is
implemented in the R packages gamm4 (Wood &
Scheipl 2020) and brms (Bürkner
2017).
Linear break-point threshold models
The linear break-point or “hockey stick” model can be used to describe threshold or asymptotic responses. This function consists of two pieces, so that for , , and for , . In both cases, represents the slope of the function up to a threshold, and the product represents the value at the asymptote. No constraints are placed on parameters or .
These models can be fit by including + breakpt(x) in the
model formula, where x is a covariate. The formula can
contain a single break-point covariate.
Logistic threshold models
Models with logistic threshold relationships between a predictor and the response can be fit with the form
where represents the logistic function, is a scaling parameter (controlling the height of the y-axis for the response; unconstrained), is an intercept, is a parameter controlling the point at which the function reaches 50% of the maximum (), and is a parameter controlling the point at which the function reaches 95% of the maximum. The parameter is unconstrained but is constrained to be larger than .
These models can be fit by including + logistic(x) in
the model formula, where x is a covariate. The formula can
contain a single logistic covariate.
Spatial random fields
Spatial random fields,
,
are included if spatial = 'on' (or TRUE) and
omitted if spatial = 'off' (or FALSE).
The marginal standard deviation of
is indicated by Spatial SD in the printed model output or
as sigma_O in the output of
sdmTMB::tidy(fit, "ran_pars"). The ‘O’ is for ‘omega’
().
Internally, the random fields follow a Gaussian Markov random field (GMRF)
where is a sparse precision matrix and is the marginal variance.
Spatiotemporal random fields
Spatiotemporal random fields are included by default if there are
multiple time elements (time argument is not
NULL) and can be set to IID (independent and identically
distributed, 'iid'; default), AR(1) ('ar1'),
random walk ('rw'), or off ('off') via the
spatiotemporal argument. These text values are case
insensitive.
Spatiotemporal random fields are represented by
within sdmTMB. This has been chosen to match the representation in VAST
(Thorson 2019). The marginal standard
deviation of
is indicated by Spatiotemporal SD in the printed model
output or as sigma_E in the output of
sdmTMB::tidy(fit, "ran_pars"). The ‘E’ is for ‘epsilon’
().
IID spatiotemporal random fields
IID spatiotemporal random fields
(spatiotemporal = 'iid') can be represented as
where represent random field deviations at point and time . The random fields are assumed independent across time steps.
Similarly to the spatial random fields, these spatiotemporal random fields (including all versions described below) are parameterized internally with a sparse precision matrix ()
AR(1) spatiotemporal random fields
First-order auto regressive, AR(1), spatiotemporal random fields
(spatiotemporal = 'ar1') add a parameter defining the
correlation between random field deviations from one time step to the
next. They are defined as
where
is the correlation between subsequent spatiotemporal random fields. The
term scales the spatiotemporal variance by the correlation such that it
represents the steady-state marginal variance. The correlation
allows for mean-reverting spatiotemporal fields, and is constrained to
be
.
Internally, the parameter is estimated as ar1_phi, which is
unconstrained. The parameter ar1_phi is transformed to
with
,
mapping ar1_phi to the range
.
Random walk spatiotemporal random fields (RW)
Random walk spatiotemporal random fields
(spatiotemporal = 'rw') represent a model where the
difference in spatiotemporal deviations from one time step to the next
are IID. They are defined as
where the distribution of the spatiotemporal field in the initial time step is the same as for the AR(1) model, but the absence of the parameter allows the spatiotemporal field to be non-stationary in time. Note that, in contrast to the AR(1) parametrization, the variance is no longer the steady-state marginal variance.
Time-varying regression parameters
Parameters can be modelled as time-varying according to a random walk
or first-order autoregressive, AR(1), process. The time-series model is
defined by time_varying_type. For all types:
where
is an optional vector of time-varying regression parameters and
is the corresponding model matrix with covariate values. This is defined
via the time_varying argument, assuming that the
time argument is also supplied a column name.
time_varying takes a one-sided formula.
~ 1 implies a time-varying intercept.
The following equations describe the time-series process for a single time-varying coefficient , where indexes the time-varying coefficient. When multiple time-varying coefficients are specified, each follows its time-series process independently with its own variance and (for AR1) correlation parameter .
For time_varying_type = 'rw', the first time step is
estimated independently:
In this case, the first time-step value is given an implicit uniform
prior. I.e., the same variable should not appear in the fixed effect
formula since the initial value is estimated as part of the time-varying
formula. The formula time_varying = ~ 1 implicitly
represents a time-varying intercept (assuming the time
argument has been supplied) and, this case, the intercept should be
omitted from the main effects (formula ~ + 0 + ... or
formula ~ -1 + ...).
For time_varying_type = 'rw0', the first time step is
estimated from a mean-zero prior:
In this case, the time-varying variable (including the intercept) should be included in the main effects.
For time_varying_type = 'ar1':
where is the correlation between subsequent time steps. The first time step is given a mean-zero prior.
Spatially varying coefficients (SVC)
Spatially varying coefficient models are defined as
where
represents the
-th
spatially varying coefficient field at location
.
When multiple spatially varying coefficients are specified, each is
estimated as an independent spatial random field with its own marginal
variance
.
Usually,
would represent a prediction matrix that is constant spatially for a
given time
as defined by a one-sided formula supplied to
spatial_varying. For example
spatial_varying = ~ 0 + x, where 0 omits the
intercept.
The random fields are parameterized internally with a sparse precision matrix ()
Random intercepts and slopes
Multilevel (hierarchical) intercepts and slopes follow the familiar lme4/glmmTMB formulation. A single grouping factor can carry an intercept-only term or a vector of random effects (intercept plus slopes) with a full covariance:
where is the design row(s) for group (e.g., intercept and covariate values) and is the corresponding vector of random effects for that group. The scalar special case corresponds to with .
Use lme4-style syntax in formula,
e.g. (1 | g) for random intercepts,
(1 + x | g) for correlated intercepts and slopes, or
(1 | g1) + (1 + x | g2) to give each grouping factor its
own (co)variance.
Internally, standard deviations are estimated on the log scale, and
correlations are represented by unconstrained Cholesky parameters (via
UNSTRUCTURED_CORR), yielding a positive-definite
per grouping factor.
Offset terms
Offset terms can be included through the offset argument
in sdmTMB(). These are included in the linear predictor
as
where
is an offset term—a log transformed variable without a
coefficient (assuming a log link). The offset is not included
in the prediction. Therefore, if offset represents a
measure of effort, for example, the prediction is for one unit of effort
(log(1) = 0).
Observation model families
Here we describe the main observation families that are available in sdmTMB and comment on their parametrization, statistical properties, utility, and code representation in sdmTMB. Families are grouped by outcome type to make it easier to locate an appropriate observation model.
Bounded or binary outcomes (0–1, proportions)
Binomial
where
is the size or number of trials, and
is the probability of success for each trial. If
,
the distribution becomes the Bernoulli distribution. Internally, the
distribution is parameterized as the robust
version in TMB, which is numerically stable when probabilities
approach 0 or 1. Following the structure of stats::glm(),
lme4, and glmmTMB, a binomial family can be specified in one of 4
ways:
- the response may be a factor (and the model classifies the first level versus all others)
- the response may be binomial (0/1)
- the response can be a matrix of form
cbind(success, failure), or - the response may be the observed proportions, and the
weightsargument is used to specify the Binomial size () parameter (probability ~ ..., weights = N).
Code defined within TMB.
Example: family = binomial(link = "logit")
Beta-binomial
where is the number of trials, is the mean success probability, and is a precision parameter that controls overdispersion relative to a Binomial. The implied Beta parameters are and , and the variance is $ [y] = N (1 - ), , $ which exceeds the Binomial variance unless . Available links are logit and cloglog. This family is useful for overdispersed counts of successes/failures (e.g., aggregated Bernoulli data, proportions with extra-binomial variation).
Code defined within
sdmTMB and implemented in the TMB likelihood at
src/sdmTMB.cpp (e.g., lines 974–982).
Example: family = betabinomial(link = "logit")
Beta
where is the mean and is a precision parameter. This parametrization follows Ferrari & Cribari-Neto (2004) and the betareg R package (Cribari-Neto & Zeileis 2010). The variance is .
Code defined within TMB.
Example: family = Beta(link = "logit")
Count data
Poisson
where represents the mean and .
Code defined within TMB.
Example: family = poisson(link = "log")
Negative Binomial 2 (NB2)
where is the mean and is the dispersion parameter. The variance scales quadratically with the mean (Hilbe 2011). The NB2 parametrization is more commonly seen in ecology than the NB1. Internally, the distribution is parameterized as the robust version in TMB.
Code defined within TMB.
Example: family = nbinom2(link = "log")
Negative Binomial 1 (NB1)
where is the mean and is the dispersion parameter. The variance scales linearly with the mean (Hilbe 2011). Internally, the distribution is parameterized as the robust version in TMB.
Code defined within sdmTMB based on NB2 and borrowed from glmmTMB.
Example: family = nbinom1(link = "log")
Negative binomial 2 mixture
This is a 2 component mixture that extends the NB2 distribution, following mixture-distribution approaches for shoaling/aggregation in survey data (Thorson et al. 2011).
where is the mean of the first (smaller component) of the distribution, is the mean of the larger component, and controls the contribution of each component to the mixture.
Example: family = nbinom2_mix(link = "log")
Positive continuous outcomes
Gamma
where represents the Gamma shape and represents the scale. The mean is and variance is .
Code defined within TMB.
Example: family = Gamma(link = "log")
Lognormal
sdmTMB uses the “bias-corrected” lognormal distribution where represents the standard deviation in log-space:
Because of the bias correction, and .
Code defined within
sdmTMB based on the TMB dnorm() normal density.
Example: family = lognormal(link = "log")
Generalized gamma
sdmTMB implements the Prentice (1974)
parameterization introduced for spatiotemporal models and index
standardization by Dunic et al.
(2025), with parameters mean
,
scale
(standard deviation on the log scale), and a shape parameter
(reported as Generalized gamma Q).
Here,
is the mean on the data scale,
is the log-scale standard deviation, and
controls the shape
(
yields the lognormal;
yields the gamma). See Dunic et al.
(2025) for the full PDF in the Prentice formulation as
implemented. Links available: identity, log, inverse. This flexibility
is useful for right-skewed positive responses with tails heavier or
lighter than gamma/lognormal, and is often paired in a hurdle/mixture as
delta_gengamma() for zero-inflated biomass or catch data
(see Dunic et al. (2025)).
Code defined within sdmTMB.
Example: family = gengamma(link = "log"); delta/hurdle:
family = delta_gengamma(link1 = "logit", link2 = "log").
Tweedie
where is the mean, is the power parameter constrained between 1 and 2, and is the dispersion parameter. The Tweedie distribution can be helpful for modelling data that are positive and continuous but also contain zeros.
Internally, is transformed from to constrain it between 1 and 2 and is estimated as an unconstrained variable.
The source code is implemented as in the cplm package (Zhang 2013) and is based on Dunn & Smyth (2005). The TMB version is defined here.
Example: family = tweedie(link = "log")
Gamma mixture
This is a 2 component mixture that extends the Gamma distribution, motivated by mixture-distribution treatments of aggregation in survey data (Thorson et al. 2011),
where represents the Gamma shape, represents the scale for the first (smaller component) of the distribution, represents the scale for the second (larger component) of the distribution, and controls the contribution of each component to the mixture (also interpreted as the probability of larger events).
The mean is . The variance follows the usual mixture formula: .
Here, and for the other mixture distributions, the probability of the
larger mean can be obtained from
plogis(fit$model$par[["logit_p_extreme"]]) and the ratio of
the larger mean to the smaller mean can be obtained from
1 + exp(fit$model$par[["log_ratio_mix"]]). The standard
errors are available in the TMB sdreport:
fit$sd_report.
If you wish to fix the probability of a large (i.e., extreme) mean, which can be hard to estimate, you can fix this value and pass this to the family:
See also family = delta_gamma_mix() for an extension
incorporating this distribution with delta models.
Lognormal mixture
This is a 2 component mixture that extends the lognormal distribution, again in the spirit of mixture approaches for aggregating/ shoaling data (Thorson et al. 2011),
Because of the bias correction, . The log-scale variance of the mixture is not simply ; it can be obtained with the standard mixture-variance formula using component log-means and log-variance .
As with the Gamma mixture, controls the contribution of each component to the mixture (also interpreted as the probability of larger events).
Example: family = lognormal_mix(link = "log"). See also
family = delta_lognormal_mix() for an extension
incorporating this distribution with delta models. Like with the gamma
mixture, fixed probabilities of extreme events
(
in notation above) can be passed in, e.g.
sdmTMB(...,
family = delta_lognormal_mix(p_extreme = 0.01)
)Continuous real-valued outcomes
Gaussian
where is the mean and is the standard deviation. The variance is .
Example: family = Gaussian(link = "identity")
Code defined within TMB.
Student-t
where
,
the degrees of freedom (df), is a user-supplied fixed
parameter. Lower values of
result in heavier tails compared to the Gaussian distribution. Above
approximately df = 20, the distribution becomes very
similar to the Gaussian. The Student-t distribution with a low degrees
of freedom (e.g.,
)
can be helpful for modelling data that would otherwise be suitable for
Gaussian but needs an approach that is robust to outliers (e.g., Anderson et al. 2017).
Code defined within
sdmTMB based on the dt() distribution in TMB.
Example: family = student(link = "log", df = 7)
Zero-inflated and hurdle structures
Delta models
sdmTMB allows for several different kinds of delta (also known as hurdle) models. These families are implemented by specifying the family as a delta distribution. For example:
sdmTMB(
...,
family = delta_gamma()
)The list of supported families is included in the documentation on additional
families, delta
models, and Poisson-link
delta models. By default, the delta_* families don’t
use the Poisson link, but this structure can be specified with
delta_gamma(type = "poisson-link"), which follows the
formulation in Thorson (2018).
In the “standard” delta model implementation, sdmTMB constructs two
internal models (formally, two “linear predictors”), with the first
model representing presence-absence and the second model representing
the positive component (such as catch rates in fisheries applications).
Default links associated with each family can be inspected with
delta_lognormal() and equivalent functions. For the
standard delta models, the default first linear predictor link is logit.
For the Poisson-link type, the first linear predictor link is log.
The formula, spatial,
spatiotemporal, and share_range arguments of
sdmTMB() can be specified independently as a 2-element
list. For example, the spatial random field might be estimated for only
the first linear predictor with:
sdmTMB(
...,
family = delta_gamma(),
spatial = list("on", "off")
)Or for we may want separate main-effects formulas. For example:
sdmTMB(
formula = list(
y ~ depth + I(depth^2),
y ~ 1),
family = delta_gamma()
)All other arguments are shared between the linear predictors.
Currently if delta models contain smoothers, both components must have the same main-effects formula.
Gaussian random fields
Matérn parameterization
The Matérn defines the covariance between spatial locations and as
where is a scale/precision factor (higher means lower marginal variance), controls the smoothness, represents the Gamma function, represents the distance between locations and , represents the modified Bessel function of the second kind, and represents the decorrelation rate. The parameter is set to 1 because the SPDE approach that gives us sparse matrices (and therefore major computational speedups) requires to be an integer when working in 2D (so ) (Lindgren et al. 2011). Internally, the parameters and are converted to range and marginal standard deviation as and , so increasing or decreases .
In the case of a spatiotemporal model with both spatial and
spatiotemporal fields, if share_range = TRUE in
sdmTMB() (the default), then a single
and range are estimated with separate
and
.
This often makes sense since data are often only weakly informative
about
.
If share_range = FALSE, then separate
and
are estimated. The spatially varying coefficient field always shares
with the spatial random field.
Projection matrix
The values of the spatial variables at the knots are multiplied by a projection matrix that bilinearly interpolates from the knot locations to the values at the locations of the observed or predicted data (Lindgren & Rue 2015)
where represents the values of the spatial random fields at the observed locations or predicted data locations. The matrix has a row for each data point or prediction point and a column for each knot. Three non-zero elements on each row define the weight of the neighbouring 3 knot locations for location . The same bilinear interpolation happens for any spatiotemporal random fields
Anisotropy
TMB allows for anisotropy, where spatial covariance may be asymmetric
with respect to latitude and longitude (full
details). Anisotropy can be turned on or off with the logical
anisotropy argument to sdmTMB(). There are a
number of ways to implement anisotropic covariance (Fuglstad et al. 2015), and we adopt a
2-parameter rotation matrix
.
The elements of
are defined by the parameter vector
so that
,
and
.
Once a model is fitted with sdmTMB(), the anisotropy
relationships may be plotted using the plot_anisotropy()
function, which takes the fitted object as an argument. If a barrier
mesh is used, anisotropy is disabled.
Incorporating physical barriers into the SPDE
In some cases the spatial domain of interest may be complex and
bounded by some barrier such as by land or water (e.g., coastlines,
islands, lakes). SPDE models allow for physical barriers to be
incorporated into the modelling (Bakka et
al. 2019). With sdmTMB() models, the mesh
construction occurs in two steps: the user (1) constructs a mesh with a
call to sdmTMBextra::make_mesh(), and (2) passes the mesh
to sdmTMBextra::add_barrier_mesh(). The barriers must be
constructed as sf objects (Pebesma
2018) with polygons defining the barriers. See
?sdmTMBextra::add_barrier_mesh for an example.
The barrier implementation requires the user to select a fraction
value (range_fraction argument) that defines the fraction
of the usual spatial range when crossing the barrier (Bakka et al. 2019). For example, if
the range was estimated at 10 km, range_fraction = 0.2
would assign a 2 km range to the triangles marked as barrier. That makes
correlation decay much faster through the barrier than around it, which
effectively discourages spatial smoothing from “jumping” across
landmasses. From experimentation, values around 0.1 or 0.2 seem to work
well but values much lower than 0.1 can result in convergence
issues.
This website by Francesco Serafini and Haakon Bakka provides an illustration with INLA. The implementation within TMB was borrowed from code written by Olav Nikolai Breivik and Hans Skaug at the TMB Case Studies Github site.
Optimization
Optimization details
The sdmTMB model is fit by maximum marginal likelihood. Internally, a
TMB (Kristensen et al. 2016)
model template calculates the marginal log likelihood and its gradient,
and the negative log likelihood is minimized via the non-linear
optimization routine stats::nlminb() in R (Gay 1990; R Core Team 2021). Random effects are
represented by the values that maximize the log likelihood conditional
on the fixed effects (their conditional modes), and the Laplace
approximation integrates over them when evaluating the likelihood (Kristensen et al. 2016).
Like AD Model Builder (Fournier et
al. 2012), TMB allows for parameters to be fit in phases and
we include the multiphase argument in
sdmTMB::sdmTMBcontrol() to allow this. For high-dimensional
models (many fixed and random effects), phased estimation may be faster,
but this is not always the case because it requires an extra call to
TMB::MakeADFun(). In sdmTMB, phased estimation proceeds by
first estimating all fixed-effect parameters contributing to the
likelihood (holding random effects constant at initial values). In the
second phase, the random-effect parameters (and their variances) are
also estimated. Fixed-effect parameters are also estimated in the second
phase and are initialized at their estimates from the first phase.
In some cases, a single call to stats::nlminb() may not
be result in convergence (e.g., the maximum gradient of the marginal
likelihood with respect to fixed-effect parameters is not small enough
yet), and the algorithm may need to be run multiple times. In the
sdmTMB::sdmTMBcontrol() function, we include an argument
nlminb_loops that will restart the optimization at the
previous best values. The number of nlminb_loops should
generally be small (e.g., 2 or 3), and defaults to 1. For some sdmTMB
models, the Hessian may also be unstable and need to be re-evaluated. We
do this optionally with the stats::optimHess() routine
after the call to stats::nlminb(). The
stats::optimHess() function implements a Newton
optimization routine to find the Hessian, and we include the argument
newton_loops in sdmTMB::sdmTMBcontrol() to
allow for multiple function evaluations (each starting at the previous
best value). By default, this is set to 1 evaluation. The updated
parameters are only accepted if they result in a lower negative marginal
log likelihood. If a model is already fit, the function
sdmTMB::run_extra_optimization() can run additional
optimization loops with either routine to further reduce the maximum
gradient.
Assessing convergence
Much of the guidance around diagnostics and glmmTMB also applies to
sdmTMB, e.g. the
glmmTMB vignette on troubleshooting. Optimization with
stats::nlminb() involves specifying the number of
iterations and evaluations (eval.max and
iter.max) and the tolerances (abs.tol,
rel.tol, x.tol, xf.tol)—a greater
number of iterations and smaller tolerance thresholds increase the
chance that the optimal solution is found, but more evaluations
translates into longer computation time. Warnings of
non-positive-definite Hessian matrices (accompanied by parameters with
NAs for standard errors) often mean models are improperly
specified given the data. Standard errors can be observed in the output
of print.sdmTMB() or by checking
fit$sd_report. The maximum gradient of the marginal
likelihood with respect to fixed-effect parameters can be checked by
inspecting (fit$gradients). Guidance varies, but gradients
should be very close to zero (e.g., on the order of
or smaller after reasonable parameter scaling) before assuming the
fitting routine is consistent with convergence. If maximum gradients are
already relatively small, they can sometimes be reduced further with
additional optimization calls beginning at the previous best parameter
vector as described above with
sdmTMB::run_extra_optimization().
Notation reference tables
Tables of all major indices (Table 1) and symbols (Table 2) are provided here for quick reference.
| Symbol | Description |
|---|---|
| Index for space; a vector of x and y coordinates | |
| Index for time | |
| Group | |
| Index for time-varying coefficient | |
| Index for spatially varying coefficient (SVC) |
| Symbol | Code | Description |
|---|---|---|
y_i |
Observed response data | |
mu_i |
Mean | |
eta_i |
Linear predictor before applying the inverse link () | |
phi |
A dispersion parameter for a distribution | |
fit$family$link |
Link function | |
fit$family$linkinv |
Inverse link function | |
b_j |
Parameter vector | |
X_ij |
A predictor model matrix | |
Zt_list |
Random effect design matrix (list of sparse blocks; rows correspond to observations; subset by group ) | |
offset |
An offset variable at point and time | |
omega_s |
Spatial random field at point (knot) | |
omega_s_A |
Spatial random field at point (interpolated) | |
zeta_s |
Spatially varying coefficient random field at point (knot) | |
zeta_s_A |
Spatially varying coefficient random field at point (interpolated) | |
epsilon_st |
Spatiotemporal random field at point and time (knot) | |
epsilon_st_A |
Spatiotemporal random field at point and time (interpolated) | |
b_t |
AR(1) or random walk spatiotemporal deviations (knot) | |
RE |
IID random intercept deviation for group | |
re_b_pars |
Vector of random intercepts/slopes for group | |
- |
Spatial random field covariance matrix | |
- |
Spatially varying coefficient random field covariance matrix | |
- |
Spatiotemporal random field covariance matrix | |
Q_s |
Spatial random field precision matrix | |
Q_s |
Spatially varying coefficient random field precision matrix | |
Q_st |
Spatiotemporal random field precision matrix | |
re_cov_pars |
Random effect covariance per grouping factor (Cholesky SD + correlation params) | |
sigma_G |
IID random intercept variance | |
sigma_E |
Spatiotemporal random field marginal variance | |
sigma_O |
Spatial random field marginal variance | |
sigma_Z |
Spatially varying coefficient random field marginal variance | |
kappa(0) |
Spatial decorrelation rate | |
kappa(1) |
Spatiotemporal decorrelation rate | |
ar1_rho |
Correlation between random fields in subsequent time steps | |
rho_time |
Correlation between time-varying coefficients in subsequent time steps | |
gengamma_Q |
Generalized gamma shape parameter ( gives lognormal; gives gamma) | |
A |
Sparse projection matrix to interpolate between knot and data locations | |
H |
2-parameter rotation matrix used to define anisotropy |
