This method continues a dose-finding trial until a safety dose has been given to n patients. Once that condition is met, it delegates dose selelcting and stopping responsibility to its parent dose selector, whatever that might be. This class is greedy in that it meets its own needs before asking any other selectors higher in the chain what they want. Thus, different behaviours may be achieved by nesting dose selectors in different orders. See examples.

try_rescue_dose(parent_selector_factory, n, dose)

Arguments

parent_selector_factory

Object of type selector_factory.

n

Continue at least until there are n at a dose.

dose

index of rescue dose-level to try in extremis.

Value

an object of type selector_factory that can fit a dose-finding model to outcomes.

Examples

skeleton <- c(0.05, 0.1, 0.25, 0.4, 0.6)
target <- 0.25

# This model will demand the lowest dose is tried in at least two patients
# before the trial is stopped for excess toxicity
model1 <- get_dfcrm(skeleton = skeleton, target = target) %>%
  stop_when_too_toxic(dose = 1, tox_threshold = 0.35, confidence = 0.8) %>%
  try_rescue_dose(dose = 1, n = 2)

# In contrast, this model will stop for excess toxicity without trying dose 1
model2 <- get_dfcrm(skeleton = skeleton, target = target) %>%
  stop_when_too_toxic(dose = 1, tox_threshold = 0.35, confidence = 0.8)

# For non-toxic outcomes, both designs will continue at sensible doses:
fit1 <- model1 %>% fit('2NNN')
fit1 %>% recommended_dose()
#> [1] 4
fit1 %>% continue()
#> [1] TRUE

fit2 <- model2 %>% fit('2NNN')
fit2 %>% recommended_dose()
#> [1] 4
fit2 %>% continue()
#> [1] TRUE

# For toxic outcomes, the design 1 will use dose 1 before stopping is allowed
fit1 <- model1 %>% fit('2TTT')
fit1 %>% recommended_dose()
#> [1] 1
fit1 %>% continue()
#> [1] TRUE

# For toxic outcomes, however, design 2 will stop despite dose 1 being
# untested:
fit2 <- model2 %>% fit('2TTT')
fit2 %>% recommended_dose()
#> [1] NA
fit2 %>% continue()
#> [1] FALSE

# After dose 1 is given the requisite number of times, dose recommendation
# and stopping revert to being determined by the underlying dose selector:
fit1 <- model1 %>% fit('2TTT 1T')
fit1 %>% recommended_dose()
#> [1] 1
fit1 %>% continue()
#> [1] TRUE

fit1 <- model1 %>% fit('2TTT 1TT')
fit1 %>% recommended_dose()
#> [1] NA
fit1 %>% continue()
#> [1] FALSE