Changelog
Source:NEWS.md
inlabru (development version)
Feature updates
 Add support for the
scale
parameter tolike()
.  Fix regression bug in “bym” model support, where the latent state size wasn’t correctly handled by the mapper system (version
2.10.1.9002
)  New
toypoints
example data set, for basic modelling examples (version2.10.1.9003
)  Updated convergence plots, reducing random effect aspects to summary statistics, improving speed and visual coherence (version
2.10.1.9004
)  Add options to
bru_convergence_plot()
to control the number of iterations shown, and optionally show the initial values that are stored from this version (version2.10.1.9005
)  Add filter to limit mapper construction to only the components used in the predictor expression, to avoid unused components breaking the initialisation. This allows easier testing of multilikelihood models (version
2.10.1.9006
)  Switch timing mechanism from
Sys.time()
toproc.time()
to capture CPU time instead of elapsed clock time. Addedbru_timings()
method to extract the timings safely from a fittedbru
object (version2.10.1.9007
and2.10.1.9010
)  Improved backwards compatibility support for
sp
data input forfamily = "cp"
(version2.10.1.9008
)  Add support for special response objects like
inla.mdata()
, when INLA version> 24.06.02
is available (version2.10.1.9009
)
inlabru 2.10.1
CRAN release: 20231221
Feature updates
 Add new web article on ZIP/ZAP models (zero inflated Poisson models) where the nonzero probability is modelled with a separate predictor from the predictor for the Poisson model parameter: https://inlabruorg.github.io/inlabru/articles/zip_zap_models.html. (Thanks to Dmytro Perepolkin)
Bug fixes and dependency simplification
 Remove dependence on the
ggpolypath
package, and theggplot2::fortify.SpatialPolygons/DataFrame()
methods that were deprecated inggplot2
version3.4.4
. Code usinggg.SpatialPolygons()
together withcoord_fixed()
/coord_equal()
for coordinate axis control needs to usecoord_sf()
instead.  Detect the need for vectorised parameters in
bru_forward_transformation
to allowbru_mapper_marginal
to be applied with e.g. spatially varying parameters. (version2.10.0.9001
)  Detect
terra
version>= 1.766
that removes the need for detecting special cases (nrow(where) == 1
andterra::nlyr(data) == 1
). Workaround code used for versions< 1.766
. (version2.10.0.9002
) (Thanks to Robert J. Hijmans)
inlabru 2.10.0
CRAN release: 20231029
Feature updates
 Add new
ibm_simplify()
generic to handle mapper simplification more generally; needed to properly support nonlinear component mappers. (version2.9.0.9004
)  Add new
bru_mapper_marginal()
mapper class that can be used as part of component mapper pipelines. (version2.9.0.9004
)  Add new
ibm_eval2()
generic that computes both evaluation and Jacobian, avoiding doublecomputing of the Jacobian, when practical. (version2.9.0.9005
)  Add new
bru_timings_plot()
function that plots the time used for each nonlinear iteration (version2.9.0.9007
)  Speed up
bru_fill_missing()
(by orders of magnitude) by changing method for finding the nearest available data point. (version2.9.0.9011
)  Add new
bru_mapper_shift()
mapper class that works likebru_mapper_scale()
but for additive shifts instead of multiplicative scaling. (version2.9.0.9012
)  Added more checks for invalid component or predictor evaluations, to help catch user errors sooner, and with more informative messages. (version
2.9.0.9013
)  Expand
bru_mapper_matrix
, previously used only for componentmodel = "fixed"
, to allow integer indexing in addition to the previous factor/characteronly indexing. (version2.9.0.9014
)
Bug fixes
 The
is_linear
flag wasn’t correctly set forbru_mapper_logsumexp
mappers. Since previous versions did not accept nonlinear component mappers, this is unlikely to have affected any user code. (Fixed in version2.9.0.9001
)  Improved error messages for missing or incomplete LGCP domain specification. (version
2.9.0.9002
and2.9.0.9006
)  Allow
NULL
in automatic component usage detection. (version2.9.0.9003
)  Corrected the crs information for
gorillas$plotsample$counts
andgorillas_sf$plotsample$counts
from+units=m
to+units=km
. (version2.9.0.9010
) The geometry information incounts
is unlikely to have been used in examples or analysis code, as the problem would have been immediately obvious; plotting or other geometric operations that use the crs information would heve been completely wrong, and is only detected now that more code uses the crs information at all. Thanks to Dmytro Perepolkin for reporting in issue #205  Fix problem in
bru_fill_missing()
for cases where the input data object also has missing values. (version2.9.0.9011
)  Make
eval_spatial()
transform thewhere
coordinates to the same crs as the input data, forSpatRaster
andsf
inputs, to allow different crs specifications. (version2.9.0.9012
)
inlabru 2.9.0
CRAN release: 20230828
Feature updates
Conversion of code to use
fmesher
for mesh and geometry handling; the interface supports existing objects and methods. See https://inlabruorg.github.io/fmesher/articles/inla_conversion.html for more information.General speed improvements, see below for details.
Added
gg.sf()
method.Add experimental support for
stars
viaeval_spatial()
. (version2.8.0.9007
)Move the
sp
package from ‘Depends’ to ‘Imports’. This means that user code should either usesp::
orlibrary("sp")
to accesssp
methods. Thebru_safe_sp()
helper function can be used to check for a safesp
package configuration during the transition fromrgdal
tosf
, and is only needed if you may run on systems withsp
installations older than “2.00” or withsp::get_evolution_status() < 2
. (version2.8.2011
)
Now preserves the previous log output when using
bru_rerun()
, andbru_log()
is now a set of S3 methods, supporting extracting the full inlabru log as wellbru
object specific logs (version2.8.0.9008
).Note: From version
2.9.0
, usebru_log()
to access the global log, andbru_log(fit)
to access a stored estimation log.Up to version
2.8.0
,bru_log()
was a deprecated alias forbru_log_message()
. When running on2.8.0
or earlier, usebru_log_get()
to access the global log, andcat(fit$bru_iinla$log, sep = "\n")
to print a stored estimation object log.
Bug fixes and speed improvements
 Covariate object component inputs of type
SpatialPolygonsDataFrame
were not automatically passed on toeval_spatial()
. The logic has now changed so that any object with aeval_spatial()
method will trigger a call toeval_spatial()
. See?input_eval
for further information. (version2.8.0.9001
) 
fm_crs_is_null()
,fm_transform()
now supports obliquefm_crs
CRS objects, andis.na()
methods for thefm_crs
andinla.CRS
classes have been added. (version2.8.0.9003
)  Significant speed up
predict()
by usingquantile(..., names = FALSE)
. (version2.8.0.9004
)  Improved
row_kron()
code, causing speedups of a factor 230 in randomised test cases. (version2.8.0.9005
)  Removed incorrect code for
sf
method foreval_spatial()
, causing failure when extracting from multiple layers in a single call. (version2.8.0.9007
)  Improved handling of posterior sample variable extraction in
generate()
andpredict()
. Now much faster for large models. (version2.8.0.9009
)  Fixed linearisation issue when using only the
*_latent
form of a component. (version2.8.0.9015
)  Workaround for equivalent but textually different CRS/WKT information in
bru_fill_missing()
. (version2.8.0.9016
, fixes #200)
Deprecation of old functions

eval_SpatialDF
removed, deprecated since2.8.0
. Seeeval_spatial
instead. 
stransform
,ibm_amatrix
,ibm_valid_input
removed, deprecated since2.7.0
. Seefm_transform
andibm_jacobian
instead. 
bru_mapper_offset
, deprecated since2.6.0
now returns a purebru_mapper_const
object, and allbru_mapper_offset
ibm_*
methods have been removed. 
init.tutorial
removed, deprecated since2.5.0

generate.inla
andpredict.inla
removed, deprecated since2.1.0
inlabru 2.8.0
CRAN release: 20230620
Feature updates
The iterative inla method has been given both sharper internal
inla()
optimisation criteria for the iterations (thanks to Haavard Rue), and a more relaxed nonlinear iteration stopping criterion; the defaultbru_method$rel_tol
values has been changed from 1 to 10 percent change. The iterations are terminated when all latent and hyperparameter mode changes fullfilchange/SD < rel_tol
, and the nonlinear line search is inactive. This seems to strike a useful balance between the different optimisation criteria, allowing the iterations to converge faster and also detect that convergence sooner.
The logic for which components are needed for a predictor expression (in
like()
orgenerate()
/predict()
) has been updated to when possible extract the list of components from the expression itself. The user can override this default if necessary, using theinclude
/exclude
arguments.The
bru_used()
methods are used to guess the needed component names, applied to the righthand side of theformula
arguments. Theallow_latent
argument tolike()
has been deprecated in favour ofinclude_latent
(by default autodetected for use of_latent
and_eval
).The internal information storage is handled by the new
bru_used()
methods, that can also be used directly by the user and supplied via theused
argument tolike()
/generate()
/predict()
. Add
fm_int()
integration methods, replacing the oldipmaker()
andipoints()
methods. Supports bothsf
andsp
sampler objects.Add
fm_pixels()
methods for gridded points. The oldpixels()
method now callsfm_pixels(..., format = "sp")
eval_spatial
support for sf objects (for pointinpolygon data lookups)Allow precomputed spatial covariates in the data for point process observations
Add
edgeintext.linewidth
arguments togg.inla.mesh
#188Rename the
predict()
andgenerate()
data
arguments tonewdata
, for better compatibility with otherpredict()
methods. The old argument name will still be accepted, but give a warning. Code that does not name thedata
argument is not affected.
Note: Coordinate names for
Spatial*
objects have been inconsistently available in the predictor expression evaluation. However, due to how internal conversions might inadvertently change these names, they can not be relied on, and they are no longer being made available to the predictor expression. As a side effect, this change also speeds up somebru()
runs by around a factor 2, since it avoids converting theSpatial*
to a regulardata.frame
in timesensitive core evaluation code.If you need access to the raw coordinate values, use explicit calls to
sp::coordinates(.data.)
(e.g. for custom spatial covariate evaluation.). When possible, use the builtin covariate evaluation method,eval_spatial()
, either implicitly withcomp(covariate, ...)
or explicitly,comp(eval_spatial(covariate, where = .data.), ...)
, that handlescrs
information correctly. Also consider transitioning fromsp
tosf
data storage, usinggeometry
instead of raw coordinates.
Bug and dependency updates
 Remove
rgdal
andmaptools
dependencies #178  Add
bru_safe_sp()
to check ifsp
can be used safely (checksrgdal
availability andsp
evolution status, optionally forcing use ofsf
) #178  Remove PROJ4 support #178
 Change
rgl.*
functions to*3d
. Thanks to Duncan Murdoch #181  Speed up
ibm_jacobian.bru_mapper_harmonics
for large models  Add workarounds for inconsistent polygon orientation resulting from
sf::st_*
calls that don’t account for thegeos
canonical representation being CW, whereas the canonical Simple Features representation being CCW. See https://github.com/rspatial/sf/issues/2096
inlabru 2.7.0
CRAN release: 20221202
Feature overview
 Added support for
sf
andterra
inputs to most methods  Expanded geometry and mesh handling methods
 Expanded
bru_mapper()
system  Added convergence diagnostics plot with
bru_convergence_plot()
Feature details
Allow
NA
input for default 1D mappers to generate effect zero, like ininla()
.New and expanded methods
fm_crs()
,fm_CRS()
,fm_transform()
,fm_ellipsoid_radius()
, andfm_length_unit()
to further supportsf
objects. Thefm_crs()
extraction method also supportsterra
objects.bru_fill_missing()
now supportsterra
SpatRaster
data and andsf
locations.New experimental methods
fm_evaluator()
andfm_evaluate()
, replacing theINLA
inla.mesh.projector
andinla.mesh.project
methods.Experimental integration support for sphere and globe meshes.
Allow
sf
input tofamily="cp"
models.
Further
bru_mapper()
method updates; Deprecated
ibm_amatrix()
andnames()
methods, replaced byibm_jacobian()
andibm_names()
.  Introduced
bru_mapper_pipe()
, used to link mappers in sequence.  Introduced
bru_mapper_aggregate()
andbru_mapper_logsumexp()
, used for blockwise weighted sums and logsumexp mappings,output[k] = sum(weights[block==k]*state[block==k])))
andoutput[k] = log(sum(weights[block==k]*exp(state[block==k])))
, with optional weight normalisation within each block. Allows providing the weights as logweights, and uses blockwise shifts to avoid potential overflow. 
summary
methods forbru_mapper
objects (summary.bru_mapper()
)  Removed
methods
argument frombru_mapper_define()
. Implementations should register S3 methods instead.
 Deprecated
Bug fixes
 Remove unused
spatstat.core
dependency. Fixes #165  Fixed issue with plain mapper evaluation in the
ibm_eval.default()
andibm_eval.bru_mapper_collect()
methods, where they would return zeros instead of the intended values. The main component evaluation and estimation code was not directly affected as that is based on thebru_mapper_multi()
class methods that rely on the Jacobians instead. The bug would therefore mainly have impacted the future, not yet supported nonlinear mapper extensions.  Fix for
eval_spatial.SpatRaster
; Work around inconsistent logic interra::extract(..., layer)
whenlength(layer)==1
ornrow(where)==1
. Fixes #169  Add
indexed
logical option tobru_mapper_factor()
, to allow factor inputs to be mapped to index values, as needed forgroup
andreplicate
. Fixes #174
inlabru 2.6.0
CRAN release: 20221024
Features
Add
bru_get_mapper
generic, and associated methods forinla.spde
andinla.rgeneric
objects. This allowsinlabru
to automatically extract the appropriatebru_mapper
object for each model component, and can be used as a hook by external packages implementing new INLA object classes.Add a
weights
argument forlike()
, for likelihoodspecific loglikelihood weights, passed on to theINLA::inla()
weights argument. Evaluated in the data context.The
<component>_eval()
methods available in predictor expressions now handle optional scaling weights, like in ordinary component effect evaluation.Add
terra
support for covariate inputsThe component
*_layer
arguments are now evaluated in the data context, to allow dynamic layer selection for spatial raster covariates. A new genericeval_spatial()
provides support for grid/pixel basedSpatial*DataFrame
evaluation, andSpatRaster
. Expanded support is in progress.New vignettes on the
bru_mapper
system,component
definitions, andprediction_scores

General overhaul of the
bru_mapper
and linearised predictor system, to prepare for new features. Add
ibm_eval
generic for evaluating mappers for given states.  Add
bru_mapper_taylor
, used as an internal mapper for linearised mappers. This andibm_eval
is aimed at future support for nonlinear mappers. Associated new generic methods:ibm_{is_linear,jacobian,linear}
.  New mapper implementations should use
ibm_jacobian
instead ofibm_amatrix
. This allows defining a linearised mapper viaibm_eval(input, state0) + ibm_jacobian(input, state0) %*% (state  state0)
.  New mapper class
bru_mapper_const
, which replacesbru_mapper_offset
.bru_mapper_offset
is now deprecated and will produce warnings.
 Add
inlabru 2.5.3
CRAN release: 20220905
Features
 Add
bru_mapper_harmonics
mapper forcos
andsin
basis sets.  Allow
predict()
input data to be be a list.  Allow arbitrary quantile summaries in
predict()
 Remove
cv
,var
,smin
,smax
summaries frompredict()
 Add
mean.mc_std_err
andsd.mc_std_err
output topredict()
 Add
robins_subset
data set and associated variable coefficient web vignette
Bug fixes
 Propagate multilikelihood Amatrix information instead of recomputing. Fixes iteration issue for bym2 and other
bru_mapper_collect
models.  Turn on predictor summaries during iterations to allow
inla.mode="classic"
to use proper line search.  Avoid deprecated Matrix (>=1.42) class coercion methods
 Work around for lack of full Matrix and ModelMatrix support for the
unique
method. Fixes #145
inlabru 2.5.2
CRAN release: 20220330
 More robust package checks
 More robust namespace and INLA availability checks
 Add package vignette with links to the website examples
inlabru 2.5.1
 Revert to R language features compatible with R 4.0.5
 Use
strategy="gaussian"
during iterations.
inlabru 2.5.0
CRAN release: 20220321
Features
 Add
bru()
timing information in$bru_timings
and$bru_iinla$timings
 Add
SpatialPolygonsDataFrame
support togg()
methods  Allow accessing
E
andNtrials
fromresponse_data
anddata
(further special arguments remain to be added) 
deltaIC
improvements  New transformation helper tools
bru_{forward/inverse}_transformation()
 Experimental support for matrix and formula component inputs. E.g. with
~ name(~ 1 + a + b + a:b, model = "fixed")
, covariate fixed effect interaction specifications can be made. For formula input,MatrixModels::model.Matrix()
is called to construct matrix input that is then used as the Amatrix for fixed effects, one per column, added up to form the combined effect.  Documentation and examples improvements
Bug fixes
 Fix Amatrix construction for
evaluate_model()
for cases where theinla_f
argument matters  More efficient and robust mesh integration code
 Cleanup of environment handling for component lists
inlabru 2.4.0
CRAN release: 20211219
Features
 Allow predictors to have different size than the input data. The
data
argument is now allowed to be alist()
, and the new argumentresponse_data
allows separate specification of component inputs and response variables.  Add
bru_mapper_collect
class for handling sequential collections of mappers, including collections where all but the first mapper is hidden from theINLA::f()
argumentsn
andvalues
, as needed to support e.g. “bym2” models.  Add
control.family
as a direct argument tolike()
. Gives a warning if acontrol.family
argument is supplied to the theoptions
argument ofbru()
, but at least one likelihood hascontrol.family
information. (Issue #109)
Bugfixes
 Fix support for
SpatialPointsDataFrame
andSpatialGridDataFrame
input tobru_fill_missing()
 Force explicit
model = "offset"
components instead of special options, to avoid interfering with the linearisation system (Issue #123)  Make the iterations more robust by resetting the internal INLA predictor states to initial value zero at each step
Miscellaneous
 Rename the option
bru_method$stop_at_max_rel_deviation
tobru_method$rel_tol
. Automatic conversion to the new name, but a warning is given.  Add option
bru_method$max_step
to control the largest allowed line search scaling factor. See?bru_options
 New default option
bru_compress_cp
set toTRUE
to compress the predictor expression forfamily="cp"
to use a single element for the linear predictor sum.
inlabru 2.3.1
CRAN release: 20210322
 Documentation and dependency updates for CRAN compatibility
 See NEWS for version 2.3.0 for the major updates since version 2.1.13
inlabru 2.3.0
CRAN release: 20210316
Breaking changes since version 2.1.13
 The model component argument
map
has been deprecated. Usemain
to specify the main component input,~ elev(main = elevation, model = "rw2")
. Unlike the oldmap
argument,main
is the first one, so the shorter version~ elev(elevation, model = "rw2")
also works.  Interceptlike components should now have explicit inputs, e.g.
~ Intercept(1)
to avoid accidental confusion with other variables.  The argument list for
bru()
has been simplified, so that all arguments exceptcomponents
andoptions
must either be outputs from calls tolike()
, or arguments that can be sent to a singlelike()
call.  The option setting system has been replaced with a more coherent system; see
?bru_options()
for details.  The
samplers
anddomain
system forlgcp
models is now stricter, and requires explicitdomain
definitions for all the point process dimensions. Alternatively, userdefined integration schemes can be supplied via theips
argument.
New features since version 2.1.13
 The model component input arguments
main
,group
,replicate
, andweights
can now take general R expressions using the data inputs. Special cases are detected:SpatialPixels/GridDataFrame
objects are evaluated at spatial locations if the input data is aSpatialPointsDataFrame
object. Functions are evaluated on the data object, e.g.field(coordinates, model = spde)
 The component arguments
mapper
,group_mapper
, andreplicate_mapper
can be used for precise control of the mapping between inputs and latent variables. See?bru_mapper
for more details. Mapper information is automatically extracted fromINLA::inla.spde2.pcmatern()
model objects.  The RINLA
weights
andcopy
features are now supported.  The predictor expressions can access the data object directly via
.data.
 If data from several rows can affect the same output row, the
allow_combine = TRUE
argument must be supplied tolike()
 The
include
andexclude
arguments tolike()
,generate()
, andpredict()
can be used to specify which components are used for a given likelihood model or predictor expression. This can be used to prevent evaluation of components that are invalid for a likelihood or predictor.  Predictor expressions can access the latent state of a model component directly, by adding the suffix
_latent
to the component name, e.g.name_latent
. Forlike()
, this requiresallow_latent = TRUE
to activate the needed linearisation code for this.  Predictor expressions can evaluate component effects for arbitrary inputs by adding the suffix
_eval
to access special evaluator functions, e.g.name_eval(1:10)
. This is useful for evaluating the 1D effect of spatial covariates. See the NEWS item for version 2.2.8 for further details.  The internal system for predictor linearisation and iterated INLA inference has been rewritten to be faster and more robust
 See the NEWS entries for versions 2.1.14 to 2.2.8 for further details on new features and bug fixes
inlabru 2.2.8

Add
_eval
suffix feature forgenerate.bru
andpredict.bru
, that provides a general evaluator function for each component, allowing evaluation of e.g. nonlinear effects of spatial covariates as a function of the covariate value instead of the by the spatial evaluator used in the component definition. For example, withcomponents = ~ covar(spatial_grid_df, model = "rw1")
, the prediction expression can have~ covar_eval(covariate)
, wherecovariate
is a data column in the prediction data object.For components with
group
andreplicate
features, these also need to be provided to the_eval
function, with..._eval(..., group = ..., replicate = ...)
This feature is built on top of the
_latent
suffix feature, that gives direct access to the latent state variables of a component, so in order to use_eval
in the model predictor itself, you must uselike(..., allow_latent = TRUE)
in the model definition.
inlabru 2.2.7
 Add support for
ngroup
andnrep
in component definitions  Updated
mexdolphin
andmrsea
data sets, with consistent km units and improved mesh designs
inlabru 2.2.6
 Add
predict(..., include)
discussion to distance sampling vignette, for handling nonspatial prediction in spatial models.  Fix bugs in
gg.SpatialLines
inlabru 2.2.5
 Vignette corrections
 Documentation improvements
 Fix minor bug in
Spatial*
object handling and plotting
inlabru 2.2.4
 Properly extract the joint latent conditional mode instead of the marginal latent conditional mode
inlabru 2.2.2
 Fixed issue with
predict()
logic for converting output toSpatial*DataFrame
 Use
control.mode=list(restart=FALSE)
in the final inla run for nonlinear models, to avoid an unnecessary optimisation.  Fix issues in
pixels()
andbru_fill_missing()
forSpatial*DataFrame
objects withncol=0
data frame parts.
inlabru 2.2.0
 Support for the INLA “copy” feature,
comp2(input, copy = "comp1")
 Allow component weights to be an unnamed parameter,
comp(input, weights, ...)
 Direct access to the data objects in component inputs and predictor expressions, as
.data.
, allowing e.g.covar(fun(.data.), ...)
for a complex covariate extractor methodfun()
 Partial support for spherical manifold meshes
 Uses INLA integration strategy “eb” for initial nonlinear iterations, and a specified integration strategy only for the final iteration, so that the computations are faster, and uses the conditional latent mode as linearisation point.
inlabru 2.1.15
 New options system
 New faster linearisation method
 New line search method to make the nonlinear inla iterations robust
 Method for updating old stored estimation objects
 System for supplying mappings between latent models and evaluated effects via
bru_mapper
objects  Improved factor support; Either as “contrast with the 1st level”, via the special
"factor_contrast"
model, or all levels with model"factor_full"
. Further options planned (e.g. a simpler options to fix the precision parameter). The estimated coefficients appear as random effects in theinla()
output.  Interface restructuring to support new features while keeping most backwards compatibility. Change
map=
tomain=
or unnamed first argument; Sincemain
is the first parameter, it doesn’t need to be a named argument.  Keep components with zero derivative in the linearisation
 PROJ6 support
 Add random seed option for posterior sampling
 Add package unit testing
 New backend code to make extended feature support easier
 New
int.args
option to control spatial integration resolution, thanks to Martin Jullum (martinju
)
inlabru 2.1.12
CRAN release: 20190624
 Workaround an integration points error for old (ca pre2018) INLA versions
inlabru 2.1.7
 Added a
NEWS.md
file to track changes to the package.  Added
inla
methods forpredict()
andgenerate()
that convertinla
output intobru
objects before calling thebru
prediction and posterior sample generator.  Added protection for examples requiring optional packages
 Fix
sample.lgcp
output formatting, extended CRS support, and more efficient sampling algorithm  Avoid dense matrices for effect mapping
inlabru 2.1.4

iinla()
tracks convergence of both fixed and random effects