Learn R Programming

boinet (version 1.4.0)

tite.gboinet: TITE-gBOIN-ET: Time-to-Event Generalized BOIN Design for Ordinal Graded Outcomes

Description

Conducts simulation studies of the TITE-gBOIN-ET (Time-to-Event generalized Bayesian Optimal Interval design to accelerate dose-finding accounting for ordinal graded Efficacy and Toxicity outcomes) design. This advanced extension incorporates both time-to-event modeling and ordinal (graded) outcome assessment, making it suitable for modern oncology trials where both the severity of toxicity and the degree of efficacy response are clinically meaningful.

The design addresses the reality that clinical outcomes are rarely binary. For example, toxicity may range from mild (Grade 1) to life-threatening (Grade 4), while efficacy can span from no response to complete response. By utilizing this additional information, TITE-gBOIN-ET can make more informed dose selection decisions while maintaining the advantages of time-to-event modeling for delayed outcomes.

Usage

tite.gboinet(
  n.dose, start.dose, size.cohort, n.cohort,
  toxprob, effprob, sev.weight, res.weight,
  phi, phi1 = phi*0.1, phi2 = phi*1.4,
  delta, delta1 = delta*0.6,
  alpha.T1 = 0.5, alpha.E1 = 0.5, tau.T, tau.E,
  te.corr = 0.2, gen.event.time = "weibull",
  accrual, gen.enroll.time = "uniform",
  stopping.npts = size.cohort*n.cohort,
  stopping.prob.T = 0.95, stopping.prob.E = 0.99,
  estpt.method = "obs.prob", obd.method = "max.effprob",
  w1 = 0.33, w2 = 1.09,
  plow.ast = phi1, pupp.ast = phi2,
  qlow.ast = delta1/2, qupp.ast = delta,
  psi00 = 40, psi11 = 60,
  n.sim = 1000, seed.sim = 100)

Value

A list object of class "tite.gboinet" containing the following components:

toxprob

True toxicity probability matrix used in simulation.

effprob

True efficacy probability matrix used in simulation.

nETS

True normalized equivalent toxicity scores by dose level.

nEES

True normalized equivalent efficacy scores by dose level.

phi

Target normalized equivalent toxicity scores.

delta

Target normalized equivalent efficacy scores.

lambda1

Lower toxicity decision boundary.

lambda2

Upper toxicity decision boundary.

eta1

Lower efficacy decision boundary.

tau.T

Toxicity assessment window (days).

tau.E

Efficacy assessment window (days).

accrual

Accrual rate (days).

ncat.T

Number of ordinal toxicity outcome categories.

ncat.E

Number of ordinal efficacy outcome categories.

estpt.method

Method used for efficacy probability estimation.

obd.method

Method used for optimal biological dose selection.

n.patient

Average number of patients treated at each dose level across simulations.

prop.select

Percentage of simulations selecting each dose level as OBD.

prop.stop

Percentage of simulations terminating early without OBD selection.

duration

Expected trial duration in days.

Arguments

n.dose

Integer specifying the number of dose levels to investigate.

start.dose

Integer specifying the starting dose level (1 = lowest dose). Generally recommended to start at the lowest dose for safety.

size.cohort

Integer specifying the number of patients per cohort. Commonly 3 or 6 patients, with 3 being standard for early-phase trials.

n.cohort

Integer specifying the maximum number of cohorts. Total sample size = size.cohort*n.cohort.

toxprob

Matrix (nrow = toxicity categories, ncol = n.dose) specifying true toxicity probabilities. Each column must sum to 1.0. Rows represent ordered toxicity levels from none to most severe.

effprob

Matrix (nrow = efficacy categories, ncol = n.dose) specifying true efficacy probabilities. Each column must sum to 1.0. Rows represent ordered response levels from none to best response.

sev.weight

Numeric vector of toxicity severity weights. Length must equal nrow(toxprob). Should be non-decreasing and reflect clinical impact. First element typically 0 (no toxicity). Example: c(0, 0.5, 1.0, 1.5) for Grade 0 and 1, Grade 2, Grade 3, Grade 4.

res.weight

Numeric vector of efficacy response weights. Length must equal nrow(effprob). Should be non-decreasing and reflect clinical benefit. First element typically 0 (no response). Example: c(0, 0.25, 1.0, 3.0) for PD, SD, PR, CR.

phi

Numeric target for normalized equivalent toxicity score (nETS). Should be calibrated for weighted scores, not binary probabilities.

phi1

Numeric lower boundary for nETS. Doses with nETS <= phi1 considered under-dosed for toxicity. Default phi*0.1.

phi2

Numeric upper boundary for nETS. Doses with nETS >= phi2 trigger de-escalation. Default phi*1.4.

delta

Numeric target for normalized equivalent efficacy score (nEES). Should reflect desired level of clinical benefit.

delta1

Numeric minimum threshold for nEES. Doses below this considered sub-therapeutic. Default delta*0.6.

alpha.T1

Numeric value specifying the probability that a toxicity outcome occurs in the late half of the toxicity assessment window. Used for event time generation. Default is 0.5.

alpha.E1

Numeric value specifying the probability that an efficacy outcome occurs in the late half of the efficacy assessment window. Used for event time generation. Default is 0.5.

tau.T

Numeric value specifying the toxicity assessment window in days.

tau.E

Numeric value specifying the efficacy assessment window in days.

te.corr

Numeric value between -1 and 1 specifying the correlation between toxicity and efficacy, specified as Gaussian copula parameter. Default is 0.2 (weak positive correlation).

gen.event.time

Character string specifying the distribution for generating event times. Options are "weibull" (default) or "uniform". A bivariate Gaussian copula model is used to jointly generate the time to first ordinal toxicity and efficacy outcome, where the marginal distributions are set to Weibull distribution when gen.event.time="weibull", and uniform distribution when gen.event.time="uniform".

accrual

Numeric value specifying the accrual rate (days), which is the average number of days between patient enrollments. Lower values indicate faster accrual.

gen.enroll.time

Character string specifying the distribution for enrollment times. Options are "uniform" (default) or "exponential". Uniform distribution is used when gen.enroll.time="uniform", and exponential distribution is used when gen.enroll.time="exponential".

stopping.npts

Integer specifying the maximum number of patients per dose for early study termination. If the number of patients at the current dose reaches this criteria, the study stops the enrollment and is terminated. Default is size.cohort*n.cohort.

stopping.prob.T

Numeric value between 0 and 1 specifying the early study termination threshold for toxicity. If P(nETS > phi) > stopping.prob.T, the dose levels are eliminated from the investigation. Default is 0.95.

stopping.prob.E

Numeric value between 0 and 1 specifying the early study termination threshold for efficacy. If P(nEES < delta1) > stopping.prob.E, the dose levels are eliminated from the investigation. Default is 0.99.

estpt.method

Character string specifying the method for estimating efficacy probabilities. Options: "obs.prob" (observed efficacy probabilitiesrates), or "fp.logistic" (fractional polynomial). Default is "obs.prob".

obd.method

Character string specifying the method for OBD selection. Options: "utility.weighted", "utility.truncated.linear", "utility.scoring", or "max.effprob" (default).

w1

Numeric value specifying the weight for toxicity-efficacy trade-off in "utility.weighted" method. Default is 0.33.

w2

Numeric value specifying the penalty weight for toxic doses in "utility.weighted" method. Default is 1.09.

plow.ast

Numeric value specifying the lower toxicity threshold for "utility.truncated.linear" method. Default is phi1.

pupp.ast

Numeric value specifying the upper toxicity threshold for "utility.truncated.linear" method. Default is phi2.

qlow.ast

Numeric value specifying the lower efficacy threshold for "utility.truncated.linear" method. Default is delta1/2.

qupp.ast

Numeric value specifying the upper efficacy threshold for "utility.truncated.linear" method. Default is delta.

psi00

Numeric value specifying the utility score for (toxicity=no, efficacy=no) in "utility.scoring" method. Default is 40.

psi11

Numeric value specifying the utility score for (toxicity=yes, efficacy=yes) in "utility.scoring" method. Default is 60.

n.sim

Integer specifying the number of simulated trials. Default is 1000. Higher values provide more stable operating characteristics.

seed.sim

Integer specifying the random seed for reproducible results. Default is 100.

Details

Key Advantages:

1. Ordinal Outcome Modeling: Instead of binary toxicity/efficacy, the design uses:

  • Toxicity categories: e.g., None, Mild, Moderate, Severe

  • Efficacy categories: e.g., No Response, Partial Response, Complete Response

  • Weighted scoring: Different severity levels receive different weights

  • Normalized equivalent scores: nETS (toxicity) and nEES (efficacy)

2. Enhanced Information Utilization: The design captures more granular clinical information by considering:

  • Grade 2 toxicity as different from Grade 4 toxicity

  • Partial response as different from complete response

  • Clinically meaningful gradations within traditional binary endpoints

3. Flexible Weighting Schemes: Users can specify custom weights reflecting clinical importance:

  • sev.weight: Toxicity severity weights (e.g., 0, 0.5, 1.0, 1.5)

  • res.weight: Efficacy response weights (e.g., 0, 0.25, 1.0, 3.0)

Statistical Methodology:

Equivalent Toxicity/Efficacy Scores:

The design converts ordinal outcomes to continuous scores:

  • ETS (Equivalent Toxicity Score): Weighted sum of toxicity categories

  • EES (Equivalent Efficacy Score): Weighted sum of efficacy categories

  • Normalization: Scores divided by maximum possible weight (nETS, nEES)

  • Decision making: Uses normalized scores with same boundaries as binary BOIN-ET

Time-to-Event Integration: Combines ordinal scoring with time-to-event methodology:

  • Events can occur at different times within assessment windows

  • Partial information from censored observations

Matrix Input Structure: Probability matrices define outcome distributions:

  • toxprob: Matrix where rows = toxicity categories, columns = doses

  • effprob: Matrix where rows = efficacy categories, columns = doses

  • Row sums should equal 1 (probability distributions)

  • Allows complex, realistic outcome scenarios

References

  • Takeda, K., Yamaguchi, Y., Taguri, M., & Morita, S. (2023). TITE-gBOIN-ET: Time-to-event generalized Bayesian optimal interval design to accelerate dose-finding accounting for ordinal graded efficacy and toxicity outcomes. Biometrical Journal, 65(7), e2200265.

  • Yamaguchi, Y., Takeda, K., Yoshida, S., & Maruo, K. (2024). Optimal biological dose selection in dose-finding trials with model-assisted designs based on efficacy and toxicity: a simulation study. Journal of Biopharmaceutical Statistics, 34(3), 379-393.

See Also

tite.boinet for binary outcome version, gboinet for non-time-to-event ordinal version, obd.select for dose selection methods, utility.weighted, utility.truncated.linear, utility.scoring for utility functions.

Examples

Run this code
# Example: CAR-T therapy with graded CRS and response levels
# Scenario: 4 dose levels with detailed toxicity/efficacy grading

n.dose      <- 4
start.dose  <- 1
size.cohort <- 6  # Larger cohorts for complex outcomes
n.cohort    <- 8

# Toxicity categories: None, Mild CRS, Moderate CRS, Severe CRS
# Higher doses increase severe CRS probability
toxprob <- rbind(
  c(0.85, 0.70, 0.50, 0.30),  # No CRS
  c(0.10, 0.20, 0.25, 0.25),  # Mild CRS
  c(0.04, 0.08, 0.20, 0.30),  # Moderate CRS
  c(0.01, 0.02, 0.05, 0.15)   # Severe CRS
)

# Efficacy categories: No response, Partial remission, Complete remission, MRD-negative
# Strong dose-response relationship
effprob <- rbind(
  c(0.70, 0.45, 0.25, 0.15),  # No response
  c(0.25, 0.35, 0.35, 0.25),  # Partial remission
  c(0.04, 0.15, 0.30, 0.40),  # Complete remission
  c(0.01, 0.05, 0.10, 0.20)   # MRD-negative CR
)

# Clinical severity weights
sev.weight <- c(0.0, 0.3, 1.0, 2.5)    # Severe CRS heavily weighted
res.weight <- c(0.0, 0.5, 2.0, 4.0)    # Strong preference for deep responses

# CAR-T appropriate parameters
phi   <- 0.40  # Accept moderate weighted toxicity
delta <- 0.80  # Target substantial weighted efficacy

# Extended assessment for immune effects
tau.T   <- 84   # 12 weeks for CRS resolution
tau.E   <- 168  # 24 weeks for response assessment
accrual <- 14   # Bi-weekly enrollment

# Delayed and correlated outcomes
alpha.T1 <- 0.4  # Earlier CRS onset
alpha.E1 <- 0.8  # Much delayed responses
te.corr  <- 0.4  # Moderate positive correlation

results_cart <- tite.gboinet(
  n.dose = n.dose, start.dose = start.dose,
  size.cohort = size.cohort, n.cohort = n.cohort,
  toxprob = toxprob, effprob = effprob,
  sev.weight = sev.weight, res.weight = res.weight,
  phi = phi, delta = delta,
  alpha.T1 = alpha.T1, alpha.E1 = alpha.E1,
  tau.T = tau.T, tau.E = tau.E,
  te.corr = te.corr, accrual = accrual,
  estpt.method = "obs.prob",
  obd.method = "utility.weighted",
  w1 = 0.5, w2 = 1.5,  # Balance with strong toxicity penalty
  n.sim = 40
)

# Display normalized equivalent scores
cat("Normalized Equivalent Toxicity Scores (nETS):\\n")
print(results_cart$nETS)
cat("Normalized Equivalent Efficacy Scores (nEES):\\n")
print(results_cart$nEES)

cat("OBD Selection Probabilities:\\n")
print(results_cart$prop.select)

Run the code above in your browser using DataLab