cache_dir <- "./_simple_SBC_cache" options(mc.cores = parallel::detectCores()) library(SBC) # Enabling parallel processing via future library(future) library(cmdstanr) plan(multisession) if(!dir.exists(cache_dir)) { dir.create(cache_dir) } options(SBC.min_chunk_size = 5) ilogit <- function(u) 1 / (1 + exp(-u)) simple_generator_single <- function(N){ # N is the number of data points we are generating K <- 5 mu <- 1.3 sigma <- 2.3 alpha <- rnorm(K, mu, sigma) y <- matrix(NA, K, N) for (k in 1:K) y[k, ] <- rbinom(N, 1, ilogit(alpha[k])) list( variables = list( mean_alpha = mu, sd_alpha = sigma, mu = mu, sigma = sigma, alpha = alpha ), generated = list(K = K, N = N, y = y) ) } mod_simple <- cmdstan_model("simple_ctr.stan") set.seed(54882235) n_sims <- 200 # Number of SBC iterations to run simple_generator <- SBC_generator_function(simple_generator_single, N = 200) simple_dataset <- generate_datasets( simple_generator, n_sims) simple_backend <- SBC_backend_cmdstan_sample( mod_simple, iter_warmup = 500, iter_sampling = 500, chains = 2, parallel_chains = 2) results <- compute_SBC(simple_dataset, simple_backend , cache_mode = "results", cache_location = file.path(cache_dir, "results")) plot_rank_hist(results) plot_ecdf_diff(results) plot_coverage(results)