# nodeFunctions: calculate, calculateDiff, simulate, or get the current log... In nimble: MCMC, Particle Filtering, and Programmable Hierarchical Modeling

 nodeFunctions R Documentation

## calculate, calculateDiff, simulate, or get the current log probabilities (densities) a set of nodes in a NIMBLE model

### Description

calculate, calculateDiff, simulate, or get the current log probabilities (densities) of one or more nodes of a NIMBLE model and (for calculate and getLogProb) return the sum of their log probabilities (or densities). Part of R and NIMBLE.

### Usage

```calculate(model, nodes, nodeFxnVector, nodeFunctionIndex)

calculateDiff(model, nodes, nodeFxnVector, nodeFunctionIndex)

getLogProb(model, nodes, nodeFxnVector, nodeFunctionIndex)

simulate(model, nodes, includeData = FALSE, nodeFxnVector, nodeFunctionIndex)
```

### Arguments

 `model` A NIMBLE model, either the compiled or uncompiled version `nodes` A character vector of node names, with index blocks allowed, such as 'x', 'y[2]', or 'z[1:3, 2:4]' `nodeFxnVector` An optional vector of nodeFunctions on which to operate, in lieu of `model` and `nodes` `nodeFunctionIndex` For internal NIMBLE use only `includeData` A logical argument specifying whether `data` nodes should be simulated into (only relevant for `simulate`)

### Details

Standard usage is as a method of a model, in the form `model\$calculate(nodes)`, but the usage as a simple function with the model as the first argument as above is also allowed.

These functions expands the nodes and then process them in the model in the order provided. Expanding nodes means turning 'y[1:2]' into c('y[1]','y[2]') if y is a vector of scalar nodes. Calculation is defined for a stochastic node as executing the log probability (density) calculation and for a deterministic node as calculating whatever function was provided on the right-hand side of the model declaration.

Difference calculation (calculateDiff) executes the operation(s) on the model as calculate, but it returns the sum of the difference between the new log probabilities and the previous ones.

Simulation is defined for a stochastic node as drawing a random value from its distribution, and for deterministic node as equivalent to calculate.

getLogProb collects and returns the sum of the log probabilities of nodes, using the log probability values currently stored in the model (as generated from the most recent call to calculate on each node)

These functions can be used from R or in NIMBLE run-time functions that will be compiled. When executed in R (including when an uncompiled nimbleFunction is executed), they can be slow because the nodes are expanded each time. When compiled in NIMBLE, the nodes are expanded only once during compilation, so execution will be much faster.

It is common to want the nodes to be provided in topologically sorted order, so that they will be calculated or simulated following the order of the model graph. Functions such as model\$getDependencies(nodes, ...) return nodes in topologically sorted order. They can be directly sorted by model\$topologicallySortNodes(nodes), but if so it is a good idea to expand names first by model\$topologicallySortNodes(model\$expandNodeNames(nodes))

### Value

calculate and getLogProb return the sum of the log probabilities (densities) of the calculated nodes, with a contribution of 0 from any deterministic nodes

calculateDiff returns the sum of the difference between the new and old log probabilities (densities) of the calculated nodes, with a contribution of 0 from any deterministic nodes.

simulate returns NULL.

### Author(s)

NIMBLE development team

nimble documentation built on March 18, 2022, 8:03 p.m.