Run the mixture model with MCMC.

## Usage

```
hb_mcmc_mixture(
data,
response = "response",
study = "study",
study_reference = max(data[[study]]),
group = "group",
group_reference = min(data[[group]]),
patient = "patient",
covariates = grep("^covariate", colnames(data), value = TRUE),
s_delta = 30,
s_beta = 30,
s_sigma = 30,
m_omega = c(0, 0),
s_omega = c(30, 30),
p_omega = 1/length(m_omega),
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.- covariates
Character vector of column names in

`data`

with the columns with baseline covariates. These can be continuous, categorical, or binary. Regardless,`historicalborrow`

derives the appropriate model matrix.- s_delta
Numeric of length 1, prior standard deviation of the study-by-group effect parameters

`delta`

.- s_beta
Numeric of length 1, prior standard deviation of the fixed effects

`beta`

.- s_sigma
Numeric of length 1, prior upper bound of the residual standard deviations.

- m_omega
Numeric with length equal to the number of supposed studies (but only the current study is in the data).

`m_omega`

is the prior control group mean of each study. The last element corresponds to the current study, and the others are for historical studies.- s_omega
Numeric with length equal to the number of supposed studies (but only the current study is in the data).

`s_omega`

is the prior control group standard deviation of each study. The last element corresponds to the current study, and the others are for historical studies.- p_omega
Numeric with length equal to the number of supposed studies (but only the current study is in the data).

`p_omega`

is the prior control group mixture proportion of each study. The last element corresponds to the current study, and the others are for historical studies.- 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 parameter samples from the
posterior distribution. Columns `.chain`

, `.iteration`

,
and `.draw`

have the meanings documented in the
`posterior`

package.

## Details

The study-specific components of the mixture prior are all fixed
in advance. Mixture components are normal distributions
with means in `m_omega`

and standard deviations in `s_omega`

.
These vectors are ordered with historical studies first
and the current study last.
These mixture components can be computed using
`hb_mcmc_mixture_hyperparameters()`

on a full set of data
(all the historical studies and the current study together).
Then the `m_omega`

and `s_omega`

columns of the output
can be plugged directly into `hb_mcmc_mixture()`

.
See the examples for a demonstration.

## See also

Other mcmc:
`hb_convergence()`

,
`hb_mcmc_hierarchical()`

,
`hb_mcmc_independent()`

,
`hb_mcmc_mixture_hyperparameters()`

,
`hb_mcmc_pool()`

## 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.100 0.285
#> 2 study2 2 -0.453 0.0933
#> 3 study3 3 0.797 0.0709
#> 4 study4 4 -0.313 0.202
#> 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 0.0364 0.592 -1.39 -0.266 -0.228 0.0364 -0.458
#> 2 0.0368 0.619 -1.38 -0.231 -0.202 0.0368 -0.370
#> 3 0.0195 0.691 -1.36 -0.335 -0.257 0.0195 -0.324
#> 4 0.108 0.660 -1.37 -0.348 -0.258 0.108 -0.352
#> 5 0.0420 0.681 -1.39 -0.318 -0.282 0.0420 -0.512
#> 6 -0.0370 0.617 -1.42 -0.262 -0.152 -0.0370 -0.428
#> 7 0.0360 0.618 -1.34 -0.315 -0.232 0.0360 -0.487
#> 8 -0.0284 0.592 -1.40 -0.353 -0.256 -0.0284 -0.568
#> 9 0.0841 0.605 -1.33 -0.309 -0.190 0.0841 -0.370
#> 10 0.179 0.644 -1.36 -0.328 -0.200 0.179 -0.652
#> # ℹ 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>
```