From 4c3de0e6c1b536adbe24c75ad40fb94f0710e511 Mon Sep 17 00:00:00 2001 From: gowerc Date: Fri, 31 Jan 2025 16:34:51 +0000 Subject: [PATCH 1/6] support truncated distributions --- R/Prior.R | 58 ++++++++++++++++++++++++++++--------- tests/testthat/test-Prior.R | 13 +++++++++ 2 files changed, 58 insertions(+), 13 deletions(-) diff --git a/R/Prior.R b/R/Prior.R index 253ac215..9b305cd0 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,27 @@ 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) ) + paste0(display_string, " ", render_stan_limits(x@limits)) +} + + +#' 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 +#' @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 +184,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 +265,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 +289,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 +308,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 +333,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 +359,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 +384,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 +440,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 +471,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 +503,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 +532,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 +563,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/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];" + ) }) From f7bade8415283b8ffa3ac787b00b16b49cbbc79e Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 31 Jan 2025 16:38:39 +0000 Subject: [PATCH 2/6] [skip roxygen] [skip vbump] Roxygen Man Pages Auto Update --- man/render_stan_limits.Rd | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 man/render_stan_limits.Rd diff --git a/man/render_stan_limits.Rd b/man/render_stan_limits.Rd new file mode 100644 index 00000000..c8ab8afc --- /dev/null +++ b/man/render_stan_limits.Rd @@ -0,0 +1,17 @@ +% 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 +} From 81bd1c1ad2652793e2a08d415cbdbe82a78467a6 Mon Sep 17 00:00:00 2001 From: gowerc Date: Mon, 3 Feb 2025 12:01:44 +0000 Subject: [PATCH 3/6] fix rcmdcheck --- R/Prior.R | 10 +++-- tests/testthat/_snaps/JointModel.md | 38 +++++++++---------- .../_snaps/LongitudinalClaretBruno.md | 20 +++++----- tests/testthat/_snaps/LongitudinalGSF.md | 20 +++++----- .../_snaps/LongitudinalRandomSlope.md | 8 ++-- .../testthat/_snaps/LongitudinalSteinFojo.md | 16 ++++---- tests/testthat/_snaps/SurvivalGamma.md | 8 ++-- tests/testthat/_snaps/SurvivalWeibullPH.md | 8 ++-- tests/testthat/test-Prior.R | 3 ++ tests/testthat/test-stan_functions.R | 2 + 10 files changed, 71 insertions(+), 62 deletions(-) diff --git a/R/Prior.R b/R/Prior.R index 9b305cd0..0974e991 100755 --- a/R/Prior.R +++ b/R/Prior.R @@ -141,7 +141,11 @@ as.character.Prior <- function(x, ...) { glue::glue, append(x@display, parameters_rounded) ) - paste0(display_string, " ", render_stan_limits(x@limits)) + display_limits <- render_stan_limits(x@limits) + if (display_limits != "" && display_string != "" && display_string != "") { + display_string <- paste0(display_string, display_limits) + } + return(display_string) } @@ -155,7 +159,7 @@ render_stan_limits <- function(limits) { 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) + string <- glue::glue(" T[{l_bound}, {u_bound}]", l_bound = l_bound, u_bound = u_bound) } return(string) } @@ -185,7 +189,7 @@ setMethod( #' @export as.StanModule.Prior <- function(object, name, ...) { trunctation <- if (object@repr_model != "") { - paste0(" ", render_stan_limits(object@limits), ";") + paste0(render_stan_limits(object@limits), ";") } else { "" } 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 aae5ab05..984d03ea 100644 --- a/tests/testthat/test-Prior.R +++ b/tests/testthat/test-Prior.R @@ -277,3 +277,6 @@ test_that("Parameters in priors must be length 1 #422", { "Parameter `alpha`" ) }) + + + 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() } From 4d27de1386e44bba572e6d241ff43ba7903a03db Mon Sep 17 00:00:00 2001 From: gowerc Date: Mon, 3 Feb 2025 12:04:52 +0000 Subject: [PATCH 4/6] appease lintr --- tests/testthat/test-Prior.R | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/testthat/test-Prior.R b/tests/testthat/test-Prior.R index 984d03ea..aae5ab05 100644 --- a/tests/testthat/test-Prior.R +++ b/tests/testthat/test-Prior.R @@ -277,6 +277,3 @@ test_that("Parameters in priors must be length 1 #422", { "Parameter `alpha`" ) }) - - - From 5f578bf3ea0577bd25683864df32c3a327a27fad Mon Sep 17 00:00:00 2001 From: gowerc Date: Mon, 3 Feb 2025 12:07:28 +0000 Subject: [PATCH 5/6] fix pkgdown references --- R/Prior.R | 3 ++- man/render_stan_limits.Rd | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/R/Prior.R b/R/Prior.R index 0974e991..aa9473d5 100755 --- a/R/Prior.R +++ b/R/Prior.R @@ -150,9 +150,10 @@ as.character.Prior <- function(x, ...) { #' Creates Stan Syntax for Truncated distributions -#' @description +#' @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 "" diff --git a/man/render_stan_limits.Rd b/man/render_stan_limits.Rd index c8ab8afc..5e0c885d 100644 --- a/man/render_stan_limits.Rd +++ b/man/render_stan_limits.Rd @@ -15,3 +15,4 @@ render_stan_limits(limits) \description{ This function creates the Stan syntax for truncated distributions } +\keyword{internal} From 20b1ab32e87cb63af9ec2b8efe7a8956d95f506d Mon Sep 17 00:00:00 2001 From: gowerc Date: Mon, 3 Feb 2025 12:12:36 +0000 Subject: [PATCH 6/6] appease lintr --- R/Prior.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/Prior.R b/R/Prior.R index aa9473d5..2e4c3d74 100755 --- a/R/Prior.R +++ b/R/Prior.R @@ -150,7 +150,7 @@ as.character.Prior <- function(x, ...) { #' Creates Stan Syntax for Truncated distributions -#' @description +#' @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