Description Usage Arguments Details Value Note See Also Examples
View source: R/3-UserMinimaxFunctions.R
Finds Robust designs or optimal in-average designs for linear and nonlinear models.
It is useful when a set of different vectors of initial estimates
along with a discrete probability measure
are available for the unknown model parameters.
It is a discrete version of bayes
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
formula |
A linear or nonlinear model |
predvars |
A vector of characters. Denotes the predictors in the |
parvars |
A vector of characters. Denotes the unknown parameters in the |
family |
A description of the response distribution and the link function to be used in the model.
This can be a family function, a call to a family function or a character string naming the family.
Every family function has a link argument allowing to specify the link function to be applied on the response variable.
If not specified, default links are used. For details see |
lx |
Vector of lower bounds for the predictors. Should be in the same order as |
ux |
Vector of upper bounds for the predictors. Should be in the same order as |
iter |
Maximum number of iterations. |
k |
Number of design points. Must be at least equal to the number of model parameters to avoid singularity of the FIM. |
prob |
A vector of the probability measure π associated with each row of |
parset |
A matrix that provides the vector of initial estimates for the model parameters, i.e. support of π.
Every row is one vector ( |
fimfunc |
A function. Returns the FIM as a |
ICA.control |
ICA control parameters. For details, see |
sens.control |
Control Parameters for Calculating the ELB. For details, see |
initial |
A matrix of the initial design points and weights that will be inserted into the initial solutions (countries) of the algorithm.
Every row is a design, i.e. a concatenation of |
npar |
Number of model parameters. Used when |
plot_3d |
Which package should be used to plot the sensitivity (derivative) function for models with two predictors.
Either |
x |
Vector of the design (support) points. See 'Details' of |
crtfunc |
(Optional) a function that specifies an arbitrary criterion. It must have especial arguments and output. See 'Details' of |
sensfunc |
(Optional) a function that specifies the sensitivity function for |
Let Θ be a set of initial estimates for the unknown parameters. A robust criterion is evaluated at the elements of Θ weighted by a probability measure π as follows:
B(ξ, Π) = intergation over Θ Ψ(ξ, θ)π(θ) dθ.
A robust design ξ* maximizes B(ξ, π) over the space of all designs.
When the model is given via formula
,
columns of parset
must match the parameters introduced
in parvars
.
Otherwise, when the model is introduced via fimfunc
,
columns of parset
must match the argument param
in fimfunc
.
To verify the optimality of the output design by the general equivalence theorem,
the user can either plot
the results or set checkfreq
in ICA.control
to Inf
. In either way, the function sensrobust
is called for verification.
One can also adjust the tuning parameters in ICA.control
to set a stopping rule
based on the general equivalence theorem. See 'Examples' below.
an object of class minimax
that is a list including three sub-lists:
arg
A list of design and algorithm parameters.
evol
A list of length equal to the number of iterations that stores
the information about the best design (design with least criterion value)
of each iteration. evol[[iter]]
contains:
iter | Iteration number. | |
x | Design points. | |
w | Design weights. | |
min_cost | Value of the criterion for the best imperialist (design). | |
mean_cost | Mean of the criterion values of all the imperialists. | |
sens | An object of class 'sensminimax' . See below. |
|
param | Vector of parameters. | |
empires
A list of all the empires of the last iteration.
alg
A list with following information:
nfeval | Number of function evaluations. It does not count the function evaluations from checking the general equivalence theorem. | |
nlocal | Number of successful local searches. | |
nrevol | Number of successful revolutions. | |
nimprove | Number of successful movements toward the imperialists in the assimilation step. | |
convergence | Stopped by 'maxiter' or 'equivalence' ? |
|
method
A type of optimal designs used.
design
Design points and weights at the final iteration.
out
A data frame of design points, weights, value of the criterion for the best imperialist (min_cost), and Mean of the criterion values of all the imperialistsat each iteration (mean_cost).
The list sens
contains information about the design verification by the general equivalence theorem. See sensminimax
for more details.
It is given every ICA.control$checkfreq
iterations
and also the last iteration if ICA.control$checkfreq >= 0
. Otherwise, NULL
.
param
is a vector of parameters that is the global minimum of
the minimax criterion or the global maximum of the standardized maximin criterion over the parameter space, given the current x
, w
.
When a continuous prior distribution for the unknown model parameters is available, use bayes
.
When only one initial estimates of the unknown model parameters is available (Θ has only one element), use locally
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | # Finding a robust design for the two-parameter logistic model
# See how we set a stopping rule.
# The ELB is computed every checkfreq = 30 iterations
# The optimization stops when the ELB is larger than stoptol = .95
res1 <- robust(formula = ~1/(1 + exp(-b *(x - a))),
predvars = c("x"), parvars = c("a", "b"),
family = binomial(),
lx = -5, ux = 5, prob = rep(1/4, 4),
parset = matrix(c(0.5, 1.5, 0.5, 1.5, 4.0, 4.0, 5.0, 5.0), 4, 2),
iter = 1, k =3,
ICA.control = list(stop_rule = "equivalence",
stoptol = .95, checkfreq = 30))
## Not run:
res1 <- update(res1, 100)
# stops at iteration 51
## End(Not run)
## Not run:
res1.1 <- robust(formula = ~1/(1 + exp(-b *(x - a))),
predvars = c("x"), parvars = c("a", "b"),
family = binomial(),
lx = -5, ux = 5, prob = rep(1/4, 4),
parset = matrix(c(0.5, 1.5, 0.5, 1.5, 4.0, 4.0, 5.0, 5.0), 4, 2),
x = c(-3, 0, 3),
iter = 150, k =3)
plot(res1.1)
# not optimal
## End(Not run)
###################################
# user-defined optimality criterion
##################################
# When the model is defined by the formula interface
# A-optimal design for the 2PL model.
# the criterion function must have argument x, w fimfunc and the parameters defined in 'parvars'.
# use 'fimfunc' as a function of the design points x, design weights w and
# the 'parvars' parameters whenever needed.
Aopt <-function(x, w, a, b, fimfunc){
sum(diag(solve(fimfunc(x = x, w = w, a = a, b = b))))
}
## the sensitivtiy function
# xi_x is a design that put all its mass on x in the definition of the sensitivity function
# x is a vector of design points
Aopt_sens <- function(xi_x, x, w, a, b, fimfunc){
fim <- fimfunc(x = x, w = w, a = a, b = b)
M_inv <- solve(fim)
M_x <- fimfunc(x = xi_x, w = 1, a = a, b = b)
sum(diag(M_inv %*% M_x %*% M_inv)) - sum(diag(M_inv))
}
res2 <- robust(formula = ~1/(1 + exp(-b * (x-a))), predvars = "x",
parvars = c("a", "b"), family = "binomial",
lx = -3, ux = 3,
iter = 1, k = 4,
crtfunc = Aopt,
sensfunc = Aopt_sens,
prob = c(.25, .5, .25),
parset = matrix(c(-2, 0, 2, 1.25, 1.25, 1.25), 3, 2),
ICA.control = list(checkfreq = 50, stoptol = .999,
stop_rule = "equivalence",
rseed = 1))
## Not run:
res2 <- update(res2, 500)
## End(Not run)
# robust c-optimal design
# example from Chaloner and Larntz (1989), Figure 3, but robust design
c_opt <-function(x, w, a, b, fimfunc){
gam <- log(.95/(1-.95))
M <- fimfunc(x = x, w = w, a = a, b = b)
c <- matrix(c(1, -gam * b^(-2)), nrow = 1)
B <- t(c) %*% c
sum(diag(B %*% solve(M)))
}
c_sens <- function(xi_x, x, w, a, b, fimfunc){
gam <- log(.95/(1-.95))
M <- fimfunc(x = x, w = w, a = a, b = b)
M_inv <- solve(M)
M_x <- fimfunc(x = xi_x, w = 1, a = a, b = b)
c <- matrix(c(1, -gam * b^(-2)), nrow = 1)
B <- t(c) %*% c
sum(diag(B %*% M_inv %*% M_x %*% M_inv)) - sum(diag(B %*% M_inv))
}
res3 <- robust(formula = ~1/(1 + exp(-b * (x-a))), predvars = "x",
parvars = c("a", "b"), family = "binomial",
lx = -1, ux = 1,
parset = matrix(c(0, 7, .2, 6.5), 2, 2, byrow = TRUE),
prob = c(.5, .5),
iter = 1, k = 3,
crtfunc = c_opt, sensfunc = c_sens,
ICA.control = list(rseed = 1, checkfreq = Inf))
## Not run:
res3 <- update(res3, 300)
## End(Not run)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.