diff --git a/R/Prior.R b/R/Prior.R index 253ac215..2e4c3d74 100755 --- a/R/Prior.R +++ b/R/Prior.R @@ -103,6 +103,15 @@ setValidity( return(return_message) } } + if (length(object@limits) != 2) { + return("Limits must be a vector of length 2") + } + if (object@limits[1] >= object@limits[2]) { + return("Lower limit must be less than upper limit") + } + if (length(object@repr_model) != 1 || !is.character(object@repr_model)) { + return("Model representation must be length 1 string") + } return(TRUE) } ) @@ -113,6 +122,7 @@ setValidity( #' @export set_limits.Prior <- function(object, lower = -Inf, upper = Inf) { object@limits <- c(lower, upper) + validObject(object) return(object) } @@ -127,10 +137,32 @@ as.character.Prior <- function(x, ...) { parameters_rounded <- lapply(x@parameters, round, 5) - do.call( + display_string <- do.call( glue::glue, append(x@display, parameters_rounded) ) + display_limits <- render_stan_limits(x@limits) + if (display_limits != "" && display_string != "" && display_string != "") { + display_string <- paste0(display_string, display_limits) + } + return(display_string) +} + + +#' Creates Stan Syntax for Truncated distributions +#' @description +#' This function creates the Stan syntax for truncated distributions +#' @param limits (`numeric`)\cr the lower and upper limits for a truncated distribution +#' @keywords internal +#' @return (`character`)\cr the Stan syntax for truncated distributions +render_stan_limits <- function(limits) { + l_bound <- if (limits[[1]] > -Inf) limits[[1]] else "" + u_bound <- if (limits[[2]] < Inf) limits[[2]] else "" + string <- "" + if (l_bound != "" || u_bound != "") { + string <- glue::glue(" T[{l_bound}, {u_bound}]", l_bound = l_bound, u_bound = u_bound) + } + return(string) } @@ -157,12 +189,17 @@ setMethod( #' @family as.StanModule #' @export as.StanModule.Prior <- function(object, name, ...) { + trunctation <- if (object@repr_model != "") { + paste0(render_stan_limits(object@limits), ";") + } else { + "" + } string <- paste( "data {{", paste0(" ", object@repr_data, collapse = "\n"), "}}", "model {{", - paste0(" ", object@repr_model, collapse = "\n"), + paste0(" ", object@repr_model, trunctation), "}}", sep = "\n" ) @@ -233,7 +270,7 @@ prior_normal <- function(mu, sigma) { Prior( parameters = list(mu = mu, sigma = sigma), display = "normal(mu = {mu}, sigma = {sigma})", - repr_model = "{name} ~ normal(prior_mu_{name}, prior_sigma_{name});", + repr_model = "{name} ~ normal(prior_mu_{name}, prior_sigma_{name})", repr_data = c( "real prior_mu_{name};", "real prior_sigma_{name};" @@ -257,7 +294,7 @@ prior_std_normal <- function() { Prior( parameters = list(), display = "std_normal()", - repr_model = "{name} ~ std_normal();", + repr_model = "{name} ~ std_normal()", repr_data = "", centre = 0, sample = \(n) local_rnorm(n), @@ -276,7 +313,7 @@ prior_cauchy <- function(mu, sigma) { Prior( parameters = list(mu = mu, sigma = sigma), display = "cauchy(mu = {mu}, sigma = {sigma})", - repr_model = "{name} ~ cauchy(prior_mu_{name}, prior_sigma_{name});", + repr_model = "{name} ~ cauchy(prior_mu_{name}, prior_sigma_{name})", repr_data = c( "real prior_mu_{name};", "real prior_sigma_{name};" @@ -301,7 +338,7 @@ prior_cauchy <- function(mu, sigma) { prior_gamma <- function(alpha, beta) { Prior( parameters = list(alpha = alpha, beta = beta), - repr_model = "{name} ~ gamma(prior_alpha_{name}, prior_beta_{name});", + repr_model = "{name} ~ gamma(prior_alpha_{name}, prior_beta_{name})", display = "gamma(alpha = {alpha}, beta = {beta})", repr_data = c( "real prior_alpha_{name};", @@ -327,7 +364,7 @@ prior_lognormal <- function(mu, sigma) { Prior( parameters = list(mu = mu, sigma = sigma), display = "lognormal(mu = {mu}, sigma = {sigma})", - repr_model = "{name} ~ lognormal(prior_mu_{name}, prior_sigma_{name});", + repr_model = "{name} ~ lognormal(prior_mu_{name}, prior_sigma_{name})", repr_data = c( "real prior_mu_{name};", "real prior_sigma_{name};" @@ -352,7 +389,7 @@ prior_beta <- function(a, b) { Prior( parameters = list(a = a, b = b), display = "beta(a = {a}, b = {b})", - repr_model = "{name} ~ beta(prior_a_{name}, prior_b_{name});", + repr_model = "{name} ~ beta(prior_a_{name}, prior_b_{name})", repr_data = c( "real prior_a_{name};", "real prior_b_{name};" @@ -408,7 +445,7 @@ prior_uniform <- function(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_model = "{name} ~ uniform(prior_alpha_{name}, prior_beta_{name})", repr_data = c( "real prior_alpha_{name};", "real prior_beta_{name};" @@ -439,7 +476,7 @@ prior_student_t <- function(nu, mu, sigma) { 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_model = "{name} ~ student_t(prior_nu_{name}, prior_mu_{name}, prior_sigma_{name})", repr_data = c( "real prior_nu_{name};", "real prior_mu_{name};", @@ -471,7 +508,7 @@ prior_logistic <- function(mu, sigma) { sigma = sigma ), display = "logistic(mu = {mu}, sigma = {sigma})", - repr_model = "{name} ~ logistic(prior_mu_{name}, prior_sigma_{name});", + repr_model = "{name} ~ logistic(prior_mu_{name}, prior_sigma_{name})", repr_data = c( "real prior_mu_{name};", "real prior_sigma_{name};" @@ -500,7 +537,7 @@ prior_loglogistic <- function(alpha, beta) { beta = beta ), display = "loglogistic(alpha = {alpha}, beta = {beta})", - repr_model = "{name} ~ loglogistic(prior_alpha_{name}, prior_beta_{name});", + repr_model = "{name} ~ loglogistic(prior_alpha_{name}, prior_beta_{name})", repr_data = c( "real prior_alpha_{name};", "real prior_beta_{name};" @@ -531,7 +568,7 @@ prior_invgamma <- function(alpha, beta) { beta = beta ), display = "inv_gamma(alpha = {alpha}, beta = {beta})", - repr_model = "{name} ~ inv_gamma(prior_alpha_{name}, prior_beta_{name});", + repr_model = "{name} ~ inv_gamma(prior_alpha_{name}, prior_beta_{name})", repr_data = c( "real prior_alpha_{name};", "real prior_beta_{name};" diff --git a/man/render_stan_limits.Rd b/man/render_stan_limits.Rd new file mode 100644 index 00000000..5e0c885d --- /dev/null +++ b/man/render_stan_limits.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/Prior.R +\name{render_stan_limits} +\alias{render_stan_limits} +\title{Creates Stan Syntax for Truncated distributions} +\usage{ +render_stan_limits(limits) +} +\arguments{ +\item{limits}{(\code{numeric})\cr the lower and upper limits for a truncated distribution} +} +\value{ +(\code{character})\cr the Stan syntax for truncated distributions +} +\description{ +This function creates the Stan syntax for truncated distributions +} +\keyword{internal} diff --git a/tests/testthat/_snaps/JointModel.md b/tests/testthat/_snaps/JointModel.md index 6c737856..4f663f7e 100644 --- a/tests/testthat/_snaps/JointModel.md +++ b/tests/testthat/_snaps/JointModel.md @@ -10,16 +10,16 @@ Survival: Weibull-PH Survival Model with parameters: - sm_weibull_ph_lambda ~ gamma(alpha = 2, beta = 0.5) - sm_weibull_ph_gamma ~ gamma(alpha = 2, beta = 0.5) + sm_weibull_ph_lambda ~ gamma(alpha = 2, beta = 0.5) T[0, ] + sm_weibull_ph_gamma ~ gamma(alpha = 2, beta = 0.5) T[0, ] beta_os_cov ~ normal(mu = 0, sigma = 2) Longitudinal: Random Slope Longitudinal Model with parameters: lm_rs_intercept ~ normal(mu = 30, sigma = 10) lm_rs_slope_mu ~ normal(mu = 1, sigma = 3) - lm_rs_slope_sigma ~ lognormal(mu = 0, sigma = 1.5) - lm_rs_sigma ~ lognormal(mu = 0, sigma = 1.5) + lm_rs_slope_sigma ~ lognormal(mu = 0, sigma = 1.5) T[0, ] + lm_rs_sigma ~ lognormal(mu = 0, sigma = 1.5) T[0, ] lm_rs_ind_rnd_slope ~ Link: @@ -38,16 +38,16 @@ Survival: Weibull-PH Survival Model with parameters: - sm_weibull_ph_lambda ~ gamma(alpha = 2, beta = 0.5) - sm_weibull_ph_gamma ~ gamma(alpha = 2, beta = 0.5) + sm_weibull_ph_lambda ~ gamma(alpha = 2, beta = 0.5) T[0, ] + sm_weibull_ph_gamma ~ gamma(alpha = 2, beta = 0.5) T[0, ] beta_os_cov ~ normal(mu = 0, sigma = 2) Longitudinal: Random Slope Longitudinal Model with parameters: lm_rs_intercept ~ normal(mu = 30, sigma = 10) lm_rs_slope_mu ~ normal(mu = 1, sigma = 3) - lm_rs_slope_sigma ~ lognormal(mu = 0, sigma = 1.5) - lm_rs_sigma ~ lognormal(mu = 0, sigma = 1.5) + lm_rs_slope_sigma ~ lognormal(mu = 0, sigma = 1.5) T[0, ] + lm_rs_sigma ~ lognormal(mu = 0, sigma = 1.5) T[0, ] lm_rs_ind_rnd_slope ~ Link: @@ -66,8 +66,8 @@ Survival: Weibull-PH Survival Model with parameters: - sm_weibull_ph_lambda ~ gamma(alpha = 2, beta = 0.5) - sm_weibull_ph_gamma ~ gamma(alpha = 2, beta = 0.5) + sm_weibull_ph_lambda ~ gamma(alpha = 2, beta = 0.5) T[0, ] + sm_weibull_ph_gamma ~ gamma(alpha = 2, beta = 0.5) T[0, ] beta_os_cov ~ normal(mu = 0, sigma = 2) Longitudinal: @@ -94,11 +94,11 @@ lm_gsf_mu_ks ~ normal(mu = -0.69315, sigma = 1) lm_gsf_mu_kg ~ normal(mu = -1.20397, sigma = 1) lm_gsf_mu_phi ~ normal(mu = 0, sigma = 1) - lm_gsf_omega_bsld ~ lognormal(mu = -1.60944, sigma = 1) - lm_gsf_omega_ks ~ lognormal(mu = -1.60944, sigma = 1) - lm_gsf_omega_kg ~ lognormal(mu = -1.60944, sigma = 1) - lm_gsf_omega_phi ~ lognormal(mu = -1.60944, sigma = 1) - lm_gsf_sigma ~ lognormal(mu = -2.30259, sigma = 1) + lm_gsf_omega_bsld ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_gsf_omega_ks ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_gsf_omega_kg ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_gsf_omega_phi ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_gsf_sigma ~ lognormal(mu = -2.30259, sigma = 1) T[0, ] lm_gsf_eta_tilde_bsld ~ std_normal() lm_gsf_eta_tilde_ks ~ std_normal() lm_gsf_eta_tilde_kg ~ std_normal() @@ -119,16 +119,16 @@ Survival: Weibull-PH Survival Model with parameters: - sm_weibull_ph_lambda ~ gamma(alpha = 2, beta = 0.5) - sm_weibull_ph_gamma ~ gamma(alpha = 2, beta = 0.5) + sm_weibull_ph_lambda ~ gamma(alpha = 2, beta = 0.5) T[0, ] + sm_weibull_ph_gamma ~ gamma(alpha = 2, beta = 0.5) T[0, ] beta_os_cov ~ normal(mu = 0, sigma = 2) Longitudinal: Random Slope Longitudinal Model with parameters: lm_rs_intercept ~ normal(mu = 30, sigma = 10) lm_rs_slope_mu ~ normal(mu = 1, sigma = 3) - lm_rs_slope_sigma ~ lognormal(mu = 0, sigma = 1.5) - lm_rs_sigma ~ lognormal(mu = 0, sigma = 1.5) + lm_rs_slope_sigma ~ lognormal(mu = 0, sigma = 1.5) T[0, ] + lm_rs_sigma ~ lognormal(mu = 0, sigma = 1.5) T[0, ] lm_rs_ind_rnd_slope ~ Link: diff --git a/tests/testthat/_snaps/LongitudinalClaretBruno.md b/tests/testthat/_snaps/LongitudinalClaretBruno.md index 079beb53..d0d3d7f9 100644 --- a/tests/testthat/_snaps/LongitudinalClaretBruno.md +++ b/tests/testthat/_snaps/LongitudinalClaretBruno.md @@ -10,11 +10,11 @@ lm_clbr_mu_g ~ normal(mu = 0, sigma = 0.5) lm_clbr_mu_c ~ normal(mu = -0.91629, sigma = 0.5) lm_clbr_mu_p ~ normal(mu = 0.69315, sigma = 0.5) - lm_clbr_omega_b ~ lognormal(mu = -1.60944, sigma = 0.5) - lm_clbr_omega_g ~ lognormal(mu = -1.60944, sigma = 0.5) - lm_clbr_omega_c ~ lognormal(mu = -1.60944, sigma = 0.5) - lm_clbr_omega_p ~ lognormal(mu = -1.60944, sigma = 0.5) - lm_clbr_sigma ~ lognormal(mu = -2.30259, sigma = 0.5) + lm_clbr_omega_b ~ lognormal(mu = -1.60944, sigma = 0.5) T[0, ] + lm_clbr_omega_g ~ lognormal(mu = -1.60944, sigma = 0.5) T[0, ] + lm_clbr_omega_c ~ lognormal(mu = -1.60944, sigma = 0.5) T[0, ] + lm_clbr_omega_p ~ lognormal(mu = -1.60944, sigma = 0.5) T[0, ] + lm_clbr_sigma ~ lognormal(mu = -2.30259, sigma = 0.5) T[0, ] lm_clbr_eta_b ~ std_normal() lm_clbr_eta_g ~ std_normal() lm_clbr_eta_c ~ std_normal() @@ -34,11 +34,11 @@ lm_clbr_mu_g ~ gamma(alpha = 2, beta = 1) lm_clbr_mu_c ~ normal(mu = -0.91629, sigma = 0.5) lm_clbr_mu_p ~ normal(mu = 0.69315, sigma = 0.5) - lm_clbr_omega_b ~ lognormal(mu = -1.60944, sigma = 0.5) - lm_clbr_omega_g ~ lognormal(mu = -1.60944, sigma = 0.5) - lm_clbr_omega_c ~ lognormal(mu = -1.60944, sigma = 0.5) - lm_clbr_omega_p ~ lognormal(mu = -1.60944, sigma = 0.5) - lm_clbr_sigma ~ normal(mu = 0, sigma = 1) + lm_clbr_omega_b ~ lognormal(mu = -1.60944, sigma = 0.5) T[0, ] + lm_clbr_omega_g ~ lognormal(mu = -1.60944, sigma = 0.5) T[0, ] + lm_clbr_omega_c ~ lognormal(mu = -1.60944, sigma = 0.5) T[0, ] + lm_clbr_omega_p ~ lognormal(mu = -1.60944, sigma = 0.5) T[0, ] + lm_clbr_sigma ~ normal(mu = 0, sigma = 1) T[0, ] lm_clbr_eta_b ~ std_normal() lm_clbr_eta_g ~ std_normal() lm_clbr_eta_c ~ std_normal() diff --git a/tests/testthat/_snaps/LongitudinalGSF.md b/tests/testthat/_snaps/LongitudinalGSF.md index a02065f9..ed7c8b70 100644 --- a/tests/testthat/_snaps/LongitudinalGSF.md +++ b/tests/testthat/_snaps/LongitudinalGSF.md @@ -10,11 +10,11 @@ lm_gsf_mu_ks ~ normal(mu = -0.69315, sigma = 1) lm_gsf_mu_kg ~ normal(mu = -1.20397, sigma = 1) lm_gsf_mu_phi ~ normal(mu = 0, sigma = 1) - lm_gsf_omega_bsld ~ lognormal(mu = -1.60944, sigma = 1) - lm_gsf_omega_ks ~ lognormal(mu = -1.60944, sigma = 1) - lm_gsf_omega_kg ~ lognormal(mu = -1.60944, sigma = 1) - lm_gsf_omega_phi ~ lognormal(mu = -1.60944, sigma = 1) - lm_gsf_sigma ~ lognormal(mu = -2.30259, sigma = 1) + lm_gsf_omega_bsld ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_gsf_omega_ks ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_gsf_omega_kg ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_gsf_omega_phi ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_gsf_sigma ~ lognormal(mu = -2.30259, sigma = 1) T[0, ] lm_gsf_eta_tilde_bsld ~ std_normal() lm_gsf_eta_tilde_ks ~ std_normal() lm_gsf_eta_tilde_kg ~ std_normal() @@ -33,11 +33,11 @@ lm_gsf_mu_ks ~ normal(mu = -0.69315, sigma = 1) lm_gsf_mu_kg ~ gamma(alpha = 2, beta = 1) lm_gsf_mu_phi ~ normal(mu = 0, sigma = 1) - lm_gsf_omega_bsld ~ lognormal(mu = -1.60944, sigma = 1) - lm_gsf_omega_ks ~ lognormal(mu = -1.60944, sigma = 1) - lm_gsf_omega_kg ~ lognormal(mu = -1.60944, sigma = 1) - lm_gsf_omega_phi ~ lognormal(mu = -1.60944, sigma = 1) - lm_gsf_sigma ~ normal(mu = 0, sigma = 1) + lm_gsf_omega_bsld ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_gsf_omega_ks ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_gsf_omega_kg ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_gsf_omega_phi ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_gsf_sigma ~ normal(mu = 0, sigma = 1) T[0, ] lm_gsf_eta_tilde_bsld ~ std_normal() lm_gsf_eta_tilde_ks ~ std_normal() lm_gsf_eta_tilde_kg ~ std_normal() diff --git a/tests/testthat/_snaps/LongitudinalRandomSlope.md b/tests/testthat/_snaps/LongitudinalRandomSlope.md index 997081e9..8694850f 100644 --- a/tests/testthat/_snaps/LongitudinalRandomSlope.md +++ b/tests/testthat/_snaps/LongitudinalRandomSlope.md @@ -8,8 +8,8 @@ Random Slope Longitudinal Model with parameters: lm_rs_intercept ~ normal(mu = 30, sigma = 10) lm_rs_slope_mu ~ normal(mu = 1, sigma = 3) - lm_rs_slope_sigma ~ lognormal(mu = 0, sigma = 1.5) - lm_rs_sigma ~ lognormal(mu = 0, sigma = 1.5) + lm_rs_slope_sigma ~ lognormal(mu = 0, sigma = 1.5) T[0, ] + lm_rs_sigma ~ lognormal(mu = 0, sigma = 1.5) T[0, ] lm_rs_ind_rnd_slope ~ @@ -24,8 +24,8 @@ Random Slope Longitudinal Model with parameters: lm_rs_intercept ~ normal(mu = 0, sigma = 1) lm_rs_slope_mu ~ normal(mu = 1, sigma = 3) - lm_rs_slope_sigma ~ lognormal(mu = 0, sigma = 1.5) - lm_rs_sigma ~ gamma(alpha = 2, beta = 1) + lm_rs_slope_sigma ~ lognormal(mu = 0, sigma = 1.5) T[0, ] + lm_rs_sigma ~ gamma(alpha = 2, beta = 1) T[0, ] lm_rs_ind_rnd_slope ~ diff --git a/tests/testthat/_snaps/LongitudinalSteinFojo.md b/tests/testthat/_snaps/LongitudinalSteinFojo.md index 1acd86a3..4ccd6682 100644 --- a/tests/testthat/_snaps/LongitudinalSteinFojo.md +++ b/tests/testthat/_snaps/LongitudinalSteinFojo.md @@ -9,10 +9,10 @@ lm_sf_mu_bsld ~ normal(mu = 4.09434, sigma = 1) lm_sf_mu_ks ~ normal(mu = -0.69315, sigma = 1) lm_sf_mu_kg ~ normal(mu = -1.20397, sigma = 1) - lm_sf_omega_bsld ~ lognormal(mu = -1.60944, sigma = 1) - lm_sf_omega_ks ~ lognormal(mu = -1.60944, sigma = 1) - lm_sf_omega_kg ~ lognormal(mu = -1.60944, sigma = 1) - lm_sf_sigma ~ lognormal(mu = -2.30259, sigma = 1) + lm_sf_omega_bsld ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_sf_omega_ks ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_sf_omega_kg ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_sf_sigma ~ lognormal(mu = -2.30259, sigma = 1) T[0, ] lm_sf_eta_tilde_bsld ~ std_normal() lm_sf_eta_tilde_ks ~ std_normal() lm_sf_eta_tilde_kg ~ std_normal() @@ -29,10 +29,10 @@ lm_sf_mu_bsld ~ normal(mu = 4.09434, sigma = 1) lm_sf_mu_ks ~ normal(mu = -0.69315, sigma = 1) lm_sf_mu_kg ~ gamma(alpha = 2, beta = 1) - lm_sf_omega_bsld ~ lognormal(mu = -1.60944, sigma = 1) - lm_sf_omega_ks ~ lognormal(mu = -1.60944, sigma = 1) - lm_sf_omega_kg ~ lognormal(mu = -1.60944, sigma = 1) - lm_sf_sigma ~ normal(mu = 0, sigma = 1) + lm_sf_omega_bsld ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_sf_omega_ks ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_sf_omega_kg ~ lognormal(mu = -1.60944, sigma = 1) T[0, ] + lm_sf_sigma ~ normal(mu = 0, sigma = 1) T[0, ] lm_sf_eta_tilde_bsld ~ std_normal() lm_sf_eta_tilde_ks ~ std_normal() lm_sf_eta_tilde_kg ~ std_normal() diff --git a/tests/testthat/_snaps/SurvivalGamma.md b/tests/testthat/_snaps/SurvivalGamma.md index 2cb71967..ca86ce0b 100644 --- a/tests/testthat/_snaps/SurvivalGamma.md +++ b/tests/testthat/_snaps/SurvivalGamma.md @@ -6,8 +6,8 @@ Output Gamma Survival Model with parameters: - sm_gamma_k ~ gamma(alpha = 2, beta = 0.5) - sm_gamma_theta ~ gamma(alpha = 2, beta = 0.5) + sm_gamma_k ~ gamma(alpha = 2, beta = 0.5) T[0, ] + sm_gamma_theta ~ gamma(alpha = 2, beta = 0.5) T[0, ] beta_os_cov ~ normal(mu = 0, sigma = 2) @@ -19,8 +19,8 @@ Output Gamma Survival Model with parameters: - sm_gamma_k ~ gamma(alpha = 3, beta = 4) - sm_gamma_theta ~ cauchy(mu = 0, sigma = 1) + sm_gamma_k ~ gamma(alpha = 3, beta = 4) T[0, ] + sm_gamma_theta ~ cauchy(mu = 0, sigma = 1) T[0, ] beta_os_cov ~ normal(mu = 0, sigma = 2) diff --git a/tests/testthat/_snaps/SurvivalWeibullPH.md b/tests/testthat/_snaps/SurvivalWeibullPH.md index 326b229e..97e832c3 100644 --- a/tests/testthat/_snaps/SurvivalWeibullPH.md +++ b/tests/testthat/_snaps/SurvivalWeibullPH.md @@ -6,8 +6,8 @@ Output Weibull-PH Survival Model with parameters: - sm_weibull_ph_lambda ~ gamma(alpha = 2, beta = 0.5) - sm_weibull_ph_gamma ~ gamma(alpha = 2, beta = 0.5) + sm_weibull_ph_lambda ~ gamma(alpha = 2, beta = 0.5) T[0, ] + sm_weibull_ph_gamma ~ gamma(alpha = 2, beta = 0.5) T[0, ] beta_os_cov ~ normal(mu = 0, sigma = 2) @@ -19,8 +19,8 @@ Output Weibull-PH Survival Model with parameters: - sm_weibull_ph_lambda ~ gamma(alpha = 2, beta = 0.5) - sm_weibull_ph_gamma ~ cauchy(mu = 0, sigma = 1) + sm_weibull_ph_lambda ~ gamma(alpha = 2, beta = 0.5) T[0, ] + sm_weibull_ph_gamma ~ cauchy(mu = 0, sigma = 1) T[0, ] beta_os_cov ~ gamma(alpha = 3, beta = 4) diff --git a/tests/testthat/test-Prior.R b/tests/testthat/test-Prior.R index 7f9238bb..aae5ab05 100644 --- a/tests/testthat/test-Prior.R +++ b/tests/testthat/test-Prior.R @@ -199,6 +199,11 @@ test_that("Limits work as expected", { expect_true(all(ivs > 0)) expect_true(all(ivs < 1)) + expect_equal( + as.StanModule(x, name = "bob")@model, + " bob ~ normal(prior_mu_bob, prior_sigma_bob) T[0, 1];" + ) + x <- prior_cauchy(-200, 150) x <- set_limits(x, lower = 0) @@ -207,12 +212,20 @@ test_that("Limits work as expected", { initialValues(x) ) expect_true(all(ivs > 0)) + expect_equal( + as.StanModule(x, name = "tim")@model, + " tim ~ cauchy(prior_mu_tim, prior_sigma_tim) T[0, ];" + ) ## Put an impossible constraint on the distribution x <- prior_lognormal(0, 1) x <- set_limits(x, upper = 0) expect_error(initialValues(x), regex = "Unable to generate") + expect_equal( + as.StanModule(x, name = "phil")@model, + " phil ~ lognormal(prior_mu_phil, prior_sigma_phil) T[, 0];" + ) }) diff --git a/tests/testthat/test-stan_functions.R b/tests/testthat/test-stan_functions.R index 786fd2ef..64b64898 100644 --- a/tests/testthat/test-stan_functions.R +++ b/tests/testthat/test-stan_functions.R @@ -22,6 +22,7 @@ run_stan_function <- function(stan_data, fun_files, dir, basename) { ) ) ) + # Completely silence call to STAN as we aren't fitting a real model devnull <- capture.output({ suppressMessages({ @@ -38,6 +39,7 @@ run_stan_function <- function(stan_data, fun_files, dir, basename) { }) }) return(fit) + mod$stan_file() }