Skip to contents

Run a simple model separately on each historical study control group and compute hyperparameters for hb_mcmc_mixture().

Usage

hb_mcmc_mixture_hyperparameters(
  data,
  response = "response",
  study = "study",
  study_reference = max(data[[study]]),
  group = "group",
  group_reference = min(data[[group]]),
  patient = "patient",
  m_mu = 0,
  s_mu = 30,
  s_sigma = 30,
  m_omega_current = 0,
  s_omega_current = 30,
  n_chains = 4,
  n_adapt = 2000,
  n_warmup = 4000,
  n_iterations = 20000,
  quiet = TRUE
)

Arguments

data

Tidy data frame with one row per patient, indicator columns for the response variable, study, group, and patient, and covariates. All columns must be atomic vectors (e.g. not lists). The data for the mixture and simple models should have just one study, and the others should have data from more than one study. The simple model can be used to get the historical data components of m_omega and s_omega for the mixture model.

response

Character of length 1, name of the column in data with the response/outcome variable. data[[response]] must be a continuous variable, and it should be the change from baseline of a clinical endpoint of interest, as opposed to just the raw response. Treatment differences are computed directly from this scale, please supply change from baseline unless you are absolutely certain that treatment differences computed directly from this quantity are clinically meaningful.

study

Character of length 1, name of the column in data with the study ID.

study_reference

Atomic of length 1, element of the study column that indicates the current study. (The other studies are historical studies.)

group

Character of length 1, name of the column in data with the group ID.

group_reference

Atomic of length 1, element of the group column that indicates the control group. (The other groups may be treatment groups.)

patient

Character of length 1, name of the column in data with the patient ID.

m_mu

Numeric of length 1, prior mean of the mean mu in the simple model.

s_mu

Numeric of length 1, prior standard deviation of the mean mu in the simple model.

s_sigma

Numeric of length 1, uniform prior upper bound of the residual standard deviation sigma in the simple model.

m_omega_current

Numeric with length 1, m_omega value of the current study. Inserted as the final component of the m_omega column in the output.

s_omega_current

Numeric with length 1, s_omega value of the current study. Inserted as the final component of the s_omega column in the output.

n_chains

Number of MCMC chains to run.

n_adapt

Number of adaptation iterations to run.

n_warmup

Number of warmup iterations per chain to run.

n_iterations

Number of saved MCMC iterations per chain to run.

quiet

Logical of length 1, TRUE to suppress R console output.

Value

A tidy data frame of hyperparameter values for hb_mcmc_mixture(). The first several rows are for historical studies, and the last row is for the current study. Studies/rows are sorted in the order hb_mcmc_mixture() sorts them, so you can use columns m_omega and s_omega for the same dataset and same values of other arguments directly in hb_mcmc_mixture().

Details

The model is a simple Bayesian model with a normal likelihood, an unknown mean mu, and an unknown standard deviation sigma. For each historical study, the posterior mean of mu becomes the corresponding component of m_omega in the output, and the posterior standard deviation of mu becomes the corresponding component of s_omega in the output. See the examples in this help file for a demonstration. m_omega and s_omega define the components of the mixture prior in hb_mcmc_mixture() that act as the contribution of the historical studies to the model.

Examples

data_all_studies <- hb_sim_independent(n_continuous = 2)$data
data_all_studies$study <- paste0("study", data_all_studies$study)
hyperparameters <- hb_mcmc_mixture_hyperparameters(
  data = data_all_studies,
  response = "response",
  study = "study",
  study_reference = "study5",
  group = "group",
  group_reference = 1,
  patient = "patient",
  n_chains = 1,
  n_adapt = 100,
  n_warmup = 50,
  n_iterations = 50
)
print(hyperparameters)
#> # A tibble: 5 × 4
#>   study  study_index m_omega s_omega
#>   <chr>        <int>   <dbl>   <dbl>
#> 1 study1           1  -0.395  0.114 
#> 2 study2           2   1.26   0.181 
#> 3 study3           3   0.692  0.180 
#> 4 study4           4   0.875  0.0958
#> 5 study5           5   0     30     
data_current_study <- dplyr::filter(data_all_studies, study == max(study))
hb_mcmc_mixture(
  data = data_current_study,
  response = "response",
  study = "study",
  study_reference = "study5",
  group = "group",
  group_reference = 1,
  patient = "patient",
  m_omega = hyperparameters$m_omega, # use hyperparams from historical data
  s_omega = hyperparameters$s_omega, # use hyperparams from historical data
  p_omega = rep(1 / nrow(hyperparameters), nrow(hyperparameters)),
  n_chains = 1,
  n_adapt = 100,
  n_warmup = 50,
  n_iterations = 50
)
#> # A tibble: 50 × 19
#>    alpha `beta[1]` `beta[2]` `delta[1]` `delta[2]` `omega[1]` `omega[2]`
#>    <dbl>     <dbl>     <dbl>      <dbl>      <dbl>      <dbl>      <dbl>
#>  1 -1.09    0.0248     0.837      0.274   0.0111        -1.09       1.06
#>  2 -1.08    0.0336     0.830      0.282   0.0145        -1.08       1.12
#>  3 -1.06    0.0179     0.836      0.288   0.0257        -1.06       1.31
#>  4 -1.07    0.0319     0.828      0.288   0.0165        -1.07       1.37
#>  5 -1.06    0.0228     0.831      0.257   0.0155        -1.06       1.30
#>  6 -1.08    0.0339     0.824      0.268   0.00188       -1.08       1.31
#>  7 -1.06    0.0345     0.834      0.283  -0.000123      -1.06       1.17
#>  8 -1.06    0.0344     0.832      0.291   0.00559       -1.06       1.55
#>  9 -1.10    0.0379     0.837      0.284   0.0101        -1.10       1.13
#> 10 -1.07    0.0271     0.837      0.271   0.00946       -1.07       1.27
#> # ℹ 40 more rows
#> # ℹ 12 more variables: `omega[3]` <dbl>, `omega[4]` <dbl>, `omega[5]` <dbl>,
#> #   `post_p[1]` <dbl>, `post_p[2]` <dbl>, `post_p[3]` <dbl>, `post_p[4]` <dbl>,
#> #   `post_p[5]` <dbl>, sigma <dbl>, .chain <int>, .iteration <int>, .draw <int>