| sim_functional_process {SpatFD} | R Documentation |
Simulation of unconditional or conditional functional spatial process.
Description
Given a variogram model, this functions simulates several realizations of a functional spatial process. This simulation can be conditioned to observed data.
Usage
sim_functional_process(nsims,variograms,nbasis,coords,data = NULL,
data_coords = NULL,basis = NULL,mu = NULL,L = NULL)
Arguments
nsims |
Integer giving the number of curves to simulate. |
variograms |
|
nbasis |
Integer giving the number of basis functions on which the process is going to be projected. |
coords |
Gridded |
data |
|
data_coords |
|
basis |
Character giving the basis of functions (only for inconditional simulation) (nbasis must be provided). |
mu |
|
L |
Limits of the symetric interval centered on zero that is the domain of the basis that is going to be created in unconditional simulation case. |
Details
When data is passed, conditional simulation is performed. That means that each simulated realization of the process interpolated the observed curves in data. If data is NULL, the realizations of the process are simulated without imterpolation restrictions.
Value
A list of nsims SpatFD objects each one with as much curves as points are in coords.
Author(s)
Samuel Sánchez Gutiérrez ssanchezgu@unal.edu.co.
References
Bohorquez, M., Giraldo, R. & Mateu, J. Multivariate functional random fields: prediction and optimal sampling. Stoch Environ Res Risk Assess 31, 53–70 (2017). https://doi.org/10.1007/s00477-016-1266-y
See Also
Examples
library(gstat)
library(fda)
library(sp)
data("CanadianWeather")
canada.CRS <- CRS("+init=epsg:4608")
coords <- SpatialPoints(CanadianWeather$coordinates,
proj4string = CRS("+init=epsg:4326"))
coords <- spTransform(coords,canada.CRS)
obs <- CanadianWeather$dailyAv[,,1] # Temperature
Lfd_obj <- int2Lfd(m = 2)
create.bspline.basis(rangeval = c(1,365),
nbasis = 40, norder = 4) -> mi.base
mi.fdPar <- fdPar(mi.base, Lfd_obj, lambda = 7.389)
mi.fd <- smooth.basis(argvals = 1:365,
y = obs, fdParobj = mi.fdPar)
nbasis <- 5
canada <- mi.fd$fd
canada.pca <- pca.fd(canada,nharm = 10)
base_ort <- canada.pca$harmonics[1:nbasis]
canada_mean <- canada.pca$meanfd
formula2fd <- function(rango, expresion) {
# Generate grid
n <- 500 # length of the grid
x <- seq(rango[1], rango[2], length.out = n)
# evaluate expression on the grid
y_vals <- eval(parse(text = expresion))
# convert to fd
basis <- create.bspline.basis(rangeval = rango, nbasis = 30)
fd_obj <- Data2fd(x, y_vals,basisobj = basis)
return(fd_obj)
}
media <- formula2fd(c(-1,1),"3*sin(x*4)")
# No conditional
vario <- vgm(.25, "Exp", .5, .05)
nbasis <- 6
sims <- sim_functional_process(10,vario,nbasis,coords,basis = 'Legendre',mu = media)
class(sims)
length(sims)
class(sims[[1]])
# plot(sims[[3]][[1]]$data_fd)
sims <- sim_functional_process(10,vario,nbasis,coords,basis = 'Legendre')
class(sims)
length(sims)
class(sims[[1]])
# plot(sims[[3]][[1]]$data_fd)
# Conditional
vario <- vgm(100, "Exp", 900, 10)
new_coords <- spsample(coords,100,type = "regular")
gridded(new_coords) <- TRUE
length(new_coords)
a <- sim_functional_process(10,vario,nbasis,new_coords,canada,coords)
class(a)
length(a)
class(a[[1]])
#plot(a[[1]][[1]]$data_fd)
vario <- vgm(100, "Wav", 900, 10)
a <- sim_functional_process(10,vario,nbasis,new_coords,canada,coords)
class(a)
length(a)
class(a[[1]])
#plot(a[[1]][[1]]$data_fd)