corr {emulator} | R Documentation |
calculates the correlation function between two points in parameter space, thus determining the correlation matrix A.
corr(x1, x2, scales=NULL , pos.def.matrix=NULL, power=2,coords="cartesian", spherical.distance.function=NULL) corr.matrix(xold, yold=NULL, method=1, distance.function=corr, ...)
x1 |
First point |
x2 |
Second point |
scales |
Vector specifying the diagonal elements of B (see below) |
pos.def.matrix |
Positive definite matrix to be used by
corr.matrix() for B. Exactly one of scales and
pos.definite.matrix should be specified. Supplying
scales specifies the diagonal elements of B (off diagonal
elements are set to zero); supply pos.definite.matrix in the
general case. A single value is recycled. Note that neither
corr() nor corr.matrix() test for positive
definiteness |
power |
In function corr() , the power to use in the
exponent of the exponential. In
the case of a diagonal pos.def.matrix (or,
equivalently, using scales ), the default value of 2 gives the
standard metric, viz exp(-(x-x')^2).
For the general case of nondiagonal pos.def.matrix ,
the metric is exp(-abs( (x-x')^T B (x-x') )^(power/2)), thus reducing
to the standard case for power =2 |
coords |
In function corr() , a character string, with
default “cartesian” meaning to interpret the elements of
x1 (and x2 ) as coordinates in Cartesian space. The
only other acceptable value is currently “spherical”, which
means to interpret the first element of x1 as row number, and
the second element as column number, on a spherical computational
grid (such as used by climate model Goldstein; see package
goldstein for an example of this option in use).
Spherical geometry is then used to calculate the geotetic (great
circle) distance between point x1 and x2 , with
function gcd() |
method |
An integer with values 1, 2, or 3. If 1, then use a
fast matrix calculation that returns
exp(-(x-x')^T B (x-x')). If 2 or 3, return
the appropriate output from corr() , noting that ellipsis
arguments are passed to corr() (for example, power and
scales ). The difference between 2 and 3 is a marginal
difference in numerical efficiency; the main difference is
computational elegance.
Warning 1: if method=1 , argument power (which
might be intended to be passed to corr.matrix() ) is ignored
silently.
Warning 2: The code for method=2 (formerly the
default), has a bug. If yold has only one row, then
corr.matrix(xold,yold,scales,method=2) returns the transpose
of what one would expect. Methods 1 and 3 return the correct
matrix.
Warning 3: If argument distance.function is not the
default, and method is the default (ie 1), then method
will be silently changed to 2 on the grounds that method=1 is
meaningless unless the distance function is corr() |
distance.function |
Function to be used to calculate distances in
corr.matrix() . Defaults to corr() |
xold |
Matrix, each row of which is an evaluated point |
yold |
(optional) matrix, each row of which is an evaluated
point. If missing, use xold |
spherical.distance.function |
In corr , a function to
determine the distance between two points; used if
coords =“spherical”. A good one to choose is
gcd() (that is, Great Circle Distance) of the goldstein library |
... |
In function corr.matrix() , extra arguments that are
passed on to the distance function. In the default case in which
the distance.function is corr() , one must pass
scales , and one might wish to pass power |
Evaluates a slight generalization of Oakley's equation 2.12 for the
correlation between eta(x) and eta(x'):
exp(|(x-x')^T B
(x-x')|^({power/2))}.
This reduces to Oakley's form if power=2
.
Returns the correlation function
It is worth reemphasising that supplying scales
makes
matrix B diagonal.
Thus, if scales
is supplied, B=diag(scales)
and
ommitted: see pdf
Thus if x has units [X], the units of scales
are
X^(-2).
So if scales[i]
is big, even small displacements in x[i]
(that is, moving a small distance in parameter space, in the
i-th dimension) will result in small correlations. If
scales[i]
is small, even large displacements in x[1]
will have large correlations
Robin K. S. Hankin
corr(1:10,10:1,scales=rep(1,10), power=2) corr(1:10,10:1,pos.def.matrix=0.1+diag(10),power=2) x <- latin.hypercube(4,7) #4 points in 7-dimensional space corr.matrix(x,scales=rep(1,7),power=1.5) x[1,1] <- 100 corr.matrix(x,scales=rep(1,7), power=1.5) # note that all the first row and first column apart from the [1,1]th # element is zero (or very nearly so) because point number 1 is now very # far from the other points. #to use just a single dimension, remember to use the drop=FALSE argument: corr.matrix(x[,1,drop=FALSE],scales=rep(1,1),power=1.5) # For problems in 1D, coerce the independent variable to a matrix: m <- c(0.2 , 0.4,0.403,0.9) corr.matrix(cbind(m),scales=1) # now use a non-default value for distance.function. # Function f() below taken from Oakley's thesis page 12, # equation 2.10: f <- function(x,y,theta){ d <- sum(abs(x-y)) if(d >= theta){ return(0) }else{ return(1-d/theta) } } corr.matrix(xold=x, distance.function=f , method=2, theta=4) # Note the first row and first column is a single 1 and 3 zeroes # (because the first point, viz x[1,], is "far" from the other ponts). # Also note the method=2 argument here; method=1 is the fast slick # matrix method suggested by Doug and Jeremy, but this only works # for distance.function=corr.