Skip to content

Commit

Permalink
Add missing prior distributions (#252)
Browse files Browse the repository at this point in the history
* uniform prior
* Student-t prior
* logistic prior
* Log-Logistic prior
* inv_gamma prior
  • Loading branch information
gowerc authored Feb 1, 2024
1 parent 30e398c commit 27bd825
Show file tree
Hide file tree
Showing 21 changed files with 569 additions and 12 deletions.
6 changes: 6 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ S3method(dim,Quantities)
S3method(extractVariableNames,DataSubject)
S3method(extractVariableNames,DataSurvival)
S3method(generateQuantities,JointModelSamples)
S3method(getParameters,default)
S3method(initialValues,JointModel)
S3method(initialValues,Parameter)
S3method(initialValues,ParameterList)
Expand Down Expand Up @@ -107,10 +108,15 @@ export(merge)
export(prior_beta)
export(prior_cauchy)
export(prior_gamma)
export(prior_invgamma)
export(prior_logistic)
export(prior_loglogistic)
export(prior_lognormal)
export(prior_none)
export(prior_normal)
export(prior_std_normal)
export(prior_student_t)
export(prior_uniform)
export(sampleStanModel)
export(show)
export(sim_lm_gsf)
Expand Down
148 changes: 148 additions & 0 deletions R/Prior.R
Original file line number Diff line number Diff line change
Expand Up @@ -338,3 +338,151 @@ prior_none <- function(init = 0.00001) {
validation = list()
)
}




#' Uniform Prior Distribution
#'
#' @param alpha (`number`)\cr minimum value parameter.
#' @param beta (`number`)\cr maximum value parameter.
#' @inheritParams Prior-Shared
#' @family Prior
#'
#' @export
prior_uniform <- function(alpha, beta, init = 0.5 * (alpha + beta)) {
Prior(
parameters = list(alpha = alpha, beta = beta),
display = "uniform(alpha = {alpha}, beta = {beta})",
repr_model = "{name} ~ uniform(prior_alpha_{name}, prior_beta_{name});",
repr_data = c(
"real prior_alpha_{name};",
"real prior_beta_{name};"
),
init = init,
validation = list(
alpha = is.numeric,
beta = is.numeric
)
)
}


#' Student-t Prior Distribution
#'
#' @param nu (`number`)\cr Degrees of freedom parameter.
#' @param mu (`number`)\cr Location parameter.
#' @param sigma (`number`)\cr Scale parameter.
#' @inheritParams Prior-Shared
#' @family Prior
#'
#' @export
prior_student_t <- function(nu, mu, sigma, init = mu) {
Prior(
parameters = list(
nu = nu,
mu = mu,
sigma = sigma
),
display = "student_t(nu = {nu}, mu = {mu}, sigma = {sigma})",
repr_model = "{name} ~ student_t(prior_nu_{name}, prior_mu_{name}, prior_sigma_{name});",
repr_data = c(
"real<lower=0> prior_nu_{name};",
"real prior_mu_{name};",
"real<lower=0> prior_sigma_{name};"
),
init = init,
validation = list(
nu = \(x) x > 0,
mu = is.numeric,
sigma = \(x) x > 0
)
)
}


#' Logistic Prior Distribution
#'
#' @param mu (`number`)\cr Location parameter.
#' @param sigma (`number`)\cr Scale parameter.
#' @inheritParams Prior-Shared
#' @family Prior
#'
#' @export
prior_logistic <- function(mu, sigma, init = mu) {
Prior(
parameters = list(
mu = mu,
sigma = sigma
),
display = "logistic(mu = {mu}, sigma = {sigma})",
repr_model = "{name} ~ logistic(prior_mu_{name}, prior_sigma_{name});",
repr_data = c(
"real prior_mu_{name};",
"real<lower=0> prior_sigma_{name};"
),
init = init,
validation = list(
mu = is.numeric,
sigma = \(x) x > 0
)
)
}


#' Log-Logistic Prior Distribution
#'
#' @param alpha (`number`)\cr Scale parameter.
#' @param beta (`number`)\cr Shape parameter.
#' @inheritParams Prior-Shared
#' @family Prior
#'
#' @export
prior_loglogistic <- function(alpha, beta, init = alpha * pi / (beta * sin(pi / beta))) {
Prior(
parameters = list(
alpha = alpha,
beta = beta
),
display = "loglogistic(alpha = {alpha}, beta = {beta})",
repr_model = "{name} ~ loglogistic(prior_alpha_{name}, prior_beta_{name});",
repr_data = c(
"real<lower=0> prior_alpha_{name};",
"real<lower=0> prior_beta_{name};"
),
init = init,
validation = list(
alpha = \(x) x > 0,
beta = \(x) x > 0
)
)
}


#' Inverse-Gamma Prior Distribution
#'
#' @param alpha (`number`)\cr Shape parameter.
#' @param beta (`number`)\cr Scale parameter.
#' @inheritParams Prior-Shared
#' @family Prior
#'
#' @export
prior_invgamma <- function(alpha, beta, init = beta / (alpha - 1)) {
Prior(
parameters = list(
alpha = alpha,
beta = beta
),
display = "inv_gamma(alpha = {alpha}, beta = {beta})",
repr_model = "{name} ~ inv_gamma(prior_alpha_{name}, prior_beta_{name});",
repr_data = c(
"real<lower=0> prior_alpha_{name};",
"real<lower=0> prior_beta_{name};"
),
init = init,
validation = list(
alpha = \(x) x > 0,
beta = \(x) x > 0
)
)
}
10 changes: 6 additions & 4 deletions R/StanModule.R
Original file line number Diff line number Diff line change
Expand Up @@ -144,11 +144,13 @@ setMethod(
stan_fragments <- lapply(
names(stan_blocks),
\(par) {
new_string <- c(slot(x, par), slot(y, par))
if (all(new_string == "")) {
return("")
if (all(slot(y, par) == "")) {
return(slot(x, par))
}
return(new_string)
if (all(slot(x, par) == "")) {
return(slot(y, par))
}
return(c(slot(x, par), slot(y, par)))
}
)
names(stan_fragments) <- names(stan_blocks)
Expand Down
2 changes: 1 addition & 1 deletion R/defaults.R
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ setMethod(
)

# getParameters ----

#' @export
getParameters.default <- function(object) {
if (missing(object) || is.null(object)) {
return(NULL)
Expand Down
5 changes: 5 additions & 0 deletions _pkgdown.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,15 @@ reference:
- prior_beta
- prior_cauchy
- prior_gamma
- prior_invgamma
- prior_logistic
- prior_loglogistic
- prior_lognormal
- prior_none
- prior_normal
- prior_uniform
- prior_std_normal
- prior_student_t

- title: Longitudinal Model Specification
contents:
Expand Down
7 changes: 6 additions & 1 deletion man/prior_beta.Rd

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

7 changes: 6 additions & 1 deletion man/prior_cauchy.Rd

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

7 changes: 6 additions & 1 deletion man/prior_gamma.Rd

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

33 changes: 33 additions & 0 deletions man/prior_invgamma.Rd

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

33 changes: 33 additions & 0 deletions man/prior_logistic.Rd

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

33 changes: 33 additions & 0 deletions man/prior_loglogistic.Rd

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

7 changes: 6 additions & 1 deletion man/prior_lognormal.Rd

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

7 changes: 6 additions & 1 deletion man/prior_none.Rd

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

Loading

0 comments on commit 27bd825

Please sign in to comment.