Nothing
rExtDepSpat <- function(n, coord, model="SCH", cov.mod = "whitmat", grid = FALSE,
control = list(), cholsky = TRUE, ...){
models <- c("SMI","GG", "BR", "SCH", "ET", "EST")
if(!any(model == models)){ stop("model wrongly specified")}
if(model == "SMI"){
cov.mod <- "gauss"
}else if(model == "BR"){
cov.mond <- "brown"
}else if(model %in% c("GG", "SCH", "ET", "EST")){
if(!(cov.mod %in% c("whitmat","cauchy","powexp","bessel"))){
stop("'cov.mod' must be one of 'whitmat', 'cauchy', 'powexp' or 'bessel'.")
}
}
# if (!(cov.mod %in% c("whitmat","cauchy","powexp","bessel",
# "iwhitmat", "icauchy", "ipowexp", "ibessel",
# "gwhitmat", "gcauchy", "gpowexp", "gbessel",
# "twhitmat", "tcauchy", "tpowexp", "tbessel",
# "swhitmat", "scauchy", "spowexp", "sbessel",
# "brown")))
# stop("'cov.mod' must be one of '(i/g/t/s)whitmat', '(i/g/t/s)cauchy', '(i/g/t/s)powexp', '(i/g/t/s)bessel' or 'brown'")
if (!is.null(control$method) && !(control$method %in% c("direct", "tbm", "circ", "exact")))
stop("the argument 'method' for 'control' must be one of 'exact', 'direct', 'tbm' and 'circ'")
# if (cov.mod == "brown")
# model <- "Brown-Resnick"
#
# else if (cov.mod %in% c("whitmat","cauchy","powexp","bessel"))
# model <- "Schlather"
#
# else {
# if (substr(cov.mod, 1, 1) == "i")
# model <- "iSchlather"
#
# else if (substr(cov.mod, 1, 1) == "g")
# model <- "Geometric"
#
# else if (substr(cov.mod, 1, 1) == "s")
# model <- "Extremal-Skew-t"
#
# else
# model <- "Extremal-t"
#
# cov.mod <- substr(cov.mod, 2, 10)
# }
dist.dim <- ncol(coord)
if (is.null(dist.dim))
dist.dim <- 1
if (dist.dim > 2)
stop("Currently this function is only available for R or R^2")
if ((dist.dim == 1) && grid){
warning("You cannot use 'grid = TRUE' in dimension 1. Ignored.")
grid <- FALSE
}
if (model == "SCH"){
if (!all(c("nugget", "range", "smooth") %in% names(list(...))))
stop("You must specify 'nugget', 'range', 'smooth'")
nugget <- list(...)$nugget
range <- list(...)$range
smooth <- list(...)$smooth
}
else if (model == "GG") {
if (!all(c("sigma2", "nugget", "range", "smooth") %in% names(list(...))))
stop("You must specify 'sigma2', 'nugget', 'range', 'smooth'")
nugget <- list(...)$nugget
range <- list(...)$range
smooth <- list(...)$smooth
sigma2 <- list(...)$sigma2
}
else if (model == "ET"){
if (!all(c("DoF", "nugget", "range", "smooth") %in% names(list(...))))
stop("You must specify 'DoF', 'nugget', 'range', 'smooth'")
nugget <- list(...)$nugget
range <- list(...)$range
smooth <- list(...)$smooth
DoF <- list(...)$DoF
}
else if (model == "EST"){
if (!all(c("DoF", "nugget", "range", "smooth", "alpha", "acov1", "acov2") %in% names(list(...))))
stop("You must specify 'DoF', 'nugget', 'range', 'smooth', 'alpha','acov1', 'acov2' ")
nugget <- list(...)$nugget
range <- list(...)$range
smooth <- list(...)$smooth
DoF <- list(...)$DoF
alpha <- list(...)$alpha
acov1 <- list(...)$acov1
acov2 <- list(...)$acov2
}
else if (model == "BR"){
range <- list(...)$range
smooth <- list(...)$smooth
}
if (dist.dim !=1){
n.site <- nrow(coord)
coord.range <- apply(coord, 2, range)
center <- colMeans(coord.range)
edge <- max(apply(coord.range, 2, diff))
}
else {
n.site <- length(coord)
coord.range <- range(coord)
center <- mean(coord.range)
edge <- diff(coord.range)
}
cov.mod <- switch(cov.mod, "gauss" = "gauss", "whitmat" = 1, "cauchy" = 2,
"powexp" = 3, "bessel" = 4)
if (grid){
n.eff.site <- n.site^dist.dim
reg.grid <- .isregulargrid(coord[,1], coord[,2])
steps <- reg.grid$steps
reg.grid <- reg.grid$reg.grid
}
else
n.eff.site <- n.site
ans <- rep(-1e10, n * n.eff.site)
ans2 <- rep(0L, n * n.eff.site)
##Identify which simulation technique is the most adapted or use the
##one specified by the user --- this is useless for the Smith model.
if (is.null(control$method)){
if (n.eff.site < 500)## <<-- If fixed it to 500 but need to modify it later maybe !!!
method <- "exact"
else if (grid && reg.grid)
method <- "circ"
else if ((length(ans) / n) > 600)
method <- "tbm"
else
method <- "direct"
} else {
method <- control$method
}
if (method == "tbm"){
if (is.null(control$nlines))
nlines <- 1000
else
nlines <- control$nlines
}
if (model == "SCH"){
if (is.null(control$uBound))
uBound <- 3.5
else
uBound <- control$uBound
if (method == "direct")
ans <- .C("rschlatherdirect", as.double(coord), as.integer(n), as.integer(n.site),
as.integer(dist.dim), as.integer(cov.mod), grid, as.double(nugget),
as.double(range), as.double(smooth), as.double(uBound), ans = ans, ans2 = ans2, NAOK=TRUE)[c("ans","ans2")]
else if (method == "exact")
ans <- .C("rschlatherexact", as.double(coord), as.integer(n), as.integer(n.site), as.integer(dist.dim),
as.integer(cov.mod), as.integer(grid), as.double(nugget), as.double(range), as.double(smooth),
ans = ans, ans2 = ans2, NAOK=TRUE)[c("ans","ans2")]
else if (method == "circ")
ans <- .C("rschlathercirc", as.integer(n), as.integer(n.site), as.double(steps),
as.integer(dist.dim), as.integer(cov.mod), as.double(nugget), as.double(range),
as.double(smooth), as.double(uBound), ans = ans, NAOK=TRUE)$ans
else
ans <- .C("rschlathertbm", as.double(coord), as.integer(n), as.integer(n.site),
as.integer(dist.dim), as.integer(cov.mod), grid, as.double(nugget),
as.double(range), as.double(smooth), as.double(uBound), as.integer(nlines),
ans = ans, NAOK=TRUE)$ans
}
else if (model == "GG"){
if (is.null(control$uBound))
uBound <- exp(3.5 * sqrt(sigma2) - 0.5 * sigma2)
else
uBound <- control$uBound
if (method == "direct")
ans <- .C("rgeomdirect", as.double(coord), as.integer(n), as.integer(n.site),
as.integer(dist.dim), as.integer(cov.mod), grid, as.double(sigma2),
as.double(nugget), as.double(range), as.double(smooth),
as.double(uBound), ans = ans, ans2 = ans2, NAOK=TRUE)[c("ans","ans2")]
else if (method == "exact")
ans <- .C("rgeomexact", as.double(coord), as.integer(n), as.integer(n.site), as.integer(dist.dim),
as.integer(cov.mod), as.integer(grid), as.double(sigma2), as.double(nugget), as.double(range),
as.double(smooth), ans = ans, ans2 = ans2, NAOK=TRUE)[c("ans","ans2")]
else if (method == "circ")
ans <- .C("rgeomcirc", as.integer(n), as.integer(n.site), as.double(steps),
as.integer(dist.dim), as.integer(cov.mod), as.double(sigma2),
as.double(nugget), as.double(range), as.double(smooth), as.double(uBound),
ans = ans, NAOK=TRUE)$ans
else
ans <- .C("rgeomtbm", as.double(coord), as.integer(n), as.integer(n.site),
as.integer(dist.dim), as.integer(cov.mod), grid, as.double(sigma2),
as.double(nugget), as.double(range), as.double(smooth), as.double(uBound),
as.integer(nlines), ans = ans, NAOK=TRUE)$ans
}
else if (model == "ET"){
if (is.null(control$uBound))
uBound <- 3^DoF
else
uBound <- control$uBound
if (method == "direct")
ans <- .C("rextremaltdirect", as.double(coord), as.integer(n), as.integer(n.site),
as.integer(dist.dim), as.integer(cov.mod), grid, as.double(nugget),
as.double(range), as.double(smooth), as.double(DoF), as.double(uBound),
ans = ans, ans2 = ans2, NAOK=TRUE)[c("ans","ans2")]
else if (method == "exact")
ans <- .C("rextremaltexact", as.double(coord), as.integer(n), as.integer(n.site),
as.integer(dist.dim), as.integer(cov.mod), grid, as.double(nugget),
as.double(range), as.double(smooth), as.double(DoF), as.integer(cholsky),
ans = ans, ans2 = ans2, NAOK=TRUE)[c("ans","ans2")]
else if (method == "circ")
ans <- .C("rextremaltcirc", as.integer(n), as.integer(n.site), as.double(steps),
as.integer(dist.dim), as.integer(cov.mod), as.double(nugget), as.double(range),
as.double(smooth), as.double(DoF), as.double(uBound), ans = ans, NAOK=TRUE)$ans
else
ans <- .C("rextremalttbm", as.double(coord), as.integer(n), as.integer(n.site),
as.integer(dist.dim), as.integer(cov.mod), grid, as.double(nugget),
as.double(range), as.double(smooth), as.double(DoF), as.double(uBound),
as.integer(nlines), ans = ans, NAOK=TRUE)$ans
}
else if (model == "EST"){
if (is.null(control$uBound))
uBound <- 3^DoF
else
uBound <- control$uBound
if(length(alpha) != 3) stop("alpha must be of length 3")
if(length(acov1) != n.eff.site) stop("acov1 has incorrect length")
if(length(acov2) != n.eff.site) stop("acov2 has incorrect length")
Alpha <- alpha[1] + alpha[2] * acov1 + alpha[3] * acov2
if (method == "direct")
ans <- .C("rextremalskewtdirect", as.double(coord), as.integer(n), as.integer(n.site),
as.integer(dist.dim), as.integer(cov.mod), grid, as.double(nugget),
as.double(range), as.double(smooth), as.double(DoF), as.double(Alpha), as.double(uBound),
ans = ans, ans2 = ans2, NAOK=TRUE)[c("ans","ans2")]
else if (method == "exact")
ans <- .C("rextremalskewtexact", as.double(coord), as.integer(n), as.integer(n.site),
as.integer(dist.dim), as.integer(cov.mod), grid, as.double(nugget),
as.double(range), as.double(smooth), as.double(DoF), as.double(Alpha),
as.integer(cholsky), ans = ans, ans2 = ans2, NAOK=TRUE)[c("ans","ans2")]
else stop("Extremal Skew-t only has direct and exact methods")
}
else if (model == "BR"){
coord <- scale(coord, scale = FALSE) + 10^-6## to avoid having the origin
if (is.null(control$max.sim))
max.sim <- 1000
else
max.sim <- control$max.sim
if (is.null(control$uBound))
uBound <- 10
else
uBound <- control$uBound
if (is.null(control$sim.type))
sim.type <- 1
else
sim.type <- control$sim.type
if (dist.dim == 1)
bounds <- range(coord)
else
bounds <- apply(coord, 2, range)
if (is.null(control$nPP))
nPP <- 15
else
nPP <- control$nPP
if (sim.type == 6){
idx.sub.orig <- getsubregions(coord, bounds, range, smooth, dist.dim)
n.sub.orig <- length(idx.sub.orig)
}
else
idx.sub.orig <- n.sub.orig <- 0
if (method == "direct")
ans <- .C("rbrowndirect", as.double(coord), as.double(bounds),
as.integer(n), as.integer(n.site), as.integer(dist.dim),
as.integer(grid), as.double(range), as.double(smooth),
as.double(uBound), as.integer(sim.type), as.integer(max.sim),
as.integer(nPP), as.integer(idx.sub.orig), as.integer(n.sub.orig),
ans = ans, ans2 = ans2, NAOK=TRUE)[c("ans","ans2")]
else if (method == "exact")
ans <- .C("rbrownexact", as.double(coord), as.integer(n), as.integer(n.site),
as.integer(dist.dim), as.integer(grid), as.double(range), as.double(smooth),
ans = ans, ans2 = ans2, NAOK=TRUE)[c("ans","ans2")]
}
if(is.list(ans)) {
ans2 <- ans$ans2; ans <- ans$ans
} else ans2 <- NA
if (grid){
if (n == 1) {
ans <- matrix(ans, n.site, n.site)
ans2 <- matrix(ans2, n.site, n.site)
}
else {
ans <- array(ans, c(n.site, n.site, n))
ans2 <- array(ans2, c(n.site, n.site, n))
}
}
else {
ans <- matrix(ans, nrow = n, ncol = n.site)
ans2 <- matrix(ans2, nrow = n, ncol = n.site)
}
return(list(vals = ans, hits = ans2))
}
getsubregions <- function(coord, bounds, range, smooth, dist.dim){
if (dist.dim == 1){
coord <- matrix(coord, ncol = 1)
bounds <- matrix(bounds, ncol = 1)
}
h.star <- 2^(1/smooth) * range
n.windows <- 1 + floor(diff(bounds) / h.star)
sub.bounds <- list()
for (i in 1:dist.dim)
sub.bounds <- c(sub.bounds,
list(seq(bounds[1,i], bounds[2, i], length = n.windows[i] + 1)))
sub.centers <- list()
for (i in 1:dist.dim)
sub.centers <- c(sub.centers, list(0.5 * (sub.bounds[[i]][-1] +
sub.bounds[[i]][-(n.windows + 1)])))
sub.origins <- as.matrix(expand.grid(sub.centers))
n.sub.origins <- prod(n.windows)
idx.sub.orig <- rep(NA, n.sub.origins)
for (i in 1:n.sub.origins){
dummy <- sqrt(colSums((t(coord) - sub.origins[i,])^2))
idx.sub.orig[i] <- which.min(dummy)
}
return(idx.sub.orig = idx.sub.orig)
}
###############################################################################
###############################################################################
## Hidden functions
###############################################################################
###############################################################################
.isregulargrid <- function(x, y, tol.x = 1e-4, tol.y = 1e-4){
##This function check if the grid defined by x and y is regular
##i.e. the spacings along the axis is constant -- but not
##necessarily the same for the x and y-axis
x.diff <- diff(x)
y.diff <- diff(y)
eps.x <- diff(range(x.diff))
eps.y <- diff(range(y.diff))
if ((eps.x <= tol.x) && (eps.y <= tol.y)){
reg.grid <- TRUE
steps <- c(mean(x.diff), mean(y.diff))
}
else{
reg.grid <- FALSE
steps <- NA
}
return(list(reg.grid = reg.grid, steps = steps))
}
.isregulargrid <- function(x, y, tol.x = 1e-4, tol.y = 1e-4){
##This function check if the grid defined by x and y is regular
##i.e. the spacings along the axis is constant -- but not
##necessarily the same for the x and y-axis
x.diff <- diff(x)
y.diff <- diff(y)
eps.x <- diff(range(x.diff))
eps.y <- diff(range(y.diff))
if ((eps.x <= tol.x) && (eps.y <= tol.y)){
reg.grid <- TRUE
steps <- c(mean(x.diff), mean(y.diff))
}
else{
reg.grid <- FALSE
steps <- NA
}
return(list(reg.grid = reg.grid, steps = steps))
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.