
Locate the next design point for a (D)GP emulator or a bundle of (D)GP emulators using PEI
Source:R/pei.R
pei.RdThis function searches from a candidate set to locate the next design point(s) to be added to a (D)GP emulator or a bundle of (D)GP emulators using the Pseudo Expected Improvement (PEI), see the reference below.
Usage
pei(object, x_cand, ...)
# S3 method for class 'gp'
pei(
object,
x_cand,
pseudo_points = NULL,
batch_size = 1,
M = 50,
workers = 1,
...
)
# S3 method for class 'dgp'
pei(
object,
x_cand,
pseudo_points = NULL,
batch_size = 1,
M = 50,
workers = 1,
aggregate = NULL,
...
)
# S3 method for class 'bundle'
pei(
object,
x_cand,
pseudo_points = NULL,
batch_size = 1,
M = 50,
workers = 1,
aggregate = NULL,
...
)Arguments
- object
can be one of the following:
the S3 class
gp.the S3 class
dgp.the S3 class
bundle.
- x_cand
a matrix (with each row being a design point and column being an input dimension) that gives a candidate set from which the next design point(s) are determined. If
objectis an instance of thebundleclass,x_candcould also be a list with the length equal to the number of emulators contained in theobject. Each slot inx_candis a matrix that gives a candidate set for each emulator included in the bundle. See Note section below for further information.- ...
any arguments (with names different from those of arguments used in
pei()) that are used byaggregateorgp()(for emulating the ES-LOO errors) can be passed here.- pseudo_points
an optional matrix (with columns being input dimensions) that gives the pseudo input points for PEI calculations. See the reference below for further details about the pseudo points. When
objectis an instance of thebundleclass,pseudo_pointscan also be a list with the length equal to the number of emulators in the bundle. Each element in the list is a matrix that gives the the pseudo input points for the corresponding emulator in the bundle. Defaults toNULL. Whenpei()is used indesign(),pseudo_pointswill be automatically generated bydesign().- batch_size
an integer that gives the number of design points to be chosen. Defaults to
1.- M
the size of the conditioning set for the Vecchia approximation in the criterion calculation. This argument is only used if the emulator
objectwas constructed under the Vecchia approximation. Defaults to50.- workers
the number of processes to be used for the criterion calculation. If set to
NULL, the number of processes is set tomax physical cores available %/% 2. Defaults to1.- aggregate
an R function that aggregates scores of the PEI across different output dimensions (if
objectis an instance of thedgpclass) or across different emulators (ifobjectis an instance of thebundleclass). The function should be specified in the following basic form:the first argument is a matrix representing scores. The rows of the matrix correspond to different design points. The number of columns of the matrix equals to:
the emulator output dimension if
objectis an instance of thedgpclass; orthe number of emulators contained in
objectifobjectis an instance of thebundleclass.
the output should be a vector that gives aggregations of scores at different design points.
Set to
NULLto disable the aggregation. Defaults toNULL.
Value
If
objectis an instance of thegpclass, a vector is returned with the length equal tobatch_size, giving the positions (i.e., row numbers) of next design points fromx_cand.If
objectis an instance of thedgpclass, a matrix is returned with row number equal tobatch_sizeand column number equal to one (ifaggregateis notNULL) or the output dimension (ifaggregateisNULL), giving positions (i.e., row numbers) of next design points fromx_candto be added to the DGP emulator across different outputs.If
objectis an instance of thebundleclass, a matrix is returned with row number equal tobatch_sizeand column number equal to the number of emulators in the bundle, giving positions (i.e., row numbers) of next design points fromx_candto be added to individual emulators.
Details
See further examples and tutorials at https://mingdeyu.github.io/dgpsi-R/.
Note
The column order of the first argument of
aggregatemust be consistent with the order of emulator output dimensions (ifobjectis an instance of thedgpclass), or the order of emulators placed inobjectifobjectis an instance of thebundleclass;If
x_candis supplied as a list whenobjectis an instance ofbundleclass and aaggregatefunction is provided, the matrices inx_candmust have common rows (i.e., the candidate sets of emulators in the bundle have common input locations) so theaggregatefunction can be applied.The function is only applicable to DGP emulators without likelihood layers.
References
Mohammadi, H., Challenor, P., Williamson, D., & Goodfellow, M. (2022). Cross-validation-based adaptive sampling for Gaussian process models. SIAM/ASA Journal on Uncertainty Quantification, 10(1), 294-316.
Examples
if (FALSE) { # \dontrun{
# load packages and the Python env
library(lhs)
library(dgpsi)
# construct a 1D non-stationary function
f <- function(x) {
sin(30*((2*x-1)/2-0.4)^5)*cos(20*((2*x-1)/2-0.4))
}
# generate the initial design
X <- maximinLHS(10,1)
Y <- f(X)
# training a 2-layered DGP emulator with the global connection off
m <- dgp(X, Y, connect = F)
# generate a candidate set
x_cand <- maximinLHS(200,1)
# locate the next design point using PEI
next_point <- pei(m, x_cand = x_cand)
X_new <- x_cand[next_point,,drop = F]
# obtain the corresponding output at the located design point
Y_new <- f(X_new)
# combine the new input-output pair to the existing data
X <- rbind(X, X_new)
Y <- rbind(Y, Y_new)
# update the DGP emulator with the new input and output data and refit
m <- update(m, X, Y, refit = TRUE)
# plot the LOO validation
plot(m)
} # }