Type: | Package |
Title: | Group Sequential Designs with Negative Binomial Outcomes |
Version: | 0.1-4 |
Maintainer: | Tobias Mütze <tobias.muetze@outlook.com> |
Description: | Design and analysis of group sequential designs for negative binomial outcomes, as described by T Mütze, E Glimm, H Schmidli, T Friede (2018) <doi:10.1177/0962280218773115>. |
Depends: | R (≥ 3.0.0) |
Imports: | stats, Rcpp(≥ 0.12.9) |
Suggests: | testthat, MASS, knitr, rmarkdown, dplyr, gsDesign, mvtnorm |
License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
NeedsCompilation: | yes |
URL: | https://github.com/tobiasmuetze/gscounts |
BugReports: | https://github.com/tobiasmuetze/gscounts/issues |
VignetteBuilder: | knitr |
LazyData: | true |
LinkingTo: | Rcpp |
Encoding: | UTF-8 |
RoxygenNote: | 7.1.2 |
Packaged: | 2021-11-01 16:09:07 UTC; tobiasmuetze |
Author: | Tobias Mütze |
Repository: | CRAN |
Date/Publication: | 2021-11-02 08:10:04 UTC |
Maximum information
Description
Add maximum information and critical values to the object gsnb
Usage
add_maxinfo(x)
Calculate stopping probabilities
Description
Calculate analyses specific stopping probabilities and expected information level
Usage
add_stopping_prob(x)
Arguments
x |
Object of class gsnb |
Value
Object of class gsnb
Check object of class gsnb
Description
Performs validity checks of object of class gsnb
Usage
check_gsnb(x)
Arguments
x |
object of class gsnb |
Group sequential design with negative binomial outcomes
Description
Design a group sequential trial with negative binomial outcomes
Usage
design_gsnb(
rate1,
rate2,
dispersion,
ratio_H0 = 1,
random_ratio = 1,
power,
sig_level,
timing,
esf = obrien,
esf_futility = NULL,
futility = NULL,
t_recruit1 = NULL,
t_recruit2 = NULL,
study_period = NULL,
accrual_period = NULL,
followup_max = NULL,
accrual_speed = 1,
...
)
Arguments
rate1 |
numeric; assumed rate of treatment group 1 in the alternative |
rate2 |
numeric; assumed rate of treatment group 2 in the alternative |
dispersion |
numeric; dispersion (shape) parameter of negative binomial distribution |
ratio_H0 |
numeric; positive number denoting the rate ratio |
random_ratio |
numeric; randomization ratio n1/n2 |
power |
numeric; target power of group sequential design |
sig_level |
numeric; Type I error / significance level |
timing |
numeric vector; 0 < |
esf |
function; error spending function |
esf_futility |
function; futility error spending function |
futility |
character; either |
t_recruit1 |
numeric vector; recruit (i.e. study entry) times in group 1 |
t_recruit2 |
numeric vector; recruit (i.e. study entry) times in group 2 |
study_period |
numeric; study duration; to be set when follow-up times are not identical between subjects, NULL otherwise |
accrual_period |
numeric; accrual period |
followup_max |
numeric; maximum exposure time of a subject; to be set when follow-up times are to be equal for each subject, NULL otherwise |
accrual_speed |
numeric; determines accrual speed; values larger than 1 result in accrual slower than linear; values between 0 and 1 result in accrual faster than linear. |
... |
further arguments. Will be passed to the error spending function. |
Details
Denote \mu_1
and \mu_2
the event rates in treatment groups 1 and 2.
This function considers smaller event rates to be better.
The statistical hypothesis testing problem of interest is
H_0: \frac{\mu_1}{\mu_2} \ge \delta vs. H_1: \frac{\mu_1}{\mu_2} < \delta,
with \delta=
ratio_H0
.
Non-inferiority of treatment group 1 compared to treatment group 2 is tested for \delta\in (1,\infty)
.
Superiority of treatment group 1 over treatment group 2 is tested for \delta \in (0,1]
.
The calculation of the efficacy and (non-)binding futility boundaries are performed
under the hypothesis H_0: \frac{\mu_1}{\mu_2}= \delta
and
under the alternative H_1: \frac{\mu_1}{\mu_2} =
rate1
/ rate2
.
The argument 'accrual_speed' is used to adjust the accrual speed.
Number of subjects in the study at study time t is given by
f(t)=a * t^b
with a = n / accrual_period
and b=accrual_speed
For linear recruitment, b=1
.
b > 1
results is slower than linear recruitment for t < accrual_period
and
faster than linear recruitment for t > accrual_period
. Vice verse for b < 1
.
Value
A list with class "gsnb" containing the following components:
rate1 |
as input |
rate2 |
as input |
dispersion |
as input |
power |
as input |
timing |
as input |
ratio_H0 |
as input |
ratio_H1 |
ratio |
sig_level |
as input |
random_ratio |
as input |
power_fix |
power of fixed design |
expected_info |
list; expected information under |
efficacy |
list; contains the elements |
futility |
list; only part of the output if argument |
stop_prob |
list; contains the element |
t_recruit1 |
as input |
t_recruit2 |
as input |
study_period |
as input |
followup_max |
as input |
max_info |
maximum information |
calendar |
calendar times of data looks; only calculated when exposure times are not identical |
References
Mütze, T., Glimm, E., Schmidli, H., & Friede, T. (2018). Group sequential designs for negative binomial outcomes. Statistical Methods in Medical Research, <doi:10.1177/0962280218773115>.
Examples
# Calculate the sample sizes for a given accrual period and study period (without futility)
out <- design_gsnb(rate1 = 0.0875, rate2 = 0.125, dispersion = 5,
power = 0.8, timing = c(0.5, 1), esf = obrien,
ratio_H0 = 1, sig_level = 0.025,
study_period = 3.5, accrual_period = 1.25, random_ratio = 1)
out
# Calculate the sample sizes for a given accrual period and study period with binding futility
out <- design_gsnb(rate1 = 0.0875, rate2 = 0.125, dispersion = 5,
power = 0.8, timing = c(0.5, 1), esf = obrien,
ratio_H0 = 1, sig_level = 0.025, study_period = 3.5,
accrual_period = 1.25, random_ratio = 1, futility = "binding",
esf_futility = obrien)
out
# Calculate study period for given recruitment times
expose <- seq(0, 1.25, length.out = 1042)
out <- design_gsnb(rate1 = 0.0875, rate2 = 0.125, dispersion = 5,
power = 0.8, timing = c(0.5, 1), esf = obrien,
ratio_H0 = 1, sig_level = 0.025, t_recruit1 = expose,
t_recruit2 = expose, random_ratio = 1)
out
# Calculate sample size for a fixed exposure time
out <- design_gsnb(rate1 = 0.0875, rate2 = 0.125, dispersion = 5,
power = 0.8, timing = c(0.5, 1), esf = obrien,
ratio_H0 = 1, sig_level = 0.025,
followup_max = 0.5, random_ratio = 1)
# Different timing for efficacy and futility analyses
design_gsnb(rate1 = 1, rate2 = 2, dispersion = 5,
power = 0.8, esf = obrien,
ratio_H0 = 1, sig_level = 0.025, study_period = 3.5,
accrual_period = 1.25, random_ratio = 1, futility = "binding",
esf_futility = pocock,
timing_eff = c(0.8, 1),
timing_fut = c(0.2, 0.5, 1))
Clinical trials with negative binomial outcomes
Description
Design a clinical trial with negative binomial outcomes
Usage
design_nb(
rate1,
rate2,
dispersion,
power,
ratio_H0 = 1,
sig_level,
random_ratio = 1,
t_recruit1 = NULL,
t_recruit2 = NULL,
study_period = NULL,
accrual_period = NULL,
followup_max = NULL,
accrual_speed = 1
)
Arguments
rate1 |
numeric; assumed rate of treatment group 1 in the alternative |
rate2 |
numeric; assumed rate of treatment group 2 in the alternative |
dispersion |
numeric; dispersion (shape) parameter of negative binomial distribution |
power |
numeric; target power |
ratio_H0 |
numeric; positive number denoting the rate ratio rate_1/rate_2 under the null hypothesis, i.e. the non-inferiority or superiority margin |
sig_level |
numeric; Type I error / significance level |
random_ratio |
numeric; randomization ratio n1/n2 |
t_recruit1 |
numeric vector; recruit (i.e. study entry) times in group 1 |
t_recruit2 |
numeric vector; recruit (i.e. study entry) times in group 2 |
study_period |
numeric; study duration |
accrual_period |
numeric; accrual period |
followup_max |
numeric; maximum exposure time of a patient |
accrual_speed |
numeric; determines accrual speed; values larger than 1 result in accrual slower than linear; values between 0 and 1 result in accrual faster than linear. |
Value
A list containing the following components:
rate1 |
as input |
rate2 |
as input |
dispersion |
as input |
power |
as input |
ratio_H0 |
as input |
ratio_H1 |
ratio |
sig_level |
as input |
random_ratio |
as input |
t_recruit1 |
as input |
t_recruit2 |
as input |
study_period |
as input |
followup_max |
as input |
max_info |
maximum information |
Examples
# Calculate sample size for given accrual period and study duration assuming uniformal accrual
out <- design_nb(rate1 = 0.0875, rate2 = 0.125, dispersion = 5, power = 0.8,
ratio_H0 = 1, sig_level = 0.025,
study_period = 4, accrual_period = 1, random_ratio = 2)
out
# Calculate sample size for a fixed exposure time of 0.5 years
out <- design_nb(rate1 = 4.2, rate2 = 8.4, dispersion = 3, power = 0.8,
ratio_H0 = 1, sig_level = 0.025,
followup_max = 0.5, random_ratio = 2)
out
# Calculate study period for given recruitment time
t_recruit1 <- seq(0, 1.25, length.out = 1200)
t_recruit2 <- seq(0, 1.25, length.out = 800)
out <- design_nb(rate1 = 0.0875, rate2 = 0.125, dispersion = 5, power = 0.8,
ratio_H0 = 1, sig_level = 0.025,
t_recruit1 = t_recruit1, t_recruit2 = t_recruit2)
Calendar time of data looks
Description
Calculate the calendar time of looks given the information time
Usage
get_calendartime_gsnb(
rate1,
rate2,
dispersion,
t_recruit1,
t_recruit2,
timing,
followup1,
followup2
)
Arguments
rate1 |
numeric; rate in treatment group 1 |
rate2 |
numeric; rate in treatment group 2 |
dispersion |
numeric; dispersion (shape) parameter of negative binomial distribution |
t_recruit1 |
numeric vector; recruit (i.e. study entry) times in group 1 |
t_recruit2 |
numeric vector; recruit (i.e. study entry) times in group 2 |
timing |
numeric vector with entries in (0,1]; information times of data looks |
followup1 |
numeric vector; final individual follow-up times in treatment group 1 |
followup2 |
numeric vector; final individual follow-up times in treatment group 2 |
Value
numeric; vector with calendar time of data looks
Examples
# Calendar time at which 50%, 75%, and 100% of the maximum information is attained
# 100 subjects in each group are recruited uniformly over 1.5 years
# Study ends after two years, i.e. follow-up times vary between 2 and 0.5 years
get_calendartime_gsnb(rate1 = 0.1,
rate2 = 0.125,
dispersion = 5,
t_recruit1 = seq(0, 1.5, length.out = 100),
t_recruit2 = seq(0, 1.5, length.out = 100),
timing = c(0.5, 0.75, 1),
followup1 = seq(2, 0.5, length.out = 100),
followup2 = seq(2, 0.5, length.out = 100))
get_covar
Description
Get canonical form covariance matrix
Usage
get_covar(timing)
Arguments
timing |
numeric vector; 0 < |
Information level for log rate ratio
Description
Calculates the information level for the log rate ratio of the negative binomial model
Usage
get_info_gsnb(rate1, rate2, dispersion, followup1, followup2)
Arguments
rate1 |
numeric; rate in treatment group 1 |
rate2 |
numeric; rate in treatment group 2 |
dispersion |
numeric; dispersion (shape) parameter of negative binomial distribution |
followup1 |
numeric vector; individual follow-up times in treatment group 1 |
followup2 |
numeric vector; individual follow-up times in treatment group 2 |
Value
numeric; information level
Examples
# Calculates information level for case of 10 subjects per group
# Follow-up times of subjects in each group range from 1 to 3
get_info_gsnb(rate1 = 0.1,
rate2 = 0.125,
dispersion = 4,
followup1 = seq(1, 3, length.out = 10),
followup2 = seq(1, 3, length.out = 10))
get_recruittimes
Description
Calculate the times subjects enter the study
Usage
get_recruittimes(accrual_period, n, accrual_exponent)
Arguments
accrual_period |
numeric; duration of accrual period. Must be positive. |
n |
numeric; number of subjects recruited at end of accrual period. |
accrual_exponent |
numeric; exponent in sample size function |
Details
Number of subjects in the study at study time t is given by f(t)=a * t^b with a = n / accrual_period. For linear recruitment, b=1. b > 1 results is slower than linear recruitment for t < accrual_period and faster than linear recruitment for t > accrual_period. b < 1 vice versa.
gscounts
Description
Design and monitoring of group sequential designs with negative binomial data.
Author(s)
Tobias Muetze <tobias.muetze@outlook.com>
Hospitalizations
Description
A dataset containing the hospitalization times of 1980 patients:
Usage
data(hospitalizations)
Format
A data frame with 2323 rows and 4 variables
Details
treatment. Treatment identifier.
pat. Patient identifier. Unique within
treatment
t_recruit. Recruitment time of patient into the clinical trial.
eventtime. Event time of hospitalization.
NA
corresponds to no event.
obrien
Description
Error spending function mimicking O'Brien & Fleming critical values
Usage
obrien(t, sig_level, ...)
Arguments
t |
numeric; Non-negative information ratio |
sig_level |
numeric; significance level |
... |
optional arguments |
Value
numeric
Examples
# O'Brien-Fleming-type error spending function
obrien(t = c(0.5, 1), sig_level = 0.025)
pocock
Description
Error spending function mimicking Pococks critical values
Usage
pocock(t, sig_level, ...)
Arguments
t |
numeric; Non-negative information ratio |
sig_level |
numeric; significance level |
... |
optional arguments |
Value
numeric
Examples
# Pocock-type error spending function
pocock(t = c(0.5, 1), sig_level = 0.025)
print.gsnb
Description
print method for instance of class gsnb
Usage
## S3 method for class 'gsnb'
print(x, ...)
Arguments
x |
an object of class gsnb |
... |
optional arguments to print or plot methods |
print.nb
Description
print method for instance of class nb
Usage
## S3 method for class 'nb'
print(x, ...)
Arguments
x |
an object of class nb |
... |
optional arguments to print or plot methods |
samplesize_from_followup
Description
Determine the sample size from a given follow-up time
Usage
samplesize_from_followup(
max_info,
random_ratio,
rate1,
rate2,
shape,
followup_max
)
samplesize_from_periods
Description
Determine the total sample size for given accrual and study period
Usage
samplesize_from_periods(
max_info,
accrual_period,
study_period,
random_ratio,
rate1,
rate2,
shape,
accrual_speed
)
studyperiod_from_recruit
Description
Determine the study period for given recruitment times
Usage
studyperiod_from_recruit(
max_info,
random_ratio,
rate1,
rate2,
shape,
t_recruit1,
t_recruit2
)