Simulate group sequential clinical trial for negative binomial outcomes
Source:R/sim_gs_nbinom.R
sim_gs_nbinom.RdSimulates multiple replicates of a group sequential clinical trial with negative binomial outcomes, performing interim analyses at specified calendar times.
Usage
sim_gs_nbinom(
n_sims,
enroll_rate,
fail_rate,
dropout_rate = NULL,
max_followup,
event_gap = 0,
analysis_times = NULL,
n_target = NULL,
design = NULL,
data_cut = cut_data_by_date,
cuts = NULL
)Arguments
- n_sims
Number of simulations to run.
- enroll_rate
Enrollment rates (data frame with
rateandduration).- fail_rate
Failure rates (data frame with
treatment,rate,dispersion).- dropout_rate
Dropout rates (data frame with
treatment,rate,duration).- max_followup
Maximum follow-up time.
- event_gap
Event gap duration.
- analysis_times
Vector of calendar times for interim and final analyses. Optional if
cutsis provided.- n_target
Total sample size to enroll (optional, if not defined by
enroll_rate).- design
An object of class
gsNBorsample_size_nbinom_result. Used to extract planning parameters (lambda1,lambda2,ratio) for blinded information estimation.- data_cut
Function to cut data for analysis. Defaults to
cut_data_by_date(). The function must acceptsim_data,cut_date, andevent_gapas arguments.- cuts
A list of cutting criteria for each analysis. Each element of the list should be a list of arguments for
get_cut_date()(e.g.,planned_calendar,target_events,target_info). If provided,analysis_timesis ignored (or used as a fallback ifplanned_calendaris missing in a cut).
Value
A data frame containing simulation results for each analysis of each trial. Columns include:
- sim
Simulation ID
- analysis
Analysis index
- analysis_time
Calendar time of analysis
- n_enrolled
Number of subjects enrolled
- n_ctrl
Number of subjects in control group
- n_exp
Number of subjects in experimental group
- events_total
Total events observed
- events_ctrl
Events in control group
- events_exp
Events in experimental group
- exposure_at_risk_ctrl
Exposure at risk in control group (adjusted for event gaps)
- exposure_at_risk_exp
Exposure at risk in experimental group (adjusted for event gaps)
- exposure_total_ctrl
Total exposure in control group (calendar follow-up)
- exposure_total_exp
Total exposure in experimental group (calendar follow-up)
- z_stat
Z-statistic from the Wald test (positive favors experimental if rate ratio < 1)
- estimate
Estimated log rate ratio from the model
- se
Standard error of the estimate
- method_used
Method used for inference ("nb" or "poisson")
- dispersion
Estimated dispersion parameter from the model
- blinded_info
Estimated blinded statistical information (ML)
- unblinded_info
Observed unblinded statistical information (ML)
- info_unblinded_ml
Observed unblinded statistical information (ML)
- info_blinded_ml
Estimated blinded statistical information (ML)
- info_unblinded_mom
Observed unblinded statistical information (Method of Moments)
- info_blinded_mom
Estimated blinded statistical information (Method of Moments)
Examples
set.seed(123)
enroll_rate <- data.frame(rate = 10, duration = 3)
fail_rate <- data.frame(
treatment = c("Control", "Experimental"),
rate = c(0.6, 0.4),
dispersion = 0.2
)
dropout_rate <- data.frame(
treatment = c("Control", "Experimental"),
rate = c(0.05, 0.05),
duration = c(6, 6)
)
design <- sample_size_nbinom(
lambda1 = 0.6, lambda2 = 0.4, dispersion = 0.2, power = 0.8,
accrual_rate = enroll_rate$rate, accrual_duration = enroll_rate$duration,
trial_duration = 6
)
cuts <- list(
list(planned_calendar = 2),
list(planned_calendar = 4)
)
sim_results <- sim_gs_nbinom(
n_sims = 2,
enroll_rate = enroll_rate,
fail_rate = fail_rate,
dropout_rate = dropout_rate,
max_followup = 4,
n_target = 30,
design = design,
cuts = cuts
)
head(sim_results)
#> sim analysis analysis_time n_enrolled n_ctrl n_exp events_total events_ctrl
#> 1 1 1 2 23 11 12 10 8
#> 2 1 2 4 30 15 15 34 25
#> 3 2 1 2 15 8 7 4 3
#> 4 2 2 4 30 15 15 24 18
#> events_exp exposure_at_risk_ctrl exposure_at_risk_exp exposure_total_ctrl
#> 1 2 13.14534 12.328930 13.14534
#> 2 9 37.48061 38.937872 37.48061
#> 3 1 7.44672 5.387439 7.44672
#> 4 6 31.08699 26.047756 31.08699
#> exposure_total_exp z_stat estimate se method_used
#> 1 12.328930 -1.6724385 -1.3221756 0.7905675 Poisson Wald (fallback)
#> 2 38.937872 -2.7264734 -1.0597950 0.3887054 Poisson Wald (fallback)
#> 3 5.387439 -0.6710972 -0.7749088 1.1546894 Poisson Wald (fallback)
#> 4 26.047756 -1.7504986 -0.8915788 0.5093285 Negative binomial Wald
#> dispersion blinded_info unblinded_info info_unblinded_ml info_blinded_ml
#> 1 Inf 2.391287 1.6000076 1.6000076 2.391287
#> 2 Inf 8.157183 6.6184888 6.6184888 8.157183
#> 3 Inf 0.959958 0.7500145 0.7500145 0.959958
#> 4 4.406507 3.842925 3.8548194 3.8548194 3.842925
#> info_unblinded_mom info_blinded_mom
#> 1 1.600000 2.394325
#> 2 6.617647 8.160000
#> 3 0.750000 0.960000
#> 4 4.006873 4.097126