| aghq {aghq} | R Documentation | 
Adaptive Gauss-Hermite Quadrature
Description
Normalize the log-posterior distribution using Adaptive Gauss-Hermite Quadrature. This function takes in a function and its gradient and Hessian, and returns a list of information about the normalized posterior, with methods for summarizing and plotting.
Usage
aghq(
  ff,
  k,
  startingvalue,
  transformation = default_transformation(),
  optresults = NULL,
  basegrid = NULL,
  control = default_control(),
  ...
)
Arguments
ff | 
 A list with three elements: 
 The user may wish to use   | 
k | 
 Integer, the number of quadrature points to use. I suggest at least 3. k = 1 corresponds to a Laplace approximation.  | 
startingvalue | 
 Value to start the optimization.   | 
transformation | 
 Optional. Do the quadrature for parameter   | 
optresults | 
 Optional. A list of the results of the optimization of the log
posterior, formatted according to the output of   | 
basegrid | 
 Optional. Provide an object of class   | 
control | 
 A list with elements 
  | 
... | 
 Additional arguments to be passed to   | 
Details
When k = 1 the AGHQ method is a Laplace approximation, and you should use
the aghq::laplace_approximation function, since some of the methods for
aghq objects won't work with only one quadrature point. Objects of
class laplace have different methods suited to this case. See ?aghq::laplace_approximation.
Value
An object of class aghq which is a list containing elements:
normalized_posterior: The output of the
normalize_logpostfunction, which itself is a list with elements:nodesandweights: a dataframe containing the nodes and weights for the adaptive quadrature rule, with the un-normalized and normalized log posterior evaluated at the nodes.thegrid: aNIGridobject from themvQuadpackage, see?mvQuad::createNIGrid.lognormconst: the actual result of the quadrature: the log of the normalizing constant of the posterior.
marginals: a list of the same length as
startingvalueof which elementjis the result of callingaghq::marginal_posteriorwith thatj. This is a tbl_df/tbl/data.frame containing the normalized log marginal posterior for theta_j evaluated at the original quadrature points. Has columns"thetaj","logpost_normalized","weights", wherejis thejyou specified.optresults: information and results from the optimization of the log posterior, the result of calling
aghq::optimize_theta. This a list with elements:ff: the function list that was providedmode: the mode of the log posteriorhessian: the hessian of the log posterior at the modeconvergence: specific to the optimizer used, a message indicating whether it converged
control: the control parameters passed
See Also
Other quadrature: 
get_hessian(),
get_log_normconst(),
get_mode(),
get_nodesandweights(),
get_numquadpoints(),
get_opt_results(),
get_param_dim(),
laplace_approximation(),
marginal_laplace_tmb(),
marginal_laplace(),
nested_quadrature(),
normalize_logpost(),
optimize_theta(),
plot.aghq(),
print.aghqsummary(),
print.aghq(),
print.laplacesummary(),
print.laplace(),
print.marginallaplacesummary(),
summary.aghq(),
summary.laplace(),
summary.marginallaplace()
Examples
logfteta2d <- function(eta,y) {
  # eta is now (eta1,eta2)
  # y is now (y1,y2)
  n <- length(y)
  n1 <- ceiling(n/2)
  n2 <- floor(n/2)
  y1 <- y[1:n1]
  y2 <- y[(n1+1):(n1+n2)]
  eta1 <- eta[1]
  eta2 <- eta[2]
  sum(y1) * eta1 - (length(y1) + 1) * exp(eta1) - sum(lgamma(y1+1)) + eta1 +
    sum(y2) * eta2 - (length(y2) + 1) * exp(eta2) - sum(lgamma(y2+1)) + eta2
}
set.seed(84343124)
n1 <- 5
n2 <- 5
n <- n1+n2
y1 <- rpois(n1,5)
y2 <- rpois(n2,5)
objfunc2d <- function(x) logfteta2d(x,c(y1,y2))
funlist2d <- list(
  fn = objfunc2d,
  gr = function(x) numDeriv::grad(objfunc2d,x),
  he = function(x) numDeriv::hessian(objfunc2d,x)
)
thequadrature <- aghq(funlist2d,3,c(0,0))