This function returns an object that can be used to fit a CRM model using methods provided by the dfcrm package.

Dose selectors are designed to be daisy-chained together to achieve different behaviours. This class is a **resumptive** selector, meaning it carries on when the previous dose selector, where present, has elected not to continue. For example, this allows instances of this class to be preceded by a selector that follows a fixed path in an initial escalation plan, such as that provided by follow_path. In this example, when the observed trial outcomes deviate from that initial plan, the selector following the fixed path elects not to continue and responsibility passes to this class. See Examples.

get_dfcrm(parent_selector_factory = NULL, skeleton, target, ...)



optional object of type selector_factory that is in charge of dose selection before this class gets involved. Leave as NULL to just use CRM from the start.


Dose-toxicity skeleton, a non-decreasing vector of probabilities.


We seek a dose with this probability of toxicity.


Extra args are passed to crm.


an object of type selector_factory that can fit the CRM model to outcomes.


Cheung, K. 2019. dfcrm: Dose-Finding by the Continual Reassessment Method. R package version 0.2-2.1.

Cheung, K. 2011. Dose Finding by the Continual Reassessment Method. Chapman and Hall/CRC. ISBN 9781420091519

O’Quigley J, Pepe M, Fisher L. Continual reassessment method: a practical design for phase 1 clinical trials in cancer. Biometrics. 1990;46(1):33-48. doi:10.2307/2531628


skeleton <- c(0.05, 0.1, 0.25, 0.4, 0.6) target <- 0.25 model1 <- get_dfcrm(skeleton = skeleton, target = target) # By default, dfcrm fits the empiric model: outcomes <- '1NNN 2NTN' model1 %>% fit(outcomes) %>% recommended_dose()
#> [1] 2
# But we can provide extra args to get_dfcrm that are than passed onwards to # the call to dfcrm::crm to override the defaults. For example, if we want # the one-parameter logistic model: model2 <- get_dfcrm(skeleton = skeleton, target = target, model = 'logistic') model2 %>% fit(outcomes) %>% recommended_dose()
#> [1] 2
# dfcrm does not offer a two-parameter logistic model but other classes do. # We can use an initial dose-escalation plan, a pre-specified path that # should be followed until trial outcomes deviate, at which point the CRM # model takes over. For instance, if we want to use two patients at each of # the first three doses in the absence of toxicity, irrespective the model's # advice, we would run: model1 <- follow_path('1NN 2NN 3NN') %>% get_dfcrm(skeleton = skeleton, target = target) # If outcomes match the desired path, the path is followed further: model1 %>% fit('1NN 2N') %>% recommended_dose()
#> [1] 2
# But when the outcomes diverge: model1 %>% fit('1NN 2T') %>% recommended_dose()
#> [1] 1
# Or the pre-specified path comes to an end: model1 %>% fit('1NN 2NN 3NN') %>% recommended_dose()
#> [1] 5
# The CRM model takes over.