Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 12 additions & 14 deletions R/Run_Mod.R
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
#' Note: These objects can be large.
#' @param correlated Logical; use Chapter-2 Kronecker prior across biomarkers.
#' Default FALSE (independence).
#' @param file_mod_kron Path to a JAGS file for the Kronecker model.If
#' @param file_mod_kron Path to a JAGS file for the Kronecker model. If
#' `correlated = TRUE` and this path does not exist, a temporary
#' `model_ch2_kron.jags` is written and used automatically.
#' @returns An `sr_model` class object: a subclass of [dplyr::tbl_df] that
Expand Down Expand Up @@ -81,7 +81,8 @@
#' - An optional `"jags.post"` attribute, included when argument
#' `with_post` = TRUE.
#' @inheritDotParams prep_priors
#' @seealso clean_priors, prep_priors_multi_b, inits_kron, write_model_ch2_kron
#' @seealso [clean_priors()], [prep_priors_multi_b()], [inits_kron()],
#' [write_model_ch2_kron()], [build_kron_priors()]
#' @export
#' @example inst/examples/run_mod-examples.R
run_mod <- function(data,
Expand Down Expand Up @@ -132,28 +133,25 @@ run_mod <- function(data,
# prepare data for modeline
longdata <- prep_data(dl_sub)

# Prepare base priors (used by both models)
base_priors <- prep_priors(
max_antigens = longdata$n_antigen_isos,
...
)

# ---------- CHOOSE MODEL/PRIORS DEPENDING ON `correlated` ----------
if (!correlated) {
# original (independence) behavior
priorspec <- prep_priors(
max_antigens = longdata$n_antigen_isos, ...
)
priorspec <- base_priors
model_path <- file_mod # UNCHANGED for independence
init_fun <- initsfunction
to_monitor <- c("y0", "y1", "t1", "alpha", "shape")
} else {
# CH2 behavior: Kronecker prior across biomarkers
base_priors <- prep_priors(
max_antigens = longdata$n_antigen_isos, ...
)
base_priors <- serodynamics::clean_priors(base_priors)

kron_priors <- serodynamics::prep_priors_multi_b(
priorspec <- build_kron_priors(
base_priors = base_priors,
n_blocks = longdata$n_antigen_isos
)
B_scalar <- list(n_blocks = longdata$n_antigen_isos)

priorspec <- c(base_priors, kron_priors, B_scalar)

# Changed: use file_mod_kron when correlated = TRUE
model_path <- file_mod_kron
Expand Down
28 changes: 28 additions & 0 deletions R/build_kron_priors.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#' @title Build Kronecker priors specification
#' @author Kwan Ho Lee
#' @description
#' `build_kron_priors()` combines base priors with Kronecker-specific
#' hyperparameters for the correlated model. It cleans the base priors,
#' adds the Kronecker priors, and includes the scalar `n_blocks`.
#'
#' @param base_priors A [base::list()] of priors from [prep_priors()].
#' @param n_blocks Integer scalar: number of biomarkers.
#'
#' @return A [base::list()] with cleaned base priors, Kronecker priors
#' (OmegaP, nuP, OmegaB, nuB), and n_blocks.
#'
#' @seealso [prep_priors()], [clean_priors()], [prep_priors_multi_b()]
#' @keywords internal
build_kron_priors <- function(base_priors, n_blocks) {
# Clean legacy fields from base priors
base_priors <- clean_priors(base_priors)

# Add Kronecker hyperpriors
kron_priors <- prep_priors_multi_b(n_blocks = n_blocks)

# Add scalar n_blocks
B_scalar <- list(n_blocks = n_blocks)

# Combine all pieces
c(base_priors, kron_priors, B_scalar)
}
5 changes: 3 additions & 2 deletions R/prep_priors_multi_b.R
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,9 @@ prep_priors_multi_b <- function(
cli::cli_abort("`omega_p_scale` must be a numeric vector of length 5.")
}
if (!is.numeric(omega_b_scale) || length(omega_b_scale) != n_blocks) {
cli::cli_abort("`omega_b_scale` must be a numeric vector of length
`n_blocks`.")
cli::cli_abort(
"`omega_b_scale` must be a numeric vector of length `n_blocks`."
)
}
if (!is.numeric(nu_p) || length(nu_p) != 1L) {
cli::cli_abort("`nu_p` must be a numeric scalar.")
Expand Down
47 changes: 0 additions & 47 deletions inst/examples/examples-run_mod_kron.R

This file was deleted.

29 changes: 29 additions & 0 deletions man/build_kron_priors.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions man/run_mod.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading