aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Kellner <ken@kenkellner.com>2018-08-15 15:42:45 -0400
committerKen Kellner <ken@kenkellner.com>2018-08-15 15:42:45 -0400
commitd32a308764b646c4c027b9dee67c1dda6d7b1ec2 (patch)
treefbf82133e1975ab66539b4fcac268f1200b95886
parentc17d19e5d02ad83c0a27469ee3222cc0bbbede9c (diff)
Fix some random seed issues
-rw-r--r--DESCRIPTION5
-rw-r--r--NEWS8
-rw-r--r--R/autojags.R4
-rw-r--r--R/geninits.R19
-rw-r--r--R/jags.R2
-rw-r--r--R/jagsbasic.R5
-rw-r--r--R/runparallel.R2
-rw-r--r--R/update.R4
-rw-r--r--R/updatebasic.R6
-rw-r--r--man/update.Rd3
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
diff --git a/NEWS b/NEWS
index b634aab..d371bbe 100644
--- a/NEWS
+++ b/NEWS
@@ -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)
}
diff --git a/R/jags.R b/R/jags.R
index 3575131..3436e0e 100644
--- a/R/jags.R
+++ b/R/jags.R
@@ -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()
diff --git a/R/update.R b/R/update.R
index 02476af..03d1451 100644
--- a/R/update.R
+++ b/R/update.R
@@ -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
+}