June 27, 2018: We’ve released Version 0.6-12
We’ve released the newest version of NIMBLE on CRAN and on our website. Version 0.6-12 is primarily a maintenance release with a variety of bug fixs.
Changes include:
- fix the bootstrap particle filter to correctly calculate weights when particles are not resampled (the filter had been omitting the previous weights when calculating the new weights);
- add an option to print MCMC samplers of a particular type;
- avoid an overly-aggressive check for ragged arrays when building models;
- avoid assigning a sampler to non-conjugacy inverse-Wishart nodes (thereby matching our handling of Wishart nodes);
- and a variety of bug fixes and internal changes.
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.
June 14, 2018: We’ve released Version 0.6-11
We’ve released the newest version of NIMBLE on CRAN and on our website. Version 0.6-11 has new features, notably support for Bayesian nonparametric mixture modeling, as well as a variety of bug fixes.
Changes include:
- support for Bayesian nonparametric mixture modeling using Dirichlet process mixtures, with specialized MCMC samplers automatically assigned in NIMBLE’s default MCMC (See Chapter 10 of the manual for details);
- additional resampling methods available with the auxiliary and bootstrap particle filters;
- user-defined filtering algorithms can be used with NIMBLE’s particle MCMC samplers;
- MCMC thinning intervals can be modified at MCMC run-time;
- both runMCMC() and nimbleMCMC() now drop burn-in samples before thinning, making their behavior consistent with each other;
- increased functionality for the ‘setSeed’ argument in nimbleMCMC() and runMCMC();
- new functionality for specifying the order in which sampler functions are executed in an MCMC;
- invalid dynamic indexes now result in a warning and NaN values but do not cause execution to error out, allowing MCMC sampling to continue; and
- and a variety of bug fixes and improved error trapping/messages.
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.
March 26, 2018: We’ve released Version 0.6-10
We’ve released the newest version of NIMBLE on CRAN and on our website. Version 0.6-10 is primarily a maintenance release with various bug fixes and internal changes to speed up model and algorithm building and compilation.
Changes include:
- some steps of model and algorithm building and compilation are faster;
- compiled execution with multivariate distributions or function arguments may be faster;
- data can now be provided as a numeric data frame rather than a matrix;
- to run WAIC, a user now must set ‘enableWAIC’ to TRUE, either in NIMBLE’s options or as an argument to buildMCMC();
- if ‘enableWAIC’ is TRUE, buildMCMC() will now check to make sure that the nodes monitored by the MCMC algorithm will lead to a valid WAIC calculation; and
- the use of identityMatrix() is deprecated in favor of diag().
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.
February 9, 2018: We’ve released Version 0.6-9
We’ve released the newest version of NIMBLE on CRAN and on our website. Version 0.6-9 is primarily a maintenance release with various bug fixes and fixes for CRAN packaging issues.
New features include:
- dimensions in a model will now be determined from either ‘inits’ or ‘data’ if not otherwise available;
- one can now specify “nBootReps = NA” in the runCrossValidate() function, which will prevent the Monte Carlo error from being calculated;
- runCrossValidate() now returns the averaged loss over all k folds, instead of the summed loss;
- we’ve added the besselK function to the NIMBLE language; and
- and a variety of bug fixes.
Please see the NEWS file in the installed package for more details
November 24, 2017: We’ve released Version 0.6-8
(Note that version 0.6-7 was the version on CRAN for about a week. Version 0.6-8 is essentially identical to version 0.6-7 but contains a minor fix to resolve a CRAN packaging issue.)
Version 0.6-8 has a few new features.
Changes as of Version 0.6-8 include:
- the proper Gaussian CAR (conditional autoregressive) model can now be used in BUGS code as dcar_proper, which behaves similarly to BUGS’ car.proper distribution;
- a new nimbleMCMC function that provides one-line invocation of NIMBLE’s MCMC engine, akin to usage of JAGS and WinBUGS through R;
- a new runCrossValidate function that will conduct k-fold cross-validation of NIMBLE models fit by MCMC;
- dynamic indexing in BUGS code is now allowed by default;
- and a variety of bug fixes.
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.
July 29, 2017: We’ve released Version 0.6-6
Version 0.6-6 has many new features.
Changes as of Version 0.6-6 include:
- dynamic indexes are now allowed in BUGS code — indexes of a variable no longer need to be constants but can be other nodes or functions of other nodes; for this release this is a beta feature that needs to be enabled with nimbleOptions(allowDynamicIndexing = TRUE);
- the intrinsic Gaussian CAR (conditional autoregressive) model can now be used in BUGS code as dcar_normal, which behaves similarly to BUGS’ car.normal distribution;
- optim is now part of the NIMBLE language and can be used in nimbleFunctions;
- the WAIC model selection criterion can be calculated using the calculateWAIC method for MCMC objects;
- it is possible to call out to external compiled code or back to R functions from a nimbleFunction using nimbleExternalCall and nimbleRcall (this is an experimental feature);
- the bootstrap and auxiliary particle filters can now return their ESS values;
- and a variety of bug fixes.
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.
June 7, 2017: We’ve released Version 0.6-5
Version 0.6-5 is a minor release that primarily fixes some bugs and addresses some issues with packaging for CRAN. However, there are some new capabilities in this version.
Changes as of Version 0.6-5 include:
- nimbleLists can now also be used in nimbleFunctions without setup code;
- buildMCEM() can now estimate the asymptotic covariance of the model parameter estimates;
- various additional R-style functions (c(), rep(), seq(), diag() and ‘:’) can now be used in BUGS code;
- new (improper) distributions, dflat and dhalfflat, are now available;
- an inverse-Wishart distribution is now available;
- and a variety of bug fixes and better error trapping.
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.
April 25, 2017: We’ve released Version 0.6-4
Version 0.6-4 has many new features.
Changes as of Version 0.6-4 include:
- addition of the functions c(), seq(), rep(), `:`, diag(), dim(), and which() for use in the NIMBLE language (i.e., run code) — usage generally mimics usage in R;
- a complete reorganization of the User Manual, with the goal of clarifying how one can write nimbleFunctions to program with models;
- addition of the adaptive factor slice sampler, which can improve MCMC sampling for correlated blocks of parameters;
- addition of a new sampler that can handle non-conjugate Dirichlet settings;
- addition of a nimbleList data structure that behaves like R lists for use in nimbleFunctions;
- addition of eigendecomposition and SVD functions for use in the NIMBLE language;
- additional flexibility in providing initial values for numeric(), logical(), integer(), matrix(), and array();
- logical vectors and operators can now be used in the NIMBLE language;
- indexing of vectors and matrices can now use arbitrary numeric and logical vectors;
- one can now index a vector of node names provided to values(), and more general indexing of node names in calculate(), simulate(), calculateDiff() and getLogProb();
- addition of the inverse-gamma distribution;
- use of recycling for distribution functions used in the NIMBLE language;
- enhanced MCMC configuration functionality;
- users can specify a user-defined BUGS distribution by simply providing a user-defined ‘d’ function without an ‘r’ function for use when an algorithm doesn’t need the ‘r’ function;
- and a variety of bug fixes, speedups, and better error trapping and checking.
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.
December 15, 2016: We’ve released Version 0.6-3
Version 0.6-3 is a very minor release primarily intended to address some CRAN packaging issues that do not affect users.
We also fixed a bug involving MCEM functionality and a bug that prevented use of the sd() and var() functions in BUGS code.
For most users, there is probably no need to upgrade from version 0.6-2.
November 23, 2016: We’ve released Version 0.6-2
Version 0.6-2 is a minor release with a variety of useful functionality for users.
Changes as of Version 0.6-2 include:
- user-defined distributions can be used in BUGS code without needing to call the registerDistributions() function (unless one wants to specify alternative parameterizations, distribution range or that the distribution is discrete),
- users can now specify the use of conjugate (Gibbs) samplers for nodes in a model,
- NIMBLE will now check the run code of nimbleFunctions for functions (in particular R functions) that are not part of the DSL and will not compile,
- added getBound() functionality to find the lower and upper bounds of a node either from R or in DSL code,
- added functionality to get distributional information about a node in a model or information about a distribution based on the name of the density function; these may be useful in setup code for algorithms,
- multinomial and categorical distributions now allow ‘probs’ arguments that do not sum to one (these will be internally normalized) and
- a variety of bug fixes.
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.
October 17, 2016: We’ve released Version 0.6-1
(Note that version 0.6 has been on CRAN for about a month and contains essentially the same features as version 0.6-1. The reason for skipping a version number here on the website is because of some internal packaging issues we need to resolve with CRAN.)
Version 0.6-1 is a major release, with many of the changes focused on our internal implementation, some of which should speed building and compiling models and algorithms.
Changes as of Version 0.6-1 include:
- increased speed and reduced memory use in building and models, as well as compiling nimbleFunctions,
- enhanced MCMC functionality including a new runMCMC function for easily running multiple chains, a new multinomial random walk sampler, the ability to time each sampler in an MCMC, and a progress bar,
- the addition of the ability to handle syntax such as model$calculate(nodes[i]) in the DSL,
- a variety of changes to clean up our compilation system to comply with CRAN rules (including that NIMBLE should now work with gcc on Solaris), and
- a variety of other items.
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.
May 27, 2016: We’ve released Version 0.5-1
Version 0.5-1 is officially a minor release, but it actually has quite a bit in it, in particular the addition/improvement of a number of our algorithms. In addition there are some more improvements in our speed in building and compiling models and algorithms.
Changes as of Version 0.5-1 include:
- the addition of a variety of sequential Monte Carlo (aka particle filtering) algorithms, including particle MCMC samplers for use within an MCMC,
- a greatly improved MCEM algorithm with an automated convergence and stopping criterion,
- new syntax for declaring multivariate variables in the NIMBLE DSL, namely numeric(), integer(), matrix(), and array(), with declare() now deprecated,
- addition of the multivariate-t distribution for use in BUGS and DSL code,
- a new binary MCMC sampler for discrete 0/1 nodes,
- addition of functionality to our random walk sampler to allow sampling on the log scale and use of reflection,
- more flexible use of forwardsolve(), backsolve(), and solve(), including use in BUGS code, and
- a variety of other items.
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.
April 7, 2016: We’ve released Version 0.5
Version 0.5 is a major release. It is faster, uses less memory, and provides better syntax.
Changes as of Version 0.5 include:
- more efficient computations for conjugate sampling,
- additional automated checking of BUGS syntax to improve NIMBLE’s warning/error messages,
- new DSL (nimbleFunction programming) functionality to allow the use of syntax such as model$calculate(), etc. (syntax such as calculate(model) still works),
- new functionality for MCMC sampler specification,
- improvements in speed and memory use in building models,
- addition of forwardsolve, backsolve, and solve to the NIMBLE DSL, and
- a variety of other items.
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.
October 4, 2015: We’ve released Version 0.4-1
Version 0.4-1 is a minor release. It fixes some logistical issues and adds a small amount of MCMC-related functionality.
Changes as of Version 0.4-1 include:
- added an elliptical slice sampler to the MCMC engine
- fixed bug preventing use of nimbleFunctions in packages depending on NIMBLE
- reduced C++ compiler warnings on Windows during use of compileNimble.
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.
August 2, 2015: We’ve released Version 0.4
Version 0.4 is a major release. We’ve added a number of user-level features and sped up most of the steps of building and compiling models and algorithms in the system.
Changes as of Version 0.4 include:
- added support for user-defined functions in BUGS code
- added support for user-defined distributions in BUGS code
- added support for truncated distributions, censoring, and general constraints in BUGS code
- nearly all calls to DSL functions or other nimbleFunctions handle R-style named or ordered arguments
- improved handling of distribution functions in nimbleFunction run code and as deterministic functions in BUGS code
- added an optional check when building model that alerts user to presence of nodes without values and log probability calculations that return NA
- added calculateDiff as a fourth fundamental method (in addition to calculate, simulate, and getLogProb)
- added flexibility and better organized return values of functions that specify MCMC samplers
- incorporated automated blocking into MCMC engine
- improved a number of error messages to provide more useful diagnostic information
- a variety of bug fixes
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.
March 7, 2015: We’ve released Version 0.3-1
Changes as of Version 0.3-1 include:
- addition of Dirichlet-multinomial conjugate sampling to the NIMBLE MCMC implementation
- handling of arrays up to and including four dimensions
- nimbleModel() now allows data and constants to be provided together as the ‘constants’ argument
- a variety of bug fixes
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.
December 31, 2014: We’ve released Version 0.3
Changes as of Version 0.3 include:
Important user-level syntax changes for creating and compiling models and algorithms that in some cases are not backwards compatible:
- nimbleFunctions are run via myNimbleFunction$run() instead of myNimbleFunction(). This means code written in v0.2 and earlier will not run without adding $run.
- Writing code for nimble models is now done with nimbleCode() (previously modelCode() ).
- To customize MCMC use “myMCMCspec <- configureMCMC(myModel)” (previously MCMCspec() ).
- To build an MCMC algorithm, use either “myGenericMCMC <- buildMCMC(myModel)” for a generic build or “myCustomizedMCMC <- buildMCMC(myMCMCspec)” for a customized MCMC algorithm (previously one always had to build an MCMCspec, even for a generic build).
- Variables and methods of a nimbleFunction can be accessed by “myNimbleFunction$myVariable” or “myNimbleFunction$myMethod()” rather than “nfVar(myNimbleFunction, ‘myVariable’)” or “nfMethod(myNimbleFunction, ‘myMethod’)()”. Similarly, names of objects/methods of a nimble function can be queried by “ls(myNimbleFunction)”.
In addition:
- Internal changes to decrease compilation time, notably when compiling MCMC algorithms.
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.
October, 2014: We’ve released Version 0.2
Changes as of Version 0.2 include:
- Internal changes to decrease time to build models and nimbleFunctions.
- Multivariate conjugate updaters for the multivariate normal and Wishart are now included in our MCMC implementation, as well as block updating on multivariate nodes.
- An extensive suite of tests of NIMBLE’s math functions, model building, and default MCMC.
- A number of bug fixes.
Please see the NEWS file in the source package or the nimble-dev Github site for more detailed information.