The Continuous Ranked Probability Score for Circular Variables.
The Continuous Ranked Probability Score for Circular Variables.
CRPScirc function computes the The Continuous Ranked Probability Score for Circular Variables
CRPScirc(obs, sim, bycol =FALSE)
Arguments
obs,: a vector of the values of the process at the test locations
sim,: a matrix with nrow the test locations and ncol the number of posterior samples from the posterior distributions
bycol,: logical. It is TRUE if the columns of sim represent the observations and the rows the posterior samples, the default value is FALSE
Returns
a list of 2 elements
CRPSvec: a vector of CRPS, one element for each test point
CRPS: the overall mean
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
Grimit, Eric P., Tilmann Gneiting, Veronica J. Berrocal, Nicholas Alexander Johnson. "The Continuous Ranked Probability Score for Circular Variables and its Application to Mesoscale Forecast Ensemble Verification", Q.J.R. Meteorol. Soc. 132 (2005), 2925-2942.
See Also
ProjKrigSp and WrapKrigSp for posterior spatial interpolation, and ProjKrigSpTi and WrapKrigSpTi for posterior spatio-temporal interpolation