## first example calculate MED optimal design for one Emax model
## fullModel should be a list containing all model parameters
fMod <- list(emax = c(0, 2/3, 25))
doses <- c(0, 18.75, 150)
weights <- 1 # just one model
## by default calculates MED optimal design
des1 <- calcOptDesign(fMod, weights, doses, clinRel=0.2)
des2 <- calcOptDesign(fMod, weights, doses, type = "Dopt")
des3 <- calcOptDesign(fMod, weights, doses, clinRel=0.2, type = "MED&Dopt")
## illustrating the different optimizers
des1 <- calcOptDesign(fMod, weights, doses, clinRel=0.2, method="Nelder-Mead")
des2 <- calcOptDesign(fMod, weights, doses, clinRel=0.2, method="nlminb")
des3 <- calcOptDesign(fMod, weights, doses, clinRel=0.2, method="solnp")
## assume additional constraints (only available for method = solnp)
des4 <- calcOptDesign(fMod, weights, doses, clinRel=0.2, lowbnd = rep(0.2,3),
uppbnd = rep(0.45, 3), method="solnp")
## assume only 20 patients are to be allocated (exact calculation possible)
des5 <- calcOptDesign(fMod, weights, doses, n2 = 20, clinRel=0.2,
method="exact")
## assume the minimum block-size is 5
des6 <- calcOptDesign(fMod, weights, doses, n2 = 20, clinRel=0.2,
method="exact", control = list(blockSize = 5))
## larger candidate model set
doses <- c(0, 10, 25, 50, 100, 150)
mods <- list(linear = NULL, emax = 25, exponential = 85,
linlog = NULL, logistic = c(50, 10.8811))
## now use fullMod function to produce the fullModel list
## from the 'usual' models list
fMod <- fullMod(mods, doses, base=0, maxEff=0.4, off=1)
weights <- rep(1/5, 5)
desMED <- calcOptDesign(fMod, weights, doses, clinRel=0.2, scal=200,
off=1, method = "nlminb")
desDopt <- calcOptDesign(fMod, weights, doses, scal=200, off=1,
type = "Dopt")
desMix <- calcOptDesign(fMod, weights, doses, clinRel=0.2, scal=200,
off=1, type = "MED&Dopt")
## allocated 100 persons according to desMix design
rndDesign(desMix, 100)
################################################################################
#### using already allocated patients
mods <- list(betaMod = c(0.33, 2.31))
doses <- c(0, 0.49, 25.2, 108.07, 150)
fMod <- fullMod(mods, doses, base=0, maxEff=0.4, scal=200)
weights <- 1
## no previously allocated patients
des <- calcOptDesign(fMod, weights, doses, clinRel=0.1, scal=200,
control=list(maxit=1000))
## now use previously allocated patients
nold <- c(45, 50, 0, 0, 0)
des2 <- calcOptDesign(fMod, weights, doses, clinRel=0.1, n2=30, scal=200,
control=list(maxit=1000), nold=nold)
## the calculated overall design is the same as the 1-step design
(30*des2$design+nold)/(30+sum(nold))
des$design
## same with exact optimizer
des <- calcOptDesign(fMod, weights, doses, clinRel=0.1, scal=200,
control=list(blockSize = 10), n2=120, method = "exact")
nold <- c(10, 10, 0, 0, 0)
des2 <- calcOptDesign(fMod, weights, doses, clinRel=0.1, n2=100, scal=200,
control=list(blockSize = 10), nold=nold, method = "exact")
(des2$design*100+nold)/(100+sum(nold))
########################################################################
#### user defined criterion function (D-optimality for cubic polynomial)
CubeCrit <- function(w, doses){
X <- cbind(1, doses, doses^2, doses^3)
CVinv <- crossprod(X*w)
-log(det(CVinv))
}
calcOptDesign(doses = c(0,0.05,0.2,0.6,1),
type = "userCrit", userCrit = CubeCrit,
method = "nlminb")
Run the code above in your browser using DataLab