diff options
author | Ken Kellner <ken@kenkellner.com> | 2023-12-03 13:04:02 -0500 |
---|---|---|
committer | Ken Kellner <ken@kenkellner.com> | 2023-12-03 13:04:02 -0500 |
commit | d82dc02462be008f420f5da5663f3c80171d4213 (patch) | |
tree | e16c5c443f0ecf30966aa9dbad8715ff580a0990 | |
parent | 4d0d7bfa301eb5f01d72b1e30a16d5e58c03a715 (diff) |
Use process_output on update
-rw-r--r-- | R/autojags.R | 5 | ||||
-rw-r--r-- | R/process_output.R | 2 | ||||
-rw-r--r-- | R/update.R | 3 | ||||
-rw-r--r-- | inst/tinytest/autojags_ref.Rds | bin | 0 -> 23335 bytes | |||
-rw-r--r-- | inst/tinytest/autojags_ref_codaonly.Rds | bin | 0 -> 22429 bytes | |||
-rw-r--r-- | inst/tinytest/jagsbasic_ref_update.Rds | bin | 0 -> 41511 bytes | |||
-rw-r--r-- | inst/tinytest/test_autojags.R | 44 | ||||
-rw-r--r-- | inst/tinytest/test_jags.R | 8 | ||||
-rw-r--r-- | inst/tinytest/test_jagsbasic.R | 9 | ||||
-rw-r--r-- | inst/tinytest/test_update.R | 61 | ||||
-rw-r--r-- | inst/tinytest/update_ref.Rds | bin | 0 -> 52867 bytes | |||
-rw-r--r-- | inst/tinytest/update_ref_codaonly.Rds | bin | 0 -> 49276 bytes | |||
-rw-r--r-- | inst/tinytest/update_ref_diffsaved.Rds | bin | 0 -> 23798 bytes | |||
-rw-r--r-- | inst/tinytest/update_ref_noDIC.Rds | bin | 0 -> 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 @@ -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 Binary files differnew file mode 100644 index 0000000..3fe83c3 --- /dev/null +++ b/inst/tinytest/autojags_ref.Rds diff --git a/inst/tinytest/autojags_ref_codaonly.Rds b/inst/tinytest/autojags_ref_codaonly.Rds Binary files differnew file mode 100644 index 0000000..0f731e1 --- /dev/null +++ b/inst/tinytest/autojags_ref_codaonly.Rds diff --git a/inst/tinytest/jagsbasic_ref_update.Rds b/inst/tinytest/jagsbasic_ref_update.Rds Binary files differnew file mode 100644 index 0000000..9472277 --- /dev/null +++ b/inst/tinytest/jagsbasic_ref_update.Rds 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 Binary files differnew file mode 100644 index 0000000..2563e73 --- /dev/null +++ b/inst/tinytest/update_ref.Rds diff --git a/inst/tinytest/update_ref_codaonly.Rds b/inst/tinytest/update_ref_codaonly.Rds Binary files differnew file mode 100644 index 0000000..d382e06 --- /dev/null +++ b/inst/tinytest/update_ref_codaonly.Rds diff --git a/inst/tinytest/update_ref_diffsaved.Rds b/inst/tinytest/update_ref_diffsaved.Rds Binary files differnew file mode 100644 index 0000000..1cacbf0 --- /dev/null +++ b/inst/tinytest/update_ref_diffsaved.Rds diff --git a/inst/tinytest/update_ref_noDIC.Rds b/inst/tinytest/update_ref_noDIC.Rds Binary files differnew file mode 100644 index 0000000..fc16681 --- /dev/null +++ b/inst/tinytest/update_ref_noDIC.Rds |