Usage
openCohort(opening, cohort, data, dose, ...)
# S4 method for class 'OpeningMinDose'
openCohort(opening, cohort, data, dose, ...)
# S4 method for class 'OpeningMinCohorts'
openCohort(opening, cohort, data, dose, ...)
# S4 method for class 'OpeningNone'
openCohort(opening, cohort, data, dose, ...)
# S4 method for class 'OpeningMinResponses'
openCohort(opening, cohort, data, dose, ...)
# S4 method for class 'OpeningList'
openCohort(opening, cohort, data, dose, summary_fun, ...)
# S4 method for class 'OpeningAll'
openCohort(opening, cohort, data, dose, ...)
# S4 method for class 'OpeningAny'
openCohort(opening, cohort, data, dose, ...)Arguments
- opening
(
Opening)
opening rule to be applied.- cohort
(
int)
backfill cohort index.- data
(
Data)
current trial data.- dose
(
numeric)
the recommended next best dose.- ...
further arguments (not used).
- summary_fun
(
function)
to apply to the list of results (e.g.,allorany). Only used forOpeningListand its subclasses.
Functions
openCohort(OpeningMinDose): method forOpeningMinDoseclass.openCohort(OpeningMinCohorts): method forOpeningMinCohortsclass.openCohort(OpeningNone): method forOpeningNoneclass, which never opens a cohort, i.e. the trial design will not use backfilling.openCohort(OpeningMinResponses): method forOpeningMinResponsesclass.openCohort(OpeningList): method forOpeningListclass.openCohort(OpeningAll): method forOpeningAllclass. ReturnsTRUEif ALL opening criteria are satisfied.openCohort(OpeningAny): method forOpeningAnyclass. ReturnsTRUEif ANY opening criteria are satisfied.
Examples
# Create a simple data object with some dose information
data <- Data(
x = c(0.1, 0.5, 1.5, 3, 6, 10, 10, 10),
y = c(0, 0, 0, 0, 0, 0, 1, 0),
cohort = c(1, 2, 3, 4, 5, 6, 6, 6),
doseGrid = c(0.1, 0.5, 1.5, 3, 6, seq(from = 10, to = 80, by = 2))
)
#> Used default patient IDs!
# Define the opening rule: open backfill cohorts when dose is at least 5
my_opening <- OpeningMinDose(min_dose = 5)
# Check if the first backfill cohort can be opened when the
# cohort has a dose 6, i.e. larger than 5.
# Note that `dose` is not used in this rule.
can_open <- openCohort(my_opening, cohort = 5, data = data, dose = 7)
can_open
#> [1] TRUE
# Check if the first backfill cohort can be opened when the
# cohort has a dose 3, i.e. smaller than 5.
# (should return FALSE because dose < min_dose)
can_open_low <- openCohort(my_opening, cohort = 4, data = data, dose = 15)
can_open_low
#> [1] FALSE
# Create a data object with multiple cohorts
data <- Data(
x = c(0.1, 0.5, 1.5, 3, 6, 10, 10, 10),
y = c(0, 0, 0, 0, 0, 0, 1, 0),
cohort = c(0, 1, 2, 3, 4, 5, 5, 5),
doseGrid = c(0.1, 0.5, 1.5, 3, 6, seq(from = 10, to = 80, by = 2))
)
#> Used default patient IDs!
# Define the opening rule: open backfill cohorts after at least 3 cohorts
my_opening <- OpeningMinCohorts(min_cohorts = 3)
# Check if a backfill cohort can be opened
# Current number of cohorts is 6, so it should open (6 >= 3)
can_open <- openCohort(my_opening, cohort = 1, data = data, dose = 25)
can_open
#> [1] TRUE
# Create an OpeningNone object which never opens backfill cohorts
opening <- OpeningNone()
# Create sample trial data
data <- Data(
x = c(20, 30, 40, 50),
y = c(0, 0, 1, 0),
cohort = c(1, 2, 3, 4),
doseGrid = seq(10, 100, by = 10)
)
#> Used default patient IDs!
# Create dose recommendation
dose <- 60
# Check if backfill cohort should be opened for cohort 5
# OpeningNone always returns FALSE
should_open <- openCohort(opening, cohort = 5, data = data, dose = dose)
print(should_open) # FALSE
#> [1] FALSE
# Create an OpeningMinResponses object requiring 2 responses at the cohort dose
opening <- OpeningMinResponses(min_responses = 2, include_lower_doses = FALSE)
# Create sample trial data with responses at different dose levels
data <- Data(
x = c(10, 10, 20, 20, 20, 30, 30, 30),
y = c(0, 1, 0, 1, 0, 1, 1, 0),
response = c(1, 1, NA, 0, 1, NA, 1, 0),
cohort = c(1, 1, 2, 2, 2, 3, 3, 3),
doseGrid = seq(10, 100, by = 10)
)
#> Used default patient IDs!
# Check if backfill cohort can be opened at dose 20
# At dose 20, there is 1 response
should_open <- openCohort(opening, cohort = 2, data = data, dose = 30)
print(should_open) # FALSE
#> [1] FALSE
# Check at dose 10 where there are 2 responses
should_open_2 <- openCohort(opening, cohort = 1, data = data, dose = 30)
print(should_open_2) # TRUE
#> [1] TRUE
# Create sample trial data
data <- Data(
x = c(0.1, 0.5, 1.5, 3, 6, 10, 10, 10),
y = c(0, 0, 0, 0, 0, 0, 1, 0),
cohort = c(1, 2, 3, 4, 5, 6, 6, 6),
doseGrid = c(0.1, 0.5, 1.5, 3, 6, seq(from = 10, to = 80, by = 2))
)
#> Used default patient IDs!
# Create opening criteria:
# - opening1: open if dose >= 10
# - opening2: open if at least 5 cohorts have been treated
opening1 <- OpeningMinDose(min_dose = 10)
opening2 <- OpeningMinCohorts(min_cohorts = 5)
# Combine with AND logic: both must be true
opening_all <- opening1 & opening2
# Test if backfill cohort 7 can be opened
# Cohort 6 dose is 10 (>= 10: TRUE), max cohort is 6 (>= 5: TRUE), so AND is TRUE
should_open <- openCohort(opening_all, cohort = 6, data = data, dose = 20)
print(should_open) # TRUE
#> [1] TRUE
# Test if backfill cohort at dose 6 can be opened
# Cohort 4 dose is 3 (>= 10: FALSE), so AND is FALSE
should_open_2 <- openCohort(opening_all, cohort = 4, data = data, dose = 20)
print(should_open_2) # FALSE
#> [1] FALSE
# Create sample trial data
data <- Data(
x = c(0.1, 0.5, 1.5, 3, 6, 10, 10, 10),
y = c(0, 0, 0, 0, 0, 0, 1, 0),
cohort = c(1, 2, 3, 4, 5, 6, 6, 6),
doseGrid = c(0.1, 0.5, 1.5, 3, 6, seq(from = 10, to = 80, by = 2))
)
#> Used default patient IDs!
# Create opening criteria:
# - opening1: open if dose >= 20
# - opening2: open if at least 5 cohorts have been treated
opening1 <- OpeningMinDose(min_dose = 20)
opening2 <- OpeningMinCohorts(min_cohorts = 5)
# Combine with OR logic: at least one must be true
opening_any <- opening1 | opening2
# Test if backfill cohort 7 can be opened at dose 10
# Cohort 6 dose is 10 (>= 20: FALSE), max cohort is 6 (>= 5: TRUE), so OR is TRUE
should_open <- openCohort(opening_any, cohort = 6, data = data, dose = 20)
print(should_open) # TRUE
#> [1] TRUE
# Test with a different scenario:
# It does not matter which cohort index we give, because
# the number of cohorts is already above 5.
should_open_2 <- openCohort(opening_any, cohort = 1, data = data, dose = 25)
print(should_open_2) # TRUE
#> [1] TRUE
