The R package BayesPPD (Bayesian Power Prior Design) supports Bayesian power and type I error calculation and model fitting after incorporating historical data with the power prior and the normalized power prior for generalized linear models (GLM). The package accommodates summary level data or subject level data with covariate information. It supports use of multiple historical datasets as well as design without historical data. Supported distributions for responses include normal, binary (Bernoulli/binomial), Poisson and exponential. The power parameter can be fixed or modeled as random using a normalized power prior for each of these distributions. In addition, the package supports the use of arbitrary sampling priors for computing Bayesian power and type I error rates. In addition to describing the statistical methodology and functions implemented in the package to enable sample size determination (SSD), we also demonstrate the use of BayesPPD in two comprehensive case studies.
There has been increasing interest over the past few decades in incorporating historical data in clinical trials, particularly on controls (Pocock 1976; Neuenschwander et al. 2010; Viele et al. 2014). Use of historical data can increase effective sample size, potentially leading to more accurate point estimates and increased power (Neuenschwander et al. 2010; Viele et al. 2014). Bayesian methods provide a natural mechanism for information borrowing through the use of informative priors. Some popular informative priors for Bayesian clinical trial design include the power prior (Chen and Ibrahim 2000), the normalized power prior (Duan et al. 2006), the commensurate power prior (Hobbs et al. 2011), and the robust meta-analytic-predictive prior (Schmidli et al. 2014).
Some advantages of the power prior include its easy construction, its natural way of incorporating historical data, its intuitive interpretation, and its desirable theoretical properties (Ibrahim et al. 2015). For example, (Ibrahim et al. 2003) show that the power prior is an optimal class of informative priors in the sense that it minimizes a convex sum of the Kullback–Leibler (KL) divergences between two posterior densities, in which one density is based on no incorporation of historical data, and the other density is based on pooling the historical and current data. (Duan et al. 2006) propose a modification of the power prior, the normalized power prior, which adds a normalizing constant component when the power parameter is modeled as random. The normalizing constant poses computational challenges in the presence of covariates, because it is analytically intractable except in the case of the normal linear model (Carvalho and Ibrahim 2021). We address this challenge by utilizing the PWK estimator (Wang et al. 2018) to approximate the normalizing constant for use with generalized linear models. We also develop a novel way of incorporating the approximation of the normalizing constant into the Markov chain Monte Carlo (MCMC) algorithm.
There is a growing literature on Bayesian sample size determination, including the works of (Rahme and Joseph 1998), (Simon 1999), (Wang and Gelfand 2002), (De Santis 2007), (M’Lan et al. 2006) and (Joseph et al. 2008). We consider the simulation-based method developed in (Chen et al. 2011) and (Psioda and Ibrahim 2019), which extends the the fitting and sampling priors of (Wang and Gelfand 2002) with a focus on controlling the type I error rate and calculating power. In addition, our package supports the use of arbitrary sampling priors for computing Bayesian power and type I error rates, and has specific features for GLMs that semi-automatically generate sampling priors from historical data.
The R package BayesPPD (Bayesian Power Prior Design) (Shen et al. 2022) supports Bayesian clinical trial design after incorporating historical data with the power prior and the normalized power prior. BayesPPD has two categories of functions: functions for model fitting and functions for Bayesian power and type I error rate estimation. The package accommodates summary level data or subject level data with covariate information for normal, binary (Bernoulli/binomial), Poisson and exponential models. It supports use of multiple historical datasets and design without historical data.
Several Bayesian clinical trial design packages are available on the Comprehensive R Archive Network (CRAN), such as BDP2, ph2bayes and gsbDesign (Gerber and Gsponer 2016; Kopp-Schneider et al. 2018; Nagashima 2018). However, these packages do not accommodate the incorporation of historical data and are limited to normal and binary endpoints. The RBesT package (Weber 2021) accounts for historical data using the meta-analytic-predictive prior. Commercial software for clinical trial design such as FACTS, East and ADDPLAN (Wassmer and Eisebitt 2005; Cytel Software Corporation 2014; LLC Consultants 2014) do not implement the power prior, to our knowledge. The BayesCTDesign (Eggleston et al. 2019) package supports two-arm randomized Bayesian trial design using historical control data with the power prior, but it does not allow covariates, nor does it allow the power parameter to be treated as random. The NPP (Han et al. 2021) package implements the normalized power prior for two group cases for Bernoulli, normal, multinomial and Poisson models, as well as for the normal linear model. It does not support generalized linear models, nor does it include functions for sample size determination. The bayesDP (Balcome et al. 2021) package implements the power prior where the power parameter is determined by a discounting function estimated based on a measure of prior-data conflict. Thus, this approach is not fully Bayesian, and the package must be used in conjunction with the package bayesCT (Chandereng et al. 2020) for trial design. While bayesDP supports two-arm trials for binomial, normal and survival models as well as linear and logistic regression models, BayesPPD allows covariates for Bernoulli/binomial, normal, Poisson and exponential models with several choices of link functions. The BayesPPD package is a comprehensive resource that supports Bayesian analysis and design using the power prior and normalized power prior.
Another advantage of BayesPPD is its computational speed. BayesPPD
implements MCMC algorithms with
Rcpp (Eddelbuettel and Francois 2011) without
recourse to asymptotics. For most sample sizes, functions for analysis
take only a few seconds to run. Functions for design for two group cases
run in seconds for fixed
This article is organized as follows. We first describe the methods implemented by the package. We then provide details on how to use BayesPPD for different data scenarios and model needs. We also present two case studies with example code, one with covariates and one without. The article is concluded with a brief discussion.
Let
The power prior can easily accommodate multiple historical datasets.
Suppose there are
Modeling
The power prior can easily accommodate covariates. Let
Let
The GLM for
The normalizing constant
The function normalizing.constant
in our package computes a vector of
coefficients that defines a function normalizing.constant
function
entails the following steps:
The user inputs a grid of
For each row of
For each of the
At this point, one has a dataset with outcomes
The normalizing.constant
function returns the vector of
coefficients from the polynomial regression model, which the user
must input into the analysis or design function for GLMs with glm.random.a0
and power.glm.random.a0
).
In the Examples section below, we demonstrate computing the normalizing
constant for one historical dataset with three covariates. Due to
computational intensity, the normalizing.constant
function has not
been evaluated for accuracy for high dimensional
Following (Chen et al. 2011), for two group models (i.e., treatment and
control group with no covariates), denote the parameter for the
treatment group by
We consider the following power prior for (
For models other than the exponential model, the power / type I error
calculation algorithm assumes the null and alternative hypotheses are
given by
nullspace.ineq
to "<".
For positive continuous data assumed to follow exponential distribution,
the hypotheses are given by
Let
In this section, we discuss the simulation-based procedure used to
estimate the Bayesian type I error rate and power. Let
Step 1: Generate
Step 2: Generate
Step 3: Estimate the posterior distribution
Step 4: Compute the indicator
Then the estimate of
For regression models, we assume the first column of the covariate
matrix is the treatment indicator, and the corresponding parameter is
For two group models, continuous responses of the control group are
assumed to follow
For binary, count or positive continuous data, a single response from
the control group is assumed to follow Bernoulli(
When computing the power or the type I error rate, treatment group data
are simulated and posterior samples of
For GLMs, a continuous response
The BayesPPD package accommodates summary level data or subject level
data with covariate information. It supports SSD for design applications
with multiple historical datasets as well as with no historical data.
Functions with names containing "two.grp"
assume that the input data
are sufficient statistics (e.g., sample mean) for independent and
identically distributed treatment and control group data. Simulated
control group data are analyzed using the power or normalized power
prior and posterior samples of "glm"
assume that the historical
control data include a covariate matrix borrow.treat=TRUE
and include the treatment indicator in the
historical covariate matrix. Simulated data are analyzed using the power
or normalized power prior and posterior samples of the regression
coefficients are returned. For each of two cases, the power parameter
two.grp.fixed.a0
, two.grp,random.a0
, glm.fixed.a0
and
glm.random.a0
. For each of the four model fitting functions, a
companion function prefixed with "power"
calculates power or type I
error rate, given historical data and current data sample size.
Supported distributions of responses include normal, binary
(Bernoulli/binomial), Poisson and exponential. Since functions for
sample size determination for GLMs are computationally intensive, an
approximation method based on asymptotic theory has been implemented for
the model with fixed
Table 1 shows the sampling methods used for each model
and data distribution. Gibbs sampling is used for normally distributed
data. Slice sampling (Neal 2003) is used for all other data distributions,
and for obtaining posterior samples of summary
methods implemented.
Two groups, fixed |
Two groups, random |
GLM, fixed |
GLM, random |
|
---|---|---|---|---|
Bernoulli/Binomial | Numerical integration | Slice | Slice | Slice & PWK |
Normal | Gibbs | Gibbs & Slice | Gibbs | Gibbs & Slice |
Poisson | Numerical integration | Slice | Slice | Slice & PWK |
Exponential | Numerical integration | Slice | Slice | Slice & PWK |
If one has current and/or historical control data for an application
with no covariates and would like to obtain posterior samples of two.grp.fixed.a0
or two.grp.random.a0
. The user must specify the data.type
("Normal"
, "Bernoulli"
, "Poisson"
or "Exponential"
), the sum of
responses y.c
, the sample size n.c
and the sample variance v.c
(for normal data only) of the current control data. The optional
historical
argument is a matrix where the columns contain the
sufficient statistics and each row represents a historical dataset. For
two.grp.fixed.a0
, historical
must contain a column of prior.mu.c.shape1
and prior.mu.c.shape2
, the
hyperparameters of the initial prior for
When prior.a0.shape1
and
prior.a0.shape2
. Posterior samples of lower.limits
and upper.limits
which control the upper and lower
limits of the parameters being sampled, as well as slice.widths
which
controls the width of each slice. The length of lower.limits
,
upper.limits
and slice.widths
should be at least equal to the number
of parameters, i.e., the dimension of
For sample size determination, power.two.grp.fixed.a0
and
power.two.grp.random.a0
compute the power or the type I error rate
given the sample sizes of the treatment and control groups for the new
study and other inputs. If a sampling prior with support in the null
space is used, the value returned is a Bayesian type I error rate. If a
sampling prior with support in the alternative space is used, the value
returned is a Bayesian power. The arguments samp.prior.mu.t
and
samp.prior.mu.c
contain vectors of samples for samp.prior.var.t
and samp.prior.var.c
, which contain
samples for delta
specifies the constant that defines the boundary of the
null hypothesis. The default value is zero. The argument gamma
specifies the posterior probability threshold for rejecting the null
hypothesis. The default value is 0.95.
If one has current and historical data for an application with
covariates and would like to obtain posterior samples of glm.fixed.a0
or
glm.random.a0
. It is recommended that the covariates be transformed or
standardized so that the estimation of data.type
, the data.link
(except for normal data),
the vector of responses y
and the matrix of covariates x
where the
first column should be the treatment indicator. Supported link functions
include logit, probit, log, identity-positive, identity-probability and
complementary log-log. If the data is binary and all covariates are
discrete, the user can collapse the Bernoulli data into a binomial
structure, which may result in a much faster slice sampler. In this
case, the user needs to provide n
, a vector of integers specifying the
number of subjects who have a particular value of the covariate vector.
The optional historical
argument is a list of lists where each list
contains information about a historical dataset with named elements
y0
, x0
and a0
(only for glm.fixed.a0
). If borrow.treat=FALSE
(the default), the historical covariate matrix x0
should not have the
treatment indicator. Apart from missing the treatment indicator, x0
should have the same set of covariates in the same order as x
. If
borrow.treat=TRUE
, x0
should have the same set of covariates in the
same order as x
, where the first column of x0
must be the treatment
indicator. For non-normal data, slice sampling is used to obtain
posterior samples of lower.limits
, upper.limits
and slice.widths
of the sampler. The
length of lower.limits
, upper.limits
and slice.widths
should be at
least equal to the number of parameters, i.e., the dimension of
When normalizing.constant
to obtain the value of
a0.coefficients
, a vector of coefficients for grid
argument of normalizing.constant
, the user inputs a grid of
v = c(0.1, 0.25, 0.5, 0.75, 1)
and use
expand.grid(a0_1=v, a0_2=v, a0_3=v)
when
When lower.limits
, upper.limits
and
slice.widths
should be equal to the dimension of
For sample size determination, power.glm.fixed.a0
and
power.glm.random.a0
compute the power or the type I error given the
total sample size (data.size
) for the new study and other inputs. If
historical datasets are provided, the algorithm samples with replacement
from the historical covariates to construct the simulated datasets.
Otherwise, the algorithm samples with replacement from x.samples
. One
of the arguments historical
and x.samples
must be provided. The
argument samp.prior.beta
contains a matrix of samples for samp.prior.var
containing samples for
Our implementation in BayesPPD does not assume any particular
distribution for the sampling priors. The user specifies discrete
approximations of the sampling priors by providing a vector or a matrix
of sample values and the algorithm samples with replacement from the
vector or the matrix as the first step of data generation. For two group
cases, the user simply specifies samp.prior.mu.t
and samp.prior.mu.c
which are vectors of samples for samp.prior.var.t
and samp.prior.var.c
, which contain
samples for
For GLM cases, the user specifies samp.prior.beta
, a matrix of samples
for samp.prior.var
containing
samples for glm.fixed.a0
generates such posterior samples if the current
argument is set to
FALSE
and
Because running power.glm.fixed.a0
and power.glm.random.a0
is
potentially time-consuming, an approximation method based on asymptotic
theory (Ibrahim et al. 2015) has been implemented for the model with fixed
power.glm.fixed.a0
with
approximate=TRUE
. The second application example below illustrates the
use of the approximation method. For normal data, the closed form of the
distribution of the MLE of
We first consider the non-inferiority design application of (Chen et al. 2011) considering a model for binary outcomes for treatment and control groups with no covariates. The goal of that application was to design a trial to evaluate a new generation of drug-eluting stent (DES) (“test device”) with the first generation of DES (“control device”). The primary endpoint is the 12-month Target Lesion Failure (TLF), defined as any of ischemia-driven revascularization of the target lesion (TLR), myocardial infarction (MI) (Q-wave and non-Q-wave) related to the target vessel, or (cardiac) death related to the target vessel. Historical information can be borrowed from two previously conducted trials involving the first generation of DES. Table 2 summarizes the historical data.
12-Month TLF | |
% TLF (# of failure/ |
|
Historical Trial 1 | 8.2% (44/535) |
Historical Trial 2 | 10.9% (33/304) |
We will illustrate Bayesian SSD incorporating historical data using the
power prior with fixed historical
matrix is defined where
each row represents a historical dataset, and the three columns
represent the sum of responses, sample size and samp.prior.mu.t
and samp.prior.mu.c
are
both scalars. For Bernoulli outcomes, beta initial priors are used for
prior.mu.t.shape1
, prior.mu.t.shape2
, prior.mu.c.shape1
and
prior.mu.c.shape2
.
historical <- matrix(0, ncol=3, nrow=2)
historical[1,] <- c(44, 535, 0.3)
historical[2,] <- c(33, 304, 0.3)
set.seed(1)
power <- power.two.grp.fixed.a0(data.type="Bernoulli",
n.t=750, n.c=round(750/3), historical=historical,
samp.prior.mu.t=0.092, samp.prior.mu.c=0.092,
prior.mu.t.shape1=0.0001, prior.mu.t.shape2=0.0001,
prior.mu.c.shape1=0.0001,prior.mu.c.shape2=0.0001,
delta=0.041, N=10000)
power$power/type I error
[1] 0.8428
When
historical <- matrix(0, ncol=2, nrow=2)
historical[1,] <- c(44, 535)
historical[2,] <- c(33, 304)
set.seed(1)
power <- power.two.grp.random.a0(data.type="Bernoulli",
n.t=750, n.c=round(750/3),historical=historical,
samp.prior.mu.t=0.092, samp.prior.mu.c=0.092,
prior.mu.t.shape1=0.0001, prior.mu.t.shape2=0.0001,
prior.mu.c.shape1=0.0001,prior.mu.c.shape2=0.0001,
prior.a0.shape1=1,prior.a0.shape2=1,
delta=0.041, gamma=0.95,
nMC=20000, nBI=250, N=10000)
power$`power/type I error`
[1] 0.864
Table 3 compares power calculations from (Chen et al. 2011) and BayesPPD for a few different sample sizes. We observe that the results provided by BayesPPD closely match the results provided in (Chen et al. 2011).
Total sample size | 1000 | 1080 | 1200 | 1280 | 1480 | |
750 | 810 | 900 | 960 | 1110 | ||
250 | 270 | 300 | 320 | 370 | ||
Power | ||||||
BayesPPD | 0.843 | 0.858 | 0.889 | 0.898 | 0.924 | |
(Chen et al. 2011) | 0.840 | 0.856 | 0.884 | 0.892 | 0.923 | |
Random |
BayesPPD | 0.864 | 0.885 | 0.909 | 0.921 | 0.937 |
(Chen et al. 2011) | 0.843 | 0.878 | 0.897 | 0.902 | 0.914 | |
Type I Error Rate | ||||||
BayesPPD | 0.030 | 0.027 | 0.032 | 0.030 | 0.032 | |
(Chen et al. 2011) | 0.030 | 0.027 | 0.028 | 0.030 | 0.032 | |
Random |
BayesPPD | 0.032 | 0.027 | 0.031 | 0.031 | 0.031 |
(Chen et al. 2011) | 0.038 | 0.031 | 0.029 | 0.036 | 0.039 |
Using data from two trials that study the effect of Zidovudine on AIDS, ACTG019 and ACTG036, we will demonstrate how BayesPPD can be used for coefficient estimation as well as power and type I error rate calculation for generalized linear models in designs that incorporate historical data.
Zidovudine (AZT) is an inhibitor of the replication of the human immunodeficiency virus (HIV). The ACTG019 study was a double-blind placebo-controlled clinical trial comparing AZT with a placebo in adults with asymptomatic HIV who had CD4 cell counts of fewer than 500 per cubic millimeter. The results were published in Volberding et al. (1990). For this example, we use only the control group data from ACTG019. The binary primary endpoint is death or development of AIDS or AIDS-related complex (ARC). We consider four of the measured covariates used, CD4 cell count (x01) (cell count per cubic millimetre of serum), age (x02), treatment (x03) and race (x04). The covariates CD4 cell count and age are continuous, while the others are binary. The ACTG036 study was also a placebo-controlled clinical trial comparing AZT with a placebo in asymptomatic patients with hereditary coagulation disorders and HIV infection. The results were published in Merigen et al (1991). The endpoint and covariates used are the same as those in the ACTG019 trial. Table 4 summarizes the endpoint and covariates for the two studies.
ACTG019 | ACTG036 | |
(control group) | ||
No. of patients | 404 | 183 |
AZT treatment, n (%) | NA | 89 (48.6) |
CD4 cell count, mean (SD) | 332.5 (109.3) | 297.7 (130.5) |
Age, y; mean (SD) | 34.5 (7.7) | 30.4(11.2) |
White race, n (%) | 377 (93.3) | 166 (90.7) |
Death or ARC, n (%) | 36 (8.9) | 11 (6.0) |
First, we standardize age for ease of interpretation and take the log of CD4 cell count count.
data(actg019)
data(actg036)
Y0 <- actg019$outcome
X0 <- actg019[,-1]
X0$age_std <- scale(X0$age)
X0$T4_log <- log(X0$T4count)
X0 <- as.matrix(X0[,c("age_std","race","T4_log")])
Y <- actg036$outcome
X <- actg036[,-1]
X$age_std <- scale(X$age)
X$T4_log <- log(X$T4count)
X <- as.matrix(X[,c("treat","age_std","race","T4_log")])
Suppose we are interested in analyzing the relationship between the
outcome and the covariates after incorporating historical information.
The code below demonstrates the analysis based on a power prior with
set.seed(1)
historical <- list(list(y0=Y0, x0=X0, a0=0.5))
result <- glm.fixed.a0(data.type="Bernoulli", data.link="Logistic", y=Y, x=X,
+ historical=historical, nMC=10000, nBI=250)
colMeans(result$posterior.samples)
[1] 4.8931870 -0.9459501 0.3645510 0.7201122 -1.4784046
Table 5 displays the posterior mean and 95%
credible interval for
Intercept | ||||||||
AZT | ||||||||
Age (standardized) | ||||||||
Race | ||||||||
log(CD4) |
For this example we consider designing a new clinical trial that is
similar to the historical trial, ACTG019. We hope to acquire a range of
sample sizes that can achieve powers around samp.prior.beta
, a matrix of samples for glm.fixed.a0
with
current=FALSE
. We then combine the sampling prior for
library(truncnorm)
set.seed(1)
historical.sp <- list(list(y0=Y0, x0=X0, a0=1))
result <- glm.fixed.a0(data.type="Bernoulli", data.link="Logistic",
historical=historical.sp,
nMC=10000, nBI=250, current.data = FALSE)
beta.sp <- result$posterior.samples
nSP <- 10000
mat.sp <- matrix(rep(colMeans(beta.sp), each=nSP), nrow=nSP)
beta1.sp <- rtruncnorm(nSP, a=-2, b=-0.1, mean=-0.5)
samp.prior.beta <- cbind(mat.sp[,1], beta1.sp, mat.sp[,2:4])
Next, we use power.glm.fixed.a0
with approximate=TRUE
to obtain a
rough estimate of the sample size required to achieve a power of
set.seed(1)
sample.sizes <- c(800,1000,1200)
historical <- list(list(y0=Y0, x0=X0, a0=0.5))
results <- NULL
for(i in 1:length(sample.sizes)){
result <- power.glm.fixed.a0(data.type="Bernoulli", data.size=sample.sizes[i],
historical=historical,
samp.prior.beta=samp.prior.beta,
delta=0, gamma=0.95, approximate=TRUE, N=10000)
results <- c(results, result$`power/type I error`)
}
results
[1] 0.8037 0.8177 0.8391
Finally, we calculate the exact power using the normalized power prior
with normalizing.constant
function
provides the value for a0.coefficients
of power.glm.random.a0
. Since
there is only one historical dataset, the grid
is simply a matrix with
one column. The code below demonstrates the usage when sample size is
grid <- matrix(seq(0.05,1,by=0.1))
historical <- list(list(y0=Y0, x0=X0))
a0_coef <- normalizing.constant(grid=grid, historical=historical,
data.type="Bernoulli",data.link="Logistic")
result <- power.glm.random.a0(data.type="Bernoulli",data.link="Logistic",
data.size=800, historical=historical,
samp.prior.beta=samp.prior.beta,
a0.coefficients = a0_coef,
delta=0, nMC=25000, nBI=250, N=10000)
result$`power/type I error`
[1] 0.7936
BayesPPD facilitates Bayesian sample size determination by providing a robust suite of functions for power calculation and analysis using the power and normalized power priors for generalized linear models. A major contribution of this package is the ability to handle covariates for Bernoulli, normal, Poisson and exponential outcomes. Despite the use of MCMC algorithms for analysis and design simulations, BayesPPD is computationally efficient, with functions producing results in seconds for many application settings.
A possible extension of the package is the accommodation for
longitudinal and time-to-event outcomes. Another potential feature is
computing optimal hyperparameters for the beta prior on
Sample size | Random |
|||
---|---|---|---|---|
750 | 0.732 | 0.779 | 0.788 | 0.791 |
800 | 0.746 | 0.793 | 0.805 | 0.794 |
850 | 0.751 | 0.788 | 0.804 | 0.794 |
900 | 0.759 | 0.800 | 0.816 | 0.802 |
950 | 0.778 | 0.808 | 0.817 | 0.814 |
1000 | 0.786 | 0.807 | 0.823 | 0.826 |
1050 | 0.794 | 0.820 | 0.835 | 0.822 |
1100 | 0.799 | 0.821 | 0.834 | 0.833 |
1150 | 0.792 | 0.829 | 0.842 | 0.832 |
1200 | 0.800 | 0.831 | 0.850 | 0.841 |
BayesPPD, BDP2, ph2bayes, gsbDesign, RBesT, BayesCTDesign, NPP, bayesDP, bayesCT, Rcpp
Bayesian, ExperimentalDesign, HighPerformanceComputing, MetaAnalysis, MissingData, NumericalMathematics
This article is converted from a Legacy LaTeX article using the texor package. The pdf version is the official version. To report a problem with the html, refer to CONTRIBUTE on the R Journal homepage.
Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".
For attribution, please cite this work as
Shen, et al., "BayesPPD: An R Package for Bayesian Sample Size Determination Using the Power and Normalized Power Prior for Generalized Linear Models", The R Journal, 2023
BibTeX citation
@article{RJ-2023-016, author = {Shen, Yueqi and Psioda, Matthew A. and Ibrahim, Joseph G.}, title = {BayesPPD: An R Package for Bayesian Sample Size Determination Using the Power and Normalized Power Prior for Generalized Linear Models}, journal = {The R Journal}, year = {2023}, note = {https://rjournal.github.io/}, volume = {14}, issue = {4}, issn = {2073-4859}, pages = {335-351} }