Constructs a mapper that aggregates elements of exp(state), with optional non-negative weighting, and then takes the log(), so it can be used e.g. for $$v_k=\log[\sum_{i\in I_k} w_i \exp(u_i)]$$ and $$v_k=\log[\sum_{i\in I_k} w_i \exp(u_i) / \sum_{i\in I_k} w_i]$$ calculations. Relies on the input handling methods for bru_mapper_aggregate, but also allows the weights to be supplied on a logarithmic scale as log_weights. To avoid numerical overflow, it uses the common method of internally shifting the state blockwise; $$v_k=s_k+\log[\sum_{i\in I_k} \exp(u_i + \log(w_i)- s_k)]$$, where $$s_k=\max_{i\in I_k} u_i + \log(w_i)$$ is the shift for block $$k$$.

## Usage

bru_mapper_logsumexp(rescale = FALSE, n_block = NULL)

# S3 method for bru_mapper_logsumexp
ibm_jacobian(mapper, input, state = NULL, ...)

# S3 method for bru_mapper_logsumexp
ibm_eval(mapper, input, state = NULL, log = TRUE, ..., sub_lin = NULL)

## Arguments

rescale

logical; For bru_mapper_aggregate and bru_mapper_logsumexp, specifies if the blockwise sums should be normalised by the blockwise weight sums or not:

• FALSE: (default) Straight weighted sum, no rescaling.

• TRUE: Divide by the sum of the weight values within each block. This is useful for integration averages, when the given weights are plain integration weights. If the weights are NULL or all ones, this is the same as dividing by the number of entries in each block.

n_block

Predetermined number of output blocks. If NULL, overrides the maximum block index in the inputs.

mapper

A mapper S3 object, inheriting from bru_mapper.

input

Data input for the mapper.

state

A vector of latent state values for the mapping, of length ibm_n(mapper, inla_f = FALSE)

...

Arguments passed on to other methods

log

logical; control log output. Default TRUE, see the ibm_eval() details for logsumexp mappers.

sub_lin

Internal, optional pre-computed sub-mapper information

## Details

• For bru_mapper_logsumexp, input should be a list with elements block and weights. block should be a vector of the same length as the state, or NULL, with NULL equivalent to all-1. If weights is NULL, it's interpreted as all-1.

## Methods (by generic)

• ibm_eval(bru_mapper_logsumexp): When log is TRUE (default), ibm_eval() for logsumexp returns the log-sum-weight-exp value. If FALSE, the sum-weight-exp value is returned.

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_generics, bru_mapper_harmonics(), bru_mapper_index(), bru_mapper_linear(), 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()

## Examples

m <- bru_mapper_logsumexp()
ibm_eval2(m, list(block = c(1, 2, 1, 2), weights = 1:4), 11:14)
#> $offset #> [1] 14.14274 15.45177 #> #>$jacobian
#> 2 x 4 sparse Matrix of class "dgCMatrix"
#>
#> [1,] 0.04316453 .          0.9568355 .
#> [2,] .          0.06337894 .         0.9366211
#>