Optimal phase II/III drug development planning for multi-arm programs with normally distributed endpoint
Source:R/optimal_multiarm_normal.R
optimal_multiarm_normal.Rd
The optimal_multiarm_normal
function enables planning of
multi-arm phase II/III drug development programs with optimal sample size
allocation and go/no-go decision rules. For normally distributed endpoints,
the treatment effect is measured by the standardized difference in means
(Delta). So far, only three-arm trials with two treatments and one control
are supported. The assumed true treatment effects can be assumed fixed or
modelled by a prior distribution. The R Shiny application
prior visualizes the
prior distributions used in this package. Fast computing is enabled by
parallel programming.
Usage
optimal_multiarm_normal(
Delta1,
Delta2,
n2min,
n2max,
stepn2,
kappamin,
kappamax,
stepkappa,
alpha,
beta,
c2,
c3,
c02,
c03,
K = Inf,
N = Inf,
S = -Inf,
steps1 = 0,
stepm1 = 0.5,
stepl1 = 0.8,
b1,
b2,
b3,
strategy,
num_cl = 1
)
Arguments
- Delta1
assumed true treatment effect as the standardized difference in means for treatment arm 1
- Delta2
assumed true treatment effect as the standardized difference in means for treatment arm 2
- n2min
minimal total sample size in phase II, must be divisible by 3
- n2max
maximal total sample size in phase II, must be divisible by 3
- stepn2
stepsize for the optimization over n2, must be divisible by 3
- kappamin
minimal threshold value kappa for the go/no-go decision rule
- kappamax
maximal threshold value kappa for the go/no-go decision rule
- stepkappa
step size for the optimization over the threshold value kappa
- alpha
one-sided significance level/family-wise error rate
- beta
type-II error rate for any pair, i.e.
1 - beta
is the (any-pair) power for calculation of the sample size for phase III- c2
variable per-patient cost for phase II
- c3
variable per-patient cost for phase III
- c02
fixed cost for phase II
- c03
fixed cost for phase III
- K
constraint on the costs of the program, default:
Inf
, e.g. no constraint- N
constraint on the total expected sample size of the program, default:
Inf
, e.g. no constraint- S
constraint on the expected probability of a successful program, default:
-Inf
, e.g. no constraint- steps1
lower boundary for effect size category "small", default: 0
- stepm1
lower boundary for effect size category "medium" = upper boundary for effect size category "small" default: 0.5
- stepl1
lower boundary for effect size category "large" = upper boundary for effect size category "medium", default: 0.8
- b1
expected gain for effect size category "small"
- b2
expected gain for effect size category "medium"
- b3
expected gain for effect size category "large"
- strategy
choose strategy: 1 (only the best promising candidate), 2 (all promising candidates) or 3 (both strategies)
- num_cl
number of clusters used for parallel computing, default: 1
Value
The output of the function is a data.frame
object containing the optimization results:
- u
maximal expected utility under the optimization constraints, i.e. the expected utility of the optimal sample size and threshold value
- Kappa
optimal threshold value for the decision rule to go to phase III
- n2
total sample size for phase II; rounded to the next even natural number
- n3
total sample size for phase III; rounded to the next even natural number
- n
total sample size in the program; n = n2 + n3
- K
maximal costs of the program (i.e. the cost constraint, if it is set or the sum K2+K3 if no cost constraint is set)
- pgo
probability to go to phase III
- sProg
probability of a successful program
- sProg2
probability of a successful program with two arms in phase III
- sProg3
probability of a successful program with three arms in phase III
- K2
expected costs for phase II
- K3
expected costs for phase III
and further input parameters. Taking cat(comment())
of the
data frame lists the used optimization sequences, start and
finish date of the optimization procedure.
Examples
# Activate progress bar (optional)
if (FALSE) progressr::handlers(global = TRUE)
# Optimize
# \donttest{
optimal_multiarm_normal(Delta1 = 0.375, Delta2 = 0.625,
n2min = 20, n2max = 100, stepn2 = 4, # define optimization set for n2
kappamin = 0.02, kappamax = 0.2, stepkappa = 0.02, # define optimization set for kappa
alpha = 0.025, beta = 0.1, # drug development planning parameters
c2 = 0.675, c3 = 0.72, c02 = 15, c03 = 20, # fixed/variable costs for phase II/III
K = Inf, N = Inf, S = -Inf, # set constraints
steps1 = 0, # define lower boundary for "small"
stepm1 = 0.5, # "medium"
stepl1 = 0.8, # and "large" effect size categories
b1 = 3000, b2 = 8000, b3 = 10000, # define expected benefits
strategy = 1,
num_cl = 1) # number of cores for parallelized computing
#> Optimization result:
#> Utility: 2628.89
#> Sample size:
#> phase II: 100, phase III: 201, total: 301
#> Probability to go to phase III: 0.99
#> Total cost:
#> phase II: 82, phase III: 165, cost constraint: Inf
#> Fixed cost:
#> phase II: 15, phase III: 20
#> Variable cost per patient:
#> phase II: 0.675, phase III: 0.72
#> Effect size categories (expected gains):
#> small: 0 (3000), medium: 0.5 (8000), large: 0.8 (10000)
#> Success probability: 0.78
#> Success probability for a trial with:
#> two arms in phase III: 0.78, three arms in phase III: 0
#> Significance level: 0.025
#> Targeted power: 0.9
#> Decision rule threshold: 0.06 [Kappa]
#> Assumed true effects [Delta]:
#> treatment 1: 0.375, treatment 2: 0.625
# }