aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Kellner <ken@kenkellner.com>2023-12-03 14:37:22 -0500
committerKen Kellner <ken@kenkellner.com>2023-12-03 14:39:52 -0500
commit9de01d5aec47d1784aa53d6ebb4b1b3db62ad720 (patch)
tree5c6c30e3cba83ba5db6d0fcfd3351f25e0ed00fe
parentb4e88fe58794e3f106032b956334332b2479fdf6 (diff)
Use order_samples instead of order.params
-rw-r--r--R/autojags.R8
-rw-r--r--R/jags.R10
-rw-r--r--R/jagsbasic.R2
-rw-r--r--R/mcmc_tools.R3
-rw-r--r--R/orderparams.R19
-rw-r--r--R/update.R6
-rw-r--r--R/updatebasic.R2
-rw-r--r--inst/tinytest/test_mcmc_tools.R8
8 files changed, 13 insertions, 45 deletions
diff --git a/R/autojags.R b/R/autojags.R
index b446bfb..27dd870 100644
--- a/R/autojags.R
+++ b/R/autojags.R
@@ -128,14 +128,12 @@ autojags <- function(data,inits=NULL,parameters.to.save,model.file,n.chains,n.ad
date <- start.time
#Reorganize JAGS output to match input parameter order
- samples <- order.params(samples,parameters.to.save,DIC,verbose=verbose)
+ samples <- order_samples(samples, parameters.to.save)
#Convert rjags output to jagsUI form
- #output <- process.output(samples,DIC=DIC,codaOnly,verbose=verbose)
output <- process_output(samples, coda_only = codaOnly, quiet = !verbose)
if(is.null(output)){
output <- list()
- samples <- order.params(samples,parameters.to.save,DIC,verbose=verbose)
output$samples <- samples
output$model <- mod
output$n.cores <- n.cores
@@ -144,10 +142,6 @@ autojags <- function(data,inits=NULL,parameters.to.save,model.file,n.chains,n.ad
}
#Add additional information to output list
-
- #Summary
- #output$summary <- summary.matrix(output,samples,n.chains,codaOnly)
-
output$samples <- samples
output$modfile <- model.file
#If user wants to save input data/inits
diff --git a/R/jags.R b/R/jags.R
index 33d5e2f..7e58b58 100644
--- a/R/jags.R
+++ b/R/jags.R
@@ -61,16 +61,12 @@ jagsUI <- jags <- function(data,inits=NULL,parameters.to.save,model.file,n.chain
if(parallel){mcmc.info$n.cores <- n.cores}
#Reorganize JAGS output to match input parameter order
- if(dim(samples[[1]])[2]>1){
- samples <- order.params(samples,parameters.to.save,DIC,verbose=verbose)
- }
+ samples <- order_samples(samples, parameters.to.save)
#Convert rjags output to jagsUI form
- #output <- process.output(samples,DIC=DIC,codaOnly,verbose=verbose)
output <- process_output(samples, coda_only = codaOnly, quiet = !verbose)
if(is.null(output)){
output <- list()
- samples <- order.params(samples,parameters.to.save,DIC,verbose=verbose)
output$samples <- samples
output$model <- m
output$n.cores <- n.cores
@@ -79,10 +75,6 @@ jagsUI <- jags <- function(data,inits=NULL,parameters.to.save,model.file,n.chain
}
#Add additional information to output list
-
- #Summary
- #output$summary <- summary.matrix(output,samples,n.chains,codaOnly)
-
output$samples <- samples
output$modfile <- model.file
#If user wants to save input data/inits
diff --git a/R/jagsbasic.R b/R/jagsbasic.R
index a086019..17d465a 100644
--- a/R/jagsbasic.R
+++ b/R/jagsbasic.R
@@ -54,7 +54,7 @@ jags.basic <- function(data,inits=NULL,parameters.to.save,model.file,n.chains,n.
if(save.model){
output <- list()
- samples <- order.params(samples,parameters.to.save,DIC,verbose=verbose)
+ samples <- order_samples(samples, parameters.to.save)
output$samples <- samples
output$model <- m
output$n.cores <- n.cores
diff --git a/R/mcmc_tools.R b/R/mcmc_tools.R
index 01813fd..612fda5 100644
--- a/R/mcmc_tools.R
+++ b/R/mcmc_tools.R
@@ -32,6 +32,9 @@ match_params <- function(params, params_raw){
order_samples <- function(samples, params){
tryCatch({
matched <- match_params(params, param_names(samples))
+ if("deviance" %in% param_names(samples) & ! "deviance" %in% matched){
+ matched <- c(matched, "deviance")
+ }
samples[,matched,drop=FALSE]
}, error = function(e){
message(paste0("Caught error re-ordering samples:\n",e,"\n"))
diff --git a/R/orderparams.R b/R/orderparams.R
deleted file mode 100644
index f50c5c6..0000000
--- a/R/orderparams.R
+++ /dev/null
@@ -1,19 +0,0 @@
-
-order.params <- function(samples,parameters.to.save,DIC,verbose=TRUE){
-
- params <- colnames(samples[[1]])
- params <- params[order(match(sapply(strsplit(params, "\\["), "[", 1),
- sapply(strsplit(parameters.to.save, "\\["), "[", 1)))]
-
- if(DIC&&('deviance'%in%params)){
- params <- c(params[params!='deviance'],'deviance')
- } else if (DIC&&!('deviance'%in%params)){
- if(verbose){warning('JAGS did not monitor deviance.')}
- DIC <- FALSE
- }
-
- samples <- samples[,params, drop=FALSE]
-
- return(samples)
-
-}
diff --git a/R/update.R b/R/update.R
index ee4b22f..ad65d27 100644
--- a/R/update.R
+++ b/R/update.R
@@ -49,10 +49,9 @@ update.jagsUI <- function(object, parameters.to.save=NULL, n.adapt=NULL, n.iter,
date <- start.time
#Reorganize JAGS output to match input parameter order
- samples <- order.params(samples,parameters,DIC,verbose=verbose)
+ samples <- order_samples(samples, parameters)
#Run process output
- #output <- process.output(samples,DIC=DIC,codaOnly,verbose=verbose)
output <- process_output(samples, coda_only = codaOnly, quiet = !verbose)
if(is.null(output)){
output <- list()
@@ -63,9 +62,6 @@ update.jagsUI <- function(object, parameters.to.save=NULL, n.adapt=NULL, n.iter,
return(output)
}
- #Summary
- #output$summary <- summary.matrix(output,samples,object$mcmc.info$n.chains,codaOnly)
-
#Save other information to output object
output$samples <- samples
diff --git a/R/updatebasic.R b/R/updatebasic.R
index 5b5528d..0a15d17 100644
--- a/R/updatebasic.R
+++ b/R/updatebasic.R
@@ -46,7 +46,7 @@ update.jagsUIbasic <- function(object, parameters.to.save=NULL, n.adapt=NULL, n.
m <- rjags.output$m
}
- samples <- order.params(samples,parameters,DIC)
+ samples <- order_samples(samples, parameters)
end.time <- Sys.time()
time <- round(as.numeric(end.time-start.time,units="mins"),digits=3)
diff --git a/inst/tinytest/test_mcmc_tools.R b/inst/tinytest/test_mcmc_tools.R
index 18f956e..8e5f9cb 100644
--- a/inst/tinytest/test_mcmc_tools.R
+++ b/inst/tinytest/test_mcmc_tools.R
@@ -40,8 +40,8 @@ out <- order_samples(samples, new_order)
expect_equal(class(out), 'mcmc.list')
expect_equal(length(out),length(samples))
expect_equal(lapply(out,class),lapply(samples,class))
-expect_equal(param_names(out),c('beta',paste0('mu[',1:16,']'),'alpha'))
-expect_equal(dim(out[[1]]), c(30,18))
+expect_equal(param_names(out),c('beta',paste0('mu[',1:16,']'),'alpha', "deviance"))
+expect_equal(dim(out[[1]]), c(30,19))
expect_equal(as.numeric(out[[1]][1,1:2]),
c(0.03690717, 59.78175), tol=1e-4)
expect_equal(order_samples(samples, 'beta'),
@@ -52,7 +52,9 @@ expect_equal(test, 'fake')
one_param <- samples[, 'alpha',drop=FALSE]
expect_equal(order_samples(one_param,'alpha'),one_param)
expect_equal(dim(order_samples(one_param, 'beta')[[1]]),c(30,0))
-
+new_order <- c('deviance', 'beta','mu','alpha')
+out <- order_samples(samples, new_order)
+expect_equal(param_names(out),c('deviance', 'beta',paste0('mu[',1:16,']'),'alpha'))
# test that which_params gets param col indices--------------------------------
which_params <- jagsUI:::which_params