Tape {RTMB} | R Documentation |
The AD tape
Description
The AD tape as an R function
Usage
MakeTape(f, x)
## S3 method for class 'Tape'
x$name
## S3 method for class 'Tape'
print(x, ...)
TapeConfig(
comparison = c("NA", "forbid", "tape", "allow"),
atomic = c("NA", "enable", "disable"),
vectorize = c("NA", "disable", "enable")
)
DataEval(f, x)
GetTape(obj, name = c("ADFun", "ADGrad", "ADHess"), warn = TRUE)
Arguments
f |
R function |
x |
numeric vector |
name |
Name of a tape method |
... |
Ignored |
comparison |
Set behaviour of AD comparison ( |
atomic |
Set behaviour of AD BLAS operations (notably matrix multiply). |
vectorize |
Enable/disable AD vectorized 'Ops' and 'Math'. |
obj |
Output from |
warn |
Give warning if |
Details
A 'Tape' is a representation of a function that accepts fixed size numeric input and returns fixed size numeric output.
The tape can be constructed using F <- MakeTape(f, x)
where f
is a standard differentiable R function (or more precisely: One using only functions that are documented to work for AD types).
Having constructed a tape F, a number of methods are available:
Evaluation:
Normal function evaluation 'F(x)' for numeric input.
AD evaluation 'F(x)' as part of other tapes.
Jacobian calculations using 'F$jacobian(x)'.
Transformation:
Get new tape representing the Jacobian using
F$jacfun()
.Get new tape representing the sparse Jacobian using
F$jacfun(sparse=TRUE)
.Get new tape representing the Laplace approximation using
F$laplace(indices)
.Get new tape representing the Saddle Point approximation using
F$laplace(indices,SPA=TRUE)
.Get new tape representing the optimum (minimum) wrt
indices
byF$newton(indices)
.Get a 'shared pointer' representation of a tape using
F$atomic()
.Get tape of a single node by
F$node(index)
(mainly useful for derivative debugging).
Modification:
Simplify internal representation of a tape using
F$simplify()
.
Extract tape information:
Get internal parameter vector by
F$par()
.Get computational graph by
F$graph()
.Print the tape by
F$print()
.Get internal arrays as a
data.frame
byF$data.frame()
.
Value
Object of class "Tape"
.
Methods (by generic)
-
$
: Get a tape method. -
print(Tape)
: Print method
Functions
-
MakeTape()
: Generate a 'Tape' of an R function. -
TapeConfig()
: Global configuration parameters of the tape (experts only!) comparison By default, AD comparison gives an error (comparison="forbid"
). This is the safe and recommended behaviour, because comparison is a non-differentiable operation. If you are building a tape that requires indicator functions e.g.f(x)*(x<0)+g(x)*(x>=0)
then usecomparison="tape"
to add the indicators to the tape. A final optioncomparison="allow"
exists for testing/illustration purposes. Do not use. -
DataEval()
: Move a chunk of data from R to the tape by evaluating a normal R function (replaces TMB functionality 'DATA_UPDATE'). -
GetTape()
: Extract tapes from a model object created byMakeADFun
.
Examples
F <- MakeTape(prod, numeric(3))
show(F)
F$print()
H <- F$jacfun()$jacfun() ## Hessian tape
show(H)
#### Handy way to plot the graph of F
if (requireNamespace("igraph")) {
G <- igraph::graph_from_adjacency_matrix(F$graph())
plot(G, vertex.size=17, layout=igraph::layout_as_tree)
}
## Taped access of an element of 'rivers' dataset
F <- MakeTape(function(i) DataEval( function(i) rivers[i] , i), 1 )
F(1)
F(2)