| scales.likelihood {emulator} | R Documentation |
Gives the a postiori likelihood for the roughness parameters as a function of the observations.
scales.likelihood(pos.def.matrix = NULL, scales = NULL, power, xold, use.Ainv = TRUE, d, func = regressor.basis)
pos.def.matrix |
Positive definite matrix used for the distance metric |
scales |
If the positive definite matrix is diagonal,
scales specifies the diagonal elements. Specify exactly one
of pos.def.matrix or scales (ie not both) |
xold |
Points at which code has been run |
use.Ainv |
Boolean, with default TRUE meaning to calculate
A^(-1) explicitly and use it. Setting to FALSE
means to use methods (such as quad.form.inv()) which do not
require inverting the A matrix. Although one should avoid
inverting a matrix if possible, in practice there does not appear
to be much difference in execution time for the two methods. |
d |
Observations |
power |
Power to use in metric |
func |
Function used to determine basis vectors, defaulting
to regressor.basis if not given. |
This function returns the likelihood function defined in Oakley's PhD
thesis, equation 2.37. Maximizing this likelihood to estimate the
roughness parameters is an alternative to the leave-out-one method on
the interpolant() helppage; both methods perform similarly.
The value returned is
(sigmahatsquared)^{-(n-q)/2}|A|^{-1/2}|t(H) %*% A %*% H|^{-1/2}.
Returns the likelihood.
This function uses a Boolean flag, use.Ainv, to determine
whether A has to be inverted or not. Compare the other
strategy in which separate functions, eg foo() and
foo.A(), are written. An example would be betahat.fun().
Robin K. S. Hankin
data(toy)
val <- toy
#define a real relation
real.relation <- function(x){sum( (0:6)*x )}
#Some scales:
fish <- rep(1,6)
fish[6] <- 4
A <- corr.matrix(val,scales=fish, power=2)
Ainv <- solve(A)
# Gaussian process noise:
H <- regressor.multi(val)
d <- apply(H,1,real.relation)
d.noisy <- as.vector(rmvnorm(n=1,mean=d, 0.1*A))
# Compare likelihoods with true values and another value:
scales.likelihood(scales=rep(1,6),xold=toy,d=d.noisy, power=2)
scales.likelihood(scales=fish ,xold=toy,d=d.noisy, power=2)
# Verify that use.Ainv does not affect the numerical result:
u.true <- scales.likelihood(scales=rep(1,6),xold=toy,d=d.noisy, power=2,
use.Ainv=TRUE)
u.false <- scales.likelihood(scales=rep(1,6),xold=toy,d=d.noisy, power=2,
use.Ainv=FALSE)
print(c(u.true, u.false)) # should be identical up to numerical accuracy
# Now use optim():
f <- function(fish){scales.likelihood(scales=exp(fish), xold=toy, d=d.noisy, power=2)}
e <-
optim(log(fish),f,method="Nelder-Mead",control=list(trace=0,maxit=10,fnscale=
-1))
best.scales <- exp(e$par)