## Description

An S4 class to enable forward differentiation of multivariate computations. Think of ‘madness’ as ‘multivariate automatic differentiation -ness.’ There is also a constructor method for `madness` objects, and a wrapper method.

## Usage

 ``` 1 2 3 4 5 6 7 8 9 10 11``` ```## S4 method for signature 'madness' initialize( .Object, val, dvdx, xtag = NA_character_, vtag = NA_character_, varx = matrix(nrow = 0, ncol = 0) ) madness(val, dvdx = NULL, vtag = NULL, xtag = NULL, varx = NULL) ```

## Arguments

 `.Object` a `madness` object, or proto-object. `val` an `array` of some numeric value, of arbitrary dimension. `dvdx` a `matrix` of the derivative of (the vector of) `val` with respect to some independent variable, X. `xtag` an optional name for the X variable. `vtag` an optional name for the val variable. `varx` an optional variance-covariance matrix of the independent variable, X.

## Details

A `madness` object contains a (multidimensional) value, and the derivative of that with respect to some independent variable. The purpose is to simplify computation of multivariate derivatives, especially for use in the Delta method. Towards this usage, one may store the covariance of the independent variable in the object as well, from which the approximate variance-covariance matrix can easily be computed. See `vcov`.

Note that derivatives are all implicitly 'flattened'. That is, when we talk of the derivative of i x j matrix Y with respect to m x n matrix X, we mean the derivative of the ij vector vec(Y) with respect to the mn vector vec(X). Moreover, derivatives follow the 'numerator layout' convention: this derivative is a ij x mn matrix whose first column is the derivative of vec(Y) with respect to X_11. Numerator layout feels unnatural because it makes a gradient vector of a scalar-valued function into a row vector. Despite this deficiency, it makes the product rule feel more natural. (2FIX: is this so?)

## Value

An object of class `madness`.

## Slots

`val`

an `array` of some numeric value. (Note that `array` includes `matrix` as a subclass.) The numeric value can have arbitrary dimension.

`dvdx`

a `matrix` of the derivative of (the vector of) `val` with respect to some independent variable, X. A Derivative is indeed a 2-dimensional matrix. Derivatives have all been 'flattened'. See the details. If not given, defaults to the identity matrix, in which case val = X, which is useful to initialization. Note that the derivative is with respect to an 'unrestricted' X.

`xtag`

an optional name for the X variable. Operations between two objects of the class with distinct `xtag` data will result in an error, since they are considered to have different independent variables.

`vtag`

an optional name for the val variable. This will be propagated forward.

`varx`

an optional variance-covariance matrix of the independent variable, X.

## Author(s)

Steven E. Pav [email protected]

## References

Petersen, Kaare Brandt and Pedersen, Michael Syskind. "The Matrix Cookbook." Technical University of Denmark (2012). http://www2.imm.dtu.dk/pubdb/p.php?3274

Magnus, Jan R. and Neudecker, H. "Matrix Differential Calculus with Applications in Statistics and Econometrics." 3rd Edition. Wiley Series in Probability and Statistics: Texts and References Section (2007).

## Examples

 ```1 2``` ```obj <- new("madness", val=matrix(rnorm(10*10),nrow=10), dvdx=diag(100), xtag="foo", vtag="foo") obj2 <- madness(val=matrix(rnorm(10*10),nrow=10), xtag="foo", vtag="foo^2") ```

shabbychef/madness documentation built on Feb. 12, 2020, 3:12 a.m.