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.