SAM_prior | R Documentation |
The SAM_prior
function is designed to display the SAM prior, given
the informative prior (constructed from historical data), non-informative
prior, and the mixture weight calculated using SAM_weight
function (Yang, et al., 2023).
SAM_prior(if.prior, nf.prior, weight, ...)
## S3 method for class 'betaMix'
SAM_prior(if.prior, nf.prior, weight, ...)
## S3 method for class 'gammaMix'
SAM_prior(if.prior, nf.prior, weight, ...)
## S3 method for class 'normMix'
SAM_prior(if.prior, nf.prior, weight, ..., sigma)
if.prior |
Informative prior constructed from historical data, represented (approximately) as a mixture of conjugate distributions. |
nf.prior |
Non-informative prior used for the mixture. |
weight |
Weight assigned to the informative prior component
( |
... |
Additional parameters required for different endpoints. |
sigma |
Variance used for constructing the non-informative prior for continuous endpoints. |
SAM prior is constructed by mixing an informative prior
\pi_1(\theta)
, constructed based on historical data, with a
non-informative prior \pi_0(\theta)
using the mixture weight
w
determined by SAM_weight
function to achieve the
degree of prior-data conflict (Schmidli et al., 2015, Yang et al., 2023).
Let \theta
and \theta_h
denote the treatment effects
associated with the current arm data D
and historical data D_h
,
respectively. Let \delta
denote the clinically significant difference
such that if |\theta_h - \theta| \ge \delta
, then \theta_h
is
regarded as clinically distinct from \theta
, and it is therefore
inappropriate to borrow any information from D_h
. Consider two
hypotheses:
H_0: \theta = \theta_h, ~ H_1: \theta = \theta_h + \delta ~ or ~ \theta = \theta_h - \delta.
H_0
represents that D_h
and D
are consistent (i.e.,
no prior-data conflict) and thus information borrowing is desirable,
whereas H_1
represents that the treatment effect of D
differs from D_h
to such a degree that no information should be
borrowed.
The SAM prior uses the likelihood ratio test (LRT) statistics R
to
quantify the degree of prior-data conflict and determine the extent of
information borrowing.
R = P(D | H_0, \theta_h) / P(D | H_1, \theta_h) = P(D | \theta = \theta_h) / \max(P(D | \theta = \theta_h + \delta), P(D | \theta = \theta_h - \delta)) ,
where P(D | \cdot)
denotes the likelihood function. An alternative
Bayesian choice is the posterior probability ratio (PPR):
R = P(D | H_0, \theta_h) / P(D | H_1, \theta_h) = P(H_0) / P( H_1) \times BF,
where P(H_0)
and P(H_1)
is the prior probabilities of H_0
and H_1
being true. BF
is the Bayes Factor that in this case
is the same as the LRT.
The SAM prior, denoted as \pi_{sam}(\theta)
, is then defined
as a mixture of an informative prior \pi_1(\theta)
, constructed
based on D_h
and a non-informative prior \pi_0(\theta)
:
\pi_{sam}(\theta) = w\pi_1(\theta) + (1-w)\pi_0(\theta),
where the mixture weight w
is calculated as:
w = R / (1 + R).
As the level of prior-data conflict increases, the likelihood ratio
R
decreases, resulting in a decrease in the weight w
assigned to the informative prior and thus a decrease in information
borrowing. As a result, \pi_{sam}(\theta)
is data-driven and
has the ability to self-adapt the information borrowing based on the
degree of prior-data conflict.
Displays the SAM prior as a mixture of an informative prior (constructed based on the historical data) and a non-informative prior.
SAM_prior(betaMix)
: The function calculates the SAM prior for beta
mixture distribution. The default nf.prior
is set to be
mixbeta(c(1,1,1))
which represents a uniform prior Beta(1,1)
.
SAM_prior(gammaMix)
: The function calculates the SAM prior for gamma
mixture distribution. The default nf.prior
is set to be
mixgamma(c(1,0.001,0.001))
which represents a vague gamma prior
Gamma(0.001,0.001)
.
SAM_prior(normMix)
: The function calculates the SAM prior for normal
mixture distribution. The default nf.prior
is set to be
mixnorm(c(1,summary(if.prior)['mean'], sigma))
which represents a
unit-information prior.
Yang P, Zhao Y, Nie L, Vallejo J, Yuan Y. SAM: Self-adapting mixture prior to dynamically borrow information from historical data in clinical trials. Biometrics 2023; 00, 1–12. https://doi.org/10.1111/biom.13927
Schmidli H, Gsteiger S, Roychoudhury S, O'Hagan A, Spiegelhalter D, Neuenschwander B. Robust meta-analytic-predictive priors in clinical trials with historical control information. Biometrics 2014; 70(4):1023-1032.
SAM_weight
set.seed(123)
## Examples for binary endpoints
## Suppose that the informative prior constructed based on historical data is
## beta(40, 60)
prior.historical <- mixbeta(c(1, 40, 60))
## Data of the control arm
data.control <- rbinom(60, size = 1, prob = 0.42)
## Calculate the mixture weight of the SAM prior
wSAM <- SAM_weight(if.prior = prior.historical,
delta = 0.15, ## Clinically significant difference
data = data.control ## Control arm data
)
## Assume beta(1,1) as the non-informative prior used for mixture
nf.prior <- mixbeta(nf.prior = c(1,1,1))
## Generate the SAM prior
SAM.prior <- SAM_prior(if.prior = prior.historical, ## Informative prior
nf.prior = nf.prior, ## Non-informative prior
weight = wSAM ## Mixture weight of the SAM prior
)
plot(SAM.prior)
## Examples for continuous endpoints
## Suppose that the informative prior constructed based on historical data is
## N(0, 3)
sigma <- 3
prior.mean <- 0
prior.se <- sigma/sqrt(100)
prior.historical <- mixnorm(c(1, prior.mean, prior.se), sigma = sigma)
## Data of the control arm
data.control <- rnorm(80, mean = 0, sd = sigma)
## Calculate the mixture weight of the SAM prior
wSAM <- SAM_weight(if.prior = prior.historical,
delta = 0.2 * sigma, ## Clinically significant difference
data = data.control ## Control arm data
)
## Assume unit-information prior N(0,3) as the non-informative prior used
## for the mixture
nf.prior <- mixnorm(nf.prior = c(1,prior.mean, sigma),
sigma = sigma)
## Generate the SAM prior
SAM.prior <- SAM_prior(if.prior = prior.historical, ## Informative prior
nf.prior = nf.prior, ## Non-informative prior
weight = wSAM ## Mixture weight of the SAM prior
)
plot(SAM.prior)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.