Learn R Programming

rstan (version 2.8.2)

log_prob-methods: model's log_prob and grad_log_prob functions

Description

Using model's log_prob and grad_log_prob functions on the unconstrained space of model parameters. So sometimes we need convert the values of parameters from their support defined in parameter block (which might be constrained, and for simplicity, we call it constrained space) to unconstrained space and vice versa. constrained_pars and unconstrain_pars can be used then.

Usage

## S3 method for class 'stanfit':
log_prob(object, upars, adjust_transform = TRUE, gradient = FALSE)  ## S3 method for class 'stanfit':
grad_log_prob(object, upars, adjust_transform = TRUE)  ## S3 method for class 'stanfit':
get_num_upars(object)  ## S3 method for class 'stanfit':
constrain_pars(object, upars)  ## S3 method for class 'stanfit':
unconstrain_pars(object, pars)

Arguments

object
An object of class stanfit.
pars
An list specifying the values for all parameters on the constrained space.
upars
A numeric vector for specifying the values for all parameters on the unconstrained space.
adjust_transform
Logical to indicate whether to adjust the log density since Stan transforms parameters to unconstrained space if it is in constrained space.
gradient
Logical to indicate whether gradients are also computed as well as the log density.

Value

  • log_prob returns a value (up to an additive constant) the log posterior. If gradient is TRUE, the gradients are also returned as an attribute with name gradient.

    grad_log_prob returns a vector of the gradients. Additionally, the vector has an attribute named log_prob being the value the same as log_prob is called for the input parameters.

    get_num_upars returns the number of parameters on the unconstrained space.

    constrain_pars returns a list and unconstrain_pars returns a vector.

Details

In Stan, the parameters need be defined with their supports. For example, for a variance parameter, we must define it on the positive real line. But inside Stan's sampler, all parameters defined on the constrained space are transformed to unconstrained space, so the log density function need be adjusted (i.e., adding the log of the absolute value of the Jacobian determinant). With the transformation, Stan's samplers work on the unconstrained space and once a new iteration is drawn, Stan transforms the parameters back to their supports. All the transformation are done inside Stan without interference from the users. However, when using the log density function for a model exposed to R, we need to be careful. For example, if we are interested in finding the mode of parameters on the constrained space, we then do not need the adjustment. For this reason, there is an argument named adjust_transform for functions log_prob and grad_log_prob.

References

The Stan Development Team Stan Modeling Language User's Guide and Reference Manual. http://mc-stan.org.

See Also

stanfit

Examples

Run this code
# see the examples in the help for stanfit as well
# do a simple optimization problem 
opcode <- "
parameters {
  real y;
}
model {
  lp__ <- log(square(y - 5) + 1);
}
"
tfun <- function(y) log_prob(opfit, y)
tgrfun <- function(y) grad_log_prob(opfit, y)
or <- optim(1, tfun, tgrfun, method = 'BFGS')
print(or)

# return the gradient as an attribute
tfun2 <- function(y) { 
  g <- grad_log_prob(opfit, y) 
  lp <- attr(g, "log_prob")
  attr(lp, "gradient") <- g
  lp
} 

or2 <- nlm(tfun2, 10)
or2

Run the code above in your browser using DataLab