A bru_mapper
sub-class implementation must provide an
ibm_jacobian()
method. If the model size 'n' and definition
values 'values' are stored in the object itself, default methods are
available (see Details). Otherwise the
ibm_n()
and ibm_values()
methods also need to be provided.
ibm_n(mapper, inla_f = FALSE, ...)ibm_n_output(mapper, input, state = NULL, inla_f = FALSE, ...)
ibm_values(mapper, inla_f = FALSE, ...)
ibm_is_linear(mapper, ...)
ibm_jacobian(mapper, input, state = NULL, inla_f = FALSE, ...)
ibm_linear(mapper, input, state = NULL, ...)
ibm_simplify(mapper, input = NULL, state = NULL, ...)
ibm_eval(mapper, input, state = NULL, ...)
ibm_eval2(mapper, input, state = NULL, ...)
ibm_names(mapper)
ibm_names(mapper) <- value
ibm_inla_subset(mapper, ...)
ibm_invalid_output(mapper, input, state, ...)
# S3 method for default
ibm_n(mapper, inla_f = FALSE, ...)
# S3 method for default
ibm_n_output(mapper, input, state = NULL, inla_f = FALSE, ...)
# S3 method for default
ibm_values(mapper, inla_f = FALSE, ...)
# S3 method for default
ibm_is_linear(mapper, ...)
# S3 method for default
ibm_jacobian(mapper, input, state, ...)
# S3 method for default
ibm_linear(mapper, input, state, ...)
# S3 method for default
ibm_simplify(mapper, input = NULL, state = NULL, ...)
# S3 method for default
ibm_eval(mapper, input, state = NULL, ..., jacobian = NULL)
# S3 method for default
ibm_eval2(mapper, input, state, ...)
# S3 method for default
ibm_names(mapper, ...)
# S3 method for default
ibm_inla_subset(mapper, ...)
# S3 method for default
ibm_invalid_output(mapper, input, state, ...)
A mapper S3 object, inheriting from bru_mapper
.
logical; when TRUE
for ibm_n()
and ibm_values()
, the
result must be compatible with the INLA::f(...)
and corresponding
INLA::inla.stack(...)
constructions. For ibm_{eval,jacobian,linear}
,
the input
interpretation may be different.
Implementations do not normally need to do anything different, except
for mappers of the type needed for hidden multicomponent models such
as "bym2", which can be handled by bru_mapper_collect
.
Arguments passed on to other methods
Data input for the mapper.
A vector of latent state values for the mapping,
of length ibm_n(mapper, inla_f = FALSE)
a character vector of the same length as the number of sub-mappers in the mapper
For ibm_eval()
methods, an optional pre-computed Jacobian, typically
supplied by internal methods that already have the Jacobian.
ibm_n()
: Implementations must return the size of the latent vector
being mapped to.
ibm_n_output()
: Implementations must return an integer denoting the
mapper output length.
The default implementation returns NROW(input)
.
Mappers such as bru_mapper_multi
and bru_mapper_collect
,
that can accept list()
inputs require their own methods implementations.
ibm_values()
: When inla_f=TRUE
, implementations must return a vector that
would be interpretable by an INLA::f(..., values = ...)
specification.
The exception is the method for bru_mapper_multi
, that returns a
multi-column data frame.
ibm_is_linear()
: Implementations must return TRUE
or FALSE
.
If TRUE
(returned by the default method unless the mapper
contains an is_linear
variable), users of the mapper
may assume the mapper is linear.
ibm_jacobian()
: Implementations must return a (sparse) matrix of size
ibm_n_output(mapper, input, inla_f)
by ibm_n(mapper, inla_f = FALSE)
. The inla_f=TRUE
argument should
only affect the allowed type of input format.
ibm_linear()
: Implementations must return a bru_mapper_taylor object
The linearisation information includes offset
, jacobian
, and state0
.
The state information indicates for which state the offset
was evaluated,
with NULL
meaning all-zero.
The linearised mapper output is defined as
effect(input, state) = offset(input, state0) + jacobian(input, state0) %*% (state - state0)
.
The default method calls ibm_eval()
and ibm_jacobian()
to generate
the needed information.
ibm_simplify()
: Implementations must return a bru_mapper object.
The default method returns ibm_linear(...)
for linear mappers, and the
original mapper
for non-linear mappers.
ibm_eval()
: Implementations must return a vector of length ibm_n_output(...)
.
The input
contents must
be in a format accepted by ibm_jacobian(...)
for the mapper.
ibm_eval2()
: Implementations must return a list with elements offset
and jacobian
.
The input
contents must
be in a format accepted by ibm_jacobian(...)
for the mapper.
ibm_names()
: Implementations must return a character vector of sub-mapper names, or NULL
.
Intended for providing information about multi-mappers and mapper collections.
ibm_names(mapper) <- value
: Set mapper names.
ibm_inla_subset()
: Implementations must return a logical vector of TRUE/FALSE
for
the subset such that, given the full A matrix and values output,
A[, subset, drop = FALSE]
and values[subset]
(or values[subset, , drop = FALSE]
for data.frame values) are equal
to the inla_f = TRUE
version of A and values. The default method uses
the ibm_values
output to construct the subset indexing.
ibm_invalid_output()
: Implementations should return a logical vector of length
ibm_n_output(mapper, input, state, ...)
indicating which, if any,
output elements of ibm_eval(mapper, input, state, ...)
are known to be
invalid.
For for multi/collect mappers, a list, when given a multi=TRUE
argument.
ibm_n(default)
: Returns a non-null element 'n' from the
mapper object, and gives an error if it doesn't exist. If inla_f=TRUE
,
first checks for a 'n_inla' element.
ibm_n_output(default)
: Returns NROW(input)
ibm_values(default)
: Returns a non-null element
'values' from the mapper object, and seq_len(ibm_n(mapper))
if
it doesn't exist.
ibm_is_linear(default)
: Returns logical
is_linear
from the mapper object if it exists, and otherwise TRUE
.
ibm_jacobian(default)
: Mapper classes must implement their own ibm_jacobian
method.
ibm_linear(default)
: Calls ibm_eval()
and ibm_jacobian()
and returns a bru_mapper_taylor
object.
The state0
information in the affine mapper indicates for which state
the offset
was evaluated; The affine mapper output is defined as
effect(input, state) = offset(input, state0) + jacobian(input, state0) %*% (state - state0)
ibm_simplify(default)
: Calls ibm_linear()
for linear mappers, and returns the original mapper
for non-linear mappers.
ibm_eval(default)
: Verifies that the mapper is linear
with ibm_is_linear()
, and then computes a linear mapping
as ibm_jacobian(...) %*% state
. When state
is NULL
,
a zero vector of length ibm_n_output(...)
is returned.
ibm_eval2(default)
: Calls jacobian <- ibm_jacobian(...)
and
offset <- ibm_eval(..., jacobian = jacobian)
and returns a list with elements offset
and jacobian
, as needed
by ibm_linear.default()
and similar methods. Mapper classes can implement
their own ibm_eval2
method if joint construction of evaluation and Jacobian
is more efficient than separate or sequential construction.
ibm_names(default)
: Returns NULL
ibm_inla_subset(default)
: Uses
the ibm_values
output to construct the inla subset indexing, passing
extra arguments such as multi
on to the methods (this means it supports
both regular vector values and multi=1
data.frame values).
ibm_invalid_output(default)
: Returns an all-FALSE
logical vector.
bru_mapper for constructor methods, and bru_get_mapper for hooks to extract mappers from latent model object class objects.
bru_mapper, bru_get_mapper()
Other mappers:
bru_get_mapper()
,
bru_mapper()
,
bru_mapper.fm_mesh_1d()
,
bru_mapper.fm_mesh_2d()
,
bru_mapper_aggregate()
,
bru_mapper_collect()
,
bru_mapper_const()
,
bru_mapper_factor()
,
bru_mapper_harmonics()
,
bru_mapper_index()
,
bru_mapper_linear()
,
bru_mapper_logsumexp()
,
bru_mapper_marginal()
,
bru_mapper_matrix()
,
bru_mapper_mesh_B()
,
bru_mapper_multi()
,
bru_mapper_pipe()
,
bru_mapper_scale()
,
bru_mapper_shift()
,
bru_mapper_taylor()
# ibm_names
mapper <- bru_mapper_multi(list(
A = bru_mapper_index(2),
B = bru_mapper_index(2)
))
ibm_names(mapper)
ibm_names(mapper) <- c("new", "names")
ibm_names(mapper)
Run the code above in your browser using DataLab