morph {mcmc} | R Documentation |
Variable Transformation
Description
Utility functions for variable transformation.
Usage
morph(b, r, p, center)
morph.identity()
Arguments
b |
Positive real number. May be missing. |
r |
Non-negative real number. May be missing. If |
p |
Real number strictly greater than 2. May be missing. If
|
center |
Real scalar or vector. May be missing. If
|
Details
The morph
function facilitates using variable transformations
by providing functions to (using for the original random
variable with the pdf
, and
for the transformed
random variable with the pdf
):
Calculate the log unnormalized probability density for
induced by the transformation.
Transform an arbitrary function of
to a function of
.
Transform values of
to values of
.
Transform values of
to values of
(the inverse transformation).
for a select few transformations.
morph.identity
implements the identity transformation,
.
The parameters r
, p
, b
and center
specify the
transformation function. In all cases, center
gives the center
of the transformation, which is the value in the equation
If no parameters are specified, the identity
transformation, , is used.
The parameters r
, p
and b
specify a function
, which is a monotonically increasing bijection from the
non-negative reals to the non-negative reals. Then
where represents the Euclidean norm of the vector
.
The inverse function is given by
The parameters r
and p
are used to define the function
where is the indicator
function. We require that
r
is non-negative and p
is
strictly greater than 2. The parameter b
is used to define the
function
We require that is positive.
The parameters r
, p
and b
specify in
the following manner:
If one or both of
r
andp
is specified, andb
is not specified, thenIf only
r
is specified,p = 3
is used. If onlyp
is specified,r = 0
is used.If only
b
is specified, thenIf one or both of
r
andp
is specified, andb
is also specified, then
Value
a list containing the functions
-
outfun(f)
, a function that operates on functions.outfun(f)
returns the functionfunction(state, ...) f(inverse(state), ...)
. -
inverse
, the inverse transformation function. -
transform
, the transformation function. -
lud
, a function that operates on functions. As input,lud
takes a function that calculates a log unnormalized probability density, and returns a function that calculates the log unnormalized density by transforming a random variable using thetransform
function.lud(f) = function(state, ...) f(inverse(state), ...) + log.jacobian(state)
, wherelog.jacobian
represents the function that calculate the log Jacobian of the transformation.log.jacobian
is not returned.
Warning
The equations for the returned transform
function (see below)
do not have a general analytical solution when p
is not equal
to 3. This implementation uses numerical approximation to calculate
transform
when p
is not equal to 3. If computation
speed is a factor, it is advisable to use p=3
. This is not a
factor when using morph.metrop
, as transform
is
only called once during setup, and not at all while running the Markov chain.
See Also
Examples
# use an exponential transformation, centered at 100.
b1 <- morph(b=1, center=100)
# original log unnormalized density is from a t distribution with 3
# degrees of freedom, centered at 100.
lud.transformed <- b1$lud(function(x) dt(x - 100, df=3, log=TRUE))
d.transformed <- Vectorize(function(x) exp(lud.transformed(x)))
## Not run:
curve(d.transformed, from=-3, to=3, ylab="Induced Density")
## End(Not run)