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. 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"), diff --git a/packages/nimble/R/BUGS_modelDef.R b/packages/nimble/R/BUGS_modelDef.R index 4e242023d..0b893b3bc 100644 --- a/packages/nimble/R/BUGS_modelDef.R +++ b/packages/nimble/R/BUGS_modelDef.R @@ -2670,6 +2670,9 @@ modelDefClass$methods(genVarInfo3 = function() { anyStoch = FALSE)) 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]] if(getNimbleOption('allowDynamicIndexing')) @@ -2748,6 +2751,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 +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(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]] 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) 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()