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_logpost
function, 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
: aNIGrid
object from themvQuad
package, 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
startingvalue
of which elementj
is the result of callingaghq::marginal_posterior
with 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"
, wherej
is thej
you 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))