library(apts.doe)
library(AlgDesign)
library(rsm)
library(dplyr)
library(plotly)
Point exchange algorithm
- Most common optimisation algorithm for optimal design
- Swaps between current design and a candidate list of possible design
points
- Can be applied with most optimality criteria, including
D-optimality
- Implemented in package
AlgDesign
We will study three examples of using AlgDesign
to find
designs under linear models \[
Y = X\beta + \epsilon\,,
\] with \(X\) the model matrix,
\(\beta\) the \(p\)-vector of unknown model coefficients
and \(\epsilon\) an \(n\)-vector of identically and independently
normally distributed random errors, each having variance \(\sigma^2\).
A \(D\)-optimal design maximises the
determinant of the information matrix \(X^T
X\).
Example 1: one-factor quadratic regression
D-optimal design for the regression model
\[
Y_i = \beta_0 + \beta_1 x_i + \beta_2 x_i^2 + \epsilon_i
\]
dopt1
$D
[1] 0.5088144
$A
[1] 3.139587
$Ge
[1] 0.941
$Dea
[1] 0.939
$design
$rows
[1] 1 2 3 50 51 52 99 100 101
The function returns
D
: the value of the determinant of normalised
information matrix (divided by \(n\))
raised to the power \(1/p\)
A
: the value of the trace of the inverse of the
information matrix, divided by \(p\)
Ge
and Dea
: the \(G\)- and \(D\)-efficiencies relative to the
theoretical optimal design (which may not be realisable)
rows
: the rows of the candidate list that correspond to
the optimal design.
Example 2: a response surface design
A pharmaceutical industry experiment (Owen et al., 2001, Organic
Process Research and Development) investigated four factors in \(n=30\) runs. We will find a \(V\)-optimal design for this experiment,
assuming
\[
-2 \le x_1, x_2, x_3, x_4 \le 2\,.
\]
Note that AlgDesign
refers to \(V\)-optimality as \(I\)-optimality (\(I\) for integrated variance).
cand.list <- expand.grid(x1 = seq(-2, 2, length = 5), x2 = seq(-2, 2, length = 5),
x3 = seq(-2, 2, length = 5), x4 = seq(-2, 2, length = 5))
dopt2 <- optFederov(~ quad(x1, x2, x3, x4), data = cand.list, nTrials = 30,
criterion = "I")
dopt2
$D
[1] 3.952834
$A
[1] 0.7326728
$I
[1] 11.25339
$Ge
[1] 0.585
$Dea
[1] 0.492
$design
$rows
[1] 1 13 25 55 63 71 101 103 115 121 250 255 273 303 311 313 315 361 373 396 476 503 511 515 551 573 575
[28] 605 613 621
It is interesting to compare the performance of this design under the
various optimality criteria with the original design used in the study.
This was a central composite design, or CCD, a common
multi-factor design for fitting regression models. To do this we
generate a CCD using the rsm
package.
ccd_design
run.order std.order x1.as.is x2.as.is x3.as.is x4.as.is
1 1 1 -1 -1 -1 -1
2 2 2 1 -1 -1 -1
3 3 3 -1 1 -1 -1
4 4 4 1 1 -1 -1
5 5 5 -1 -1 1 -1
6 6 6 1 -1 1 -1
7 7 7 -1 1 1 -1
8 8 8 1 1 1 -1
9 9 9 -1 -1 -1 1
10 10 10 1 -1 -1 1
11 11 11 -1 1 -1 1
12 12 12 1 1 -1 1
13 13 13 -1 -1 1 1
14 14 14 1 -1 1 1
15 15 15 -1 1 1 1
16 16 16 1 1 1 1
17 17 17 0 0 0 0
18 18 18 0 0 0 0
19 19 19 0 0 0 0
20 20 20 0 0 0 0
21 21 21 0 0 0 0
22 22 22 0 0 0 0
23 1 1 -2 0 0 0
24 2 2 2 0 0 0
25 3 3 0 -2 0 0
26 4 4 0 2 0 0
27 5 5 0 0 -2 0
28 6 6 0 0 2 0
29 7 7 0 0 0 -2
30 8 8 0 0 0 2
Data are stored in coded form using these coding formulas ...
x1 ~ x1.as.is
x2 ~ x2.as.is
x3 ~ x3.as.is
x4 ~ x4.as.is
Example 3: a multi-factor experiment with dependent factor
settings
McNamara et al. (2005, Tech. Report) described an experiment to
investigate the relationship between chemical yield and choice of
solvent.
- 13 solvents available for the experiment
- characterised by values of three chemical descriptors:
dielectric constant, dipole moment and water solubility
- Replacing a 13-level qualiative factor (solvent) with three
quantitative variables
- combinations of the descriptors which are feasible for the
experiment are determined by the list of available solvents.
solvents <- read.csv("solvents.csv", header = T)
solvents
\(D\)-optimal design to estimate a
quadratic regression model with \(n=20\)
- the design problem is really picking the replication of each
solvent
optFederov
requires the candidate list to have more
rows than \(n\), so we use three
replicates of the solvent list
dopt3 <- optFederov(~ quad(dc, dp, ws), data = rbind(solvents, solvents, solvents),
nTrials = 20, criterion = "D")
with(dopt3$design, {
dopt3$design[order(solvent), ]
})
Notice that not all of the solvents have been selected in the design
(so some have replication 0).
Compare this design to the \(D\)-optimal design that would be found if
we assumed all possible combinations of descriptor values were possible
(or a least a much wider range). That is, what design would be chosen if
we were not restricted to our list of 13 solvents?
descrip.list <- expand.grid(dc = seq(-1, 1, len = 9), dp = seq(-1, 1, len = 9),
ws = seq(-1, 1, len = 9))
dopt3b <- optFederov(~ quad(dc, dp, ws), data = descrip.list, nTrials = 20,
criterion = "D")
with(dopt3b$design, {
dopt3b$design[order(dc, dp, ws), ]
})
This design has only one point in the interior of the design space
(at the centre point), unlike the design constructed from the original
candidate list. It has no replication.
dopt3b$design %>% count(dc, dp, ws)
round(100 * (dopt3$D/dopt3b$D) ^ (1 / 10))
[1] 82
Original design has low efficiency but is realisable (the solvents
exist!), whereas we do not know if the combinations of the descriptors
in the second design correspond to actual solvents.
plot_ly(dopt3$design %>% count(dc, dp, ws), x = ~dc, y = ~dp, z = ~ws, type = "scatter3d", mode = "markers", color = ~n)
plot_ly(dopt3b$design, x = ~dc, y = ~dp, z = ~ws, type = "scatter3d", mode = "markers")
LS0tCnRpdGxlOiAiQVBUUyBEZXNpZ24gb2YgRXhwZXJpbWVudHMgMjAyMiIKc3VidGl0bGU6ICJPcHRpbWFsIGRlc2lnbiB2aWEgYWxnb3JpdGhtaWMgc2VhcmNoIgphdXRob3I6ICJEYXZlIFdvb2RzIgpkYXRlOiAiTGFzdCBjb21waWxlZCBvbiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCICVZJylgIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCiAKYGBge3IgbGlicmFyaWVzLCBtZXNzYWdlID0gRiwgd2FybmluZyA9IEZ9CmxpYnJhcnkoYXB0cy5kb2UpCmxpYnJhcnkoQWxnRGVzaWduKQpsaWJyYXJ5KHJzbSkKbGlicmFyeShkcGx5cikKbGlicmFyeShwbG90bHkpCmBgYAoKIyMgUG9pbnQgZXhjaGFuZ2UgYWxnb3JpdGhtCgogLSBNb3N0IGNvbW1vbiBvcHRpbWlzYXRpb24gYWxnb3JpdGhtIGZvciBvcHRpbWFsIGRlc2lnbgogLSBTd2FwcyBiZXR3ZWVuIGN1cnJlbnQgZGVzaWduIGFuZCBhIGNhbmRpZGF0ZSBsaXN0IG9mIHBvc3NpYmxlIGRlc2lnbiBwb2ludHMKIC0gQ2FuIGJlIGFwcGxpZWQgd2l0aCBtb3N0IG9wdGltYWxpdHkgY3JpdGVyaWEsIGluY2x1ZGluZyBELW9wdGltYWxpdHkKIC0gSW1wbGVtZW50ZWQgaW4gcGFja2FnZSBgQWxnRGVzaWduYAoKV2Ugd2lsbCBzdHVkeSB0aHJlZSBleGFtcGxlcyBvZiB1c2luZyBgQWxnRGVzaWduYCB0byBmaW5kIGRlc2lnbnMgdW5kZXIgbGluZWFyIG1vZGVscwokJApZID0gWFxiZXRhICsgXGVwc2lsb25cLCwKJCQKd2l0aCAkWCQgdGhlIG1vZGVsIG1hdHJpeCwgJFxiZXRhJCB0aGUgJHAkLXZlY3RvciBvZiB1bmtub3duIG1vZGVsIGNvZWZmaWNpZW50cyBhbmQgJFxlcHNpbG9uJCBhbiAkbiQtdmVjdG9yIG9mIGlkZW50aWNhbGx5IGFuZCBpbmRlcGVuZGVudGx5IG5vcm1hbGx5IGRpc3RyaWJ1dGVkIHJhbmRvbSBlcnJvcnMsIGVhY2ggaGF2aW5nIHZhcmlhbmNlICRcc2lnbWFeMiQuIAoKQSAkRCQtb3B0aW1hbCBkZXNpZ24gbWF4aW1pc2VzIHRoZSBkZXRlcm1pbmFudCBvZiB0aGUgaW5mb3JtYXRpb24gbWF0cml4ICRYXlQgWCQuCgojIyBFeGFtcGxlIDE6IG9uZS1mYWN0b3IgcXVhZHJhdGljIHJlZ3Jlc3Npb24KCkQtb3B0aW1hbCBkZXNpZ24gZm9yIHRoZSByZWdyZXNzaW9uIG1vZGVsCgokJApZX2kgPSBcYmV0YV8wICsgXGJldGFfMSB4X2kgKyBcYmV0YV8yIHhfaV4yICsgXGVwc2lsb25faQokJAoKYGBge3IgZXgxLWFsZ2Rlc30KeCA8LSBzZXEoLTEsIDEsIGxlbmd0aCA9IDEwMSkgIyBjYW5kaWRhdGUgbGlzdApkb3B0MSA8LSBvcHRGZWRlcm92KH4gcXVhZCh4KSwgZGF0YSA9IGMoeCwgeCwgeCksIG5UcmlhbHMgPSA5LCBjcml0ZXJpb24gPSAiRCIpCmRvcHQxCmBgYApUaGUgZnVuY3Rpb24gcmV0dXJucyAKCiAtIGBEYDogdGhlIHZhbHVlIG9mIHRoZSBkZXRlcm1pbmFudCBvZiAqbm9ybWFsaXNlZCogaW5mb3JtYXRpb24gbWF0cml4IChkaXZpZGVkIGJ5ICRuJCkgcmFpc2VkIHRvIHRoZSBwb3dlciAkMS9wJAogLSBgQWA6IHRoZSB2YWx1ZSBvZiB0aGUgdHJhY2Ugb2YgdGhlIGludmVyc2Ugb2YgdGhlIGluZm9ybWF0aW9uIG1hdHJpeCwgZGl2aWRlZCBieSAkcCQgCiAtIGBHZWAgYW5kIGBEZWFgOiB0aGUgJEckLSBhbmQgJEQkLWVmZmljaWVuY2llcyByZWxhdGl2ZSB0byB0aGUgdGhlb3JldGljYWwgb3B0aW1hbCBkZXNpZ24gKHdoaWNoIG1heSBub3QgYmUgcmVhbGlzYWJsZSkKIC0gYHJvd3NgOiB0aGUgcm93cyBvZiB0aGUgY2FuZGlkYXRlIGxpc3QgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBvcHRpbWFsIGRlc2lnbi4KCiMjIEV4YW1wbGUgMjogYSByZXNwb25zZSBzdXJmYWNlIGRlc2lnbgoKQSBwaGFybWFjZXV0aWNhbCBpbmR1c3RyeSBleHBlcmltZW50IChPd2VuIGV0IGFsLiwgMjAwMSwgT3JnYW5pYyBQcm9jZXNzIFJlc2VhcmNoIGFuZCBEZXZlbG9wbWVudCkgaW52ZXN0aWdhdGVkIGZvdXIgZmFjdG9ycyBpbiAkbj0zMCQgcnVucy4gV2Ugd2lsbCBmaW5kIGEgJFYkLW9wdGltYWwgZGVzaWduIGZvciB0aGlzIGV4cGVyaW1lbnQsIGFzc3VtaW5nIAoKJCQKLTIgXGxlIHhfMSwgeF8yLCB4XzMsIHhfNCBcbGUgMlwsLgokJCAKCgpOb3RlIHRoYXQgYEFsZ0Rlc2lnbmAgcmVmZXJzIHRvICRWJC1vcHRpbWFsaXR5IGFzICRJJC1vcHRpbWFsaXR5ICgkSSQgZm9yIGludGVncmF0ZWQgdmFyaWFuY2UpLiAKCmBgYHtyIGV4Mi1hbGdkZXN9CmNhbmQubGlzdCA8LSBleHBhbmQuZ3JpZCh4MSA9IHNlcSgtMiwgMiwgbGVuZ3RoID0gNSksIHgyID0gc2VxKC0yLCAyLCBsZW5ndGggPSA1KSwgCiAgICAgICAgICAgICAgICAgICAgICAgICB4MyA9IHNlcSgtMiwgMiwgbGVuZ3RoID0gNSksIHg0ID0gc2VxKC0yLCAyLCBsZW5ndGggPSA1KSkKZG9wdDIgPC0gb3B0RmVkZXJvdih+IHF1YWQoeDEsIHgyLCB4MywgeDQpLCBkYXRhID0gY2FuZC5saXN0LCBuVHJpYWxzID0gMzAsIAogICAgICAgICAgICAgICAgICAgIGNyaXRlcmlvbiA9ICJJIikKZG9wdDIKYGBgCgpJdCBpcyBpbnRlcmVzdGluZyB0byBjb21wYXJlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGlzIGRlc2lnbiB1bmRlciB0aGUgdmFyaW91cyBvcHRpbWFsaXR5IGNyaXRlcmlhIHdpdGggdGhlIG9yaWdpbmFsIGRlc2lnbiB1c2VkIGluIHRoZSBzdHVkeS4gVGhpcyB3YXMgYSAqY2VudHJhbCBjb21wb3NpdGUgZGVzaWduKiwgb3IgQ0NELCBhIGNvbW1vbiBtdWx0aS1mYWN0b3IgZGVzaWduIGZvciBmaXR0aW5nIHJlZ3Jlc3Npb24gbW9kZWxzLiBUbyBkbyB0aGlzIHdlIGdlbmVyYXRlIGEgQ0NEIHVzaW5nIHRoZSBgcnNtYCBwYWNrYWdlLgoKYGBge3IgZXgyLWV2YWxkZXNpZ259CmNjZF9kZXNpZ24gPC0gY2NkKDQsIG4wID0gYyg2LCAwKSwgcmFuZG9taXplID0gRiwgb25lYmxvY2sgPSBULCBhbHBoYSA9IDIpCmNjZC5ldmFsIDwtIGV2YWwuZGVzaWduKH4gcXVhZCh4MSwgeDIsIHgzLCB4NCksIGRlc2lnbiA9IGRhdGEuZnJhbWUoY2NkX2Rlc2lnbiksIFggPSBjYW5kLmxpc3QpCmNjZC5ldmFsJEkKcm91bmQoMTAwICogZG9wdDIkSS9jY2QuZXZhbCRJKQpgYGAKCiMjIEV4YW1wbGUgMzogYSBtdWx0aS1mYWN0b3IgZXhwZXJpbWVudCB3aXRoIGRlcGVuZGVudCBmYWN0b3Igc2V0dGluZ3MKCk1jTmFtYXJhIGV0IGFsLiAoMjAwNSwgVGVjaC4gUmVwb3J0KSBkZXNjcmliZWQgYW4gZXhwZXJpbWVudCB0byBpbnZlc3RpZ2F0ZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gY2hlbWljYWwgeWllbGQgYW5kIGNob2ljZSBvZiBzb2x2ZW50LgoKIC0gMTMgc29sdmVudHMgYXZhaWxhYmxlIGZvciB0aGUgZXhwZXJpbWVudAogLSBjaGFyYWN0ZXJpc2VkIGJ5IHZhbHVlcyBvZiB0aHJlZSAqY2hlbWljYWwgZGVzY3JpcHRvcnMqOiBkaWVsZWN0cmljIGNvbnN0YW50LCBkaXBvbGUgbW9tZW50IGFuZCB3YXRlciBzb2x1YmlsaXR5CiAtIFJlcGxhY2luZyBhIDEzLWxldmVsIHF1YWxpYXRpdmUgZmFjdG9yIChzb2x2ZW50KSB3aXRoIHRocmVlIHF1YW50aXRhdGl2ZSB2YXJpYWJsZXMKIC0gY29tYmluYXRpb25zIG9mIHRoZSBkZXNjcmlwdG9ycyB3aGljaCBhcmUgZmVhc2libGUgZm9yIHRoZSBleHBlcmltZW50IGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzb2x2ZW50cy4gICAKCmBgYHtyIGV4My1zb2x2ZW50c30Kc29sdmVudHMgPC0gcmVhZC5jc3YoInNvbHZlbnRzLmNzdiIsIGhlYWRlciA9IFQpCnNvbHZlbnRzCmBgYAokRCQtb3B0aW1hbCBkZXNpZ24gdG8gZXN0aW1hdGUgYSBxdWFkcmF0aWMgcmVncmVzc2lvbiBtb2RlbCB3aXRoICRuPTIwJAoKIC0gdGhlIGRlc2lnbiBwcm9ibGVtIGlzIHJlYWxseSBwaWNraW5nIHRoZSByZXBsaWNhdGlvbiBvZiBlYWNoIHNvbHZlbnQKIC0gYG9wdEZlZGVyb3ZgIHJlcXVpcmVzIHRoZSBjYW5kaWRhdGUgbGlzdCB0byBoYXZlIG1vcmUgcm93cyB0aGFuICRuJCwgc28gd2UgdXNlIHRocmVlIHJlcGxpY2F0ZXMgb2YgdGhlIHNvbHZlbnQgbGlzdAoKYGBge3IgZXgzLWRlc2lnbn0KZG9wdDMgPC0gb3B0RmVkZXJvdih+IHF1YWQoZGMsIGRwLCB3cyksIGRhdGEgPSByYmluZChzb2x2ZW50cywgc29sdmVudHMsIHNvbHZlbnRzKSwgCiAgICAgICAgICAgICAgICAgICAgblRyaWFscyA9IDIwLCBjcml0ZXJpb24gPSAiRCIpIAp3aXRoKGRvcHQzJGRlc2lnbiwgewogIGRvcHQzJGRlc2lnbltvcmRlcihzb2x2ZW50KSwgXQp9KQpgYGAKCk5vdGljZSB0aGF0IG5vdCBhbGwgb2YgdGhlIHNvbHZlbnRzIGhhdmUgYmVlbiBzZWxlY3RlZCBpbiB0aGUgZGVzaWduIChzbyBzb21lIGhhdmUgcmVwbGljYXRpb24gMCkuCmBgYHtyIGV4My1jb3VudH0KZG9wdDMkZGVzaWduICU+JSBjb3VudChzb2x2ZW50KQpgYGAKQ29tcGFyZSB0aGlzIGRlc2lnbiB0byB0aGUgJEQkLW9wdGltYWwgZGVzaWduIHRoYXQgd291bGQgYmUgZm91bmQgaWYgd2UgYXNzdW1lZCBhbGwgcG9zc2libGUgY29tYmluYXRpb25zIG9mIGRlc2NyaXB0b3IgdmFsdWVzIHdlcmUgcG9zc2libGUgKG9yIGEgbGVhc3QgYSBtdWNoIHdpZGVyIHJhbmdlKS4gVGhhdCBpcywgd2hhdCBkZXNpZ24gd291bGQgYmUgY2hvc2VuIGlmIHdlIHdlcmUgbm90IHJlc3RyaWN0ZWQgdG8gb3VyIGxpc3Qgb2YgMTMgc29sdmVudHM/CgpgYGB7ciBleDMtZGVzaWduMn0KZGVzY3JpcC5saXN0IDwtIGV4cGFuZC5ncmlkKGRjID0gc2VxKC0xLCAxLCBsZW4gPSA5KSwgZHAgPSBzZXEoLTEsIDEsIGxlbiA9IDkpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzID0gc2VxKC0xLCAxLCBsZW4gPSA5KSkKZG9wdDNiIDwtIG9wdEZlZGVyb3YofiBxdWFkKGRjLCBkcCwgd3MpLCBkYXRhID0gZGVzY3JpcC5saXN0LCBuVHJpYWxzID0gMjAsIAogICAgICAgICAgICAgICAgICAgIGNyaXRlcmlvbiA9ICJEIikKd2l0aChkb3B0M2IkZGVzaWduLCB7CiAgZG9wdDNiJGRlc2lnbltvcmRlcihkYywgZHAsIHdzKSwgXSAgCn0pCmBgYAoKVGhpcyBkZXNpZ24gaGFzIG9ubHkgb25lIHBvaW50IGluIHRoZSBpbnRlcmlvciBvZiB0aGUgZGVzaWduIHNwYWNlIChhdCB0aGUgY2VudHJlIHBvaW50KSwgdW5saWtlIHRoZSBkZXNpZ24gY29uc3RydWN0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgY2FuZGlkYXRlIGxpc3QuIEl0IGhhcyBubyByZXBsaWNhdGlvbi4KCmBgYHtyIGV4My1kZWZmfQpkb3B0M2IkZGVzaWduICU+JSBjb3VudChkYywgZHAsIHdzKQpyb3VuZCgxMDAgKiAoZG9wdDMkRC9kb3B0M2IkRCkgXiAoMSAvIDEwKSkKYGBgCgpPcmlnaW5hbCBkZXNpZ24gaGFzIGxvdyBlZmZpY2llbmN5IGJ1dCBpcyByZWFsaXNhYmxlICh0aGUgc29sdmVudHMgZXhpc3QhKSwgd2hlcmVhcyB3ZSBkbyBub3Qga25vdyBpZiB0aGUgY29tYmluYXRpb25zIG9mIHRoZSBkZXNjcmlwdG9ycyBpbiB0aGUgc2Vjb25kIGRlc2lnbiBjb3JyZXNwb25kIHRvIGFjdHVhbCBzb2x2ZW50cy4KCmBgYHtyIGV4My1wbG90LCBvdXQud2lkdGggPSAiNTAlIn0KcGxvdF9seShkb3B0MyRkZXNpZ24gJT4lIGNvdW50KGRjLCBkcCwgd3MpLCB4ID0gfmRjLCB5ID0gfmRwLCB6ID0gfndzLCB0eXBlID0gInNjYXR0ZXIzZCIsIG1vZGUgPSAibWFya2VycyIsIGNvbG9yID0gfm4pCnBsb3RfbHkoZG9wdDNiJGRlc2lnbiwgeCA9IH5kYywgeSA9IH5kcCwgeiA9IH53cywgdHlwZSA9ICJzY2F0dGVyM2QiLCBtb2RlID0gIm1hcmtlcnMiKQpgYGAKCg==