Release notes

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.