Git Product home page Git Product logo

ph2rand's Introduction

ph2rand

Randomized Phase II Oncology Trials with Bernoulli Outcomes

Description

ph2rand provides functions to assist with the design of randomized comparative phase II oncology trials that assume their primary outcome variable is Bernoulli distributed. Specifically, support is provided to (a) perform a sample size calculation when using one of several published designs (Jung, 2008; Jung and Sargent, 2014; Kepner, 2010; Litwin et al, 2017, Shan et al, 2013), (b) evaluate the operating characteristics of a given design (both analytically and via simulation), and (c) produce informative plots.

Getting started

You can install the the latest development version of ph2rand, available from GitHub, with

devtools::install_github("mjg211/ph2rand")

An introductory example of how to make use of the package’s core functionality can be found below. For further help, please see the package vignettes or email [email protected].

Example: Two-stage designs

We demonstrate functionality for two-stage designs, with the approach for single-stage designs being similar. First, find a two-stage design from Jung (2008) for the default parameters

des_jung <- des_two_stage()

Then examine its required sample size in each arm, in each stage

des_jung$nC
#> [1] 17 17
des_jung$nE
#> [1] 17 17

Next, look at its key operating characteristics

des_jung$opchar
#> # A tibble: 2 x 13
#>     piC   piE `P(pi)` `ESS(pi)` `SDSS(pi)` `MSS(pi)` `E1(pi)` `E2(pi)` `F1(pi)`
#>   <dbl> <dbl>   <dbl>     <dbl>      <dbl>     <dbl>    <dbl>    <dbl>    <dbl>
#> 1   0.1   0.1  0.0702      47.0       16.5        34        0   0.0702   0.617 
#> 2   0.1   0.3  0.813       64.7       10.1        68        0   0.813    0.0972
#> # … with 4 more variables: `F2(pi)` <dbl>, `S1(pi)` <dbl>, `S2(pi)` <dbl>, `max
#> #   N` <int>

Compare this to the equivalent design from Litwin et al (2017)

des_litwin_et_al <- des_two_stage(type  = "sat",
                                  nCmax = 20L)
des_litwin_et_al$nC
#> [1] 10 10
des_litwin_et_al$nE
#> [1] 10 10
des_litwin_et_al$opchar
#> # A tibble: 2 x 13
#>     piC   piE `P(pi)` `ESS(pi)` `SDSS(pi)` `MSS(pi)` `E1(pi)` `E2(pi)` `F1(pi)`
#>   <dbl> <dbl>   <dbl>     <dbl>      <dbl>     <dbl>    <dbl>    <dbl>    <dbl>
#> 1   0.1   0.1   0.100      25.2       8.79        20        0    0.100    0.739
#> 2   0.1   0.3   0.804      36.9       7.20        40        0    0.804    0.153
#> # … with 4 more variables: `F2(pi)` <dbl>, `S1(pi)` <dbl>, `S2(pi)` <dbl>, `max
#> #   N` <int>

Now to that from Shan (2013)

des_shan_et_al <- des_two_stage(type  = "barnard",
                                nCmax = 40L)
des_shan_et_al$nC
#> [1] 17 17
des_shan_et_al$nE
#> [1] 17 17
des_shan_et_al$opchar
#> # A tibble: 2 x 13
#>     piC   piE `P(pi)` `ESS(pi)` `SDSS(pi)` `MSS(pi)` `E1(pi)` `E2(pi)` `F1(pi)`
#>   <dbl> <dbl>   <dbl>     <dbl>      <dbl>     <dbl>    <dbl>    <dbl>    <dbl>
#> 1   0.1   0.1  0.0968      47.0       16.5        34        0   0.0968   0.617 
#> 2   0.1   0.3  0.800       64.7       10.1        68        0   0.800    0.0977
#> # … with 4 more variables: `F2(pi)` <dbl>, `S1(pi)` <dbl>, `S2(pi)` <dbl>, `max
#> #   N` <int>

And finally that from Jung and Sargent (2014)

des_jung_sargent <- des_two_stage(type  = "fisher")
des_jung_sargent$nC
#> [1] 22 22
des_jung_sargent$nE
#> [1] 22 22
des_jung_sargent$opchar
#> # A tibble: 2 x 13
#>     piC   piE `P(pi)` `ESS(pi)` `SDSS(pi)` `MSS(pi)` `E1(pi)` `E2(pi)` `F1(pi)`
#>   <dbl> <dbl>   <dbl>     <dbl>      <dbl>     <dbl>    <dbl>    <dbl>    <dbl>
#> 1   0.1   0.1  0.0530      61.5       21.5        44        0   0.0530   0.602 
#> 2   0.1   0.3  0.808       85.2       10.7        88        0   0.808    0.0627
#> # … with 4 more variables: `F2(pi)` <dbl>, `S1(pi)` <dbl>, `S2(pi)` <dbl>, `max
#> #   N` <int>

We can then readily find the terminal points of any of these designs, along with their probability mass functions and operating characteristics for any true response rates. For example, consider two scenarios given by

pi <- rbind(c(0.1, 0.1),
            c(0.1, 0.3))

Then find the terminal points, probability mass functions, and operating characteristics (both analytically and via simulation) of the Jung (2008) design with

terminal_jung <- terminal(des_jung)
terminal_jung$terminal
#> # A tibble: 1,344 x 7
#>       xC    xE    mC    mE statistic decision            k    
#>    <int> <int> <int> <int>     <int> <fct>               <fct>
#>  1     0     0    17    17         0 Do not reject       1    
#>  2     0     1    17    17         1 Continue to stage 2 1    
#>  3     0     2    17    17         2 Continue to stage 2 1    
#>  4     0     3    17    17         3 Continue to stage 2 1    
#>  5     0     4    17    17         4 Continue to stage 2 1    
#>  6     0     5    17    17         5 Continue to stage 2 1    
#>  7     0     6    17    17         6 Continue to stage 2 1    
#>  8     0     7    17    17         7 Continue to stage 2 1    
#>  9     0     8    17    17         8 Continue to stage 2 1    
#> 10     0     9    17    17         9 Continue to stage 2 1    
#> # … with 1,334 more rows
pmf_jung      <- pmf(des_jung, pi)
pmf_jung$pmf
#> # A tibble: 2,382 x 10
#>      piC   piE    xC    xE    mC    mE statistic decision      k     `f(x,m|pi)`
#>    <dbl> <dbl> <int> <int> <int> <int>     <int> <fct>         <fct>       <dbl>
#>  1   0.1   0.1     0     0    17    17         0 Do not reject 1          0.0278
#>  2   0.1   0.1     1     0    17    17        -1 Do not reject 1          0.0525
#>  3   0.1   0.1     1     1    17    17         0 Do not reject 1          0.0992
#>  4   0.1   0.1     2     0    17    17        -2 Do not reject 1          0.0467
#>  5   0.1   0.1     2     1    17    17        -1 Do not reject 1          0.0882
#>  6   0.1   0.1     2     2    17    17         0 Do not reject 1          0.0784
#>  7   0.1   0.1     3     0    17    17        -3 Do not reject 1          0.0259
#>  8   0.1   0.1     3     1    17    17        -2 Do not reject 1          0.0490
#>  9   0.1   0.1     3     2    17    17        -1 Do not reject 1          0.0436
#> 10   0.1   0.1     3     3    17    17         0 Do not reject 1          0.0242
#> # … with 2,372 more rows
opchar_jung   <- opchar(des_jung, pi)
opchar_jung$opchar
#> # A tibble: 2 x 13
#>     piC   piE `P(pi)` `ESS(pi)` `SDSS(pi)` `MSS(pi)` `E1(pi)` `E2(pi)` `F1(pi)`
#>   <dbl> <dbl>   <dbl>     <dbl>      <dbl>     <dbl>    <dbl>    <dbl>    <dbl>
#> 1   0.1   0.1  0.0702      47.0       16.5        34        0   0.0702   0.617 
#> 2   0.1   0.3  0.813       64.7       10.1        68        0   0.813    0.0972
#> # … with 4 more variables: `F2(pi)` <dbl>, `S1(pi)` <dbl>, `S2(pi)` <dbl>, `max
#> #   N` <int>
sim_jung      <- sim(des_jung, pi)
sim_jung$sim
#> # A tibble: 2 x 13
#>     piC   piE `P(pi)` `ESS(pi)` `SDSS(pi)` `MSS(pi)` `E1(pi)` `E2(pi)` `F1(pi)`
#>   <dbl> <dbl>   <dbl>     <dbl>      <dbl>     <dbl>    <dbl>    <dbl>    <dbl>
#> 1   0.1   0.1  0.0727      47.0       16.5        34        0   0.0727   0.617 
#> 2   0.1   0.3  0.815       64.7       10.0        68        0   0.815    0.0961
#> # … with 4 more variables: `F2(pi)` <dbl>, `S1(pi)` <dbl>, `S2(pi)` <dbl>, `max
#> #   N` <int>

Finally, we can plot various factors relating to the designs. For example, plot the terminal points of the Jung (2008) design (with their associated decisions), along with the probability of rejecting the null hypothesis when the response probabilities are equal in the two arms or when the difference in the response probabilities is the chosen treatment effect

plot(des_jung)

See the package vignettes for further details.

References

Jung SH (2008) Randomized phase II trials with a prospective control. Stat Med 27(4):568–83. DOI: 10.1002/sim.2961. PMID: 17573688.

Jung SH, Sargent DJ (2014) Randomized phase II clinical trials. J Biopharm Stat 24(4):802–16. DOI: 10.1080/10543406.2014.901343. PMID: 24697589.

Kepner JL (2010) On group sequential designs comparing two binomial proportions. J Biopharm Stat 20(1):145–59. DOI: 10.1080/10543400903280621. PMID: 20077254.

Litwin S, Basickes S, Ross EA (2017) Two-sample binary phase 2 trials with low type I error and low sample size. Stat Med 36(9):1383–94. DOI: 10.1002/sim.7226. PMID: 28118686.

Shan G, Ma C, Hutson AD, Wilding GE (2013) Randomized two-stage phase II clinical trial designs based on Barnard’s exact test. J Biopharm Stat 23(5):1081–90. DOI: 10.1080/10543406.2013.813525. PMID: 23957517.

ph2rand's People

Contributors

mjg211 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.