set_priors: Set up Prior Distributions

View source: R/model-class.R

set_priorsR Documentation

Set up Prior Distributions

Description

Configures a set of joint prior distributions for:

  • Subject-level parameters (p_prior), which also serve as the likelihood function in population-level models.

  • Population-level location parameters (l_prior).

  • Population-level scale parameters (s_prior).

Usage

set_priors(p_prior, l_prior = NULL, s_prior = NULL)

Arguments

p_prior

A list specifying prior distributions for subject-level parameters (or the likelihood function for the population-level model). Each element in the list should contain:

  • p0: The first parameter of the distribution.

  • p1: The second parameter of the distribution.

  • lower: The lower bound of the distribution.

  • upper: The upper bound of the distribution.

  • dist: A numeric code representing the distribution type.

  • log_p: Logical indicating whether to compute in log space.

l_prior

Optional list specifying prior distributions for population-level location parameters. Should have the same structure as p_prior. Defaults to NULL.

s_prior

Optional list specifying prior distributions for population-level scale parameters. Should have the same structure as p_prior. Defaults to NULL.

Details

This function performs the following:

  • Validates the structure of all prior specifications.

  • Ensures required distribution parameters are present and bounds are valid.

  • Merges l_prior and s_prior into a single h_prior using .merge_prior.

  • Returns a structured prior object for use in model fitting and simulation.

The argument log_p should be set to TRUE for density evaluation and FALSE when generating samples (e.g., for initial parameter values).

Value

An S4 object of class "prior" with the following slots:

  • nparameter: Integer; number of parameters in the joint prior.

  • pnames: Character vector of parameter names.

  • p_prior: List containing prior specifications for subject-level parameters.

  • h_prior: List containing merged prior specifications for l_prior and s_prior.

Examples

if (requireNamespace("ggdmcModel", quietly = TRUE)) {
  BuildModel <- getFromNamespace("BuildModel", "ggdmcModel")

  model <- BuildModel(
    p_map = list(
      A = "1", B = "1", t0 = "1", mean_v = "M", sd_v = "M",
      st0 = "1"
    ),
    match_map = list(M = list(s1 = "r1", s2 = "r2")),
    factors = list(S = c("s1", "s2")),
    constants = c(sd_v.false = 1, st0 = 0),
    accumulators = c("r1", "r2"),
    type = "lba"
  )

  ####################################
  # priors for subject-level modelling
  ####################################
  p0 <- rep(0, model@npar)
  names(p0) <- model@pnames
  p_prior <- BuildPrior(
    p0 = p0,
    p1 = rep(10, model@npar),
    lower = rep(0, model@npar),
    upper = rep(NA, model@npar),
    dist = rep("unif", model@npar),
    log_p = rep(TRUE, model@npar)
  )
  sub_priors <- set_priors(p_prior = p_prior)

  ####################################
  # priors for hierarchical modelling
  ####################################
  p0 <- runif(model@npar)
  names(p0) <- model@pnames
  model_likelihood <- BuildPrior(
    p0 = p0,
    p1 = rep(10, model@npar),
    lower = rep(0, model@npar),
    upper = rep(NA, model@npar),
    dist = rep("tnorm", model@npar),
    log_p = rep(TRUE, model@npar)
  )

  p0 <- rep(0, model@npar)
  names(p0) <- model@pnames
  l_prior <- BuildPrior(
    p0 = p0,
    p1 = rep(10, model@npar),
    lower = rep(0, model@npar),
    upper = rep(NA, model@npar),
    dist = rep("unif", model@npar),
    log_p = rep(TRUE, model@npar)
  )
  s_prior <- BuildPrior(
    p0 = p0,
    p1 = rep(10, model@npar),
    lower = rep(NA, model@npar),
    upper = rep(NA, model@npar),
    dist = rep("unif", model@npar),
    log_p = rep(TRUE, model@npar)
  )

  pop_priors <- set_priors(
    p_prior = model_likelihood,
    l_prior = l_prior, s_prior = s_prior
  )
}

ggdmcPrior documentation built on Aug. 8, 2025, 7:13 p.m.