| RNAmf | R Documentation |
The function fits RNA models with designs of multiple fidelity levels.
The estimation method is based on MLE.
Available kernel choices include the squared exponential kernel, and the Matern kernel with smoothness parameter 1.5 and 2.5.
The function returns the fitted model at each level 1, \ldots, l, the number of fidelity levels l, the kernel choice, whether constant mean or not, and the computation time.
RNAmf(X_list, y_list, kernel = "sqex", constant = TRUE,
init = NULL, n.iter = 50, burn.ratio = 0.75, trace = TRUE, ...)
X_list |
A list of the matrices of input locations for all fidelity levels. |
y_list |
A list of the vectors or matrices of response values for all fidelity levels. |
kernel |
A character specifying the kernel type to be used. Choices are |
constant |
A logical indicating for constant mean of GP ( |
init |
A list of the vectors of initial parameter values for optimization. Default is |
n.iter |
Number of iterations for the stochastic EM algorithm for non-nested designs. Default is 50. |
burn.ratio |
Fraction of iterations to discard as burn-in. Default is 0.75. |
trace |
A logical indicating to print progress of iterations if |
... |
Additional arguments for compatibility with |
Consider the model
\begin{cases}
& f_1(\bm{x}) = W_1(\bm{x}),\\
& f_l(\bm{x}) = W_l(\bm{x}, f_{l-1}(\bm{x})) \quad\text{for}\quad l \geq 2,
\end{cases}
where f_l is the simulation code at fidelity level l, and
W_l(\bm{x}) \sim GP(\alpha_l, \tau_l^2 K_l(\bm{x}, \bm{x}')) is GP model.
Hyperparameters (\alpha_l, \tau_l^2, \bm{\theta_l}) are estimated by
maximizing the log-likelihood via an optimization algorithm "L-BFGS-B".
For constant=FALSE, \alpha_l=0.
Covariance kernel is defined as:
K_l(\bm{x}, \bm{x}')=\prod^d_{j=1}\phi(x_j,x'_j;\theta_{lj}) with
\phi(x, x';\theta) = \exp \left( -\frac{ \left( x - x' \right)^2}{\theta} \right)
for squared exponential kernel; kernel="sqex",
\phi(x,x';\theta) =\left( 1+\frac{\sqrt{3}|x- x'|}{\theta} \right) \exp \left( -\frac{\sqrt{3}|x- x'|}{\theta} \right)
for Matern kernel with the smoothness parameter of 1.5; kernel="matern1.5" and
\phi(x, x';\theta) = \left( 1+\frac{\sqrt{5}|x-x'|}{\theta} +\frac{5(x-x')^2}{3\theta^2} \right) \exp \left( -\frac{\sqrt{5}|x-x'|}{\theta} \right)
for Matern kernel with the smoothness parameter of 2.5; kernel="matern2.5".
For further details, see Heo and Sung (2025, <\Sexpr[results=rd]{tools:::Rd_expr_doi("https://doi.org/10.1080/00401706.2024.2376173")}>).
A list of class RNAmf with:
fits: A list of fitted Gaussian process models f_l(x) at each level 1, \ldots, l. Each element contains:
\begin{cases} & f_1 \text{ for } (X_1, y_1),\\ & f_l \text{ for } ((X_l, f_{l-1}(X_l)), y_l), \end{cases}.
level: The number of fidelity levels l.
kernel: A copy of kernel.
constant: A copy of constant.
nested: A logical indicating whether the design is nested.
time: A scalar indicating the computation time.
predict.RNAmf for prediction.
### two levels example ###
### Perdikaris function ###
f1 <- function(x) {
sin(8 * pi * x)
}
f2 <- function(x) {
(x - sqrt(2)) * (sin(8 * pi * x))^2
}
### training data ###
n1 <- 13
n2 <- 8
### fix seed to reproduce the result ###
set.seed(1)
### generate initial nested design ###
X <- NestedX(c(n1, n2), 1)
X1 <- X[[1]]
X2 <- X[[2]]
y1 <- f1(X1)
y2 <- f2(X2)
### fit an RNAmf ###
fit.RNAmf <- RNAmf(list(X1, X2), list(y1, y2), kernel = "sqex", constant=TRUE)
### three levels example ###
### Branin function ###
branin <- function(xx, l){
x1 <- xx[1]
x2 <- xx[2]
if(l == 1){
10*sqrt((-1.275*(1.2*x1+0.4)^2/pi^2+5*(1.2*x1+0.4)/pi+(1.2*x2+0.4)-6)^2 +
(10-5/(4*pi))*cos((1.2*x1+0.4))+ 10) +
2*(1.2*x1+1.9) - 3*(3*(1.2*x2+2.4)-1) - 1 - 3*x2 + 1
}else if(l == 2){
10*sqrt((-1.275*(x1+2)^2/pi^2+5*(x1+2)/pi+(x2+2)-6)^2 +
(10-5/(4*pi))*cos((x1+2))+ 10) + 2*(x1-0.5) - 3*(3*x2-1) - 1
}else if(l == 3){
(-1.275*x1^2/pi^2+5*x1/pi+x2-6)^2 + (10-5/(4*pi))*cos(x1)+ 10
}
}
output.branin <- function(x, l){
factor_range <- list("x1" = c(-5, 10), "x2" = c(0, 15))
for(i in 1:length(factor_range)) x[i] <- factor_range[[i]][1] + x[i] * diff(factor_range[[i]])
branin(x[1:2], l)
}
### training data ###
n1 <- 20; n2 <- 15; n3 <- 10
### fix seed to reproduce the result ###
set.seed(1)
### generate initial nested design ###
X <- NestedX(c(n1, n2, n3), 2)
X1 <- X[[1]]
X2 <- X[[2]]
X3 <- X[[3]]
y1 <- apply(X1,1,output.branin, l=1)
y2 <- apply(X2,1,output.branin, l=2)
y3 <- apply(X3,1,output.branin, l=3)
### fit an RNAmf ###
fit.RNAmf <- RNAmf(list(X1, X2, X3), list(y1, y2, y3), kernel = "sqex", constant=TRUE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.