This function constrains the value(s) of a scalar, vector, matrix, or
array to a specified interval, \([a,b]\). In Bayesian inference, it
is often used both to truncate a parameter to an interval, such as
\(p(\theta) \in [a,b]\). The `interval`

function is often used in conjunction with the `dtrunc`

function to truncate the prior probability distribution associated
with the constrained parameter. While `dtrunc`

prevents
assigning density outside of its interval and re-estimates density
within the interval, the `interval`

function is used to prevent
the parameter from moving outside of the interval in the first place.

After the parameter is constrained to an interval in
`IterativeQuadrature`

, `LaplaceApproximation`

,
`LaplacesDemon`

, `PMC`

, or
`VariationalBayes`

, the constrained parameter should be
updated back into the `parm`

vector, so the algorithm knows it
has been constrained.

This is unrelated to the probability interval (see
`p.interval`

and `LPL.interval`

).

`interval(x, a=-Inf, b=Inf, reflect=TRUE)`

x

This required argument is a scalar, vector, matrix or array,
and its elements will be constrained to the interval
[`a`

,`b`

].

a

This optional argument allows the specification of the lower
bound of the interval, and defaults to `-Inf`

.

b

This optional argument allows the specification of the upper
bound of the interval, and defaults to `Inf`

.

reflect

Logical. When `TRUE`

, a value outside of the
constrained interval is reflected or bounced back into the
interval. When `FALSE`

, a value outside of the interval is
assigned the nearest boundary of the interval. This argument defaults
to `TRUE`

.

The `interval`

function returns a scalar, vector, matrix, or
array in accord with its argument, `x`

. Each element is
constrained to the interval [`a`

,`b`

].

It is common for a parameter to be constrained to an interval. The
`interval`

function provides two methods of constraining
proposals. The default is to reflect an out-of-bounds proposal off of
the boundaries until the proposal is within the specified
interval. This is rare in the literature but works very well in
practice. The other method does not reflect off of boundaries, but
sets the value equal to the violated boundary. This is also rare in
the literature and is not generally recommended.

If the `interval`

function is unacceptable, then there are
several alternatives.

It is common to re-parameterize by transforming the constrained
parameter to the real line. For example, a positive-only scale
parameter may be log-transformed. A parameter that is re-parameterized
to the real line often mixes better in MCMC, exhibiting a higher
effective sample size (`ESS`

), and each evaluation of the
model specification function is faster as well. However, without a
hard constraint, it remains possible for the transformed parameter
still become problematic, such as a log-transformed scale parameter
that reaches negative infinity. This is much more common in the
literature.

Another method is to allow the parameters to move outside of the desired, constrained interval in MCMC during the model update, and when the model update is finished, to discard any samples outside of the constraint boundaries. This is a method of rejecting unacceptable proposals in regions of zero probability. However, it is possible for parameters to remain outside of acceptable bounds long enough to be problematic.

In `LaplacesDemon`

, the Gibbs sampler allows more control
in the FC function, where a user can customize how constraints are
handled.

`dtrunc`

,
`ESS`

,
`IterativeQuadrature`

,
`LaplaceApproximation`

,
`LaplacesDemon`

,
`LPL.interval`

,
`PMC`

,
`p.interval`

,
`VariationalBayes`

.

```
# NOT RUN {
#See the Examples vignette for numerous examples.
library(LaplacesDemon)
x <- 2
interval(x,0,1)
X <- matrix(runif(25,-2,2),5,5)
interval(X,-1,1)
# }
```

Run the code above in your browser using DataLab