Skip to content

Commit

Permalink
code cleanup of function arguments
Browse files Browse the repository at this point in the history
  • Loading branch information
danheck committed Sep 11, 2023
1 parent c51d9b9 commit 20820ad
Show file tree
Hide file tree
Showing 31 changed files with 510 additions and 146 deletions.
10 changes: 8 additions & 2 deletions R/bma.R
Expand Up @@ -24,8 +24,14 @@
#' plot_forest(averaged, mar = c(4.5, 20, 4, .3))
#' }
#' @export
bma <- function(meta, prior = 1, parameter = "d", summarize = "integrate", ci = .95,
rel.tol = .Machine$double.eps^0.5) {
bma <- function(
meta,
prior = 1,
parameter = "d",
summarize = "integrate",
ci = .95,
rel.tol = .Machine$double.eps^0.5
) {

# stopifnot(parameter %in% c("d", "tau"))
if (parameter == "tau") {
Expand Down
16 changes: 14 additions & 2 deletions R/check_input.R
@@ -1,4 +1,5 @@
prior_pars <- function(prior) {

par_labels <- switch(attr(prior, "family"),
"norm" = c("mean", "sd"),
"t" = c("location", "scale", "nu"),
Expand All @@ -11,7 +12,12 @@ prior_pars <- function(prior) {
par_labels
}

check_prior <- function(prior, lower = -Inf, upper = Inf) {
check_prior <- function(
prior,
lower = -Inf,
upper = Inf
) {

attr(prior, "family") <- match.arg(attr(prior, "family"), priors())

stopifnot(inherits(prior, "prior"))
Expand Down Expand Up @@ -50,7 +56,13 @@ check_prior <- function(prior, lower = -Inf, upper = Inf) {
prior
}

check_y_se <- function(y, SE, labels) {

check_y_se <- function(
y,
SE,
labels
) {

stopifnot(is.numeric(y))
stopifnot(is.numeric(SE))
stopifnot(all(SE > 0))
Expand Down
10 changes: 8 additions & 2 deletions R/check_posterior.R
@@ -1,6 +1,12 @@

check_posterior <- function(dpost, meta, parameter = "d",
rel.tol = .Machine$double.eps^0.3, abs.tol = .001) {
check_posterior <- function(
dpost,
meta,
parameter = "d",
rel.tol = .Machine$double.eps^0.3,
abs.tol = .001
) {

bnd <- bounds_prior(dpost)
mini <- max(-3, bnd[1])
maxi <- min(3, bnd[2])
Expand Down
10 changes: 9 additions & 1 deletion R/data_list.R
@@ -1,5 +1,13 @@
### Make data-list structure and check data
data_list <- function(model, y, SE, labels, data, args) {
data_list <- function(
model,
y,
SE,
labels,
data,
args
) {

model <- match.arg(model, c("random", "fixed", "random_ordered"))

if (!missing(data) && is.list(data)) {
Expand Down
14 changes: 12 additions & 2 deletions R/inclusion.R
Expand Up @@ -28,7 +28,12 @@
#' # BF: Correct (Model 1) vs. misspecified (2 & 3)
#' inclusion(c(logm1, logm2, logm3), include = 1)
#' @export
inclusion <- function(logml, include = 1, prior = 1) {
inclusion <- function(
logml,
include = 1,
prior = 1
) {

if (is.list(logml)) {
logml <- unlist(lapply(logml, "[[", "logml"))
}
Expand Down Expand Up @@ -79,7 +84,12 @@ make_BF <- function(logml) {
}

#' @export
print.inclusion <- function(x, digits = 3, ...) {
print.inclusion <- function(
x,
digits = 3,
...
) {

nn <- names(x$prior)
if (!is.null(attr(x$posterior, "names"))) {
nn <- attr(x$posterior, "names")
Expand Down
10 changes: 7 additions & 3 deletions R/integrate_wrapper.R
@@ -1,6 +1,10 @@
integrate_wrapper <- function(data, d, tau,
rel.tol = .Machine$double.eps^0.5,
ratio.tol = .0001) {
integrate_wrapper <- function(
data,
d,
tau,
rel.tol = .Machine$double.eps^0.5,
ratio.tol = .0001
) {

# shifting the posterior to have the mode (approximately) at zero
weights <- 1 / data$SE^2
Expand Down
11 changes: 8 additions & 3 deletions R/meta_bridge_sampling.R
@@ -1,8 +1,13 @@

#' @importFrom bridgesampling bridge_sampler
meta_bridge_sampling <- function(meta, logml = "integrate",
min_samples = 5000,
rel.error = .01, ...) {
meta_bridge_sampling <- function(
meta,
logml = "integrate",
min_samples = 5000,
rel.error = .01,
...
) {

if (logml == "integrate" && is.na(meta$logml)) {
warning(
"Marginal likelihood could not be computed with numerical integration (logml='integrate)'.\n",
Expand Down
25 changes: 21 additions & 4 deletions R/meta_default.R
Expand Up @@ -61,8 +61,16 @@
#' @seealso \code{\link{meta_bma}}, \code{\link{plot_default}}, \code{\link{transform_es}}
#' @template ref_gronau2017
#' @export
meta_default <- function(y, SE, labels, data,
field = "psychology", effect = "d", ...) {
meta_default <- function(
y,
SE,
labels,
data,
field = "psychology",
effect = "d",
...
) {

def <- get_default(field, effect)
dl <- data_list("random",
y = y, SE = SE, labels = labels, data = data,
Expand All @@ -78,7 +86,11 @@ meta_default <- function(y, SE, labels, data,
}


get_default <- function(field, effect) {
get_default <- function(
field,
effect
) {

field <- match.arg(field, c("psychology", "medicine"))
effect <- match.arg(effect, c("d", "z", "logOR", "ttest", "corr"))

Expand Down Expand Up @@ -147,7 +159,12 @@ get_default <- function(field, effect) {
#' plot_default(field = "psychology", effect = "d")
#' @seealso \code{\link{meta_default}} for details on standard priors.
#' @export
plot_default <- function(field = "psychology", effect = "d", ...) {
plot_default <- function(
field = "psychology",
effect = "d",
...
) {

mfrow <- par()$mfrow
par(mfrow = c(1, 2))
def <- get_default(field, effect)
Expand Down
23 changes: 17 additions & 6 deletions R/meta_fixed.R
Expand Up @@ -17,12 +17,23 @@
#' plot_posterior(mf)
#' plot_forest(mf)
#' @export
meta_fixed <- function(y, SE, labels, data,
d = prior("cauchy", c(location = 0, scale = 0.707)),
rscale_contin = 1 / 2, rscale_discrete = 0.707,
centering = TRUE,
logml = "integrate", summarize = "integrate", ci = .95,
rel.tol = .Machine$double.eps^.3, silent_stan = TRUE, ...) {
meta_fixed <- function(
y,
SE,
labels,
data,
d = prior("cauchy", c(location = 0, scale = 0.707)),
rscale_contin = 1 / 2,
rscale_discrete = 0.707,
centering = TRUE,
logml = "integrate",
summarize = "integrate",
ci = .95,
rel.tol = .Machine$double.eps^.3,
silent_stan = TRUE,
...
) {

if ("tau" %in% names(list(...))) {
warning("The fixed-effects model assumes tau=0. Hence, a prior distribution cannot be specified.")
}
Expand Down
31 changes: 23 additions & 8 deletions R/meta_ordered.R
Expand Up @@ -48,13 +48,24 @@
#' @seealso \link{meta_bma}, \link{meta_random}
#' @template ref_haaf2019
#' @export
meta_ordered <- function(y, SE, labels, data,
d = prior("norm", c(mean = 0, sd = .3), lower = 0),
tau = prior("invgamma", c(shape = 1, scale = 0.15)),
prior = c(1, 1, 1, 1),
logml = "integrate", summarize = "stan", ci = .95,
rel.tol = .Machine$double.eps^.3,
logml_iter = 5000, iter = 5000, silent_stan = TRUE, ...) {
meta_ordered <- function(
y,
SE,
labels,
data,
d = prior("norm", c(mean = 0, sd = .3), lower = 0),
tau = prior("invgamma", c(shape = 1, scale = 0.15)),
prior = c(1, 1, 1, 1),
logml = "integrate",
summarize = "stan",
ci = .95,
rel.tol = .Machine$double.eps^.3,
logml_iter = 5000,
iter = 5000,
silent_stan = TRUE,
...
) {

check_deprecated(list(...)) # error: backwards compatibility
if (attr(d, "lower") == -Inf && attr(d, "upper") == Inf) {
stop(
Expand Down Expand Up @@ -182,7 +193,11 @@ meta_ordered <- function(y, SE, labels, data,


# count how many prior/posterior samples are inside constraints
count_dstudy <- function(stanfit, prior) {
count_dstudy <- function(
stanfit,
prior
) {

samples <- extract(stanfit, "dstudy")[["dstudy"]]
check_post <- apply(samples >= attr(prior, "lower") &
samples <= attr(prior, "upper"), 1, all)
Expand Down
24 changes: 17 additions & 7 deletions R/meta_random.R
Expand Up @@ -19,13 +19,23 @@
#' plot_posterior(mr)
#' }
#' @export
meta_random <- function(y, SE, labels, data,
d = prior("cauchy", c(location = 0, scale = 0.707)),
tau = prior("invgamma", c(shape = 1, scale = 0.15)),
rscale_contin = 0.5, rscale_discrete = 0.707, centering = TRUE,
logml = "integrate", summarize = "stan", ci = .95,
rel.tol = .Machine$double.eps^.3,
logml_iter = 5000, silent_stan = TRUE, ...) {
meta_random <- function(
y,
SE,
labels,
data,
d = prior("cauchy", c(location = 0, scale = 0.707)),
tau = prior("invgamma", c(shape = 1, scale = 0.15)),
rscale_contin = 0.5,
rscale_discrete = 0.707,
centering = TRUE,
logml = "integrate",
summarize = "stan", ci = .95,
rel.tol = .Machine$double.eps^.3,
logml_iter = 5000,
silent_stan = TRUE,
...
) {

check_deprecated(list(...)) # error: backwards compatibility
logml <- match.arg(logml, c("integrate", "stan"))
Expand Down
46 changes: 30 additions & 16 deletions R/meta_sensitivity.R
Expand Up @@ -50,12 +50,17 @@
#'
#' @seealso [plot.meta_sensitivity()]
#' @export
meta_sensitivity <- function(y, SE, labels, data,
d_list,
tau_list,
analysis = "bma",
combine_priors = "crossed",
...) {
meta_sensitivity <- function(
y,
SE,
labels,
data,
d_list,
tau_list,
analysis = "bma",
combine_priors = "crossed",
...
) {

analysis <- match.arg(analysis, c("fixed", "random", "bma"))

Expand Down Expand Up @@ -121,7 +126,10 @@ meta_sensitivity <- function(y, SE, labels, data,
}


print_priors <- function(prior_list, digits = 3) {
print_priors <- function(
prior_list,
digits = 3
) {

if (inherits(prior_list[[1]], "meta_bma")) {
prior_d <- sapply(prior_list, function(x) describe_prior(x$meta$random$prior_d))
Expand All @@ -146,7 +154,11 @@ print_priors <- function(prior_list, digits = 3) {
}

#' @export
print.meta_sensitivity <- function(x, digits = 3, ...) {
print.meta_sensitivity <- function(
x,
digits = 3,
...
) {


cat("### Sensitivity analysis for Bayesian meta-analysis ###\n\n")
Expand Down Expand Up @@ -197,14 +209,16 @@ print.meta_sensitivity <- function(x, digits = 3, ...) {
#' @seealso [meta_sensitivity()]
#' @method plot meta_sensitivity
#' @export
plot.meta_sensitivity <- function(x,
parameter = "d",
distribution = "posterior",
from,
to,
n = 101,
legend = TRUE,
...) {
plot.meta_sensitivity <- function(
x,
parameter = "d",
distribution = "posterior",
from,
to,
n = 101,
legend = TRUE,
...
) {

parameter <- match.arg(parameter, c("d", "tau"))
distribution <- match.arg(distribution, c("prior", "posterior"))
Expand Down

0 comments on commit 20820ad

Please sign in to comment.