# Polynomial Chaos Kriging#

Polynomial Chaos Kriging (PCK) is a new non-intrusive hyprid surrogate model, that incorporates Polynomial Chaos Expansion and Kriging. To capture local variation, Kriging is used as an interpolation technique while PCE is used as a regression-based approach to capture global behavior. It would be logical to describe PCK as a universal Kriging model with a specific trend [Kleijnen, 2009]. PC-Kriging is more efficient than PCE and Kriging separately. This is due to the fact that PCK uses the regression-type PCE to capture the global behaviour of the computational model as well as the interpolation-type Kriging to capture local variations [Sudret *et al.*, 2017].

## Mathematical Presentation Of PCK#

The general mathematical presentation of PCK is similar to Kriging, with polynomial trend. This trend is described by PCE, where \( \beta^T f\left(x\right) \) is substituted by \( \sum_{\alpha\in\mathbb{N}^M}{y_\alpha\mathrm{\Psi}_\alpha(X)} \), which is weighted sum of orthonormal polynomials. Thus, the general formula of PCK is

As a result of PCK, the most relevant basis functions for model response are identified in an adaptive manner.

## Example#

Here is a simple example of simple PCK for three input parameters \((x_1, x_2, x_3)\). In this example **pyPG** library in Python is used. Within the code the three input parameters with their associated target functions are defined, by evaluating the original model for these inputs we evaluate the output values. Later this data is used to create the PCK model using the PCG class from **pyPG**

```
{
import numpy as np
from pyPG import PCG
# Define the input parameters
x1 = np.random.uniform(0, 1, 100) # Input parameter 1
x2 = np.random.uniform(0, 1, 100) # Input parameter 2
x3 = np.random.uniform(0, 1, 100) # Input parameter 3
# Define the original model function to be approximated
def model_original(x1, x2, x3):
return x1 + 2*x2 + 3*x3
# Evaluate the original model function
y = model_original(x1, x2, x3)
# Create the design matrix
X = np.column_stack((x1, x2, x3))
# Create the PCK model
model = PCG(X, y)
# Fit the PCK model
model.train()
# Predict using the PCK model
x1_new = 0.5 # New input parameter 1
x2_new = 0.3 # New input parameter 2
x3_new = 0.2 # New input parameter 3
X_new = np.array([[x1_new, x2_new, x3_new]])
y_pred = model.predict(X_new)
# Print the predicted output
print("Predicted output:", y_pred)
}
```

The output of this model is the predicted response of the fitted input parameters calculated using PCK model, which has the value of y_pred = 1.7.

## PCK Toolboxes And Libraries#

Several toolboxes and libraries are developed for PCK. These toolboxes and libraries are developed in MATLAB, Python, C++ etc. Here is some example of them :

**MATLAB**

*(the functioning of these libraries was checked by T. Albaraghtheh)*

UQLab (https://www.uqlab.com/kriging-user-manual)

**Python**

UQ[py]Lab (https://uqpylab.uq-cloud.io/)

## Case Study#

See *Modelling the Degradation of Biodegradable Implants* for the application of PCK to model the complex degradation of biodegradable magnesium-based implants.

## References#

- Kle09
Jack PC Kleijnen. Kriging metamodeling in simulation: a review.

*European journal of operational research*, 192(3):707–716, 2009.- SMW17
Bruno Sudret, Stefano Marelli, and Joe Wiart. Surrogate models for uncertainty quantification: an overview. In

*2017 11th European conference on antennas and propagation (EUCAP)*, 793–797. IEEE, 2017.

## Contributors#

Berit Zeller-Plumhoff