Matrix
kindly informed me that a new release of that package would cause an error in
interpolate_marginal_posterior
, due to an upstream bug in splines::interpSpline
and its predict
method. They also
kindly suggested a simple fix, which I implemented in this update.added an S3
interface for parameter transformations, see make_transformation
,
validate_transformation
, default_transformation
, and any aghq
package function with a transformation
argument. Providing transformation
to aghq
and related functions does not change the computation of
the marginal likelihood/normalizing constant, but it does mean all downstream summary methods
will return results for the transformed parameters.
added an S3
interface for computing moments of positive functions, see make_moment_function
,
validate_moment
, and the updated compute_moment
.
added algorithms for moments and marginal posteriors that are now proved to recover the same rate of convergence of the marginal likelihood/normalizing constant. See the updated documentation and options for the default_control()
family of functions.
sample_marginal.marginallaplace
was using numeric indexing to pull "theta" parameters, and this
was not being done correctly. Switched to using named parameters, because this feature was previously
added to the summary methods so it was easy to add here.
Added a call to make.unique
in marginal_laplace_tmb
. TMB
uses non-unique names for its par
vectors when parameters are supplied to the template as vectors rather than scalars. This was causing errors in the
named indexing.
added SIMPLIFY = FALSE
to mapply
in sample_marginal
to fix a problem when the output was only length 1.
interpolation
argument in compute_quantiles
to auto
, from polynomial
. I guess this
may be considered a bug fix.Added support for doing the multiple required Cholesky decompositions in parallel in sample_marginal.marginallaplace
.
Switched from using chol
to using Matrix::Cholesky
with perm = TRUE
inside sample_marginal.marginallaplace
.
Added spline-based interpolation to interpolate_marginal_posterior
and all downstream functions. Now the calculation
of marginals doesn't get less stable as more quadrature points are added. Added package splines
to Imports
to support this; since polynomial interpolation almost always gives unstable answers when the number of quadrature
points is even moderate, I consider this a necessary Import
.
Added the option interpolation
to default_control()
(see documentation).
Default option of auto
designed to always give stable marginal posterior interpolation
regardless of the number of quadrature points.
Added an internal validate_control
check to all functions which use a control
argument, which makes sure the user inputs a control list with the correct names and value types. This is supported by the existing control functions, and helps prevent further cryptic downstream errors.
Added a onlynormconst
option to aghq
and related functions. Simply returns the numeric value of the log integral, avoiding all the extra stuff, at greater speed.
Added a new summary method for objects of class marginallaplace
, that includes information on the random effects.
Preserve variable names in all summary output.
Added a requireNamespace
condition to all functions from packages listed in Suggests
.
aghq::laplace_approximation()
had a typo and was returning the wrong value. This has been fixed and tests added for its accuracy based on an example with a known answer.
Fixed an issue in the optimization where the trustOptim
package was not being checked
for, and this was throwing a cryptic error.
Changed default options for optimization in all functions to optim(...method = 'BFGS')
, in case
users do not have the trust
or trustOptim
packages installed.
Added expm1
to logdiffexp()
to improve numerical stability.
Fixed optimize_theta
so that control
arguments are passed correctly.
Removed several unit tests that were failing on M1 Macs. These tests were actually testing that polynomial interpolation of marginal posteriors FAILs, so apparently this isn't failing on these new Macs, but that's better, not worse. Will re-test and potentially add back once I have local access to this hardware.
Re-added numDeriv
as an Import, since it is used in core functionality.
Switched default optimization control arguments to use base::optim
, to facilitate
removal of trustOptim
and trust
as Import dependencies.
Switched default method for numerically differentiated Hessians to 'Richardson'
,
for more accurate results.
Added new function marginal_laplace_tmb()
which improves compatibility with the TMB
package.
Turned all the main functions for computing posterior summaries into S3
methods
with methods for objects of class aghq
.
default_control_tmb()
which was missing the ndConstruction = 'product'
default argument
which caused the function to throw a cryptic error.Removed external dependencies:
matrixStats
: the only function I had used was logSumExp
, which I replaced
with a slower but completely base R
version from https://stats.stackexchange.com/questions/381936/vectorised-computation-of-logsumexp (accessed on 2021/03/27) in order to remove this dependency. This does not have a meaningful effect on the performance of aghq
.
All 'tidyverse' subsidiary packages.