diff options
author | Ken Kellner <ken@kenkellner.com> | 2018-08-15 15:42:45 -0400 |
---|---|---|
committer | Ken Kellner <ken@kenkellner.com> | 2018-08-15 15:42:45 -0400 |
commit | d32a308764b646c4c027b9dee67c1dda6d7b1ec2 (patch) | |
tree | fbf82133e1975ab66539b4fcac268f1200b95886 | |
parent | c17d19e5d02ad83c0a27469ee3222cc0bbbede9c (diff) |
Fix some random seed issues
-rw-r--r-- | DESCRIPTION | 5 | ||||
-rw-r--r-- | NEWS | 8 | ||||
-rw-r--r-- | R/autojags.R | 4 | ||||
-rw-r--r-- | R/geninits.R | 19 | ||||
-rw-r--r-- | R/jags.R | 2 | ||||
-rw-r--r-- | R/jagsbasic.R | 5 | ||||
-rw-r--r-- | R/runparallel.R | 2 | ||||
-rw-r--r-- | R/update.R | 4 | ||||
-rw-r--r-- | R/updatebasic.R | 6 | ||||
-rw-r--r-- | man/update.Rd | 3 |
10 files changed, 34 insertions, 24 deletions
diff --git a/DESCRIPTION b/DESCRIPTION index 00c3759..fb6b2f8 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: jagsUI -Version: 1.4.9 -Date: 2017-12-08 +Version: 1.5.0 +Date: 2017-08-16 Title: A Wrapper Around 'rjags' to Streamline 'JAGS' Analyses Author: Ken Kellner <contact@kenkellner.com> Maintainer: Ken Kellner <contact@kenkellner.com> @@ -20,4 +20,3 @@ Description: A set of wrappers around 'rjags' functions to run Bayesian analyses License: GPL-2 URL: https://github.com/kenkellner/jagsUI NeedsCompilation: no -RoxygenNote: 6.0.1 @@ -1,3 +1,11 @@ +# Changes from Version 1.4.9 to 1.5.0 [16 August 2018] # + +Fix issues with NAs in parameters. +Fix missing arguments in autojags(). +Handle errors in output processing so that samples are not lost completely. +Make sure a specified random seed is used for initial value functions. +Fix error where summary stats were printed in the wrong order for some parameters. + # Changes from Version 1.4.8 to 1.4.9 [8 December 2017] # Fix bug with DIC output introduced in 1.4.7. diff --git a/R/autojags.R b/R/autojags.R index d3a6b37..d880dc9 100644 --- a/R/autojags.R +++ b/R/autojags.R @@ -27,7 +27,7 @@ autojags <- function(data,inits=NULL,parameters.to.save,model.file,n.chains,n.ad if(parallel){ par <- run.parallel(data,inits,parameters.to.save,model.file,n.chains,n.adapt,n.iter=(n.burnin + iter.increment),n.burnin,n.thin, - modules,factories,seed,DIC,verbose=FALSE,n.cores=n.cores) + modules=modules,factories=factories,DIC=DIC,verbose=FALSE,n.cores=n.cores) samples <- par$samples mod <- par$model total.adapt <- par$total.adapt @@ -80,7 +80,7 @@ autojags <- function(data,inits=NULL,parameters.to.save,model.file,n.chains,n.ad par <- run.parallel(data=NULL,inits=NULL,parameters.to.save=parameters.to.save,model.file=NULL,n.chains=n.chains ,n.adapt=n.adapt,n.iter=iter.increment,n.burnin=0,n.thin=n.thin,modules=modules, - factories=factories,seed=seed,DIC=DIC,model.object=mod,update=TRUE,verbose=FALSE,n.cores=n.cores) + factories=factories,DIC=DIC,model.object=mod,update=TRUE,verbose=FALSE,n.cores=n.cores) if(save.all.iter & index > 1){ samples <- bind.mcmc(old.samples,par$samples,start=start.iter,n.new.iter=iter.increment) diff --git a/R/geninits.R b/R/geninits.R index da18cb8..c6da0e6 100644 --- a/R/geninits.R +++ b/R/geninits.R @@ -1,6 +1,17 @@ gen.inits <- function(inits,n.chains,seed,parallel){ + if(!is.null(seed)){ + + #Save old seed if it exists + if(exists('.Random.seed')){ + old.seed <- .Random.seed + } + #Generate seed for each chain + set.seed(seed) + + } + #Error check and run init function if necessary if(is.list(inits)){ if(length(inits)!=n.chains){stop('Length of initial values list != number of chains')} @@ -18,13 +29,6 @@ gen.inits <- function(inits,n.chains,seed,parallel){ #Add random seed info if specified if(!is.null(seed)){ - #Save old seed if it exists - if(exists('.Random.seed')){ - old.seed <- .Random.seed - } - - #Generate seed for each chain - set.seed(seed) init.rand <- floor(runif(n.chains,1,100000)) #Restore old seed if it exists @@ -77,6 +81,5 @@ gen.inits <- function(inits,n.chains,seed,parallel){ } } - return(init.values) } @@ -19,7 +19,7 @@ jagsUI <- jags <- function(data,inits=NULL,parameters.to.save,model.file,n.chain if(parallel && n.chains>1){ par <- run.parallel(data,inits,parameters.to.save,model.file,n.chains,n.adapt,n.iter,n.burnin,n.thin, - modules,factories,seed,DIC,verbose=verbose,n.cores=n.cores) + modules=modules,factories=factories,DIC=DIC,verbose=verbose,n.cores=n.cores) samples <- par$samples m <- par$model total.adapt <- par$total.adapt diff --git a/R/jagsbasic.R b/R/jagsbasic.R index 770f272..a086019 100644 --- a/R/jagsbasic.R +++ b/R/jagsbasic.R @@ -17,7 +17,7 @@ jags.basic <- function(data,inits=NULL,parameters.to.save,model.file,n.chains,n. if(parallel && n.chains>1){ par <- run.parallel(data,inits,parameters.to.save,model.file,n.chains,n.adapt,n.iter,n.burnin,n.thin, - modules,factories,seed,DIC,verbose=verbose,n.cores=n.cores) + modules=modules,factories=factories,DIC=DIC,verbose=verbose,n.cores=n.cores) samples <- par$samples m <- par$model total.adapt <- par$total.adapt @@ -58,10 +58,11 @@ jags.basic <- function(data,inits=NULL,parameters.to.save,model.file,n.chains,n. output$samples <- samples output$model <- m output$n.cores <- n.cores + output$random.seed <- seed class(output) <- 'jagsUIbasic' } else {output <- samples} return(output) -}
\ No newline at end of file +} diff --git a/R/runparallel.R b/R/runparallel.R index a61b67d..64d9faf 100644 --- a/R/runparallel.R +++ b/R/runparallel.R @@ -1,6 +1,6 @@ run.parallel <- function(data=NULL,inits=NULL,parameters.to.save,model.file=NULL,n.chains,n.adapt,n.iter,n.burnin,n.thin, - modules,factories,seed,DIC,model.object=NULL,update=FALSE,verbose=TRUE,n.cores=NULL) { + modules,factories,DIC,model.object=NULL,update=FALSE,verbose=TRUE,n.cores=NULL) { #Save current library paths current.libpaths <- .libPaths() @@ -1,7 +1,7 @@ update.jagsUI <- function(object, parameters.to.save=NULL, n.adapt=NULL, n.iter, n.thin=NULL, modules=c('glm'), factories=NULL, - DIC=NULL, seed=as.integer(Sys.time()),codaOnly=FALSE, verbose=TRUE, ...){ + DIC=NULL,codaOnly=FALSE, verbose=TRUE, ...){ mod <- object$model @@ -26,7 +26,7 @@ update.jagsUI <- function(object, parameters.to.save=NULL, n.adapt=NULL, n.iter, par <- run.parallel(data=NULL,inits=NULL,parameters.to.save=parameters,model.file=NULL,n.chains=object$mcmc.info$n.chains ,n.adapt=n.adapt,n.iter=n.iter,n.burnin=0,n.thin=n.thin,modules=modules,factories=factories, - seed=seed,DIC=DIC,model.object=mod,update=TRUE,verbose=verbose,n.cores=object$mcmc.info$n.cores) + DIC=DIC,model.object=mod,update=TRUE,verbose=verbose,n.cores=object$mcmc.info$n.cores) samples <- par$samples m <- par$model diff --git a/R/updatebasic.R b/R/updatebasic.R index d128918..5b5528d 100644 --- a/R/updatebasic.R +++ b/R/updatebasic.R @@ -1,6 +1,6 @@ update.jagsUIbasic <- function(object, parameters.to.save=NULL, n.adapt=NULL, n.iter, n.thin=NULL, - modules=c('glm'), factories=NULL, DIC=NULL, seed=as.integer(Sys.time()), verbose=TRUE, ...){ + modules=c('glm'), factories=NULL, DIC=NULL, verbose=TRUE, ...){ mod <- object$model n.chains <- length(object$samples) @@ -29,7 +29,7 @@ update.jagsUIbasic <- function(object, parameters.to.save=NULL, n.adapt=NULL, n. par <- run.parallel(data=NULL,inits=NULL,parameters.to.save=parameters,model.file=NULL,n.chains=n.chains ,n.adapt=n.adapt,n.iter=n.iter,n.burnin=0,n.thin=n.thin,modules=modules,factories=factories, - seed=seed,DIC=DIC,model.object=mod,update=TRUE,verbose=verbose,n.cores=n.cores) + DIC=DIC,model.object=mod,update=TRUE,verbose=verbose,n.cores=n.cores) samples <- par$samples m <- par$model @@ -58,4 +58,4 @@ update.jagsUIbasic <- function(object, parameters.to.save=NULL, n.adapt=NULL, n. return(output) -}
\ No newline at end of file +} diff --git a/man/update.Rd b/man/update.Rd index 6029cc7..098ea3b 100644 --- a/man/update.Rd +++ b/man/update.Rd @@ -24,11 +24,10 @@ \item{modules}{List of JAGS modules to load before analysis. By default only module 'glm' is loaded (in addition to 'basemod' and 'bugs'). To force no additional modules to load, set \code{modules=NULL}.} \item{factories}{Optional character vector of factories to enable or disable, in the format <factory> <type> <setting>. For example, to turn \code{TemperedMix} on you would provide \code{'mix::TemperedMix sampler TRUE'} (note spaces between parts). Make sure you have the corresponding modules loaded as well.} \item{DIC}{Option to report DIC and the estimated number of parameters (pD). Defaults to the same setting as the original model to updated.} - \item{seed}{Set a custom seed for the R random number generator and JAGS.} \item{codaOnly}{Optional character vector of parameter names for which you do NOT want to calculate detailed statistics. This may be helpful when you have many output parameters (e.g., predicted values) and you want to save time. For these parameters, only the mean value will be calculated but the mcmc output will still be found in $sims.list and $samples.} \item{verbose}{If set to FALSE, all text output in the console will be suppressed as the function runs (including most warnings).} \item{...}{Further arguments pass to or from other methods.} } \author{ Ken Kellner \email{contact@kenkellner.com}. -}
\ No newline at end of file +} |