#'@rdname CST_Predictability #'@title Computing scores of predictability using two dinamical proxies #'based on dynamical systems theory. #' #'@author Carmen Alvarez-Castro, \email{carmen.alvarez-castro@cmcc.it} #'@author Maria M. Chaves-Montero, \email{mdm.chaves-montero@cmcc.it} #'@author Veronica Torralba, \email{veronica.torralba@cmcc.it} #'@author Davide Faranda, \email{davide.faranda@lsce.ipsl.fr} #' #'@description This function divides in terciles the two dynamical proxies #'computed with CST_ProxiesAttractor or ProxiesAttractor. These terciles will #'be used to measure the predictability of the system in dyn_scores. When the #'local dimension 'dim' is small and the inverse of persistence 'theta' is #'small the predictability is higher, and viceversa. #' #'@references Faranda, D., Alvarez-Castro, M.C., Messori, G., Rodriguez, D., #'and Yiou, P. (2019). The hammam effect or how a warm ocean enhances large #'scale atmospheric predictability.Nature Communications, 10(1), 1316. #'DOI = https://doi.org/10.1038/s41467-019-09305-8 " #'@references Faranda, D., Gabriele Messori and Pascal Yiou. (2017). #' Dynamical proxies of North Atlantic predictability and extremes. #' Scientific Reports, 7-41278, 2017. #' #'@param dim data to create the attractor. Must be a matrix with the timesteps in nrow and the grids in ncol #'for instance: dat(time,grids)=(1:24418,1:1060), where time=24418 timesteps and grids=1060 gridpoints # #'@param theta list of arbitrary length of secondary grids. Each secondary grid is to be provided as a list of length 2 with longitudes and latitudes #' #'@param ncores The number of cores to use in parallel computation #' #'@return pred.dim a list of two lists 'qdim' and 'pos.d'. The 'qdim' list #'contains values of local dimension 'dim' divided by terciles: #'d1: lower tercile and more predictability, #'d2: middle tercile, #'d3: higher tercile and less predictability #'The 'pos.d' list contains the position of each tercile in parameter 'dim' #' #'@return pred.theta a list of two lists 'qtheta' and 'pos.t'. #'The 'qtheta' list contains values of the inverse of persistence 'theta' #'divided by terciles: #'th1: lower tercile and more predictability, #'th2: middle tercile, #'th3: higher tercile and less predictability #'The 'pos.t' list contains the position of each tercile in parameter 'theta' #' #'@return dyn_scores values from 0 to 1. A dyn_score of 1 indicates higher #'predictability. #' #'@import s2dverification #'@import multiApply #'@import CSTools #' #'@examples #'# Creating an example of matrix dat(time,grids): #' m=matrix(rand(1,2000)*10,nrow=50,ncol=40) #'# imposing a threshold #' quanti=0.90 #'# computing dyn_scores from parameters dim and theta of the attractor #' attractor = ProxiesAttractor(dat=m,quanti=0.60,iplot=FALSE) #' predyn = CST_Predictability(dim=attractor$dim,theta=attractor$theta) #' CST_Predictability <- function(dim,theta,ncores=NULL){ if (is.null(dim)) { stop("Parameter 'dim' is mandatory") } if (is.null(theta)) { stop("Parameter 'theta' is mandatory") } if (length(dim)!=length(theta)) { stop("Parameters 'dim' and 'theta' must have the same length") } pos <- c(1:length(dim)) # dim qd1 <- quantile(dim,0.33,na.rm=TRUE) qd3 <- quantile(dim,0.66,na.rm=TRUE) d3 <- which(dim>=qd3) d1 <- which(dim<=qd1) d2 <- which(dim>qd1 & dim=qt3) th1 <- which(theta<=qt1) th2 <- which(theta>qt1 & theta