MagiPosterior {magi} | R Documentation |
MAGI posterior density
Description
Computes the MAGI log-posterior value and gradient for an ODE model with the given inputs: the observations Y
, the latent system trajectories X
,
the parameters \theta
, the noise standard deviations \sigma
, and covariance kernels.
Usage
MagiPosterior(
y,
xlatent,
theta,
sigma,
covAllDimInput,
odeModel,
priorTemperatureInput = 1,
useBand = FALSE
)
Arguments
y |
data matrix of observations |
xlatent |
matrix of system trajectory values |
theta |
vector of parameter values |
sigma |
vector of observation noise for each system component |
covAllDimInput |
list of covariance kernel objects for each system component. Covariance calculations may be carried out with |
odeModel |
list of ODE functions and inputs. See details. |
priorTemperatureInput |
vector of tempering factors for the GP prior, derivatives, and observations, in that order. Controls the influence of the GP prior relative to the likelihood. Recommended values: the total number of observations divided by the total number of discretization points for the GP prior and derivatives, and 1 for the observations. |
useBand |
logical: should the band matrix approximation be used? If |
Value
A list with elements value
for the value of the log-posterior density and grad
for its gradient.
Examples
# Trajectories from the Fitzhugh-Nagumo equations
tvec <- seq(0, 20, 2)
Vtrue <- c(-1, 1.91, 1.38, -1.32, -1.5, 1.73, 1.66, 0.89, -1.82, -0.93, 1.89)
Rtrue <- c(1, 0.33, -0.62, -0.82, 0.5, 0.94, -0.22, -0.9, -0.08, 0.95, 0.3)
# Noisy observations
Vobs <- Vtrue + rnorm(length(tvec), sd = 0.05)
Robs <- Rtrue + rnorm(length(tvec), sd = 0.1)
# Prepare distance matrix for covariance kernel calculation
foo <- outer(tvec, t(tvec), '-')[, 1, ]
r <- abs(foo)
r2 <- r^2
signr <- -sign(foo)
# Choose some hyperparameter values to illustrate
rphi <- c(0.95, 3.27)
vphi <- c(1.98, 1.12)
phiTest <- cbind(vphi, rphi)
# Covariance computations
curCovV <- calCov(phiTest[,1], r, signr, kerneltype = "generalMatern")
curCovR <- calCov(phiTest[,2], r, signr, kerneltype = "generalMatern")
# Y and X inputs to MagiPosterior
yInput <- data.matrix(cbind(Vobs, Robs))
xlatentTest <- data.matrix(cbind(Vtrue, Rtrue))
# Create odeModel list for FN equations
fnmodel <- list(
fOde = fnmodelODE,
fOdeDx = fnmodelDx,
fOdeDtheta = fnmodelDtheta,
thetaLowerBound = c(0, 0, 0),
thetaUpperBound = c(Inf, Inf, Inf)
)
MagiPosterior(yInput, xlatentTest, theta = c(0.2, 0.2, 3), sigma = c(0.05, 0.1),
list(curCovV, curCovR), fnmodel)