From b3d5ec5165fd581259d08e1c8c2b79992c73bbd4 Mon Sep 17 00:00:00 2001 From: Christopher Paciorek Date: Wed, 1 Apr 2026 15:40:52 -0700 Subject: [PATCH 1/6] Bump version. --- packages/nimble/DESCRIPTION | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nimble/DESCRIPTION b/packages/nimble/DESCRIPTION index 5ca30c937..8c9d46484 100644 --- a/packages/nimble/DESCRIPTION +++ b/packages/nimble/DESCRIPTION @@ -15,8 +15,8 @@ Description: A system for writing hierarchical statistical models largely of MCMC as the main goal of the 'BUGS'/'JAGS' language for writing models, one can use 'NIMBLE' for writing arbitrary other kinds of model-generic algorithms as well. A full User Manual is available at . -Version: 1.4.2 -Date: 2026-04-01 +Version: 1.4.3 +Date: 2026-05-01 Maintainer: Christopher Paciorek Authors@R: c( person("Perry", "de Valpine", role = "aut"), From a2729a775b229f80cc3ad869946bca8c95143c2e Mon Sep 17 00:00:00 2001 From: Christopher Paciorek Date: Wed, 1 Apr 2026 15:41:45 -0700 Subject: [PATCH 2/6] Update version in README. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 86374faa9..1ea945e5b 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ NIMBLE. Journal of Computational and Graphical Statistics 26:403-413. [https://d In published work that uses NIMBLE, please also cite the package version: -de Valpine, P., C. Paciorek, D. Turek, N. Michaud, C. Anderson-Bergman, F. Obermeyer, C. Wehrhahn Cortes, A. Rodriguez, D. Temple Lang, W. Zhang, S. Paganin, and P. van Dam-Bates. 2024. NIMBLE: MCMC, Particle Filtering, and Programmable Hierarchical Modeling. doi: 10.5281/zenodo.1211190. R package version 1.4.1, https://cran.r-project.org/package=nimble. +de Valpine, P., C. Paciorek, D. Turek, N. Michaud, C. Anderson-Bergman, F. Obermeyer, C. Wehrhahn Cortes, A. Rodriguez, D. Temple Lang, W. Zhang, S. Paganin, and P. van Dam-Bates. 2024. NIMBLE: MCMC, Particle Filtering, and Programmable Hierarchical Modeling. doi: 10.5281/zenodo.1211190. R package version 1.4.2, https://cran.r-project.org/package=nimble. To help us track usage to justify funding support for NIMBLE, please include the DOI in the citation. From 54db0efba826f43b2e81db889eed5ef86638262f Mon Sep 17 00:00:00 2001 From: Christopher Paciorek Date: Sat, 15 Aug 2026 12:04:58 -0700 Subject: [PATCH 3/6] Fix typo causing bug in getConditionallyIndependentSets in non-used pathway (issue 1625). --- packages/nimble/R/BUGS_nimbleGraph.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nimble/R/BUGS_nimbleGraph.R b/packages/nimble/R/BUGS_nimbleGraph.R index 39900a585..a3d1d208a 100644 --- a/packages/nimble/R/BUGS_nimbleGraph.R +++ b/packages/nimble/R/BUGS_nimbleGraph.R @@ -194,7 +194,7 @@ getConditionallyIndependentSets <- function(model, if(!missing(nodes)) { if(missing(givenNodes)) - givenNodesIDs <- setdiff(givenNodeIDs, nodeIDs) + givenNodeIDs <- setdiff(givenNodeIDs, nodeIDs) } if(!missing(givenNodes)) { nodeIDs <- setdiff(nodeIDs, givenNodeIDs) From 4eec745e0ed078eaee3e5c9e980cf7bb789bbaec Mon Sep 17 00:00:00 2001 From: Christopher Paciorek Date: Sat, 15 Aug 2026 13:46:10 -0700 Subject: [PATCH 4/6] Enhance bad pWAIC message to tell how to see individual values (issue 1626). --- packages/nimble/R/MCMC_WAIC.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nimble/R/MCMC_WAIC.R b/packages/nimble/R/MCMC_WAIC.R index 5e3f9b378..c62618815 100644 --- a/packages/nimble/R/MCMC_WAIC.R +++ b/packages/nimble/R/MCMC_WAIC.R @@ -288,7 +288,7 @@ buildWAIC <- nimbleFunction( if(mcmcIter > 1) { badpWAIC <- length(which( sspWAICmat[lengthConvCheck, ] / (mcmcIter-1) > 0.4 )) if(badpWAIC) { - cat(" [Warning] There are ", badpWAIC, " individual pWAIC values that are greater than 0.4. This may indicate that the WAIC estimate is unstable (Vehtari et al., 2017), at least in cases without grouping of data nodes or multivariate data nodes.\n" ) + cat(" [Warning] There are ", badpWAIC, " individual pWAIC values that are greater than 0.4. This may indicate that the WAIC estimate is unstable (Vehtari et al., 2017), at least in cases without grouping of data nodes or multivariate data nodes. To see the individual pWAIC values, use the `getWAICdetails` method of the compiled MCMC object, with argument `returnElements = TRUE`.\n" ) } } output <- waicNimbleList$new() From 372006b438d52a195c7804bb43228d56e004666c Mon Sep 17 00:00:00 2001 From: Christopher Paciorek Date: Sun, 16 Aug 2026 15:21:05 -0700 Subject: [PATCH 5/6] Avoid reporting too large dims for dynamically indexed vars. --- packages/nimble/R/BUGS_modelDef.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/nimble/R/BUGS_modelDef.R b/packages/nimble/R/BUGS_modelDef.R index 4e242023d..8ec5eaf8e 100644 --- a/packages/nimble/R/BUGS_modelDef.R +++ b/packages/nimble/R/BUGS_modelDef.R @@ -2670,6 +2670,8 @@ modelDefClass$methods(genVarInfo3 = function() { anyStoch = FALSE)) names(logProbVarInfo) <<- lapply(logProbVarInfo, `[[`, 'varName') + dynamicallyIndexed <- NULL # This is used when flagging inconsistent dimensions. + for(iDI in seq_along(declInfo)) { BUGSdecl <- declInfo[[iDI]] if(getNimbleOption('allowDynamicIndexing')) @@ -2748,6 +2750,7 @@ modelDefClass$methods(genVarInfo3 = function() { ## If the index is dynamic (marked by NA), there is nothing to learn about index range of the variable. if(getNimbleOption('allowDynamicIndexing')) if(isDynamicIndex(indexNamePieces)) { + dynamicallyIndexed <- c(dynamicallyIndexed, rhsVar) varInfo[[rhsVar]]$mins[iDim] <<- min(varInfo[[rhsVar]]$mins[iDim], 1) ## o.w., never changed from 1e5 if only on RHS and in 'dimensions' input varInfo[[rhsVar]]$maxs[iDim] <<- max(varInfo[[rhsVar]]$maxs[iDim], 1) ## o.w., can end up with (1,0) as (min,max) before 'dimensions' are used next @@ -2769,7 +2772,7 @@ modelDefClass$methods(genVarInfo3 = function() { if(!(dimVarName %in% names(varInfo))) next if(length(dimensionsList[[dimVarName]]) != varInfo[[dimVarName]]$nDim) stop('inconsistent dimensions for variable ', dimVarName) if(any(dimensionsList[[dimVarName]] < varInfo[[dimVarName]]$maxs)) stop(paste0('dimensions specified are smaller than model specification for variable \'', dimVarName, '\'')) - if(any(dimensionsList[[dimVarName]] > varInfo[[dimVarName]]$maxs)) + if(!dimVarName %in% dynamicallyIndexed && any(dimensionsList[[dimVarName]] > varInfo[[dimVarName]]$maxs)) messageIfVerbose(" [Warning] dimensions specified are larger than model specification\n", " for variable `", dimVarName, "`.") varInfo[[dimVarName]]$maxs <<- dimensionsList[[dimVarName]] From 78e211f75b3b4f9b875bdae6ec033c070f8ecc2e Mon Sep 17 00:00:00 2001 From: Christopher Paciorek Date: Tue, 18 Aug 2026 08:29:49 -0700 Subject: [PATCH 6/6] Report dims warning with dyn dix if indexed var is LHS too. --- packages/nimble/R/BUGS_modelDef.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/nimble/R/BUGS_modelDef.R b/packages/nimble/R/BUGS_modelDef.R index 8ec5eaf8e..0b893b3bc 100644 --- a/packages/nimble/R/BUGS_modelDef.R +++ b/packages/nimble/R/BUGS_modelDef.R @@ -2671,6 +2671,7 @@ modelDefClass$methods(genVarInfo3 = function() { names(logProbVarInfo) <<- lapply(logProbVarInfo, `[[`, 'varName') dynamicallyIndexed <- NULL # This is used when flagging inconsistent dimensions. + lhsVars <- sapply(declInfo, function(x) x$targetVarName) for(iDI in seq_along(declInfo)) { BUGSdecl <- declInfo[[iDI]] @@ -2772,7 +2773,7 @@ modelDefClass$methods(genVarInfo3 = function() { if(!(dimVarName %in% names(varInfo))) next if(length(dimensionsList[[dimVarName]]) != varInfo[[dimVarName]]$nDim) stop('inconsistent dimensions for variable ', dimVarName) if(any(dimensionsList[[dimVarName]] < varInfo[[dimVarName]]$maxs)) stop(paste0('dimensions specified are smaller than model specification for variable \'', dimVarName, '\'')) - if(!dimVarName %in% dynamicallyIndexed && any(dimensionsList[[dimVarName]] > varInfo[[dimVarName]]$maxs)) + if((!dimVarName %in% dynamicallyIndexed || dimVarName %in% lhsVars) && any(dimensionsList[[dimVarName]] > varInfo[[dimVarName]]$maxs)) messageIfVerbose(" [Warning] dimensions specified are larger than model specification\n", " for variable `", dimVarName, "`.") varInfo[[dimVarName]]$maxs <<- dimensionsList[[dimVarName]]