aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Kellner <ken@kenkellner.com>2023-12-03 13:04:02 -0500
committerKen Kellner <ken@kenkellner.com>2023-12-03 13:04:02 -0500
commitd82dc02462be008f420f5da5663f3c80171d4213 (patch)
treee16c5c443f0ecf30966aa9dbad8715ff580a0990
parent4d0d7bfa301eb5f01d72b1e30a16d5e58c03a715 (diff)
Use process_output on update
-rw-r--r--R/autojags.R5
-rw-r--r--R/process_output.R2
-rw-r--r--R/update.R3
-rw-r--r--inst/tinytest/autojags_ref.Rdsbin0 -> 23335 bytes
-rw-r--r--inst/tinytest/autojags_ref_codaonly.Rdsbin0 -> 22429 bytes
-rw-r--r--inst/tinytest/jagsbasic_ref_update.Rdsbin0 -> 41511 bytes
-rw-r--r--inst/tinytest/test_autojags.R44
-rw-r--r--inst/tinytest/test_jags.R8
-rw-r--r--inst/tinytest/test_jagsbasic.R9
-rw-r--r--inst/tinytest/test_update.R61
-rw-r--r--inst/tinytest/update_ref.Rdsbin0 -> 52867 bytes
-rw-r--r--inst/tinytest/update_ref_codaonly.Rdsbin0 -> 49276 bytes
-rw-r--r--inst/tinytest/update_ref_diffsaved.Rdsbin0 -> 23798 bytes
-rw-r--r--inst/tinytest/update_ref_noDIC.Rdsbin0 -> 21039 bytes
14 files changed, 128 insertions, 4 deletions
diff --git a/R/autojags.R b/R/autojags.R
index d880dc9..b446bfb 100644
--- a/R/autojags.R
+++ b/R/autojags.R
@@ -131,7 +131,8 @@ autojags <- function(data,inits=NULL,parameters.to.save,model.file,n.chains,n.ad
samples <- order.params(samples,parameters.to.save,DIC,verbose=verbose)
#Convert rjags output to jagsUI form
- output <- process.output(samples,DIC=DIC,codaOnly,verbose=verbose)
+ #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)
@@ -145,7 +146,7 @@ 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$summary <- summary.matrix(output,samples,n.chains,codaOnly)
output$samples <- samples
output$modfile <- model.file
diff --git a/R/process_output.R b/R/process_output.R
index d468f93..f7bcaf2 100644
--- a/R/process_output.R
+++ b/R/process_output.R
@@ -126,7 +126,7 @@ all_stat_arrays <- function(summary_stats, coda_only){
stat_summary_table <- function(stats, coda_only){
# Move overlap 0 and f to the end of the table
stats <- stats[,c("mean", "sd", "q2.5", "q25", "q50", "q75", "q97.5",
- "Rhat", "n.eff", "overlap0", "f")]
+ "Rhat", "n.eff", "overlap0", "f"), drop=FALSE]
# Rename the quantile columns
colnames(stats)[3:7] <- c("2.5%", "25%", "50%", "75%", "97.5%")
# Remove rows marked as coda_only
diff --git a/R/update.R b/R/update.R
index 4576426..0d3269f 100644
--- a/R/update.R
+++ b/R/update.R
@@ -52,7 +52,8 @@ update.jagsUI <- function(object, parameters.to.save=NULL, n.adapt=NULL, n.iter,
samples <- order.params(samples,parameters,DIC,verbose=verbose)
#Run process output
- output <- process.output(samples,DIC=DIC,codaOnly,verbose=verbose)
+ #output <- process.output(samples,DIC=DIC,codaOnly,verbose=verbose)
+ output <- process_output(samples, coda_only = codaOnly, quiet = !verbose)
if(is.null(output)){
output <- list()
output$samples <- samples
diff --git a/inst/tinytest/autojags_ref.Rds b/inst/tinytest/autojags_ref.Rds
new file mode 100644
index 0000000..3fe83c3
--- /dev/null
+++ b/inst/tinytest/autojags_ref.Rds
Binary files differ
diff --git a/inst/tinytest/autojags_ref_codaonly.Rds b/inst/tinytest/autojags_ref_codaonly.Rds
new file mode 100644
index 0000000..0f731e1
--- /dev/null
+++ b/inst/tinytest/autojags_ref_codaonly.Rds
Binary files differ
diff --git a/inst/tinytest/jagsbasic_ref_update.Rds b/inst/tinytest/jagsbasic_ref_update.Rds
new file mode 100644
index 0000000..9472277
--- /dev/null
+++ b/inst/tinytest/jagsbasic_ref_update.Rds
Binary files differ
diff --git a/inst/tinytest/test_autojags.R b/inst/tinytest/test_autojags.R
new file mode 100644
index 0000000..654c8ec
--- /dev/null
+++ b/inst/tinytest/test_autojags.R
@@ -0,0 +1,44 @@
+set.seed(123)
+
+data(longley)
+data <- list(gnp=longley$GNP, employed=longley$Employed, n=nrow(longley))
+
+modfile <- tempfile()
+writeLines("
+model{
+ for (i in 1:n){
+ employed[i] ~ dnorm(mu[i], tau)
+ mu[i] <- alpha + beta*gnp[i]
+ }
+ alpha ~ dnorm(0, 0.00001)
+ beta ~ dnorm(0, 0.00001)
+ sigma ~ dunif(0,1000)
+ tau <- pow(sigma,-2)
+}", con=modfile)
+
+inits <- function(){
+ list(alpha=rnorm(1,0,1),beta=rnorm(1,0,1),sigma=runif(1,0,3))
+}
+params <- c('alpha','beta','sigma', 'mu')
+
+nul <- capture.output(
+ out <- autojags(data = data, inits = inits, parameters.to.save = params,
+ model.file = modfile, n.chains = 3, n.adapt = 100, n.burnin=50,
+ iter.increment=10, n.thin = 2, verbose=FALSE))
+ref <- readRDS("autojags_ref.Rds")
+
+# Remove time/date based elements
+out$mcmc.info$elapsed.mins <- ref$mcmc.inf$elapsed.mins
+expect_identical(out[-c(17,18,21)], ref[-c(17,18,21)])
+
+
+# codaOnly---------------------------------------------------------------------
+nul<- capture.output(
+ out <- autojags(data = data, inits = inits, parameters.to.save = params,
+ model.file = modfile, n.chains = 3, n.adapt = 100, n.burnin=50,
+ iter.increment=10, n.thin = 2, verbose=FALSE, codaOnly=c("mu")))
+ref <- readRDS("autojags_ref_codaonly.Rds")
+
+# Remove time/date based elements
+out$mcmc.info$elapsed.mins <- ref$mcmc.inf$elapsed.mins
+expect_identical(out[-c(17,18,21)], ref[-c(17,18,21)])
diff --git a/inst/tinytest/test_jags.R b/inst/tinytest/test_jags.R
index 4477080..230d2c8 100644
--- a/inst/tinytest/test_jags.R
+++ b/inst/tinytest/test_jags.R
@@ -90,3 +90,11 @@ ref <- readRDS("reference_parsorder_noDIC.Rds")
out$mcmc.info$elapsed.mins <- ref$mcmc.inf$elapsed.mins
expect_identical(out[-c(15,16,19)], ref[-c(15,16,19)])
+
+# Single parameter saved-------------------------------------------------------
+pars_new <- c("alpha")
+out <- jags(data = data, inits = inits, parameters.to.save = pars_new,
+ model.file = modfile, n.chains = 3, n.adapt = 100, n.iter = 100,
+ n.burnin = 50, n.thin = 1, DIC = FALSE, verbose=FALSE)
+expect_equal(nrow(out$summary), 1)
+expect_equal(ncol(out$samples[[1]]), 1)
diff --git a/inst/tinytest/test_jagsbasic.R b/inst/tinytest/test_jagsbasic.R
index e235722..1e03fc4 100644
--- a/inst/tinytest/test_jagsbasic.R
+++ b/inst/tinytest/test_jagsbasic.R
@@ -39,3 +39,12 @@ ref <- readRDS("jagsbasic_ref_saved.Rds")
expect_identical(names(out), names(ref))
out$model <- ref$model
expect_identical(out, ref)
+
+# Update
+out2 <- update(out, n.iter=100, n.thin = 2, verbose=FALSE)
+expect_equal(nrow(out2$samples[[1]]), 50)
+
+ref <- readRDS('jagsbasic_ref_update.Rds')
+expect_identical(names(out2), names(ref))
+out2$model <- ref$model
+expect_equal(out2, ref)
diff --git a/inst/tinytest/test_update.R b/inst/tinytest/test_update.R
new file mode 100644
index 0000000..d4c1da2
--- /dev/null
+++ b/inst/tinytest/test_update.R
@@ -0,0 +1,61 @@
+set.seed(123)
+
+data(longley)
+data <- list(gnp=longley$GNP, employed=longley$Employed, n=nrow(longley))
+
+modfile <- tempfile()
+writeLines("
+model{
+ for (i in 1:n){
+ employed[i] ~ dnorm(mu[i], tau)
+ mu[i] <- alpha + beta*gnp[i]
+ }
+ alpha ~ dnorm(0, 0.00001)
+ beta ~ dnorm(0, 0.00001)
+ sigma ~ dunif(0,1000)
+ tau <- pow(sigma,-2)
+}", con=modfile)
+
+inits <- function(){
+ list(alpha=rnorm(1,0,1),beta=rnorm(1,0,1),sigma=runif(1,0,3))
+}
+params <- c('alpha','beta','sigma', 'mu')
+
+out <- jags(data = data, inits = inits, parameters.to.save = params,
+ model.file = modfile, n.chains = 3, n.adapt = 100, n.iter = 100,
+ n.burnin = 50, n.thin = 2, verbose=FALSE)
+
+out2 <- update(out, n.iter=100, n.thin=2, verbose=FALSE)
+ref <- readRDS("update_ref.Rds")
+expect_equal(out2$mcmc.info$n.iter, 200)
+expect_equal(out2$mcmc.info$n.samples, 150)
+expect_equal(nrow(out2$samples[[1]]), 50)
+
+# Remove time/date based elements
+out2$mcmc.info$elapsed.mins <- ref$mcmc.inf$elapsed.mins
+expect_identical(out2[-c(17,19,21)], ref[-c(17,19,21)])
+
+# codaOnly---------------------------------------------------------------------
+out2 <- update(out, n.iter=100, n.thin=2, verbose=FALSE, codaOnly='mu')
+ref <- readRDS("update_ref_codaonly.Rds")
+
+out2$mcmc.info$elapsed.mins <- ref$mcmc.inf$elapsed.mins
+expect_identical(out2[-c(17,19,21)], ref[-c(17,19,21)])
+
+# Different saved parameters---------------------------------------------------
+out2 <- update(out, n.iter=100, n.thin=2, verbose=FALSE,
+ parameters.to.save=c('beta', 'alpha'))
+ref <- readRDS("update_ref_diffsaved.Rds")
+
+out2$mcmc.info$elapsed.mins <- ref$mcmc.inf$elapsed.mins
+expect_identical(out2[-c(17,19,21)], ref[-c(17,19,21)])
+
+# DIC = FALSE------------------------------------------------------------------
+out2 <- update(out, n.iter=100, n.thin=2, verbose=FALSE,
+ parameters.to.save=c('alpha'), DIC=FALSE)
+ref <- readRDS("update_ref_noDIC.Rds")
+
+expect_false(out2$calc.DIC)
+
+out2$mcmc.info$elapsed.mins <- ref$mcmc.inf$elapsed.mins
+expect_identical(out2[-c(15,17,19)], ref[-c(15,17,19)])
diff --git a/inst/tinytest/update_ref.Rds b/inst/tinytest/update_ref.Rds
new file mode 100644
index 0000000..2563e73
--- /dev/null
+++ b/inst/tinytest/update_ref.Rds
Binary files differ
diff --git a/inst/tinytest/update_ref_codaonly.Rds b/inst/tinytest/update_ref_codaonly.Rds
new file mode 100644
index 0000000..d382e06
--- /dev/null
+++ b/inst/tinytest/update_ref_codaonly.Rds
Binary files differ
diff --git a/inst/tinytest/update_ref_diffsaved.Rds b/inst/tinytest/update_ref_diffsaved.Rds
new file mode 100644
index 0000000..1cacbf0
--- /dev/null
+++ b/inst/tinytest/update_ref_diffsaved.Rds
Binary files differ
diff --git a/inst/tinytest/update_ref_noDIC.Rds b/inst/tinytest/update_ref_noDIC.Rds
new file mode 100644
index 0000000..fc16681
--- /dev/null
+++ b/inst/tinytest/update_ref_noDIC.Rds
Binary files differ