Title: | Bayesian Detection of Potential Risk Using Inference on Blinded Safety Data |
---|---|
Description: | Implements Bayesian inference to detect signal from blinded clinical trial when total number of adverse events of special concerns and total risk exposures from all patients are available in the study. For more details see the article by Mukhopadhyay et. al. (2018) titled 'Bayesian Detection of Potential Risk Using Inference on Blinded Safety Data', in Pharmaceutical Statistics (to appear). |
Authors: | Saurabh Mukhopadhyay [aut, cre] |
Maintainer: | Saurabh Mukhopadhyay <[email protected]> |
License: | GPL-2 |
Version: | 1.0.4 |
Built: | 2024-12-14 06:26:27 UTC |
Source: | CRAN |
Bayesian Detection of Risk using Inference on Blinded Safety data
bdribs(y, pyr, bg.events, bg.pyr, bg.rate = NULL, k = 1, p.params = list(a = 1, b = 1), r.params = list(mu = 0, sd = 2), adj.k = FALSE, mc.params = list(burn = 1000, iter = 10000, nc = 2), inf.type = 1, plots = TRUE, prnt = TRUE)
bdribs(y, pyr, bg.events, bg.pyr, bg.rate = NULL, k = 1, p.params = list(a = 1, b = 1), r.params = list(mu = 0, sd = 2), adj.k = FALSE, mc.params = list(burn = 1000, iter = 10000, nc = 2), inf.type = 1, plots = TRUE, prnt = TRUE)
y |
observed pooled events (combined active and control group) e.g., y = 20 |
pyr |
total payr exposure (combined active and control group) e.g., pyr = 2000 |
bg.events |
background (historical) events for the control group e.g., bg.events = 5 |
bg.pyr |
background (historical) pyr exposure for the control group e.g., bg.pyr = 1000 |
bg.rate |
when specified used as the true background rate for the control group and ignores bg.events and bg.pyr, default: bg.rate=NULL |
k |
allocation ratio of treatment vs. control group, default: k=1 |
p.params |
paramaters of beta prior of p (used only when inf.type = 1 or = 2); default: p.param= list(a=1,b=1). See details below. |
r.params |
paramaters of log-normal prior of r (used only when p.params=NULL); default: r.param= list(mu=0,sd=2). See details below. |
adj.k |
when TRUE adjusts the prior specification for k >1 (or for k <1), default: adj.k = FALSE . See deatil below. |
mc.params |
contains detials of MCMC parameters, default: mc.params=list(burn=1000, iter=10000, nc=2) |
inf.type |
indicate inference type, default: inf.type =1 (gives conditional inference for fixed background rate). See deatil below. |
plots |
indicates whether standard plots to be generated, default: plots= TRUE |
prnt |
indicates whether inputs to be printed, default: prnt= TRUE |
This 'bdribs' package obtains Bayesian inferences on blinded pooled safety data ...
Values of p.params are used to specify a beta prior for p - default is Jeffreys non-informative prior: Beta(a=0.5,b=0.5).
If inf.type=1, then conditional posterior inference on r is obtained for a given fixed values of del0 = bg.rate = bg.events/bg.pyr.
If inf.type=2, then an average (marginal) Bayesian inference on r is obtained with respect to a prior on del0, where del0 ~ Gamma(bg.events, bg.pyr).
If prior on r must be specified directly it can be done by using a log-normal prior. To do that, p.params must be set to NULL and and then r.params should be specifed as a list to supply mean and sd of the lognormal. For example, to have a lognormal prior with log-mean 0 and log-sd = 2, we should set r.params = list(mu=0, sd=2) and p.params=NULL.
when adj.k = TRUE, and k is not 1 (that is, allocation ratio is not 1:1), then a non-informative prior such as (beta(.5, .5) is first specified on p, assuming equal allocation ratio and then adjusted for the give k. When adj.k = F, then no such adjustment is made on the prior for p. Note that no such adjustments needed if prior on r is directly specified (as discussed above). However, it is always difficult to specify a non-informative prior on r and therefore a a prior on p with adj.k =T is recommended in most cases.
returns a dataframe of MCMC output from the posterior distribution for parameters of interests
Saurabh Mukhopadhyay
## Sample calls #run 1: simple case with a fixed background rate of 0.45 per 100 pyr. bdribs(y=5,pyr=500, bg.rate=0.0045,k=2) #run 2: same as run 1; here bg.rate gets computed as bg.events/bg.pyr bdribs(y=5,pyr=500, bg.events = 18, bg.pyr = 4000, k=2) # run3: when inf.type = 2, uses a Gamma distribution for del0; e.g. here Gamma(18, 4000) bdribs(y=5,pyr=500, bg.events = 18, bg.pyr = 4000, k=2, inf.type = 2) #run4: similar to run1, but instead of default p~u(0,1) using p~beta(.5,.5) bdribs(y=5,pyr=500, , bg.rate=0.0045,k=2, p.params=list(a=.5,b=.5)) #run5: similar to run1, but instead of default p ~ beta(.5,.5) using r ~ lognormal(mu=0,sd=2) bdribs(y=5,pyr=500, , bg.rate=0.0045,k=2, p.params= NULL, r.params=list(mu=0,sd=2))
## Sample calls #run 1: simple case with a fixed background rate of 0.45 per 100 pyr. bdribs(y=5,pyr=500, bg.rate=0.0045,k=2) #run 2: same as run 1; here bg.rate gets computed as bg.events/bg.pyr bdribs(y=5,pyr=500, bg.events = 18, bg.pyr = 4000, k=2) # run3: when inf.type = 2, uses a Gamma distribution for del0; e.g. here Gamma(18, 4000) bdribs(y=5,pyr=500, bg.events = 18, bg.pyr = 4000, k=2, inf.type = 2) #run4: similar to run1, but instead of default p~u(0,1) using p~beta(.5,.5) bdribs(y=5,pyr=500, , bg.rate=0.0045,k=2, p.params=list(a=.5,b=.5)) #run5: similar to run1, but instead of default p ~ beta(.5,.5) using r ~ lognormal(mu=0,sd=2) bdribs(y=5,pyr=500, , bg.rate=0.0045,k=2, p.params= NULL, r.params=list(mu=0,sd=2))
Contour plot of posterior probabilities on a range of (y, E) values
bdribs.contour(ymax, pyrmax, eincr, tol, k, bg.rate, plt = TRUE, ...)
bdribs.contour(ymax, pyrmax, eincr, tol, k, bg.rate, plt = TRUE, ...)
ymax |
maximum number of AESI event for which contour plot to be drawn |
pyrmax |
maximum risk exposure (in patient-year) |
eincr |
increment of patient-year exposures (default = 50) |
tol |
the maximum tolerance value of relative risk r (default =1) |
k |
allocation ratio (T:C) |
bg.rate |
estimated background rate (historical control rate) per patient-year (using inf.type=1) |
plt |
whether a contour plot to be drawn (default = TRUE) |
... |
to supply remaining parameters for bdribs call when supplied will override the default values |
returns contour plot matrix over the grid specified
## Sample calls #run 1: The contour plot bdribs.contour(ymax=15,pyrmax=2000,eincr=250,tol=1.5,k=2, bg.rate=0.0045) #run 2: Monitoring blinded AE over time using contour plot bdribs.contour(ymax=15,pyrmax=2000,eincr=250,tol=1.5,k=2, bg.rate=0.0045) obs.pyr=c(300,570,650,800, 1200, 1500) obs.y=c(2,4,5,6,10,12) points(obs.pyr, obs.y,type="p",pch=16, cex=1.4,col="maroon") if (length(obs.y)>1) points(c(0,obs.pyr), c(0,obs.y), type="s", lty=3, lwd=2, col="black")
## Sample calls #run 1: The contour plot bdribs.contour(ymax=15,pyrmax=2000,eincr=250,tol=1.5,k=2, bg.rate=0.0045) #run 2: Monitoring blinded AE over time using contour plot bdribs.contour(ymax=15,pyrmax=2000,eincr=250,tol=1.5,k=2, bg.rate=0.0045) obs.pyr=c(300,570,650,800, 1200, 1500) obs.y=c(2,4,5,6,10,12) points(obs.pyr, obs.y,type="p",pch=16, cex=1.4,col="maroon") if (length(obs.y)>1) points(c(0,obs.pyr), c(0,obs.y), type="s", lty=3, lwd=2, col="black")
plot of range of posterior probability corresponding to a range of background rate
bdribs.sensitivity(Y = 5:9, pyr = 800, k = 1, tol = 1.2, bg.evnt = 18, bg.pyr = 4000, bg.ci.coef = 0.9, bg.rng = NULL, add.mid = FALSE, ...)
bdribs.sensitivity(Y = 5:9, pyr = 800, k = 1, tol = 1.2, bg.evnt = 18, bg.pyr = 4000, bg.ci.coef = 0.9, bg.rng = NULL, add.mid = FALSE, ...)
Y |
range on number of AESI events for which sensitivity range to be drawn (default = 5:9) |
pyr |
total patient-year exposure where AESI events occurred (default =800) |
k |
allocation ratio (T:C) (default =1) |
tol |
clinically meaningful relative risk (default =1.2) |
bg.evnt |
background (historical) number of events in the control group (default =18) |
bg.pyr |
background (historical) patient-year exposure in the control group (default =4000) |
bg.ci.coef |
range of background rate estimate to be obtained from bg.ci.coef*100% CI (default =0.9); takes any value between 0.5 and 0.999. |
bg.rng |
range of background rate - if specified then bg.evnt, bg.pyr, and bg.ci.coef will be ignored (default =NULL) |
add.mid |
indicator variable to plot P(r>tol | Y, pyr) under inf.type=2 - requires related parameters to be supplied (default =F) |
... |
to supply remaining parameters of bdribs call (other than y, pyr, k, bg.events, bg.pyr) for bdribs call when supplied will override the default values |
returns a plot of P(r>tol | Y, pyr) over the range of background rate
## Sample calls #run 1: The sensitivity plot bdribs.sensitivity(Y=5:9,pyr=800,k=1, tol=1.2, bg.evnt=18, bg.pyr=4000,bg.ci.coef=0.90) #run 2: The sensitivity plot bdribs.sensitivity(Y=5:9,pyr=800,k=1, tol=1.2, bg.evnt=18, bg.pyr=4000,bg.ci.coef=0.90, add.mid=TRUE) #run 3: Using bg.rng parameter bdribs.sensitivity(Y=5:9,pyr=800,k=1, tol=1.2, bg.rng = c(0.0030, 0.0045, 0.0065))
## Sample calls #run 1: The sensitivity plot bdribs.sensitivity(Y=5:9,pyr=800,k=1, tol=1.2, bg.evnt=18, bg.pyr=4000,bg.ci.coef=0.90) #run 2: The sensitivity plot bdribs.sensitivity(Y=5:9,pyr=800,k=1, tol=1.2, bg.evnt=18, bg.pyr=4000,bg.ci.coef=0.90, add.mid=TRUE) #run 3: Using bg.rng parameter bdribs.sensitivity(Y=5:9,pyr=800,k=1, tol=1.2, bg.rng = c(0.0030, 0.0045, 0.0065))