Maintainer: Annie S. Booth ([email protected])
Performs Bayesian posterior inference for deep Gaussian
processes following Sauer, Gramacy, and Higdon (2023). See Sauer (2023) for
comprehensive methodological details and
https://bitbucket.org/gramacylab/deepgp-ex/ for
a variety of coding examples. Models are trained through MCMC including
elliptical slice sampling of latent Gaussian layers and Metropolis-Hastings
sampling of kernel hyperparameters. Gradient-enhancement and gradient
predictions are offered following Booth (2025). Vecchia approximation for faster
computation is implemented following Sauer, Cooper, and Gramacy
(2023). Optional monotonic warpings are implemented following
Barnett et al. (2025). Downstream tasks include sequential design
through active learning Cohn/integrated mean squared error (ALC/IMSE; Sauer,
Gramacy, and Higdon, 2023), optimization through expected improvement
(EI; Gramacy, Sauer, and Wycoff, 2022), and contour
location through entropy (Booth, Renganathan, and Gramacy,
2025). Models extend up to three layers deep; a one
layer model is equivalent to typical Gaussian process regression.
Incorporates OpenMP and SNOW parallelization and utilizes C/C++ under
the hood.
Run help("deepgp-package") or help(package = "deepgp") for more information.
Sauer, A. (2023). Deep Gaussian process surrogates for computer experiments. Ph.D. Dissertation, Department of Statistics, Virginia Polytechnic Institute and State University. http://hdl.handle.net/10919/114845
Booth, A. S. (2025). Deep Gaussian processes with gradients. (arXiv link coming soon)
Sauer, A., Gramacy, R.B., & Higdon, D. (2023). Active learning for deep Gaussian process surrogates. Technometrics, 65, 4-18. arXiv:2012.08015
Sauer, A., Cooper, A., & Gramacy, R. B. (2023). Vecchia-approximated deep Gaussian processes for computer experiments. Journal of Computational and Graphical Statistics, 32(3), 824-837. arXiv:2204.02904
Gramacy, R. B., Sauer, A. & Wycoff, N. (2022). Triangulation candidates for Bayesian optimization. Advances in Neural Information Processing Systems (NeurIPS), 35, 35933-35945. arXiv:2112.07457
Booth, A., Renganathan, S. A. & Gramacy, R. B. (2025). Contour location for reliability in airfoil simulation experiments using deep Gaussian processes. Annals of Applied Statistics, 19(1), 191-211. arXiv:2308.04420
Barnett, S., Beesley, L. J., Booth, A. S., Gramacy, R. B., & Osthus D. (2025). Monotonic warpings for additive and deep Gaussian processes. Statistics and Computing, 35(3), 65. arXiv:2408.01540
What's new in version 1.2.0?
- Gradients! All gradient implementations come with optional Vecchia approximation.
- Gradient-enhancement is enabled through the
dydxargument infit_one_layerandfit_two_layer(gradient-enhancement is not yet offered for three layer models). Gradient-enhancement requires theexp2kernel. - Setting
grad = TRUEin thepredictfunctions will return posterior predictions of the gradient (one and two layer only). Again, this requires theexp2kernel.
- Gradient-enhancement is enabled through the
- A new
post_samplefunction offers joint posterior draws with optional Vecchia approximation (compared to thepredictfunctions that return summarized posterior moments). - A new
to_vecfunction will convert a non-Vecchia fit to a Vecchia approximated fit. This is helpful when training data sizes are relatively small (not requiring Vecchia) but testing data sizes are large (requiring Vecchia). - Additional user controls.
- The user may now specify the scale (
tau2_wand/ortau2_z) value to use on latent layers using thesettingsargument infit_two_layerandfit_three_layer. - The user may now specify the number of cores to use for Vecchia OpenMP parallelization using
the optional
coresargument in any of the fit functions. If not specified, this defaults tomin(4, maxcores - 1).
- The user may now specify the scale (
- Monotonic warpings are no longer scaled to [0, 1], and they now use an isotropic lengthscale on the outer layer.
- Internal code improvements (external interface is unchanged):
- Vecchia approximation objects and implementation have been streamlined.
- The ordering of covariance parameters as arguments to internal functions has been
unified. They are now always presented in the order:
tau2,theta,g,v. -
- If
true_gis specified, the returned fit object no longer stores an entire vector ofgvalues. The specifiedgvalue is only stored once.
- If
- User-specified hyperparameter priors are now set using a list with the
parameter name first, e.g.,
settings = list(theta = list(alpha = 1, beta = 1), g = list(alpha = 1, beta = 1)). - New warning message if
coresused for SNOW parallelization is greater than the number of providednmcmciterations. If so,coresis overwritten withcores = nmcmc. - Minor bug fix for use of
rand_mvn_vecfunction whenpmx = TRUEand the scale on the latent layer was not equal to 1. - Bug fix for storage of
tau2values within Gibbs sampling. Thanks Parul Patil!
What's new in version 1.1.3?
- Option to force monotonic warpings in the two-layer DGP with the argument
monowarp = TRUEtofit_two_layer. Monotonic warpings trigger separable lengthscales on the outer layer. - Updated default prior values on lengthscales and nugget for noisy settings
(when
true_g = NULL) - Minor bug fix in Gibbs updating of separable lengthscale sampling in
fit_one_layer - Some improvements to default plotting
- Updated package examples and vignette
What's new in version 1.1.2?
- Option for user to specify ordering for Vecchia approximation
(through
ordargument infitfunctions) lite = TRUEpredictions have been sped up- bypassing the
cov(t(mu_t))computation altogether (this is only necessary forlite = FALSE) - removing
d_newcalculations - using
diag_quad_matCpp function more often
- bypassing the
- Expected improvement is now available for Vecchia-approximated fits
- Internally, predict functions have been consolidated (removing hundreds of lines of redundant code)
- Removed internal
clean_predictionfunction as it was no longer needed - Minor bug fixes
- Fixed error in
fit_one_layerwithvecchia = TRUEandsep = TRUEcaused by thearma::mat covmatinitialization in thevecchia.cppfile - Fixed error in
predict.dgp2withreturn_all = TRUE(replacedoutwithobject- thanks Steven Barnett!) - Fixed storage of
llincontinuefunctions (thanks Sebastien Coube!)
- Fixed error in
What's new in version 1.1.1?
- Entropy calculations for contour locating sequential designs are offered through
the specification of an
entropy_limitin any of thepredictfunctions. - In posterior predictions, there is now an option to return point-wise mean and
variance estimates for all MCMC samples through the specification of
return_all = TRUE. - To save on memory and storage,
predictfunctions no longer returns2_smoothorSigma_smooth. If desired, these quantities may be calculated by subtractingtau2 * gfrom the diagonal. - The
vecchia = TRUEoption may now utilize either the Matern (cov = "matern") or squared exponential kernel (cov = "exp2""). - Performance improvements for
cores = 1inpredict,ALC, andIMSEfunctions (helps to avoid a SNOW conflict when running multiple instances on the same machine). - Fit functions now return the outer log likelihood value along with MCMC samples.
Used in trace plots to assess burn-in. - In
fit_two_layer, the intermediate latent layer may now have either a prior mean of zero (default) or a prior mean equal tox(pmx = TRUE). Ifpmxis set to a constant, this will be the scale parameter on the inner Gaussian layer.
What's new in version 1.1.0?
- Package vignette
- Option to specify
sep = TRUEinfit_one_layerto fit a GP with separable/anisotropic lengthscales - Default cores in predict are now 1 (this avoids a conflict when running multiple sessions simultaneously on a single machine)
What's new in version 1.0.1?
- Minor bug fixes/improvements
- New warning message when OpenMP parallelization is not utilized for the Vecchia approximation. This happens when the package is downloaded from CRAN on a Mac. To set up OpenMP, download package source and compile with gcc/g++ instead of clang.
What's new in version 1.0.0?
- Models may now leverage the Vecchia approximation (through the specification of
vecchia = TRUEin fit functions) for faster computation. The speed of this implementation relies on OpenMP parallelization (make sure the-fopenmpflag is present with package installation). - SNOW parallelization now uses less memory/storage
tau2is now calculated at the time of MCMC, not at the time of prediction.
This avoids some extra calculations.
What's new in version 0.3.0?
- The Matern kernel is now the default covariance. The smoothness parameter is
user-adjustable but must be either
v = 0.5,v = 1.5, orv = 2.5(default). The squared exponential kernel is still required for use with ALC and IMSE (setcov = "exp2"in fit functions). - Expected improvement (EI) may now be computed concurrently with predictions.
Set
EI = TRUEinsidepredictcalls. EI calculations are nugget-free and are for minimizing the response (negateyif maximization is desired). - To save memory, hidden layer mappings used in predictions are no longer
stored and returned by default. To store them, set
store_latent = TRUEinside predict.