Fast and intuitive ways to draw from a Gaussian random field.

rgrf( n,
   locs, nx, ny=nx, xlim=c(0,1), ylim=c(0,1), tau=0,
   Covariance, theta, beta=0, X, 
   method=c('chol'),  method.args=list(sparse=FALSE), 
   eps = getOption("spam.eps"), drop=TRUE, attributes=TRUE, ...)

Arguments

n

number of observations.

locs

locations, the result of as.matrix(locs) will be used.

nx,ny

if no locations are specified, at least one of these to specify the grid dimension.

xlim,ylim

Domain, see ‘Details’.

tau

perturbation degree, see ‘Details’.

Covariance

covariance function name.

theta

covariance parameter.

beta

mean or vector for regression-type mean.

X

design matrix for regression-type mean.

method

based on Choleski factorization.

method.args

list of arguments that can be passed to the corresponding approach. For "chol" it can be, e.g., RStruct, chol.args, cov.args.

eps

small value, anything smaller is considered a collocation.

drop

logical, if a single realization should be returned as a vector.

attributes

logical, if should attributes be passed back.

...

currently not used.

Details

If no locations are given, the function constructs these according a regular or a regular perturbed grid. The perturbation is determined by tau, which has to be greater than zero (no perturbation) and strictly smaller than 1/2 (max perturbation).

The regular grid has spacing (here for x) dx=diff(xlim)/nx and runs from xlim[1]+dx/2 to xlim[2]-dx/2. The locations are at least (1/nx-2*tau*dx) separated.

Currently, the only method implemented is a Cholesky factorization routine, (much as in rmvnorm).

The rdist() from the fields package is awefully fast. Unless one has very sparse covariance matrices, a sparse approach is not bringing a lot of improvements.

The methods may use different covariance construction approaches and thus the nesting of cov.args in method.args.

See also

rgrf, chol and ordering.

Author

Reinhard Furrer

Examples

require(fields)
#> Loading required package: fields
#> Loading required package: viridisLite
#> 
#> Try help(fields) to get started.
# Regular grid with constant mean:
nx <- 10
field <- rgrf(1, nx=nx,  Covariance="cov.wend2", theta=c(.5, 1), beta=5)
quilt.plot(cbind(attr(field,"locs"),z=field), nx=nx, ny=nx)
points(attr(field,"locs"))


# Irregluar grid:
field <- rgrf(1, nx=10, tau=0.3, Covariance="cov.mat", theta=c(.2, 1, 1.5))
fields::quilt.plot(attr(field,"locs"), field)