Sample from the posterior distribution of a GLM using the latent exchangeability prior (LEAP) by Alt et al. (2024) doi:10.1093/biomtc/ujae083.
glm.leap(
formula,
family,
data.list,
K = 2,
prob.conc = NULL,
offset.list = NULL,
beta.mean = NULL,
beta.sd = NULL,
disp.mean = NULL,
disp.sd = NULL,
gamma.lower = 0,
gamma.upper = 1,
get.loglik = FALSE,
iter_warmup = 1000,
iter_sampling = 1000,
chains = 4,
...
)The function returns an object of class draws_df containing posterior samples. The object has two attributes:
a list of variables specified in the data block of the Stan program
a character string indicating the model name
a two-sided formula giving the relationship between the response variable and covariates.
an object of class family. See ?stats::family.
a list of data.frames. The first element in the list is the current data, and the rest
are the historical data sets. For LEAP implementation, all historical data sets will be
stacked into one historical data set.
the desired number of classes to identify. Defaults to 2.
a scalar or a vector of length K giving the concentration parameters for Dirichlet prior.
If length == 2, a Beta(prob.conc[1], prob.conc[2]) prior is used. If a scalar is provided,
prob.conc will be a vector of repeated elements of the given scalar. Defaults to a vector of 1s.
a list of matrices giving the offset for current data followed by historical data. For each
matrix, the number of rows corresponds to observations and columns correspond to classes.
Defaults to a list of matrices of 0s. Note that the first element of offset.list (corresponding
to the offset for current data) should be a matrix of repeated columns if offset.list is not NULL.
a scalar or a p x K matrix of mean parameters for initial prior on regression coefficients,
where p is the number of regression coefficients (including intercept). If a scalar is provided,
beta.mean will be a matrix of repeated elements of the given scalar. Defaults to a matrix of 0s.
a scalar or a p x K matrix of sd parameters for the initial prior on regression coefficients,
where p is the number of regression coefficients (including intercept). If a scalar is provided,
same as for beta.mean. Defaults to a matrix of 10s.
a scalar or a vector whose dimension is equal to the number of classes (K) giving the location
parameters for the half-normal priors on the dispersion parameters. If a scalar is provided,
disp.mean will be a vector of repeated elements of the given scalar. Defaults to a vector of 0s.
a scalar or a vector whose dimension is equal to the number of classes (K) giving the scale
parameters for the half-normal priors on the dispersion parameters. If a scalar is provided, same
as for disp.mean. Defaults to a vector of 10s.
a scalar giving the lower bound for probability of subjects in historical data being exchangeable with subjects in current data. Defaults to 0.
a scalar giving the upper bound for probability of subjects in historical data being exchangeable with subjects in current data. Defaults to 1.
whether to generate log-likelihood matrix. Defaults to FALSE.
number of warmup iterations to run per chain. Defaults to 1000. See the argument iter_warmup in
sample() method in cmdstanr package.
number of post-warmup iterations to run per chain. Defaults to 1000. See the argument iter_sampling
in sample() method in cmdstanr package.
number of Markov chains to run. Defaults to 4. See the argument chains in sample() method in
cmdstanr package.
arguments passed to sample() method in cmdstanr package (e.g., seed, refresh, init).
The latent exchangeability prior (LEAP) discounts the historical data by identifying the most relevant individuals from the historical data. It is equivalent to a prior induced by the posterior of a finite mixture model for the historical data set.
Alt, E. M., Chang, X., Jiang, X., Liu, Q., Mo, M., Xia, H. M., and Ibrahim, J. G. (2024). LEAP: The latent exchangeability prior for borrowing information from historical data. Biometrics, 80(3).
data(actg019)
data(actg036)
# take subset for speed purposes
actg019 = actg019[1:100, ]
actg036 = actg036[1:50, ]
if (instantiate::stan_cmdstan_exists()) {
glm.leap(
formula = outcome ~ scale(age) + race + treatment + scale(cd4),
family = binomial('logit'),
data.list = list(actg019, actg036),
K = 2,
chains = 1, iter_warmup = 500, iter_sampling = 1000
)
}
Run the code above in your browser using DataLab