Skip to content

Commit

Permalink
Implemented prior_init_only
Browse files Browse the repository at this point in the history
  • Loading branch information
gowerc committed Feb 6, 2024
1 parent daafa56 commit 310ae6a
Show file tree
Hide file tree
Showing 22 changed files with 76 additions and 31 deletions.
1 change: 0 additions & 1 deletion NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ 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)
Expand Down
24 changes: 20 additions & 4 deletions R/LongitudinalGSF.R
Original file line number Diff line number Diff line change
Expand Up @@ -73,17 +73,33 @@ LongitudinalGSF <- function(

Parameter(name = "lm_gsf_a_phi", prior = a_phi, size = "n_arms"),
Parameter(name = "lm_gsf_b_phi", prior = b_phi, size = "n_arms"),
Parameter(name = "lm_gsf_psi_phi", prior = prior_none(), size = "Nind"),
Parameter(
name = "lm_gsf_psi_phi",
prior = prior_init_only(prior_beta(a_phi@init, b_phi@init)),
size = "Nind"
),

Parameter(name = "lm_gsf_sigma", prior = sigma, size = 1)
)

assert_flag(centered)
parameters_extra <- if (centered) {
list(
Parameter(name = "lm_gsf_psi_bsld", prior = prior_none(), size = "Nind"),
Parameter(name = "lm_gsf_psi_ks", prior = prior_none(), size = "Nind"),
Parameter(name = "lm_gsf_psi_kg", prior = prior_none(), size = "Nind")
Parameter(
name = "lm_gsf_psi_bsld",
prior = prior_init_only(prior_lognormal(mu_bsld@init, omega_bsld@init)),
size = "Nind"
),
Parameter(
name = "lm_gsf_psi_ks",
prior = prior_init_only(prior_lognormal(mu_ks@init, omega_ks@init)),
size = "Nind"
),
Parameter(
name = "lm_gsf_psi_kg",
prior = prior_init_only(prior_lognormal(mu_kg@init, omega_kg@init)),
size = "Nind"
)
)
} else {
list(
Expand Down
6 changes: 5 additions & 1 deletion R/LongitudinalRandomSlope.R
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,11 @@ LongitudinalRandomSlope <- function(
Parameter(name = "lm_rs_slope_mu", prior = slope_mu, size = "n_arms"),
Parameter(name = "lm_rs_slope_sigma", prior = slope_sigma, size = 1),
Parameter(name = "lm_rs_sigma", prior = sigma, size = 1),
Parameter(name = "lm_rs_ind_rnd_slope", prior = prior_none(), size = "Nind")
Parameter(
name = "lm_rs_ind_rnd_slope",
prior = prior_init_only(prior_normal(slope_mu@init, slope_sigma@init)),
size = "Nind"
)
)
)
)
Expand Down
14 changes: 10 additions & 4 deletions R/Prior.R
Original file line number Diff line number Diff line change
Expand Up @@ -339,17 +339,23 @@ prior_beta <- function(a, b) {

#' Only Initial Values Specification
#'
#' @param dist (`Prior`)\cr a prior Distribution
#' @family Prior
#' @description
#' This function is used to specify only the initial values for a parameter.
#' This is primarily used for heiracrhical parameters whose distributions
#' are fixed within the model and cannot be altered by the user.
#'
#' @export
prior_none <- function() {
prior_init_only <- function(dist) {
Prior(
parameters = list(),
display = "<None>",
repr_model = "",
repr_data = "",
sample = \(n) local_runif(n, -4, 4),
init = 0,
sample = \(n) {
dist@sample(n)
},
init = dist@init,
validation = list()
)
}
Expand Down
2 changes: 1 addition & 1 deletion _pkgdown.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,11 @@ reference:
- prior_logistic
- prior_loglogistic
- prior_lognormal
- prior_none
- prior_normal
- prior_uniform
- prior_std_normal
- prior_student_t
- prior_init_only

- title: Longitudinal Model Specification
contents:
Expand Down
2 changes: 1 addition & 1 deletion man/prior_beta.Rd

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

2 changes: 1 addition & 1 deletion man/prior_cauchy.Rd

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

2 changes: 1 addition & 1 deletion man/prior_gamma.Rd

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

13 changes: 9 additions & 4 deletions man/prior_none.Rd → man/prior_init_only.Rd

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

2 changes: 1 addition & 1 deletion man/prior_invgamma.Rd

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

2 changes: 1 addition & 1 deletion man/prior_logistic.Rd

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

2 changes: 1 addition & 1 deletion man/prior_loglogistic.Rd

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

2 changes: 1 addition & 1 deletion man/prior_lognormal.Rd

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

2 changes: 1 addition & 1 deletion man/prior_normal.Rd

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

2 changes: 1 addition & 1 deletion man/prior_std_normal.Rd

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

2 changes: 1 addition & 1 deletion man/prior_student_t.Rd

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

2 changes: 1 addition & 1 deletion man/prior_uniform.Rd

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

2 changes: 1 addition & 1 deletion tests/testthat/_snaps/Prior.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
---

Code
print(prior_none())
print(prior_init_only(prior_normal(1, 4)))
Output
Prior Object:
Expand Down
2 changes: 1 addition & 1 deletion tests/testthat/test-Parameter.R
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ test_that("show() works for Paramneter objects", {
x <- Parameter(prior_beta(0.5, 0.2), "var1", "size1")
expect_snapshot(print(x))

x <- Parameter(prior_none(), "x", "size1")
x <- Parameter(prior_init_only(prior_normal(0, 1)), "x", "size1")
expect_snapshot(print(x))
})
2 changes: 1 addition & 1 deletion tests/testthat/test-ParameterList.R
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ test_that("show() works for ParameterList objects", {
Parameter(name = "bob", prior = prior_normal(1, 4)),
Parameter(name = "sam", prior = prior_beta(3, 1)),
Parameter(name = "dave", prior = prior_lognormal(3, 2), size = 4),
Parameter(name = "steve", prior = prior_none())
Parameter(name = "steve", prior = prior_init_only(prior_normal(4, 2)))
)

expect_snapshot(print(x))
Expand Down
4 changes: 2 additions & 2 deletions tests/testthat/test-Prior.R
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ test_that("Invalid prior parameters are rejected", {


# Ensure that validation doesn't wrongly reject priors with no user specified parameters
expect_s4_class(prior_none(), "Prior")
expect_s4_class(prior_init_only(prior_normal(3, 1)), "Prior")
expect_s4_class(prior_std_normal(), "Prior")
})

Expand All @@ -149,7 +149,7 @@ test_that("show() works for Prior objects", {
expect_snapshot(print(prior_std_normal()))
expect_snapshot(print(prior_beta(5, 1)))
expect_snapshot(print(prior_gamma(2.56, 12)))
expect_snapshot(print(prior_none()))
expect_snapshot(print(prior_init_only(prior_normal(1, 4))))
expect_snapshot(print(prior_uniform(8, 10)))
expect_snapshot(print(prior_student_t(3, 10, 4)))
expect_snapshot(print(prior_logistic(sigma = 2, 10)))
Expand Down
15 changes: 15 additions & 0 deletions tests/testthat/test-initialValues.R
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,18 @@ test_that("ensure_initial_values() works as expected", {
expect_equal(res[[1]]$p2, array(c(2, 3), dim = c(2)))
expect_equal(res[[1]]$p3, array(c(4, 5, 6), dim = c(3)))
})


test_that("intial values for fixed distributions gives valid values", {

set.seed(3150)
gsfmodel <- LongitudinalGSF(centered = TRUE)
ivs <- initialValues(gsfmodel, n_chains = 100)

for (values in ivs) {
expect_true(values$lm_gsf_psi_phi > 0 & values$lm_gsf_psi_phi < 1)
expect_true(values$lm_gsf_psi_bsld > 0)
expect_true(values$lm_gsf_psi_ks > 0)
expect_true(values$lm_gsf_psi_kg > 0)
}
})

0 comments on commit 310ae6a

Please sign in to comment.