WrapKrigSp function computes the spatial prediction for circular spatial data using samples from the posterior distribution of the spatial wrapped normal
WrapSp_out: the functions takes the output of WrapSp function
coords_obs: coordinates of observed locations (in UTM)
coords_nobs: coordinates of unobserved locations (in UTM)
x_obs: observed values
Returns
a list of 3 elements
M_out: the mean of the associated linear process on the prediction locations coords_nobs (rows) over all the posterior samples (columns) returned by WrapSp
V_out: the variance of the associated linear process on the prediction locations coords_nobs (rows) over all the posterior samples (columns) returned by WrapSp
Prev_out: the posterior predicted values at the unobserved locations.
Implementation Tips
To facilitate the estimations, the observations x are centered around pi, and the posterior samples of x and posterior mean are changed back to the original scale
Examples
library(CircSpaceTime)## auxiliary functionrmnorm<-function(n =1, mean = rep(0, d), varcov){ d <-if(is.matrix(varcov)) ncol(varcov)else1 z <- matrix(rnorm(n * d), n, d)%*% chol(varcov) y <- t(mean + t(z)) return(y)}##### Simulation with exponential spatial covariance function####set.seed(1)n <-20coords <- cbind(runif(n,0,100), runif(n,0,100))Dist <- as.matrix(dist(coords))rho <-0.05sigma2 <-0.3alpha <- c(0.5)SIGMA <- sigma2*exp(-rho*Dist)Y <- rmnorm(1,rep(alpha,times=n), SIGMA)theta <- c()for(i in1:n){ theta[i]<- Y[i]%%(2*pi)}rose_diag(theta)#validation setval <- sample(1:n,round(n*0.1))set.seed(12345)mod <- WrapSp( x = theta[-val], coords = coords[-val,], start = list("alpha"= c(.36,0.38),"rho"= c(0.041,0.052),"sigma2"= c(0.24,0.32),"k"= rep(0,(n - length(val)))), priors = list("rho"= c(0.04,0.08),#few observations require to be more informative"sigma2"= c(2,1),"alpha"= c(0,10)), sd_prop = list("sigma2"=0.1,"rho"=0.1), iter =1000, BurninThin = c(burnin =500, thin =5), accept_ratio =0.234, adapt_param = c(start =40000, end =45000, exp =0.5), corr_fun ="exponential", kappa_matern =.5, parallel =FALSE,#With doParallel, bigger iter (normally around 1e6) and n_cores>=2 it is a lot faster n_chains =2, n_cores =1)check <- ConvCheck(mod)check$Rhat ## close to 1 means convergence has been reached## graphical checkpar(mfrow = c(3,1))coda::traceplot(check$mcmc)par(mfrow = c(1,1))##### We move to the spatial interpolationKrig <- WrapKrigSp( WrapSp_out = mod, coords_obs = coords[-val,], coords_nobs = coords[val,], x_obs = theta[-val])#### check the quality of the prediction using APE and CRPSApeCheck <- APEcirc(theta[val],Krig$Prev_out)CrpsCheck <- CRPScirc(theta[val],Krig$Prev_out)
References
G. Jona-Lasinio, A .E. Gelfand, M. Jona-Lasinio, "Spatial analysis of wave direction data using wrapped Gaussian processes", The Annals of Applied Statistics, 6 (2012), 1478-1498
See Also
WrapSp for spatial sampling from Wrapped Normal , ProjSp for spatial sampling from Projected Normal and ProjKrigSp for Kriging estimation