MCPModGeneral

MCPModGeneral is an extension of the DoseFinding package, streamlining the analysis of non-normal endpoints. Almost all of the functions in the DoseFinding package rely on the user supplying (), the estimated dose-response coefficients, and (S), the variance-covariance matrix of (). However, (S) is difficult to know before-hand, and for functions like powMCT, differ for each alternative model. The MCPModGeneral package does not require the user to supply a matrix for (S) and instead calculates the theoretical variance-covariance matrix for the negative binomial, binomial, and Poisson distributions. Alternatively, the emperical covariance matrices can be estimated via simulation.

Users can also use the MCPModGeneral package to fit the full MCPMod procedure on negative binomial, Poisson, and binomial data, as well as basic survival data. The relevant functions for fitting the models are prepareGen and MCPModGen. The full capabilities of these functions will be explored later in the vignette.

As with the DoseFinding package, the MCPModGeneral package still requires the user to create and specify the potential dose-response curves. The DoseFinding package provides the guesst and Mods functions to create these models, but ultimately, the dose-response curves come from prior knowledge or discussion with clinicians. For the entirety of this vignette, it is assumed that the user is able to construct the potential models. Recall that dose-response curves must be constructed on the same scale as the ANOVA output, meaning if negative binomial data is to be analyzed via a GLM with a log-link, the dose-response curve should represent the log of the means at each dose. The MCPModGeneral package allows usage with the most commonly used links. See the family page from the stats package for a list of the common links.

Installation

You can install the released version of MCPModGeneral from CRAN with:

install.packages("MCPModGeneral")

Example

This is a basic example which shows you how to solve a common problem:

library(MCPModGeneral)
#> Loading required package: DoseFinding
#> Loading required package: lattice
#> Loading required package: mvtnorm
# Analyze the binary migraine data from the DoseFinding package.
data(migraine)
models = Mods(linear = NULL, emax = 1, quadratic = c(-0.004),
              doses = migraine$dose)

powMCTGen(migraine$ntrt, "binomial", "logit",
          Ntype = "actual", altModels = models)
#>    linear      emax quadratic 
#> 0.8637783 0.9893745 0.9148810
sampSizeMCTGen("binomial", "logit", altModels = models, power = 0.8,
               Ntype = "arm", upperN = 30, verbose = TRUE)
#> Iter: 1, N = 45, current value = 0.7357
#> Iter: 2, N = 52, current value = 0.799
#> Iter: 3, N = 56, current value = 0.829
#> Iter: 4, N = 54, current value = 0.8154
#> Iter: 5, N = 53, current value = 0.8067
#> 
#> Using "min" of power
#> Sample size calculation
#> 
#> alRatio: 1 1 1 1 1 1 1 1 
#> Total sample size: 424 
#> Sample size per arm: 53 53 53 53 53 53 53 53 
#> targFunc:

# Now analyze using binomial weights
PFrate <- migraine$painfree/migraine$ntrt
migraine$pfrat = migraine$painfree / migraine$ntrt
MCPModGen("binomial","logit",returnS = TRUE, w = "ntrt", dose = "dose",
   resp = "pfrat", data = migraine, models = models, selModel = "aveAIC",
   Delta = 0.2)
#> $MCPMod
#> MCPMod
#> 
#> Multiple Contrast Test:
#>           t-Stat   adj-p
#> linear     3.703 < 0.001
#> emax       3.636 < 0.001
#> quadratic  3.079 0.00278
#> 
#> Estimated Dose Response Models:
#> linear model
#>     e0  delta 
#> -1.710  0.006 
#> 
#> emax model
#>     e0   eMax   ed50 
#> -2.219  1.387  8.473 
#> 
#> quadratic model
#>     e0     b1     b2 
#> -1.776  0.010  0.000 
#> 
#> Model weights (AIC):
#>    linear      emax quadratic 
#>    0.3388    0.5071    0.1541 
#> 
#> Estimated TD, Delta=0.2
#>    linear      emax quadratic 
#>   33.8758    1.4274   20.9810 
#> 
#> $data
#>    dose       resp
#> 1   0.0 -2.2225424
#> 2   2.5 -1.9459101
#> 3   5.0 -2.0541237
#> 4  10.0 -1.0775589
#> 5  20.0 -1.4469190
#> 6  50.0 -1.2927683
#> 7 100.0 -1.1676052
#> 8 200.0 -0.5663955
#> 
#> $S
#>                 factor(dose)0 factor(dose)2.5 factor(dose)5 factor(dose)10
#> factor(dose)0       0.0852564       0.0000000     0.0000000      0.0000000
#> factor(dose)2.5     0.0000000       0.2857133     0.0000000      0.0000000
#> factor(dose)5       0.0000000       0.0000000     0.2256406      0.0000000
#> factor(dose)10      0.0000000       0.0000000     0.0000000      0.0837766
#> factor(dose)20      0.0000000       0.0000000     0.0000000      0.0000000
#> factor(dose)50      0.0000000       0.0000000     0.0000000      0.0000000
#> factor(dose)100     0.0000000       0.0000000     0.0000000      0.0000000
#> factor(dose)200     0.0000000       0.0000000     0.0000000      0.0000000
#>                 factor(dose)20 factor(dose)50 factor(dose)100
#> factor(dose)0        0.0000000     0.00000000      0.00000000
#> factor(dose)2.5      0.0000000     0.00000000      0.00000000
#> factor(dose)5        0.0000000     0.00000000      0.00000000
#> factor(dose)10       0.0000000     0.00000000      0.00000000
#> factor(dose)20       0.1029412     0.00000000      0.00000000
#> factor(dose)50       0.0000000     0.09103641      0.00000000
#> factor(dose)100      0.0000000     0.00000000      0.09365079
#> factor(dose)200      0.0000000     0.00000000      0.00000000
#>                 factor(dose)200
#> factor(dose)0        0.00000000
#> factor(dose)2.5      0.00000000
#> factor(dose)5        0.00000000
#> factor(dose)10       0.00000000
#> factor(dose)20       0.00000000
#> factor(dose)50       0.00000000
#> factor(dose)100      0.00000000
#> factor(dose)200      0.07464607