Class providing object with methods for fitting a GP model. Allows for different kernel and trend functions to be used. The object is an R6 object with many methods that can be called.
`gpkm()` is equivalent to `GauPro_kernel_model$new()`, but is easier to type and gives parameter autocomplete suggestions.
Format
R6Class object.
Value
Object of R6Class with methods for fitting GP model.
Methods
new(X, Z, corr="Gauss", verbose=0, separable=T, useC=F, useGrad=T, parallel=T, nug.est=T, ...)This method is used to create object of this class with
XandZas the data.update(Xnew=NULL, Znew=NULL, Xall=NULL, Zall=NULL, restarts = 0, param_update = T, nug.update = self$nug.est)This method updates the model, adding new data if given, then running optimization again.
Public fields
XDesign matrix
ZResponses
NNumber of data points
DDimension of data
nug.minMinimum value of nugget
nug.maxMaximum value of the nugget.
nug.estShould the nugget be estimated?
nugValue of the nugget, is estimated unless told otherwise
param.estShould the kernel parameters be estimated?
verbose0 means nothing printed, 1 prints some, 2 prints most.
useGradShould grad be used?
useCShould C code be used?
parallelShould the code be run in parallel?
parallel_coresHow many cores are there? By default it detects.
kernelThe kernel to determine the correlations.
trendThe trend.
mu_hatXPredicted trend value for each point in X.
s2_hatVariance parameter estimate
KCovariance matrix
KcholCholesky factorization of K
KinvInverse of K
Kinv_Z_minus_mu_hatXK inverse times Z minus the predicted trend at X.
restartsNumber of optimization restarts to do when updating.
normalizeShould the inputs be normalized?
normalize_meanIf using normalize, the mean of each column.
normalize_sdIf using normalize, the standard deviation of each column.
optimizerWhat algorithm should be used to optimize the parameters.
track_optimShould it track the parameters evaluated while optimizing?
track_optim_inputsIf track_optim is TRUE, this will keep a list of parameters evaluated. View them with plot_track_optim.
track_optim_devIf track_optim is TRUE, this will keep a vector of the deviance values calculated while optimizing parameters. View them with plot_track_optim.
formulaFormula
convert_formula_dataList for storing data to convert data using the formula
Methods
Method new()
Create kernel_model object
Usage
GauPro_kernel_model$new(
X,
Z,
kernel,
trend,
verbose = 0,
useC = TRUE,
useGrad = TRUE,
parallel = FALSE,
parallel_cores = "detect",
nug = 1e-06,
nug.min = 1e-08,
nug.max = 100,
nug.est = TRUE,
param.est = TRUE,
restarts = 0,
normalize = FALSE,
optimizer = "L-BFGS-B",
track_optim = FALSE,
formula,
data,
...
)Arguments
XMatrix whose rows are the input points
ZOutput points corresponding to X
kernelThe kernel to use. E.g., Gaussian$new().
trendTrend to use. E.g., trend_constant$new().
verboseAmount of stuff to print. 0 is little, 2 is a lot.
useCShould C code be used when possible? Should be faster.
useGradShould the gradient be used?
parallelShould code be run in parallel? Make optimization faster but uses more computer resources.
parallel_coresWhen using parallel, how many cores should be used?
nugValue for the nugget. The starting value if estimating it.
nug.minMinimum allowable value for the nugget.
nug.maxMaximum allowable value for the nugget.
nug.estShould the nugget be estimated?
param.estShould the kernel parameters be estimated?
restartsHow many optimization restarts should be used when estimating parameters?
normalizeShould the data be normalized?
optimizerWhat algorithm should be used to optimize the parameters.
track_optimShould it track the parameters evaluated while optimizing?
formulaFormula for the data if giving in a data frame.
dataData frame of data. Use in conjunction with formula.
...Not used
Method predict()
Predict for a matrix of points
Usage
GauPro_kernel_model$predict(
XX,
se.fit = F,
covmat = F,
split_speed = F,
mean_dist = FALSE,
return_df = TRUE
)Arguments
XXpoints to predict at
se.fitShould standard error be returned?
covmatShould covariance matrix be returned?
split_speedShould the matrix be split for faster predictions?
mean_distShould the error be for the distribution of the mean?
return_dfWhen returning se.fit, should it be returned in a data frame? Otherwise it will be a list, which is faster.
Method pred()
Predict for a matrix of points
Usage
GauPro_kernel_model$pred(
XX,
se.fit = F,
covmat = F,
split_speed = F,
mean_dist = FALSE,
return_df = TRUE
)Arguments
XXpoints to predict at
se.fitShould standard error be returned?
covmatShould covariance matrix be returned?
split_speedShould the matrix be split for faster predictions?
mean_distShould the error be for the distribution of the mean?
return_dfWhen returning se.fit, should it be returned in a data frame? Otherwise it will be a list, which is faster.
Method pred_one_matrix()
Predict for a matrix of points
Usage
GauPro_kernel_model$pred_one_matrix(
XX,
se.fit = F,
covmat = F,
return_df = FALSE,
mean_dist = FALSE
)Arguments
XXpoints to predict at
se.fitShould standard error be returned?
covmatShould covariance matrix be returned?
return_dfWhen returning se.fit, should it be returned in a data frame? Otherwise it will be a list, which is faster.
mean_distShould the error be for the distribution of the mean?
Method pred_var_after_adding_points_sep()
Predict variance reductions after adding each point separately
Method plot()
Plot the object
Method cool1Dplot()
Make cool 1D plot
Method plot1D()
Make 1D plot
Method plotmarginal()
Plot marginal. For each input, hold all others at a constant value and adjust it along it's range to see how the prediction changes.
Method plot_track_optim()
If track_optim, this will plot the parameters in the order they were evaluated.
Method optim()
Optimize parameters
Usage
GauPro_kernel_model$optim(
restarts = self$restarts,
n0 = 5 * self$D,
param_update = T,
nug.update = self$nug.est,
parallel = self$parallel,
parallel_cores = self$parallel_cores
)Arguments
restartsNumber of restarts to do
n0This many starting parameters are chosen and evaluated. The best ones are used as the starting points for optimization.
param_updateShould parameters be updated?
nug.updateShould nugget be updated?
parallelShould restarts be done in parallel?
parallel_coresIf running parallel, how many cores should be used?
Method optimRestart()
Run a single optimization restart.
Usage
GauPro_kernel_model$optimRestart(
start.par,
start.par0,
param_update,
nug.update,
optim.func,
optim.grad,
optim.fngr,
lower,
upper,
jit = T,
start.par.i
)Arguments
start.parStarting parameters
start.par0Starting parameters
param_updateShould parameters be updated?
nug.updateShould nugget be updated?
optim.funcFunction to optimize.
optim.gradGradient of function to optimize.
optim.fngrFunction that returns the function value and its gradient.
lowerLower bounds for optimization
upperUpper bounds for optimization
jitIs jitter being used?
start.par.iStarting parameters for this restart
Method update()
Update the model. Should only give in (Xnew and Znew) or (Xall and Zall).
Usage
GauPro_kernel_model$update(
Xnew = NULL,
Znew = NULL,
Xall = NULL,
Zall = NULL,
restarts = self$restarts,
param_update = self$param.est,
nug.update = self$nug.est,
no_update = FALSE
)Arguments
XnewNew X values to add.
ZnewNew Z values to add.
XallAll X values to be used. Will replace existing X.
ZallAll Z values to be used. Will replace existing Z.
restartsNumber of optimization restarts.
param_updateAre the parameters being updated?
nug.updateIs the nugget being updated?
no_updateAre no parameters being updated?
Method deviance()
Calculate the deviance.
Method deviance_grad()
Calculate the gradient of the deviance.
Usage
GauPro_kernel_model$deviance_grad(
params = NULL,
kernel_update = TRUE,
X = self$X,
nug = self$nug,
nug.update,
nuglog,
trend_params = NULL,
trend_update = TRUE
)Arguments
paramsKernel parameters
kernel_updateIs the kernel being updated? If yes, it's part of the gradient.
XInput matrix
nugNugget
nug.updateIs the nugget being updated? If yes, it's part of the gradient.
nuglogLog of the nugget.
trend_paramsTrend parameters
trend_updateIs the trend being updated? If yes, it's part of the gradient.
Method deviance_fngr()
Calculate the deviance along with its gradient.
Usage
GauPro_kernel_model$deviance_fngr(
params = NULL,
kernel_update = TRUE,
X = self$X,
nug = self$nug,
nug.update,
nuglog,
trend_params = NULL,
trend_update = TRUE
)Arguments
paramsKernel parameters
kernel_updateIs the kernel being updated? If yes, it's part of the gradient.
XInput matrix
nugNugget
nug.updateIs the nugget being updated? If yes, it's part of the gradient.
nuglogLog of the nugget.
trend_paramsTrend parameters
trend_updateIs the trend being updated? If yes, it's part of the gradient.
Method grad()
Calculate gradient
Method hessian()
Calculate Hessian
Method sample()
Sample at rows of XX
Method optimize_fn()
Optimize any function of the GP prediction over the valid input space. If there are inputs that should only be optimized over a discrete set of values, specify `mopar` for all parameters. Factor inputs will be handled automatically.
Arguments
fnFunction to optimize
lowerLower bounds to search within
upperUpper bounds to search within
n0Number of points to evaluate in initial stage
minimizeAre you trying to minimize the output?
fn_argsArguments to pass to the function fn.
grGradient of function to optimize.
fngrFunction that returns list with names elements "fn" for the function value and "gr" for the gradient. Useful when it is slow to evaluate and fn/gr would duplicate calculations if done separately.
moparList of parameters using mixopt
groupevalCan a matrix of points be evaluated? Otherwise just a single point at a time.
Method maxEI()
Find the point that maximizes the expected improvement. If there are inputs that should only be optimized over a discrete set of values, specify `mopar` for all parameters.
Arguments
lowerLower bounds to search within
upperUpper bounds to search within
n0Number of points to evaluate in initial stage
minimizeAre you trying to minimize the output?
epsExploration parameter
dontconvertbackIf data was given in with a formula, should it converted back to the original scale?
EItypeType of EI to calculate. One of "EI", "Augmented", or "Corrected"
moparList of parameters using mixopt
usegradShould the gradient be used when optimizing? Can make it faster.
Method maxqEI()
Find the multiple points that maximize the expected improvement. Currently only implements the constant liar method.
Arguments
npointsNumber of points to add
methodMethod to use for setting the output value for the points chosen as a placeholder. Can be one of: "CL" for constant liar, which uses the best value seen yet; or "pred", which uses the predicted value, also called the Believer method in literature.
lowerLower bounds to search within
upperUpper bounds to search within
n0Number of points to evaluate in initial stage
minimizeAre you trying to minimize the output?
epsExploration parameter
EItypeType of EI to calculate. One of "EI", "Augmented", or "Corrected"
dontconvertbackIf data was given in with a formula, should it converted back to the original scale?
moparList of parameters using mixopt
Examples
n <- 12
x <- matrix(seq(0,1,length.out = n), ncol=1)
y <- sin(2*pi*x) + rnorm(n,0,1e-1)
gp <- GauPro_kernel_model$new(X=x, Z=y, kernel="gauss")
gp$predict(.454)
#> [1] 0.2895153
gp$plot1D()
gp$cool1Dplot()
n <- 200
d <- 7
x <- matrix(runif(n*d), ncol=d)
f <- function(x) {x[1]*x[2] + cos(x[3]) + x[4]^2}
y <- apply(x, 1, f)
gp <- GauPro_kernel_model$new(X=x, Z=y, kernel=Gaussian)
#> * nug is at minimum value after optimizing. Check the fit to see it this caused a bad fit. Consider changing nug.min. This is probably fine for noiseless data.