local_covariance_matrix {SpatialBSS} | R Documentation |
Computation of Local Covariance Matrices
Description
local_covariance_matrix
computes local covariance matrices for a random field based on a given set of spatial kernel matrices.
Usage
local_covariance_matrix(x, kernel_list, lcov = c('lcov', 'ldiff', 'lcov_norm'),
center = TRUE)
Arguments
x |
a numeric matrix of dimension |
kernel_list |
a list with spatial kernel matrices of dimension |
lcov |
a string indicating which type of local covariance matrix to use. Either |
center |
logical. If |
Details
Two versions of local covariance matrices are implemented, the argument lcov
determines which version is used:
-
'lcov'
:LCov(f) = 1/n \sum_{i,j} f(d_{i,j}) (x(s_i)-\bar{x}) (x(s_j)-\bar{x})' ,
-
'ldiff'
:LDiff(f) = 1/n \sum_{i,j} f(d_{i,j}) (x(s_i)-x(s_j)) (x(s_i)-x(s_j))',
-
'lcov_norm'
:LCov^*(f) = 1/(n F^{1/2}_{f,n}) \sum_{i,j} f(d_{i,j}) (x(s_i)-\bar{x}) (x(s_j)-\bar{x})',
with
F_{f,n} = 1 / n \sum_{i,j} f^2(d_{i,j}).
Where d_{i,j} \ge 0
correspond to the pairwise distances between coordinates, x(s_i)
are the p
random field values at location s_i
, \bar{x}
is the sample mean vector, and the kernel function f(d)
determines the locality. The choice 'lcov_norm'
is useful when testing for the actual signal dimension of the latent field, see sbss_asymp
and sbss_boot
. The function local_covariance_matrix
computes local covariance matrices for a given random field and given spatial kernel matrices, the type of computed local covariance matrices is determined by the argument 'lcov'
. If the argument center
equals FALSE
then the centering in the above formula for LCov(f)
is not carried out. See also spatial_kernel_matrix
for details.
Value
local_covariance_matrix
returns a list of equal length as the argument kernel_list
. Each list entry is a numeric matrix of dimension c(p, p)
corresponding to a local covariance matrix. The list has the attribute 'lcov'
which equals the function argument lcov
.
References
Muehlmann, C., Filzmoser, P. and Nordhausen, K. (2021), Spatial Blind Source Separation in the Presence of a Drift, Submitted for publication. Preprint available at https://arxiv.org/abs/2108.13813.
Bachoc, F., Genton, M. G, Nordhausen, K., Ruiz-Gazen, A. and Virta, J. (2020), Spatial Blind Source Separation, Biometrika, 107, 627-646, doi:10.1093/biomet/asz079.
See Also
Examples
# simulate coordinates
coords <- runif(1000 * 2) * 20
dim(coords) <- c(1000, 2)
coords_df <- as.data.frame(coords)
names(coords_df) <- c("x", "y")
# simulate random field
if (!requireNamespace('gstat', quietly = TRUE)) {
message('Please install the package gstat to run the example code.')
} else {
library(gstat)
model_1 <- gstat(formula = z ~ 1, locations = ~ x + y, dummy = TRUE, beta = 0,
model = vgm(psill = 0.025, range = 1, model = 'Exp'), nmax = 20)
model_2 <- gstat(formula = z ~ 1, locations = ~ x + y, dummy = TRUE, beta = 0,
model = vgm(psill = 0.025, range = 1, kappa = 2, model = 'Mat'),
nmax = 20)
model_3 <- gstat(formula = z ~ 1, locations = ~ x + y, dummy = TRUE, beta = 0,
model = vgm(psill = 0.025, range = 1, model = 'Gau'), nmax = 20)
field_1 <- predict(model_1, newdata = coords_df, nsim = 1)$sim1
field_2 <- predict(model_2, newdata = coords_df, nsim = 1)$sim1
field_3 <- predict(model_3, newdata = coords_df, nsim = 1)$sim1
field <- as.matrix(cbind(field_1, field_2, field_3))
# computing two ring kernel matrices and corresponding local covariance matrices
kernel_params_ring <- c(0, 0.5, 0.5, 2)
ring_kernel_list <-
spatial_kernel_matrix(coords, 'ring', kernel_params_ring)
loc_cov_ring <-
local_covariance_matrix(x = field, kernel_list = ring_kernel_list)
# computing two ring kernel matrices and corresponding local difference matrices
kernel_params_ring <- c(0, 0.5, 0.5, 2)
ring_kernel_list <-
spatial_kernel_matrix(coords, 'ring', kernel_params_ring)
loc_cov_ring <-
local_covariance_matrix(x = field, kernel_list = ring_kernel_list, lcov = 'ldiff')
# computing three ball kernel matrices and corresponding local covariance matrices
kernel_params_ball <- c(0.5, 1, 2)
ball_kernel_list <-
spatial_kernel_matrix(coords, 'ball', kernel_params_ball)
loc_cov_ball <-
local_covariance_matrix(x = field, kernel_list = ball_kernel_list)
# computing three gauss kernel matrices and corresponding local covariance matrices
kernel_params_gauss <- c(0.5, 1, 2)
gauss_kernel_list <-
spatial_kernel_matrix(coords, 'gauss', kernel_params_gauss)
loc_cov_gauss <-
local_covariance_matrix(x = field, kernel_list = gauss_kernel_list)
}