knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

(Vignette under construction!)

Mapping from component inputs and latent states to component effects

DiagrammeR::mermaid('
flowchart TD

subgraph "main, group, replicate"
  input([input])
  mapper([mapper])
end
weights(["weights"])
input_comb(["combined inputs:
  list(mapper = list(main, group, replicate),
  scale = weights)"])
multi_mapper(["mapper_multi<br/>list(main, group, replicate)"])
marginal_mapper([mapper_marginal])
scale_mapper([mapper_scale])
pipe_mapper([mapper_pipe])
state([state])
lin(["mapper_linearised<br/>(offset, jacobian, state0)"])
effect([effect])

ibm_do_lin{linearise}
ibm_lin[ibm_linear]
ibm_eval[ibm_eval]
ibm_eval_lin[ibm_eval]

%% edge definitions with the node IDs
input --> input_comb
weights --> input_comb
input_comb --> ibm_eval
input_comb --> ibm_lin
pipe_mapper --> ibm_do_lin
ibm_do_lin -->|Yes| ibm_lin
ibm_do_lin -->|No| ibm_eval
state0([state0]) --> ibm_lin
ibm_lin --> lin
state --> ibm_eval_lin
lin --> ibm_eval_lin
state --> ibm_eval
mapper --> multi_mapper --> pipe_mapper
marginal_mapper --> pipe_mapper
scale_mapper --> pipe_mapper
ibm_eval --> effect
ibm_eval_lin --> effect
',
  width = 600,
  height = 800
)

Linearising a mapping

DiagrammeR::mermaid('
flowchart TD

mapper([mapper])
input([input])
state0([state0])
off(["offset"])
jac(["jacobian"])
lin(["mapper_linearised<br/>(offset, jacobian, state0)"])

ibm_A[ibm_amatrix]
style ibm_A color:#f00
ibm_lin[ibm_linear]
ibm_jac[ibm_jacobian]

%% edge definitions with the node IDs
mapper-->ibm_lin
input-->ibm_lin
state0-->ibm_lin
ibm_lin --> ibm_eval
ibm_eval --- ibm_jac
ibm_lin --> ibm_jac
ibm_eval --> off
ibm_jac --> jac
ibm_jac --- ibm_A
ibm_lin --> lin
%% off-->lin
%% jac-->lin
%% state-->lin
',
  width = 600,
  height = 400
)

Component input evaluation

For each <label> of main, group, replicate, and weights, the given expression expr is evaluated in the data context, producing the input to the component mapper. For spatial covariate inputs, the corresponding <label>_layer expression is also evaluated.

Red nodes indicate deprecated behaviour retained for backwards compatibility.

DiagrammeR::mermaid('
flowchart TD

expr(["<i>label</i>_expr"])
data([data])
_envir([".envir"])
input(["<i>label</i>_input"])
input0([input = NULL])
input1([input = 1])
style input1 color:#f00

eval[eval]
eval_function["value=fun(.data.)"]
eval_formula["model.Matrix"]
eval_spatial["eval_spatial"]
eval_coordinates["SpatialPoints(value, crs)"]
style eval_coordinates color:#f00
eval_crs["crs=fm_CRS(.data.)"]

res{"Type of<br/>result"}
null_on_fail{"null_on_fail?"}
is_coordinates_fun{"Is expr =<br/>coordinates?"}

expr --> eval
eval --> res
res -->|error| null_on_fail
data --> eval
_envir --> eval

null_on_fail -->|TRUE| input0
null_on_fail -->|FALSE| input1
input0 --> input
input1 --> input

res -->|function| eval_function
eval_function --> is_coordinates_fun

is_coordinates_fun -->|Yes| eval_coordinates
is_coordinates_fun -->|No| input
eval_coordinates --> input
eval_crs --> eval_coordinates

res -->|"vector,<br/>matrix,<br/>data.frame<br/>list"| input

res -->|formula| eval_formula
eval_formula --> input

res -->|"spatial<br/>covariate"| eval_spatial
eval_spatial --> input

%% spatial covariate layer input
layer_expr(["<i>label</i>_layer_expr"])
layer(["<i>label</i>_layer"])
layer_eval["eval"]
data --> layer_eval
_envir --> layer_eval
layer_expr --> layer_eval --> layer --> eval_spatial
',
  width = 900,
  height = 700
)

Intergration point construction

Flow diagram for new integration scheme construction, implemented as fm_int(domain, samplers) methods.

DiagrammeR::mermaid('
flowchart TD

samplers[(samplers)]
domains[(domains)]
samplers --> multi_samplers[("multi domain
samplers")]
samplers --> single_samplers[("single domain
samplers")]
samplers --> calc_full_samplers["remove sampler
domains"]
domains --> calc_full_samplers --> full_samplers[("full domain
samplers")]
domains --> multi_samplers
domains --> single_samplers
domains --> full_samplers

subgraph "single sampler"
  ipoints_single_rowwise["compute ips
for each row"] -->
  single_sampler_ips([ips])
end

subgraph "multi sampler"
  ipoints_domainwise["compute ips
for each domain"] -->
  ipoints_single_rowwise

  ips_domain_list[("ips
for each domain")] -->
  cprod_row["cprod within
each sampler row"] -->
  multi_sampler_ips([ips])
end

multi_samplers -->|for each| ipoints_domainwise
single_samplers -->|for each| ipoints_single_rowwise
full_samplers -->|for each| ipoints_single_rowwise



multi_sampler_ips --> ips_list[(ips list)]
single_sampler_ips --> ips_list

single_sampler_ips --> ips_domain_list

ips_list --> cprod_joint[cprod] --> joint_ips([joint ips])
',
  width = 900,
  height = 1200
)


inlabru-org/inlabru documentation built on April 5, 2025, 2:08 a.m.