NEWS
coevolve 1.2.1
New Features
- Added further documentation about repeated observations models (#120)
- Added vignette "Algorithmic scaling" (#121)
- Models with Gaussian variables and no repeated observations now use a
conditionally non-centred parameterisation for latent terminal drift, i.e.
the terminal drift of non-Gaussian variables and of missing Gaussian values.
Latent drift is written as a standard normal innovation conditional on the
observed Gaussian residuals of the same taxon. This is a change of variables
that leaves the model, the posterior, and the pointwise log-likelihood
unchanged, but removes a funnel between the drift parameters and the latent
terminal drift that caused poor mixing in mixed Gaussian and non-Gaussian
models. Thanks to @yuhangxoox for the diagnosis (#124)
Bug Fixes
- Fixed the continuous time intercept term in the expected change along a
branch,
A^-1 (exp(A t) - I) b. Since version 1.0.0 this matrix was
symmetrised before being multiplied by b, which is only correct when the
selection matrix A is symmetric (e.g., no cross-selection effects). Both
the Stan and JAX backends now use the exact expression. In our comparisons
the selection (A) and drift (Q) parameters were essentially unchanged,
because b is weakly identified and absorbs most of the difference.
Posterior estimates of b itself can shift; in one simulated example they
moved by up to about 0.6 posterior standard deviations
- Fixed
coev_plot_predictive_check() when nuts_sampler = "nutpie". The
JAX backend now returns yrep posterior predictions alongside the other
model parameters, matching the Stan backend (#118)
log_lik = TRUE is now supported with nuts_sampler = "nutpie". The JAX
backend previously ignored the argument and returned no log_lik, so
loo and waic could not be computed from nutpie fits (#118)
- Fixed
prior_only = TRUE for models with Gaussian variables and no
repeated observations. terminal_drift only received a prior inside the
likelihood block, leaving it improper when the likelihood was skipped.
Sampling failed to initialise with nuts_sampler = "nutpie" and was
unreliable with nuts_sampler = "stan" (#118)
- Fixed the pointwise
log_lik and yrep for Gaussian variables with
missing data. The generated quantities block used the -9999 missing
value placeholder when constructing residuals, which corrupted the
conditional densities of the other variables of the same observation
coevolve 1.2.0
New Features
- Added
coev_ancestral_states() for extracting posterior estimates of
ancestral trait values at internal phylogenetic nodes, on either the
latent or response scale (#86)
- Added vignette "Ancestral state reconstruction"
Bug Fixes
- Fixed issue with plotting functions when
nuts_sampler = "nutpie" (#114)
Other Changes
- Updated documentation (#111)
- Fixed cmdstanr location in documentation (#112)
- Responded to rOpenSci package review (#113)
- Added package citation (#116)
coevolve 1.1.0
New Features
- Allowed for single traits (#107)
- Added pure JAX/NumPyro backend via
nuts_sampler = "nutpie".
Uses nutpie's Rust NUTS sampler with JAX gradients for ~5x
faster sampling than Stan on typical models. Requires
pip install jax numpyro nutpie (#109)
coevolve 1.0.0
New Features
- Added
nutpie as an alternative sampler for the Stan models (#92)
- Cached matrix computations when branch lengths are identical (#93)
- Implemented Hilbert-space approximate Gaussian processes for spatial control,
adding the
lon_lat argument and deprecating the dist_mat argument in
coev_fit() (#103)
Bug Fixes
- Fixed issue with
summary() when estimate_residual = FALSE (#95)
Other Changes
- Updated license
- Submitted to rOpenSci for package review
- Linted package using lintr
- Implemented srr compliance checks
- Added continuous integration checks using GitHub Actions
- Reduced cyclomatic complexity for some functions
- Re-factored Stan code generation to use
whisker templates (#99)
- Implemented automatic test fixture re-generation in GitHub Actions (#100)
coevolve 0.1.0