From 2d4ac21fcb25d06dfe2ff82f28c14acef4c71ef0 Mon Sep 17 00:00:00 2001 From: aho Date: Mon, 13 Dec 2021 18:16:19 +0100 Subject: [PATCH 01/83] Add area weighting (undone) --- R/ACC.R | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/R/ACC.R b/R/ACC.R index 0f1040c..9e92da4 100644 --- a/R/ACC.R +++ b/R/ACC.R @@ -293,6 +293,9 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), c(space_dim, dat_dim)), fun = .ACC, dat_dim = dat_dim, avg_dim = avg_dim, +#------------NEW-------------- + lat = lat, +#------------NEW_END-------------- conftype = conftype, pval = pval, conf = conf, conf.lev = conf.lev, ncores_input = ncores, ncores = ncores) @@ -321,6 +324,9 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), c(space_dim, avg_dim, dat_dim)), fun = .ACC, dat_dim = dat_dim, avg_dim = avg_dim, +#------------NEW-------------- + lat = lat, +#------------NEW_END-------------- conftype = conftype, pval = pval, conf = conf, conf.lev = conf.lev, ncores_input = ncores, ncores = ncores) @@ -409,6 +415,15 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), if (is.null(avg_dim)) { # ACC +#-----------NEW-------------- + # area weighted + wt <- cos(lat * pi/180) + wt <- rep(wt, as.numeric(dim(exp_sub)[2])) ## dim(exp): [lat, lon] + exp_sub <- as.vector(t(exp_sub)) ## first longitudes and then latitudes + obs_sub <- as.vector(t(obs_sub)) ## first longitudes and then latitudes + exp_sub <- sqrt(wt) * (exp_sub - mean(exp_sub)) + obs_sub <- sqrt(wt) * (obs_sub - mean(obs_sub)) +#----------NEW_END----------- top <- sum(exp_sub*obs_sub, na.rm = TRUE) #a number bottom <- sqrt(sum(exp_sub^2, na.rm = TRUE) * sum(obs_sub^2, na.rm = TRUE)) acc[iexp, iobs] <- top/bottom #a number -- GitLab From 56462824cc0ba8bea4f4807e9cd7a91e4d5b4788 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 16 Dec 2021 14:35:22 +0100 Subject: [PATCH 02/83] Add area weighting and allow dat_dim = NULL --- R/ACC.R | 281 +++++++++++++++++++++++++++++++++-------------------- man/ACC.Rd | 47 +++++---- 2 files changed, 202 insertions(+), 126 deletions(-) diff --git a/R/ACC.R b/R/ACC.R index 9e92da4..340dd77 100644 --- a/R/ACC.R +++ b/R/ACC.R @@ -1,37 +1,40 @@ -#'Compute the anomaly correlation coefficient between the forecast and corresponding observation +#'Compute the spatial anomaly correlation coefficient between the forecast and corresponding observation #' -#'Calculate the anomaly correlation coefficient for the ensemble mean of each -#'model and the corresponding references over a spatial domain. It can return a -#'forecast time series if the data contain forest time dimension, and also the -#'start date mean if the data contain start date dimension. -#'The domain of interest can be specified by providing the list -#'of longitudes/latitudes (lon/lat) of the data together with the corners -#'of the domain: lonlatbox = c(lonmin, lonmax, latmin, latmax). +#'Calculate the spatial anomaly correlation coefficient (ACC) for the ensemble +#'mean of each model and the corresponding references over a spatial domain. It +#'can return a forecast time series if the data contain forest time dimension, +#'and also the ACC mean over one dimension, e.g., start date dimension. +#'The domain of interest can be specified by providing the list of longitudes/ +#'latitudes of the data together with the corners of the domain: lonlatbox = +#'c(lonmin, lonmax, latmin, latmax). The data will be adjusted to have a spatial +#'mean of zero, then area weighting is applied. The formula is referenced from +#'Wilks (2011; section 7.6.4; https://doi.org/10.1016/B978-0-12-385022-5.00008-7). #' #'@param exp A numeric array of experimental anomalies with named dimensions. -#' It must have at least 'dat_dim' and 'space_dim'. +#' The dimension must have at least 'space_dim'. #'@param obs A numeric array of observational anomalies with named dimensions. -#' It must have the same dimensions as 'exp' except the length of 'dat_dim' +#' The dimension should be the same as 'exp' except the length of 'dat_dim' #' and 'memb_dim'. #'@param dat_dim A character string indicating the name of dataset (nobs/nexp) -#' dimension. The default value is 'dataset'. +#' dimension. The default value is 'dataset'. If there is no dataset +#' dimension, set NULL. #'@param space_dim A character string vector of 2 indicating the name of the #' latitude and longitude dimensions (in order) along which ACC is computed. #' The default value is c('lat', 'lon'). #'@param avg_dim A character string indicating the name of the dimension to be -#' averaged. It must be one of 'time_dim'. The mean ACC is calculated along -#' averaged. If no need to calculate mean ACC, set as NULL. The default value -#' is 'sdate'. +#' averaged, which is usually the time dimension. If no need to calculate mean +#' ACC, set as NULL. The default value is 'sdate'. #'@param memb_dim A character string indicating the name of the member #' dimension. If the data are not ensemble ones, set as NULL. The default #' value is 'member'. -#'@param lat A vector of the latitudes of the exp/obs grids. Only required when -#' the domain of interested is specified. The default value is NULL. +#'@param lat A vector of the latitudes of the exp/obs grids. It is used for +#' area weighting and when the domain of interested 'lonlatbox' is specified. #'@param lon A vector of the longitudes of the exp/obs grids. Only required when -#' the domain of interested is specified. The default value is NULL. +#' the domain of interested 'lonlatbox' is specified. The default value is +#' NULL. #'@param lonlatbox A numeric vector of 4 indicating the corners of the domain of -#' interested: c(lonmin, lonmax, latmin, latmax). Only required when the domain -#' of interested is specified. The default value is NULL. +#' interested: c(lonmin, lonmax, latmin, latmax). The default value is NULL +#' and the whole data will be used. #'@param conf A logical value indicating whether to retrieve the confidence #' intervals or not. The default value is TRUE. #'@param conftype A charater string of "parametric" or "bootstrap". @@ -55,7 +58,8 @@ #'\item{acc}{ #' The ACC with the dimensions c(nexp, nobs, the rest of the dimension except #' space_dim and memb_dim). nexp is the number of experiment (i.e., dat_dim in -#' exp), and nobs is the number of observation (i.e., dat_dim in obs). +#' exp), and nobs is the number of observation (i.e., dat_dim in obs). If +#' dat_dim is NULL, nexp and nobs are omitted. #'} #'\item{conf.lower (if conftype = "parametric") or acc_conf.lower (if #' conftype = "bootstrap")}{ @@ -113,7 +117,8 @@ #'PlotACC(res_bootstrap, startDates) #' } #'@references Joliffe and Stephenson (2012). Forecast Verification: A -#' Practitioner's Guide in Atmospheric Science. Wiley-Blackwell. +#' Practitioner's Guide in Atmospheric Science. Wiley-Blackwell.; +#' Wilks (2011; section 7.6.4; https://doi.org/10.1016/B978-0-12-385022-5.00008-7). #'@import multiApply #'@importFrom abind abind #'@importFrom stats qt qnorm quantile @@ -146,11 +151,14 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), stop("Parameter 'exp' and 'obs' must have same dimension names.") } ## dat_dim - if (!is.character(dat_dim) | length(dat_dim) > 1) { - stop("Parameter 'dat_dim' must be a character string.") - } - if (!dat_dim %in% names(dim(exp)) | !dat_dim %in% names(dim(obs))) { - stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension.") + if (!is.null(dat_dim)) { + if (!is.character(dat_dim) | length(dat_dim) > 1) { + stop("Parameter 'dat_dim' must be a character string or NULL.") + } + if (!dat_dim %in% names(dim(exp)) | !dat_dim %in% names(dim(obs))) { + stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension.", + "Set it as NULL if there is no dataset dimension.") + } } ## space_dim if (!is.character(space_dim) | length(space_dim) != 2) { @@ -178,11 +186,12 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), } } ## lat - if (!is.null(lat)) { - if (!is.numeric(lat) | length(lat) != dim(exp)[space_dim[1]]) { - stop(paste0("Parameter 'lat' must be a numeric vector with the same ", - "length as the latitude dimension of 'exp' and 'obs'.")) - } + if (is.null(lat)) { + stop("Parameter 'lat' cannot be NULL. It is required for area weighting.") + } + if (!is.numeric(lat) | length(lat) != dim(exp)[space_dim[1]]) { + stop(paste0("Parameter 'lat' must be a numeric vector with the same ", + "length as the latitude dimension of 'exp' and 'obs'.")) } ## lon if (!is.null(lon)) { @@ -196,16 +205,22 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), if (!is.numeric(lonlatbox) | length(lonlatbox) != 4) { stop("Parameter 'lonlatbox' must be a numeric vector of 4.") } - } - ## lat, lon, and lonlatbox - if (!is.null(lon) & !is.null(lat) & !is.null(lonlatbox)) { + if (is.null(lon)) { + stop("Parameter 'lat' and 'lon' are required if 'lonlatbox' is specified.") + } select_lonlat <- TRUE - } else if (is.null(lon) & is.null(lat) & is.null(lonlatbox)) { - select_lonlat <- FALSE } else { - stop(paste0("Parameters 'lon', 'lat', and 'lonlatbox' must be used or be ", - "NULL at the same time.")) + select_lonlat <- FALSE } +# ## lat, lon, and lonlatbox +# if (!is.null(lon) & !is.null(lat) & !is.null(lonlatbox)) { +# select_lonlat <- TRUE +# } else if (is.null(lon) & is.null(lat) & is.null(lonlatbox)) { +# select_lonlat <- FALSE +# } else { +# stop(paste0("Parameters 'lon', 'lat', and 'lonlatbox' must be used or be ", +# "NULL at the same time.")) +# } ## conf if (!is.logical(conf) | length(conf) > 1) { stop("Parameter 'conf' must be one logical value.") @@ -219,7 +234,8 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), stop("Parameter 'memb_dim' cannot be NULL when parameter 'conftype' is 'bootstrap'.") } ## conf.lev - if (!is.numeric(conf.lev) | conf.lev < 0 | conf.lev > 1 | length(conf.lev) > 1) { + if (!is.numeric(conf.lev) | any(conf.lev < 0) | any(conf.lev > 1) | + length(conf.lev) > 1) { stop("Parameter 'conf.lev' must be a numeric number between 0 and 1.") } } @@ -229,8 +245,8 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), } ## ncores if (!is.null(ncores)) { - if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores < 0 | - length(ncores) > 1) { + if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | + length(ncores) > 1) { stop("Parameter 'ncores' must be a positive integer.") } } @@ -293,9 +309,7 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), c(space_dim, dat_dim)), fun = .ACC, dat_dim = dat_dim, avg_dim = avg_dim, -#------------NEW-------------- lat = lat, -#------------NEW_END-------------- conftype = conftype, pval = pval, conf = conf, conf.lev = conf.lev, ncores_input = ncores, ncores = ncores) @@ -324,9 +338,7 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), c(space_dim, avg_dim, dat_dim)), fun = .ACC, dat_dim = dat_dim, avg_dim = avg_dim, -#------------NEW-------------- lat = lat, -#------------NEW_END-------------- conftype = conftype, pval = pval, conf = conf, conf.lev = conf.lev, ncores_input = ncores, ncores = ncores) @@ -354,23 +366,27 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), return(res) } -.ACC <- function(exp, obs, dat_dim = 'dataset', #space_dim = c('lat', 'lon'), - avg_dim = 'sdate', #memb_dim = NULL, - lon = NULL, lat = NULL, lonlatbox = NULL, +.ACC <- function(exp, obs, dat_dim = 'dataset', avg_dim = 'sdate', lat, conf = TRUE, conftype = "parametric", conf.lev = 0.95, pval = TRUE, ncores_input = NULL) { - -# if (is.null(avg_dim)) - # exp: [space_dim, dat_exp] - # obs: [space_dim, dat_obs] -# if (!is.null(avg_dim)) - # exp: [space_dim, avg_dim, dat_exp] - # obs: [space_dim, avg_dim, dat_obs] - # .ACC() should use all the spatial points to calculate ACC. It returns [nexp, nobs]. - - nexp <- as.numeric(dim(exp)[length(dim(exp))]) - nobs <- as.numeric(dim(obs)[length(dim(obs))]) + # If dat_dim = NULL, it returns a number. + + # if (is.null(avg_dim)) + ## exp: [lat, lon, (dat_exp)] + ## obs: [lat, lon, (dat_obs)] + # if (!is.null(avg_dim)) + ## exp: [lat, lon, avg_dim, (dat_exp)] + ## obs: [lat, lon, avg_dim, (dat_obs)] + + # Add dat_dim temporarily if dat_dim = NULL + if (is.null(dat_dim)) { + nexp <- 1 + nobs <- 1 + } else { + nexp <- as.numeric(dim(exp)[length(dim(exp))]) + nobs <- as.numeric(dim(obs)[length(dim(obs))]) + } if (is.null(avg_dim)) { acc <- array(dim = c(nexp = nexp, nobs = nobs)) @@ -378,34 +394,67 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), if (conf) { conf.upper <- array(dim = c(nexp = nexp, nobs = nobs)) conf.lower <- array(dim = c(nexp = nexp, nobs = nobs)) - if (conftype == 'bootstrap') { - ndraw <- 100 - acc_draw <- array(dim = c(nexp = nexp, nobs = nobs, ndraw)) - } } } else { - acc <- array(dim = c(nexp = nexp, nobs = nobs, dim(exp)[length(dim(exp)) - 1])) - names(dim(acc))[3] <- avg_dim - macc <- array(dim = c(nexp = nexp, nobs = nobs)) - if (pval) p.val <- array(dim = c(nexp = nexp, nobs = nobs, dim(exp)[length(dim(exp)) - 1])) + acc <- array(dim = c(nexp = nexp, nobs = nobs, dim(exp)[avg_dim])) + names(dim(acc))[3] <- avg_dim + macc <- array(dim = c(nexp = nexp, nobs = nobs)) + if (pval) p.val <- array(dim = c(nexp = nexp, nobs = nobs, dim(exp)[avg_dim])) if (conf) { - conf.upper <- array(dim = c(nexp = nexp, nobs = nobs, dim(exp)[length(dim(exp)) - 1])) - conf.lower <- array(dim = c(nexp = nexp, nobs = nobs, dim(exp)[length(dim(exp)) - 1])) - if (conftype == 'bootstrap') { - ndraw <- 100 - acc_draw <- array(dim = c(nexp = nexp, nobs = nobs, dim(exp)[length(dim(exp)) - 1], ndraw)) - macc_draw <- array(dim = c(nexp = nexp, nobs = nobs, ndraw)) - } + conf.upper <- array(dim = c(nexp = nexp, nobs = nobs, dim(exp)[avg_dim])) + conf.lower <- array(dim = c(nexp = nexp, nobs = nobs, dim(exp)[avg_dim])) } } + # centralize & area weighted + ## spatial centralization for each [avg_dim, dat] + dim_exp <- dim(exp) + dim_obs <- dim(obs) + wt <- cos(lat * pi/180) + wt <- rep(wt, times = prod(dim_exp[2:length(dim_exp)])) + + if (is.null(avg_dim)) { # [lat, lon, (dat)] + if (is.null(dat_dim)) { #[lat, lon] + # turn exp and obs into vector, first latitudes and then longitudes + exp <- as.vector(exp) + obs <- as.vector(obs) + exp <- array(sqrt(wt) * (exp - mean(exp, na.rm = TRUE)), dim = dim_exp) + obs <- array(sqrt(wt) * (obs - mean(obs, na.rm = TRUE)), dim = dim_obs) + } else { #[lat, lon, dat] + # exp + exp <- array(exp, dim = c(prod(dim_exp[1:2]), dim_exp[3])) + mean_exp <- rep(apply(exp, 2, mean, na.rm = TRUE), each = prod(dim_exp[1:2])) + exp <- array(sqrt(wt) * (as.vector(exp) - mean_exp), dim = dim_exp) + # obs + obs <- array(obs, dim = c(prod(dim_obs[1:2]), dim_obs[3])) + mean_obs <- rep(apply(obs, 2, mean, na.rm = TRUE), each = prod(dim_obs[1:2])) + obs <- array(sqrt(wt) * (as.vector(obs) - mean_obs), dim = dim_obs) + } + } else { #[lat, lon, avg_dim, (dat)] + # exp + exp <- array(exp, dim = c(prod(dim_exp[1:2]), dim_exp[3:length(dim_exp)])) + mean_exp <- apply(exp, 2:length(dim(exp)), mean, na.rm = TRUE) # [avg_dim, (dat)] + mean_exp <- rep(as.vector(mean_exp), each = prod(dim_exp[1:2])) + exp <- array(sqrt(wt) * (as.vector(exp) - mean_exp), dim = dim_exp) + # obs + obs <- array(obs, dim = c(prod(dim_obs[1:2]), dim_obs[3:length(dim_obs)])) + mean_obs <- apply(obs, 2:length(dim(obs)), mean, na.rm = TRUE) # [avg_dim, (dat)] + mean_obs <- rep(as.vector(mean_obs), each = prod(dim_obs[1:2])) + obs <- array(sqrt(wt) * (as.vector(obs) - mean_obs), dim = dim_obs) + } + # Per-paired exp and obs. NAs should be in the same position in both exp and obs for (iobs in 1:nobs) { for (iexp in 1:nexp) { - exp_sub <- ClimProjDiags::Subset(exp, dat_dim, iexp, drop = 'selected') - obs_sub <- ClimProjDiags::Subset(obs, dat_dim, iobs, drop = 'selected') - # dim: [space_dim] + if (!is.null(dat_dim)) { + exp_sub <- ClimProjDiags::Subset(exp, dat_dim, iexp, drop = 'selected') + obs_sub <- ClimProjDiags::Subset(obs, dat_dim, iobs, drop = 'selected') + } else { + exp_sub <- exp + obs_sub <- obs + } + # dim: [lat, lon, (avg_dim)] # Variance(iexp) should not take into account any point # that is not available in iobs and therefore not accounted for @@ -413,29 +462,26 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), exp_sub[is.na(obs_sub)] <- NA obs_sub[is.na(exp_sub)] <- NA + # area weights + wt <- cos(lat * pi/180) + if (is.null(avg_dim)) { # ACC -#-----------NEW-------------- - # area weighted - wt <- cos(lat * pi/180) - wt <- rep(wt, as.numeric(dim(exp_sub)[2])) ## dim(exp): [lat, lon] - exp_sub <- as.vector(t(exp_sub)) ## first longitudes and then latitudes - obs_sub <- as.vector(t(obs_sub)) ## first longitudes and then latitudes - exp_sub <- sqrt(wt) * (exp_sub - mean(exp_sub)) - obs_sub <- sqrt(wt) * (obs_sub - mean(obs_sub)) -#----------NEW_END----------- - top <- sum(exp_sub*obs_sub, na.rm = TRUE) #a number + top <- sum(exp_sub * obs_sub, na.rm = TRUE) #a number bottom <- sqrt(sum(exp_sub^2, na.rm = TRUE) * sum(obs_sub^2, na.rm = TRUE)) acc[iexp, iobs] <- top/bottom #a number # handle bottom = 0 if (is.infinite(acc[iexp, iobs])) acc[iexp, iobs] <- NA + # pval and conf if (pval | conf) { if (conftype == "parametric") { - # calculate effective sample size along space_dim - # combine space_dim into one dim first - obs_tmp <- array(obs_sub, dim = c(space = length(obs_sub))) - eno <- Eno(obs_tmp, 'space', ncores = ncores_input) # a number + # calculate effective sample size +# # combine space_dim into one dim first +# obs_tmp <- array(obs_sub, dim = c(space = length(obs_sub))) +# eno <- Eno(obs_tmp, 'space', ncores = ncores_input) # a number + eno <- .Eno(as.vector(obs_sub), na.action = na.pass) + if (pval) { t <- qt(conf.lev, eno - 2) # a number p.val[iexp, iobs] <- sqrt(t^2 / (t^2 + eno - 2)) @@ -448,18 +494,22 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), } } else { #avg_dim is not NULL + # exp_sub and obs_sub: [lat, lon, avg_dim] + # MACC - top <- sum(exp_sub*obs_sub, na.rm = TRUE) #a number +# ## area weighted + top <- sum(exp_sub * obs_sub, na.rm = TRUE) #a number bottom <- sqrt(sum(exp_sub^2, na.rm = TRUE) * sum(obs_sub^2, na.rm = TRUE)) macc[iexp, iobs] <- top/bottom #a number + # handle bottom = 0 if (is.infinite(macc[iexp, iobs])) macc[iexp, iobs] <- NA + # ACC - for (i in 1:dim(acc)[3]) { #NOTE: use sapply!!! - exp_sub_i <- ClimProjDiags::Subset(exp_sub, avg_dim, i, drop = 'selected') - obs_sub_i <- ClimProjDiags::Subset(obs_sub, avg_dim, i, drop = 'selected') - #dim: [space_dim] - top <- sum(exp_sub_i*obs_sub_i, na.rm = TRUE) #a number + for (i in 1:dim(acc)[3]) { + exp_sub_i <- exp_sub[, , i] + obs_sub_i <- obs_sub[, , i] + top <- sum(exp_sub_i * obs_sub_i, na.rm = TRUE) #a number bottom <- sqrt(sum(exp_sub_i^2, na.rm = TRUE) * sum(obs_sub_i^2, na.rm = TRUE)) acc[iexp, iobs, i] <- top/bottom #a number # handle bottom = 0 @@ -471,9 +521,10 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), if (conftype == "parametric") { # calculate effective sample size along space_dim # combine space_dim into one dim first - obs_tmp <- array(obs_sub, dim = c(space = prod(dim(obs_sub)[-length(dim(obs_sub))]), - dim(obs_sub)[length(dim(obs_sub))])) - eno <- Eno(obs_tmp, 'space', ncores = ncores_input) # a vector of avg_dim + obs_tmp <- array(obs_sub, + dim = c(space = prod(dim(obs_sub)[1:2]), + dim(obs_sub)[3])) + eno <- apply(obs_tmp, 2, .Eno, na.action = na.pass) # a vector of avg_dim if (pval) { t <- qt(conf.lev, eno - 2) # a vector of avg_dim p.val[iexp, iobs, ] <- sqrt(t^2 / (t^2 + eno - 2)) @@ -491,8 +542,29 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), } #------------------------------------------------ - - + # Remove nexp and nobs if dat_dim = NULL + if (is.null(dat_dim)) { + if (is.null(avg_dim)) { + acc <- as.vector(acc) + if (conf) { + conf.lower <- as.vector(conf.lower) + conf.upper <- as.vector(conf.upper) + } + if (pval) { + p.val <- as.vector(p.val) + } + } else { + dim(acc) <- dim(acc)[3:length(dim(acc))] + macc <- as.vector(macc) + if (conf) { + dim(conf.lower) <- dim(conf.lower)[3:length(dim(conf.lower))] + dim(conf.upper) <- dim(conf.upper)[3:length(dim(conf.upper))] + } + if (pval) { + dim(p.val) <- dim(p.val)[3:length(dim(p.val))] + } + } + } # Return output if (is.null(avg_dim)) { @@ -524,9 +596,8 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), } -.ACC_bootstrap <- function(exp, obs, dat_dim = 'dataset', #space_dim = c('lat', 'lon'), - avg_dim = 'sdate', memb_dim = NULL, - lon = NULL, lat = NULL, lonlatbox = NULL, +.ACC_bootstrap <- function(exp, obs, dat_dim = 'dataset', + avg_dim = 'sdate', memb_dim = NULL, lat = NULL, conf = TRUE, conftype = "parametric", conf.lev = 0.95, pval = TRUE, ncores_input = NULL) { # if (is.null(avg_dim)) diff --git a/man/ACC.Rd b/man/ACC.Rd index d1389fd..a9039d6 100644 --- a/man/ACC.Rd +++ b/man/ACC.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/ACC.R \name{ACC} \alias{ACC} -\title{Compute the anomaly correlation coefficient between the forecast and corresponding observation} +\title{Compute the spatial anomaly correlation coefficient between the forecast and corresponding observation} \usage{ ACC( exp, @@ -23,37 +23,38 @@ ACC( } \arguments{ \item{exp}{A numeric array of experimental anomalies with named dimensions. -It must have at least 'dat_dim' and 'space_dim'.} +The dimension must have at least 'space_dim'.} \item{obs}{A numeric array of observational anomalies with named dimensions. -It must have the same dimensions as 'exp' except the length of 'dat_dim' +The dimension should be the same as 'exp' except the length of 'dat_dim' and 'memb_dim'.} \item{dat_dim}{A character string indicating the name of dataset (nobs/nexp) -dimension. The default value is 'dataset'.} +dimension. The default value is 'dataset'. If there is no dataset +dimension, set NULL.} \item{space_dim}{A character string vector of 2 indicating the name of the latitude and longitude dimensions (in order) along which ACC is computed. The default value is c('lat', 'lon').} \item{avg_dim}{A character string indicating the name of the dimension to be -averaged. It must be one of 'time_dim'. The mean ACC is calculated along -averaged. If no need to calculate mean ACC, set as NULL. The default value -is 'sdate'.} +averaged, which is usually the time dimension. If no need to calculate mean +ACC, set as NULL. The default value is 'sdate'.} \item{memb_dim}{A character string indicating the name of the member dimension. If the data are not ensemble ones, set as NULL. The default value is 'member'.} -\item{lat}{A vector of the latitudes of the exp/obs grids. Only required when -the domain of interested is specified. The default value is NULL.} +\item{lat}{A vector of the latitudes of the exp/obs grids. It is used for +area weighting and when the domain of interested 'lonlatbox' is specified.} \item{lon}{A vector of the longitudes of the exp/obs grids. Only required when -the domain of interested is specified. The default value is NULL.} +the domain of interested 'lonlatbox' is specified. The default value is +NULL.} \item{lonlatbox}{A numeric vector of 4 indicating the corners of the domain of -interested: c(lonmin, lonmax, latmin, latmax). Only required when the domain -of interested is specified. The default value is NULL.} +interested: c(lonmin, lonmax, latmin, latmax). The default value is NULL +and the whole data will be used.} \item{conf}{A logical value indicating whether to retrieve the confidence intervals or not. The default value is TRUE.} @@ -82,7 +83,8 @@ A list containing the numeric arrays:\cr \item{acc}{ The ACC with the dimensions c(nexp, nobs, the rest of the dimension except space_dim and memb_dim). nexp is the number of experiment (i.e., dat_dim in - exp), and nobs is the number of observation (i.e., dat_dim in obs). + exp), and nobs is the number of observation (i.e., dat_dim in obs). If + dat_dim is NULL, nexp and nobs are omitted. } \item{conf.lower (if conftype = "parametric") or acc_conf.lower (if conftype = "bootstrap")}{ @@ -113,13 +115,15 @@ A list containing the numeric arrays:\cr } } \description{ -Calculate the anomaly correlation coefficient for the ensemble mean of each -model and the corresponding references over a spatial domain. It can return a -forecast time series if the data contain forest time dimension, and also the -start date mean if the data contain start date dimension. -The domain of interest can be specified by providing the list -of longitudes/latitudes (lon/lat) of the data together with the corners -of the domain: lonlatbox = c(lonmin, lonmax, latmin, latmax). +Calculate the spatial anomaly correlation coefficient (ACC) for the ensemble +mean of each model and the corresponding references over a spatial domain. It +can return a forecast time series if the data contain forest time dimension, +and also the ACC mean over one dimension, e.g., start date dimension. +The domain of interest can be specified by providing the list of longitudes/ +latitudes of the data together with the corners of the domain: lonlatbox = +c(lonmin, lonmax, latmin, latmax). The data will be adjusted to have a spatial +mean of zero, then area weighting is applied. The formula is referenced from +Wilks (2011; section 7.6.4; https://doi.org/10.1016/B978-0-12-385022-5.00008-7). } \examples{ \dontshow{ @@ -151,5 +155,6 @@ PlotACC(res_bootstrap, startDates) } \references{ Joliffe and Stephenson (2012). Forecast Verification: A - Practitioner's Guide in Atmospheric Science. Wiley-Blackwell. + Practitioner's Guide in Atmospheric Science. Wiley-Blackwell.; + Wilks (2011; section 7.6.4; https://doi.org/10.1016/B978-0-12-385022-5.00008-7). } -- GitLab From 7f0cd2a474c9992774bafe161824b23f9eecd29a Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 16 Dec 2021 15:04:02 +0100 Subject: [PATCH 03/83] Delete unneeded lines and simplified code --- R/ACC.R | 142 ++++++++++++++++++----------------------------------- man/ACC.Rd | 4 +- 2 files changed, 51 insertions(+), 95 deletions(-) diff --git a/R/ACC.R b/R/ACC.R index 340dd77..55220d7 100644 --- a/R/ACC.R +++ b/R/ACC.R @@ -105,8 +105,8 @@ #'clim <- Clim(sampleData$mod, sampleData$obs) #'ano_exp <- Ano(sampleData$mod, clim$clim_exp) #'ano_obs <- Ano(sampleData$obs, clim$clim_obs) -#'acc <- ACC(ano_exp, ano_obs) -#'acc_bootstrap <- ACC(ano_exp, ano_obs, conftype = 'bootstrap') +#'acc <- ACC(ano_exp, ano_obs, lat = sampleData$lat) +#'acc_bootstrap <- ACC(ano_exp, ano_obs, conftype = 'bootstrap', lat = sampleData$lat) #'# Combine acc results for PlotACC #'res <- array(c(acc$conf.lower, acc$acc, acc$conf.upper, acc$p.val), #' dim = c(dim(acc$acc), 4)) @@ -212,15 +212,6 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), } else { select_lonlat <- FALSE } -# ## lat, lon, and lonlatbox -# if (!is.null(lon) & !is.null(lat) & !is.null(lonlatbox)) { -# select_lonlat <- TRUE -# } else if (is.null(lon) & is.null(lat) & is.null(lonlatbox)) { -# select_lonlat <- FALSE -# } else { -# stop(paste0("Parameters 'lon', 'lat', and 'lonlatbox' must be used or be ", -# "NULL at the same time.")) -# } ## conf if (!is.logical(conf) | length(conf) > 1) { stop("Parameter 'conf' must be one logical value.") @@ -303,72 +294,50 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), obs <- MeanDims(obs, memb_dim, na.rm = TRUE) } - if (is.null(avg_dim)) { - res <- Apply(list(exp, obs), - target_dims = list(c(space_dim, dat_dim), - c(space_dim, dat_dim)), - fun = .ACC, - dat_dim = dat_dim, avg_dim = avg_dim, - lat = lat, - conftype = conftype, pval = pval, conf = conf, conf.lev = conf.lev, - ncores_input = ncores, - ncores = ncores) - - if (conftype == 'bootstrap') { - res_conf <- Apply(list(exp_ori, obs_ori), - target_dims = list(c(memb_dim, dat_dim, space_dim), - c(memb_dim, dat_dim, space_dim)), - fun = .ACC_bootstrap, - dat_dim = dat_dim, memb_dim = memb_dim, avg_dim = avg_dim, - conftype = conftype, pval = pval, conf = conf, conf.lev = conf.lev, - ncores_input = ncores, - ncores = ncores) - #NOTE: pval? - res <- list(acc = res$acc, - acc_conf.lower = res_conf$acc_conf.lower, - acc_conf.upper = res_conf$acc_conf.upper, - macc = res$macc, - macc_conf.lower = res_conf$macc_conf.lower, - macc_conf.upper = res_conf$macc_conf.upper) - } + if (is.null(avg_dim)) { + target_dims <- list(c(space_dim, dat_dim), c(space_dim, dat_dim)) } else { - res <- Apply(list(exp, obs), - target_dims = list(c(space_dim, avg_dim, dat_dim), - c(space_dim, avg_dim, dat_dim)), + target_dims <- list(c(space_dim, avg_dim, dat_dim), c(space_dim, avg_dim, dat_dim)) + } + res <- Apply(list(exp, obs), + target_dims = target_dims, fun = .ACC, dat_dim = dat_dim, avg_dim = avg_dim, lat = lat, conftype = conftype, pval = pval, conf = conf, conf.lev = conf.lev, - ncores_input = ncores, ncores = ncores) - if (conftype == 'bootstrap') { - res_conf <- Apply(list(exp_ori, obs_ori), - target_dims = list(c(memb_dim, dat_dim, avg_dim, space_dim), - c(memb_dim, dat_dim, avg_dim, space_dim)), - fun = .ACC_bootstrap, - dat_dim = dat_dim, memb_dim = memb_dim, avg_dim = avg_dim, - conftype = conftype, pval = pval, conf = conf, conf.lev = conf.lev, - ncores_input = ncores, - ncores = ncores) - res <- list(acc = res$acc, - acc_conf.lower = res_conf$acc_conf.lower, - acc_conf.upper = res_conf$acc_conf.upper, - macc = res$macc, - macc_conf.lower = res_conf$macc_conf.lower, - macc_conf.upper = res_conf$macc_conf.upper) - + # If bootstrap, calculate confidence level + if (conftype == 'bootstrap') { + if (is.null(avg_dim)) { + target_dims_bs <- list(c(memb_dim, dat_dim, space_dim), + c(memb_dim, dat_dim, space_dim)) + } else { + target_dims_bs <- list(c(memb_dim, dat_dim, avg_dim, space_dim), + c(memb_dim, dat_dim, avg_dim, space_dim)) } - - } - - return(res) + res_conf <- Apply(list(exp_ori, obs_ori), + target_dims = target_dims_bs, + fun = .ACC_bootstrap, + dat_dim = dat_dim, memb_dim = memb_dim, avg_dim = avg_dim, + lat = lat, + conftype = conftype, pval = pval, conf = conf, conf.lev = conf.lev, + ncores = ncores) + #NOTE: pval? + res <- list(acc = res$acc, + acc_conf.lower = res_conf$acc_conf.lower, + acc_conf.upper = res_conf$acc_conf.upper, + macc = res$macc, + macc_conf.lower = res_conf$macc_conf.lower, + macc_conf.upper = res_conf$macc_conf.upper) + } + + return(res) } .ACC <- function(exp, obs, dat_dim = 'dataset', avg_dim = 'sdate', lat, - conf = TRUE, conftype = "parametric", conf.lev = 0.95, pval = TRUE, - ncores_input = NULL) { + conf = TRUE, conftype = "parametric", conf.lev = 0.95, pval = TRUE) { # .ACC() should use all the spatial points to calculate ACC. It returns [nexp, nobs]. # If dat_dim = NULL, it returns a number. @@ -414,24 +383,13 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), wt <- cos(lat * pi/180) wt <- rep(wt, times = prod(dim_exp[2:length(dim_exp)])) - if (is.null(avg_dim)) { # [lat, lon, (dat)] - if (is.null(dat_dim)) { #[lat, lon] - # turn exp and obs into vector, first latitudes and then longitudes - exp <- as.vector(exp) - obs <- as.vector(obs) - exp <- array(sqrt(wt) * (exp - mean(exp, na.rm = TRUE)), dim = dim_exp) - obs <- array(sqrt(wt) * (obs - mean(obs, na.rm = TRUE)), dim = dim_obs) - } else { #[lat, lon, dat] - # exp - exp <- array(exp, dim = c(prod(dim_exp[1:2]), dim_exp[3])) - mean_exp <- rep(apply(exp, 2, mean, na.rm = TRUE), each = prod(dim_exp[1:2])) - exp <- array(sqrt(wt) * (as.vector(exp) - mean_exp), dim = dim_exp) - # obs - obs <- array(obs, dim = c(prod(dim_obs[1:2]), dim_obs[3])) - mean_obs <- rep(apply(obs, 2, mean, na.rm = TRUE), each = prod(dim_obs[1:2])) - obs <- array(sqrt(wt) * (as.vector(obs) - mean_obs), dim = dim_obs) - } - } else { #[lat, lon, avg_dim, (dat)] + if (is.null(avg_dim) & is.null(dat_dim)) { #[lat, lon] + # turn exp and obs into vector, first latitudes and then longitudes + exp <- as.vector(exp) + obs <- as.vector(obs) + exp <- array(sqrt(wt) * (exp - mean(exp, na.rm = TRUE)), dim = dim_exp) + obs <- array(sqrt(wt) * (obs - mean(obs, na.rm = TRUE)), dim = dim_obs) + } else { # [lat, lon, dat], [lat, lon, avg_dim], or [lat, lon, avg_dim, dat] # exp exp <- array(exp, dim = c(prod(dim_exp[1:2]), dim_exp[3:length(dim_exp)])) mean_exp <- apply(exp, 2:length(dim(exp)), mean, na.rm = TRUE) # [avg_dim, (dat)] @@ -477,9 +435,6 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), if (pval | conf) { if (conftype == "parametric") { # calculate effective sample size -# # combine space_dim into one dim first -# obs_tmp <- array(obs_sub, dim = c(space = length(obs_sub))) -# eno <- Eno(obs_tmp, 'space', ncores = ncores_input) # a number eno <- .Eno(as.vector(obs_sub), na.action = na.pass) if (pval) { @@ -497,7 +452,6 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), # exp_sub and obs_sub: [lat, lon, avg_dim] # MACC -# ## area weighted top <- sum(exp_sub * obs_sub, na.rm = TRUE) #a number bottom <- sqrt(sum(exp_sub^2, na.rm = TRUE) * sum(obs_sub^2, na.rm = TRUE)) macc[iexp, iobs] <- top/bottom #a number @@ -530,8 +484,10 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), p.val[iexp, iobs, ] <- sqrt(t^2 / (t^2 + eno - 2)) } if (conf) { - conf.upper[iexp, iobs, ] <- tanh(atanh(acc[iexp, iobs, ]) + qnorm(1 - (1 - conf.lev) / 2) / sqrt(eno - 3)) - conf.lower[iexp, iobs, ] <- tanh(atanh(acc[iexp, iobs, ]) + qnorm((1 - conf.lev) / 2) / sqrt(eno - 3)) + conf.upper[iexp, iobs, ] <- tanh(atanh(acc[iexp, iobs, ]) + + qnorm(1 - (1 - conf.lev) / 2) / sqrt(eno - 3)) + conf.lower[iexp, iobs, ] <- tanh(atanh(acc[iexp, iobs, ]) + + qnorm((1 - conf.lev) / 2) / sqrt(eno - 3)) } } } @@ -597,9 +553,9 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), .ACC_bootstrap <- function(exp, obs, dat_dim = 'dataset', - avg_dim = 'sdate', memb_dim = NULL, lat = NULL, - conf = TRUE, conftype = "parametric", conf.lev = 0.95, pval = TRUE, - ncores_input = NULL) { + avg_dim = 'sdate', memb_dim = NULL, lat, + conf = TRUE, conftype = "parametric", conf.lev = 0.95, + pval = TRUE) { # if (is.null(avg_dim)) # exp: [memb_exp, dat_exp, space_dim] # obs: [memb_obs, dat_obs, space_dim] @@ -657,7 +613,7 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), #calculate the ACC of the randomized field tmpACC <- .ACC(drawexp, drawobs, conf = FALSE, pval = FALSE, avg_dim = avg_dim, - ncores_input = ncores_input) + lat = lat) if (is.null(avg_dim)) { acc_draw[, , jdraw] <- tmpACC$acc } else { diff --git a/man/ACC.Rd b/man/ACC.Rd index a9039d6..979afcb 100644 --- a/man/ACC.Rd +++ b/man/ACC.Rd @@ -141,8 +141,8 @@ sampleData$obs <- Season(sampleData$obs, monini = 11, moninf = 12, monsup = 2) clim <- Clim(sampleData$mod, sampleData$obs) ano_exp <- Ano(sampleData$mod, clim$clim_exp) ano_obs <- Ano(sampleData$obs, clim$clim_obs) -acc <- ACC(ano_exp, ano_obs) -acc_bootstrap <- ACC(ano_exp, ano_obs, conftype = 'bootstrap') +acc <- ACC(ano_exp, ano_obs, lat = sampleData$lat) +acc_bootstrap <- ACC(ano_exp, ano_obs, conftype = 'bootstrap', lat = sampleData$lat) # Combine acc results for PlotACC res <- array(c(acc$conf.lower, acc$acc, acc$conf.upper, acc$p.val), dim = c(dim(acc$acc), 4)) -- GitLab From 560ee5c8a3b548c62eab771a630c659805e32c8d Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 16 Dec 2021 15:28:24 +0100 Subject: [PATCH 04/83] Small docfix --- R/ACC.R | 6 ++++-- man/ACC.Rd | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/R/ACC.R b/R/ACC.R index 55220d7..ab8185c 100644 --- a/R/ACC.R +++ b/R/ACC.R @@ -78,7 +78,8 @@ #'\item{macc}{ #' The mean anomaly correlation coefficient with dimensions #' c(nexp, nobs, the rest of the dimension except space_dim, memb_dim, and -#' avg_dim). Only present if 'avg_dim' is not NULL. +#' avg_dim). Only present if 'avg_dim' is not NULL. If dat_dim is NULL, nexp +#' and nobs are omitted. #'} #'\item{macc_conf.lower}{ #' The lower confidence interval of MACC with the same dimensions as MACC. @@ -182,7 +183,8 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), stop("Parameter 'memb_dim' must be a character string.") } if (!memb_dim %in% names(dim(exp)) | !memb_dim %in% names(dim(obs))) { - stop("Parameter 'memb_dim' is not found in 'exp' or 'obs' dimension.") + stop("Parameter 'memb_dim' is not found in 'exp' or 'obs' dimension.", + "Set it as NULL if there is no member dimension.") } } ## lat diff --git a/man/ACC.Rd b/man/ACC.Rd index 979afcb..5bd17f6 100644 --- a/man/ACC.Rd +++ b/man/ACC.Rd @@ -103,7 +103,8 @@ A list containing the numeric arrays:\cr \item{macc}{ The mean anomaly correlation coefficient with dimensions c(nexp, nobs, the rest of the dimension except space_dim, memb_dim, and - avg_dim). Only present if 'avg_dim' is not NULL. + avg_dim). Only present if 'avg_dim' is not NULL. If dat_dim is NULL, nexp + and nobs are omitted. } \item{macc_conf.lower}{ The lower confidence interval of MACC with the same dimensions as MACC. -- GitLab From 75cf9835164545d02a2424afcdb665529db3bcb4 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 16 Dec 2021 15:32:32 +0100 Subject: [PATCH 05/83] Remove unneeded line --- R/ACC.R | 3 --- 1 file changed, 3 deletions(-) diff --git a/R/ACC.R b/R/ACC.R index ab8185c..113d7ac 100644 --- a/R/ACC.R +++ b/R/ACC.R @@ -422,9 +422,6 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), exp_sub[is.na(obs_sub)] <- NA obs_sub[is.na(exp_sub)] <- NA - # area weights - wt <- cos(lat * pi/180) - if (is.null(avg_dim)) { # ACC top <- sum(exp_sub * obs_sub, na.rm = TRUE) #a number -- GitLab From 257c6ec62705749cb1d579fa5cabdf06ce2cfb65 Mon Sep 17 00:00:00 2001 From: aho Date: Mon, 3 Jan 2022 18:23:50 +0100 Subject: [PATCH 06/83] Change space_dim to lat_dim and lon_dim --- R/ACC.R | 84 ++++++++++++++++----------- man/ACC.Rd | 18 ++++-- tests/testthat/test-ACC.R | 117 ++++++++++++++++++++++++++------------ 3 files changed, 144 insertions(+), 75 deletions(-) diff --git a/R/ACC.R b/R/ACC.R index 113d7ac..ec71d03 100644 --- a/R/ACC.R +++ b/R/ACC.R @@ -11,16 +11,19 @@ #'Wilks (2011; section 7.6.4; https://doi.org/10.1016/B978-0-12-385022-5.00008-7). #' #'@param exp A numeric array of experimental anomalies with named dimensions. -#' The dimension must have at least 'space_dim'. +#' The dimension must have at least 'lat_dim' and 'lon_dim'. #'@param obs A numeric array of observational anomalies with named dimensions. #' The dimension should be the same as 'exp' except the length of 'dat_dim' #' and 'memb_dim'. #'@param dat_dim A character string indicating the name of dataset (nobs/nexp) #' dimension. The default value is 'dataset'. If there is no dataset #' dimension, set NULL. -#'@param space_dim A character string vector of 2 indicating the name of the -#' latitude and longitude dimensions (in order) along which ACC is computed. -#' The default value is c('lat', 'lon'). +#'@param lat_dim A character string indicating the name of the latitude +#' dimension of 'exp' and 'obs' along which ACC is computed. The default value +#' is 'lat'. +#'@param lon_dim A character string indicating the name of the longitude +#' dimension of 'exp' and 'obs' along which ACC is computed. The default value +#' is 'lon'. #'@param avg_dim A character string indicating the name of the dimension to be #' averaged, which is usually the time dimension. If no need to calculate mean #' ACC, set as NULL. The default value is 'sdate'. @@ -57,7 +60,7 @@ #'A list containing the numeric arrays:\cr #'\item{acc}{ #' The ACC with the dimensions c(nexp, nobs, the rest of the dimension except -#' space_dim and memb_dim). nexp is the number of experiment (i.e., dat_dim in +#' lat_dim, lon_dim and memb_dim). nexp is the number of experiment (i.e., dat_dim in #' exp), and nobs is the number of observation (i.e., dat_dim in obs). If #' dat_dim is NULL, nexp and nobs are omitted. #'} @@ -77,7 +80,7 @@ #'} #'\item{macc}{ #' The mean anomaly correlation coefficient with dimensions -#' c(nexp, nobs, the rest of the dimension except space_dim, memb_dim, and +#' c(nexp, nobs, the rest of the dimension except lat_dim, lon_dim, memb_dim, and #' avg_dim). Only present if 'avg_dim' is not NULL. If dat_dim is NULL, nexp #' and nobs are omitted. #'} @@ -125,8 +128,8 @@ #'@importFrom stats qt qnorm quantile #'@importFrom ClimProjDiags Subset #'@export -ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), - avg_dim = 'sdate', memb_dim = 'member', +ACC <- function(exp, obs, dat_dim = 'dataset', lat_dim = 'lat', lon_dim = 'lon', + space_dim = c('lat', 'lon'), avg_dim = 'sdate', memb_dim = 'member', lat = NULL, lon = NULL, lonlatbox = NULL, conf = TRUE, conftype = "parametric", conf.lev = 0.95, pval = TRUE, ncores = NULL) { @@ -141,7 +144,7 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), } if (is.null(dim(exp)) | is.null(dim(obs))) { stop(paste0("Parameter 'exp' and 'obs' must have at least dimensions ", - "dat_dim and space_dim.")) + "lat_dim and lon_dim.")) } if(any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { @@ -161,12 +164,25 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), "Set it as NULL if there is no dataset dimension.") } } - ## space_dim - if (!is.character(space_dim) | length(space_dim) != 2) { - stop("Parameter 'space_dim' must be a character vector of 2.") + ## space_dim (deprecated) + if (!missing("space_dim")) { + warning("Parameter 'space_dim' is deprecated. Use 'lat_dim' and 'lon_dim' instead.") + lat_dim <- space_dim[1] + lon_dim <- space_dim[2] } - if (any(!space_dim %in% names(dim(exp))) | any(!space_dim %in% names(dim(obs)))) { - stop("Parameter 'space_dim' is not found in 'exp' or 'obs' dimension.") + ## lat_dim + if (!is.character(lat_dim) | length(lat_dim) != 1) { + stop("Parameter 'lat_dim' must be a character string.") + } + if (!lat_dim %in% names(dim(exp)) | !lat_dim %in% names(dim(obs))) { + stop("Parameter 'lat_dim' is not found in 'exp' or 'obs' dimension.") + } + ## lon_dim + if (!is.character(lon_dim) | length(lon_dim) != 1) { + stop("Parameter 'lon_dim' must be a character string.") + } + if (!lon_dim %in% names(dim(exp)) | !lon_dim %in% names(dim(obs))) { + stop("Parameter 'lon_dim' is not found in 'exp' or 'obs' dimension.") } ## avg_dim if (!is.null(avg_dim)) { @@ -191,13 +207,13 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), if (is.null(lat)) { stop("Parameter 'lat' cannot be NULL. It is required for area weighting.") } - if (!is.numeric(lat) | length(lat) != dim(exp)[space_dim[1]]) { + if (!is.numeric(lat) | length(lat) != dim(exp)[lat_dim]) { stop(paste0("Parameter 'lat' must be a numeric vector with the same ", "length as the latitude dimension of 'exp' and 'obs'.")) } ## lon if (!is.null(lon)) { - if (!is.numeric(lon) | length(lon) != dim(exp)[space_dim[2]]) { + if (!is.numeric(lon) | length(lon) != dim(exp)[lon_dim]) { stop(paste0("Parameter 'lon' must be a numeric vector with the same ", "length as the longitude dimension of 'exp' and 'obs'.")) } @@ -246,13 +262,15 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), ## exp and obs (2) name_exp <- sort(names(dim(exp))) name_obs <- sort(names(dim(obs))) - name_exp <- name_exp[-which(name_exp == dat_dim)] - name_obs <- name_obs[-which(name_obs == dat_dim)] + if (!is.null(dat_dim)) { + name_exp <- name_exp[-which(name_exp == dat_dim)] + name_obs <- name_obs[-which(name_obs == dat_dim)] + } if (!is.null(memb_dim)) { name_exp <- name_exp[-which(name_exp == memb_dim)] name_obs <- name_obs[-which(name_obs == memb_dim)] } - if(!all(dim(exp)[name_exp] == dim(obs)[name_obs])) { + if (!all(dim(exp)[name_exp] == dim(obs)[name_obs])) { stop(paste0("Parameter 'exp' and 'obs' must have same length of ", "all the dimensions expect 'dat_dim' and 'memb_dim'.")) } @@ -282,8 +300,8 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), (lonlatbox[1] > lonlatbox[2] & (lon > lonlatbox[1] | lon < lonlatbox[2]))) indlat <- which(lat >= lonlatbox[3] & lat <= lonlatbox[4]) - exp <- ClimProjDiags::Subset(exp, space_dim, list(indlat, indlon), drop = FALSE) - obs <- ClimProjDiags::Subset(obs, space_dim, list(indlat, indlon), drop = FALSE) + exp <- ClimProjDiags::Subset(exp, c(lat_dim, lon_dim), list(indlat, indlon), drop = FALSE) + obs <- ClimProjDiags::Subset(obs, c(lat_dim, lon_dim), list(indlat, indlon), drop = FALSE) } # Ensemble mean @@ -298,9 +316,9 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), if (is.null(avg_dim)) { - target_dims <- list(c(space_dim, dat_dim), c(space_dim, dat_dim)) + target_dims <- list(c(lat_dim, lon_dim, dat_dim), c(lat_dim, lon_dim, dat_dim)) } else { - target_dims <- list(c(space_dim, avg_dim, dat_dim), c(space_dim, avg_dim, dat_dim)) + target_dims <- list(c(lat_dim, lon_dim, avg_dim, dat_dim), c(lat_dim, lon_dim, avg_dim, dat_dim)) } res <- Apply(list(exp, obs), target_dims = target_dims, @@ -313,11 +331,11 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), # If bootstrap, calculate confidence level if (conftype == 'bootstrap') { if (is.null(avg_dim)) { - target_dims_bs <- list(c(memb_dim, dat_dim, space_dim), - c(memb_dim, dat_dim, space_dim)) + target_dims_bs <- list(c(memb_dim, dat_dim, lat_dim, lon_dim), + c(memb_dim, dat_dim, lat_dim, lon_dim)) } else { - target_dims_bs <- list(c(memb_dim, dat_dim, avg_dim, space_dim), - c(memb_dim, dat_dim, avg_dim, space_dim)) + target_dims_bs <- list(c(memb_dim, dat_dim, avg_dim, lat_dim, lon_dim), + c(memb_dim, dat_dim, avg_dim, lat_dim, lon_dim)) } res_conf <- Apply(list(exp_ori, obs_ori), target_dims = target_dims_bs, @@ -472,8 +490,8 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), # pval and conf if (pval | conf) { if (conftype == "parametric") { - # calculate effective sample size along space_dim - # combine space_dim into one dim first + # calculate effective sample size along lat_dim and lon_dim + # combine lat_dim and lon_dim into one dim first obs_tmp <- array(obs_sub, dim = c(space = prod(dim(obs_sub)[1:2]), dim(obs_sub)[3])) @@ -556,11 +574,11 @@ ACC <- function(exp, obs, dat_dim = 'dataset', space_dim = c('lat', 'lon'), conf = TRUE, conftype = "parametric", conf.lev = 0.95, pval = TRUE) { # if (is.null(avg_dim)) - # exp: [memb_exp, dat_exp, space_dim] - # obs: [memb_obs, dat_obs, space_dim] + # exp: [memb_exp, dat_exp, lat, lon] + # obs: [memb_obs, dat_obs, lat, lon] # if (!is.null(avg_dim)) - # exp: [memb_exp, dat_exp, avg_dim, space_dim] - # obs: [memb_obs, dat_obs, avg_dim, space_dim] + # exp: [memb_exp, dat_exp, avg_dim, lat, lon] + # obs: [memb_obs, dat_obs, avg_dim, lat, lon] nexp <- as.numeric(dim(exp)[2]) nobs <- as.numeric(dim(obs)[2]) diff --git a/man/ACC.Rd b/man/ACC.Rd index 5bd17f6..1402808 100644 --- a/man/ACC.Rd +++ b/man/ACC.Rd @@ -8,6 +8,8 @@ ACC( exp, obs, dat_dim = "dataset", + lat_dim = "lat", + lon_dim = "lon", space_dim = c("lat", "lon"), avg_dim = "sdate", memb_dim = "member", @@ -23,7 +25,7 @@ ACC( } \arguments{ \item{exp}{A numeric array of experimental anomalies with named dimensions. -The dimension must have at least 'space_dim'.} +The dimension must have at least 'lat_dim' and 'lon_dim'.} \item{obs}{A numeric array of observational anomalies with named dimensions. The dimension should be the same as 'exp' except the length of 'dat_dim' @@ -33,9 +35,13 @@ and 'memb_dim'.} dimension. The default value is 'dataset'. If there is no dataset dimension, set NULL.} -\item{space_dim}{A character string vector of 2 indicating the name of the -latitude and longitude dimensions (in order) along which ACC is computed. -The default value is c('lat', 'lon').} +\item{lat_dim}{A character string indicating the name of the latitude +dimension of 'exp' and 'obs' along which ACC is computed. The default value +is 'lat'.} + +\item{lon_dim}{A character string indicating the name of the longitude +dimension of 'exp' and 'obs' along which ACC is computed. The default value +is 'lon'.} \item{avg_dim}{A character string indicating the name of the dimension to be averaged, which is usually the time dimension. If no need to calculate mean @@ -82,7 +88,7 @@ computation. The default value is NULL.} A list containing the numeric arrays:\cr \item{acc}{ The ACC with the dimensions c(nexp, nobs, the rest of the dimension except - space_dim and memb_dim). nexp is the number of experiment (i.e., dat_dim in + lat_dim, lon_dim and memb_dim). nexp is the number of experiment (i.e., dat_dim in exp), and nobs is the number of observation (i.e., dat_dim in obs). If dat_dim is NULL, nexp and nobs are omitted. } @@ -102,7 +108,7 @@ A list containing the numeric arrays:\cr } \item{macc}{ The mean anomaly correlation coefficient with dimensions - c(nexp, nobs, the rest of the dimension except space_dim, memb_dim, and + c(nexp, nobs, the rest of the dimension except lat_dim, lon_dim, memb_dim, and avg_dim). Only present if 'avg_dim' is not NULL. If dat_dim is NULL, nexp and nobs are omitted. } diff --git a/tests/testthat/test-ACC.R b/tests/testthat/test-ACC.R index 7631401..5c36725 100644 --- a/tests/testthat/test-ACC.R +++ b/tests/testthat/test-ACC.R @@ -11,6 +11,8 @@ context("s2dv::ACC tests") set.seed(2) obs1 <- array(rnorm(30), dim = c(dataset = 1, member = 1, sdate = 5, ftime = 1, lat = 2, lon = 3)) + lat1 <- c(30, 35) + lon1 <- c(0, 5, 10) # dat2 set.seed(1) exp2 <- array(rnorm(60), dim = c(dataset = 2, sdate = 5, @@ -21,10 +23,12 @@ context("s2dv::ACC tests") set.seed(2) na <- floor(runif(2, min = 1, max = 30)) obs2[na] <- NA + lat2 <- c(30, 35) + lon2 <- c(0, 5, 10) ############################################## test_that("1. Input checks", { - + # exp and obs (1) expect_error( ACC(c(), c()), "Parameter 'exp' and 'obs' cannot be NULL." @@ -36,7 +40,7 @@ test_that("1. Input checks", { expect_error( ACC(c(1:10), c(2:4)), paste0("Parameter 'exp' and 'obs' must have at least dimensions ", - "dat_dim and space_dim.") + "lat_dim and lon_dim.") ) expect_error( ACC(array(1:10, dim = c(2, 5)), array(1:4, dim = c(2, 2))), @@ -46,6 +50,7 @@ test_that("1. Input checks", { ACC(array(1:10, dim = c(a = 2, c = 5)), array(1:4, dim = c(a = 2, b = 2))), "Parameter 'exp' and 'obs' must have same dimension name" ) + # dat_dim expect_error( ACC(exp1, obs1, dat_dim = 1), "Parameter 'dat_dim' must be a character string." @@ -54,14 +59,30 @@ test_that("1. Input checks", { ACC(exp1, obs1, dat_dim = 'a'), "Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension." ) + # space_dim (deprecated) + expect_warning( + ACC(exp1, obs1, space_dim = c('lat', 'lon'), lat = c(1, 2)), + "Parameter 'space_dim' is deprecated. Use 'lat_dim' and 'lon_dim' instead." + ) + # lat_dim + expect_error( + ACC(exp1, obs1, lat_dim = 1), + "Parameter 'lat_dim' must be a character string." + ) + expect_error( + ACC(exp1, obs1, lat_dim = 'latitude'), + "Parameter 'lat_dim' is not found in 'exp' or 'obs' dimension." + ) + # lon_dim expect_error( - ACC(exp1, obs1, space_dim = c('lon')), - "Parameter 'space_dim' must be a character vector of 2." + ACC(exp1, obs1, lon_dim = 2), + "Parameter 'lon_dim' must be a character string." ) expect_error( - ACC(exp1, obs1, space_dim = c('lon', 'lev')), - "Parameter 'space_dim' is not found in 'exp' or 'obs' dimension." + ACC(exp1, obs1, lon_dim = 'lonn'), + "Parameter 'lon_dim' is not found in 'exp' or 'obs' dimension." ) + # avg_dim expect_error( ACC(exp1, obs1, avg_dim = 1), "Parameter 'avg_dim' must be a character string." @@ -70,6 +91,7 @@ test_that("1. Input checks", { ACC(exp1, obs1, avg_dim = c('lev')), "Parameter 'avg_dim' is not found in 'exp' or 'obs' dimension." ) + # memb_dim expect_error( ACC(exp1, obs1, memb_dim = TRUE), "Parameter 'memb_dim' must be a character string." @@ -78,52 +100,57 @@ test_that("1. Input checks", { ACC(exp1, obs1, memb_dim = 'memb'), "Parameter 'memb_dim' is not found in 'exp' or 'obs' dimension." ) + # lat expect_error( ACC(exp1, obs1, lat = c(1, 2, 3)), paste0("Parameter \'lat\' must be a numeric vector with the same ", "length as the latitude dimension of \'exp\' and \'obs\'.") ) + # lon expect_error( - ACC(exp1, obs1, lon = c(1, 3)), + ACC(exp1, obs1, lat = c(1, 2), lon = c(1, 3)), paste0("Parameter \'lon\' must be a numeric vector with the same ", "length as the longitude dimension of \'exp\' and \'obs\'.") ) + # lonlatbox expect_error( - ACC(exp1, obs1, lonlatbox = c(-90, 90)), + ACC(exp1, obs1, lat = c(1, 2), lon = c(1, 2, 3), lonlatbox = c(-90, 90)), "Parameter 'lonlatbox' must be a numeric vector of 4." ) + # conf expect_error( - ACC(exp1, obs1, lat = c(1, 2), lon = c(1, 2, 3)), - paste0("Parameters 'lon', 'lat', and 'lonlatbox' must be used or be ", - "NULL at the same time.") - ) - expect_error( - ACC(exp1, obs1, conf = 1), + ACC(exp1, obs1, lat = c(1, 2), lon = c(1, 2, 3), conf = 1), "Parameter 'conf' must be one logical value." ) + # conftype expect_error( - ACC(exp1, obs1, conftype = 'a'), + ACC(exp1, obs1, lat = c(1, 2), lon = c(1, 2, 3), conftype = 'a'), "Parameter \'conftype\' must be either \'parametric\' or \'bootstrap\'." ) expect_error( - ACC(exp1, obs1, memb_dim = NULL, conftype = 'bootstrap'), + ACC(exp1, obs1, lat = c(1, 2), lon = c(1, 2, 3), memb_dim = NULL, conftype = 'bootstrap'), "Parameter 'memb_dim' cannot be NULL when parameter 'conftype' is 'bootstrap'." ) + # conf.lev expect_error( - ACC(exp1, obs1, conf.lev = -1), + ACC(exp1, obs1, lat = c(1, 2), lon = c(1, 2, 3), conf.lev = -1), "Parameter 'conf.lev' must be a numeric number between 0 and 1." ) + # pval expect_error( - ACC(exp1, obs1, pval = 'TRUE'), + ACC(exp1, obs1, lat = c(1, 2), lon = c(1, 2, 3), pval = 'TRUE'), "Parameter 'pval' must be one logical value." ) + # ncores expect_error( - ACC(exp1, obs1, ncores = 1.5), + ACC(exp1, obs1, lat = c(1, 2), lon = c(1, 2, 3), ncores = 1.5), "Parameter 'ncores' must be a positive integer." ) + # exp and obs (2) expect_error( ACC(exp = array(1:10, dim = c(dataset = 5, member = 1, lat = 2, lon = 1)), obs = array(1:4, dim = c(dataset = 2, member = 2, lat = 1, lon = 1)), + lat = c(1, 2), lon = c(1), avg_dim = NULL), "Parameter 'exp' and 'obs' must have same length of all the dimensions expect 'dat_dim' and 'memb_dim'." ) @@ -134,66 +161,84 @@ test_that("1. Input checks", { test_that("2. Output checks: dat1", { expect_equal( - dim(ACC(exp1, obs1)$acc), + dim(ACC(exp1, obs1, lat = lat1, lon = lon1)$acc), c(nexp = 1, nobs = 1, sdate = 5, ftime = 1) ) expect_equal( - names(ACC(exp1, obs1)), + names(ACC(exp1, obs1, lat = lat1)), c("acc", "conf.lower", "conf.upper", "p.val", "macc") ) expect_equal( - mean(ACC(exp1, obs1)$acc), - -0.2001352, + as.vector(ACC(exp1, obs1, lat = lat1)$acc), + c(-0.006384684, -0.664580451, -0.637292180, 0.320974249, -0.453246995), tolerance = 0.00001 ) expect_equal( - as.vector(ACC(exp1, obs1)$p.val), + as.vector(ACC(exp1, obs1, lat = lat1)$p.val), c(0.7292993, 0.7292993, 0.7292993, 0.7292993, 0.7292993), tolerance = 0.00001 ) expect_equal( - as.vector(ACC(exp1, obs1)$conf.lower), - c(-0.8595534, -0.9644555, -0.9408508, -0.6887500, -0.7619374), + as.vector(ACC(exp1, obs1, lat = lat1)$conf.lower), + c(-0.8137296, -0.9589397, -0.9549511, -0.6633950, -0.9246771), tolerance = 0.00001 ) expect_equal( - as.vector(ACC(exp1, obs1)$conf.upper), - c(0.7493799, 0.2515608, 0.4759707, 0.8890967, 0.8517117), + as.vector(ACC(exp1, obs1, lat = lat1)$conf.upper), + c(0.8093704, 0.3190711, 0.3609563, 0.8984881, 0.5668074), tolerance = 0.00001 ) expect_equal( - names(ACC(exp1, obs1, avg_dim = NULL)), + names(ACC(exp1, obs1, lat = lat1, avg_dim = NULL)), c("acc", "conf.lower", "conf.upper", "p.val") ) expect_equal( - dim(ACC(exp1, obs1, dat_dim = 'member', memb_dim = NULL)$acc), + dim(ACC(exp1, obs1, lat = lat1, dat_dim = 'member', memb_dim = NULL)$acc), c(nexp = 2, nobs = 1, sdate = 5, dataset = 1, ftime = 1) ) expect_equal( - names(ACC(exp1, obs1, conf = FALSE)), + names(ACC(exp1, obs1, lat = lat1, conf = FALSE)), c("acc", "p.val", "macc") ) expect_equal( - names(ACC(exp1, obs1, pval = FALSE)), + names(ACC(exp1, obs1, lat = lat1, pval = FALSE)), c("acc", "conf.lower", "conf.upper", "macc") ) expect_equal( - names(ACC(exp1, obs1, conf = FALSE, pval = FALSE)), + names(ACC(exp1, obs1, lat = lat1, conf = FALSE, pval = FALSE)), c("acc", "macc") ) expect_equal( - as.vector(ACC(exp1, obs1, conf = FALSE, avg_dim = NULL, conf.lev = 0.9)$p.val), + as.vector(ACC(exp1, obs1, lat = lat1, conf = FALSE, avg_dim = NULL, conf.lev = 0.9)$p.val), c(0.6083998, 0.6083998, 0.6083998, 0.6083998, 0.6083998), tolerance = 0.00001 ) expect_equal( - mean(ACC(exp1, obs1, lat = c(10, 20), lon = c(20, 30, 40), lonlatbox = c(20, 30, 10, 20))$acc), - -0.1681097, + as.vector(ACC(exp1, obs1, lat = c(10, 20), lon = c(20, 30, 40), lonlatbox = c(20, 30, 10, 20))$acc), + c(0.3555372, -0.5205672, -0.3403301, 0.2690648, -0.5146910), tolerance = 0.00001 ) + }) +############################################## +test_that("3. Output checks: dat2", { +expect_equal( + dim(ACC(exp2, obs2, lat = lat2, lon = lon2, memb_dim = NULL)$acc), + c(nexp = 2, nobs = 1, sdate = 5, ftime = 1) +) +expect_equal( + as.vector(ACC(exp2, obs2, lat = lat2, memb_dim = NULL)$acc)[3:7], + c(-0.3601880, -0.5624773, -0.4603762, -0.6997169, -0.1336961), + tolerance = 0.00001 +) +expect_equal( + mean(ACC(exp2, obs2, lat = lat2, memb_dim = NULL)$acc), + -0.1484762, + tolerance = 0.00001 +) +}) -- GitLab From 3af3504e5d11c63b7da1291c86fc53f9bc5225f3 Mon Sep 17 00:00:00 2001 From: aho Date: Mon, 3 Jan 2022 18:32:18 +0100 Subject: [PATCH 07/83] Revise example due to new development of ACC() --- R/PlotACC.R | 4 ++-- man/PlotACC.Rd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/R/PlotACC.R b/R/PlotACC.R index 3bffa68..a674ff6 100644 --- a/R/PlotACC.R +++ b/R/PlotACC.R @@ -65,8 +65,8 @@ #'ano_exp <- Ano(sampleData$mod, clim$clim_exp) #'ano_obs <- Ano(sampleData$obs, clim$clim_obs) -#'acc <- ACC(ano_exp, ano_obs) -#'acc_bootstrap <- ACC(ano_exp, ano_obs, conftype = 'bootstrap') +#'acc <- ACC(ano_exp, ano_obs, lat = sampleData$lat) +#'acc_bootstrap <- ACC(ano_exp, ano_obs, lat = sampleData$lat, conftype = 'bootstrap') #'# Combine acc results for PlotACC #'res <- array(c(acc$conf.lower, acc$acc, acc$conf.upper, acc$p.val), #' dim = c(dim(acc$acc), 4)) diff --git a/man/PlotACC.Rd b/man/PlotACC.Rd index cd2b357..2764de3 100644 --- a/man/PlotACC.Rd +++ b/man/PlotACC.Rd @@ -110,8 +110,8 @@ sampleData$obs <- Season(sampleData$obs, monini = 11, moninf = 12, monsup = 2) clim <- Clim(sampleData$mod, sampleData$obs) ano_exp <- Ano(sampleData$mod, clim$clim_exp) ano_obs <- Ano(sampleData$obs, clim$clim_obs) -acc <- ACC(ano_exp, ano_obs) -acc_bootstrap <- ACC(ano_exp, ano_obs, conftype = 'bootstrap') +acc <- ACC(ano_exp, ano_obs, lat = sampleData$lat) +acc_bootstrap <- ACC(ano_exp, ano_obs, lat = sampleData$lat, conftype = 'bootstrap') # Combine acc results for PlotACC res <- array(c(acc$conf.lower, acc$acc, acc$conf.upper, acc$p.val), dim = c(dim(acc$acc), 4)) -- GitLab From 597b48e1640186fa4f0eb15f0527f8bc1bf311a1 Mon Sep 17 00:00:00 2001 From: aho Date: Mon, 17 Jan 2022 12:58:38 +0100 Subject: [PATCH 08/83] Add 'useRaster = TRUE' in image() to avoid artifect lines --- R/PlotEquiMap.R | 2 +- R/PlotSection.R | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/R/PlotEquiMap.R b/R/PlotEquiMap.R index 3de30e9..db1829f 100644 --- a/R/PlotEquiMap.R +++ b/R/PlotEquiMap.R @@ -849,7 +849,7 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, if (square) { image(lonb$x, latb$x, var[lonb$ix, latb$ix], col = c(col_inf_image, cols, col_sup_image), breaks = c(-.Machine$double.xmax, brks, .Machine$double.xmax), - axes = FALSE, xlab = "", ylab = "", add = TRUE) + axes = FALSE, xlab = "", ylab = "", add = TRUE, useRaster = TRUE) } else { .filled.contour(lonb$x, latb$x, var[lonb$ix, latb$ix], levels = c(.Machine$double.xmin, brks, .Machine$double.xmax), diff --git a/R/PlotSection.R b/R/PlotSection.R index 29bdd49..1cceaab 100644 --- a/R/PlotSection.R +++ b/R/PlotSection.R @@ -139,9 +139,9 @@ PlotSection <- function(var, horiz, depth, toptitle = '', sizetit = 1, mgp = c(2.5, 0.5, 0), las = 1) image(horizb$x, depthb$x, array(0, dims), col = 'grey', breaks = c(-1, 1), axes = FALSE, xlab = "", ylab = "", main = toptitle, - cex.main = 1.5 * sizetit) + cex.main = 1.5 * sizetit, useRaster = TRUE) image(horizb$x, depthb$x, var[horizb$ix, depthb$ix], col = cols, - breaks = brks, axes = FALSE, xlab = "", ylab = "", add = TRUE) + breaks = brks, axes = FALSE, xlab = "", ylab = "", add = TRUE, useRaster = TRU, useRaster = TRUE) if (axelab) { minhoriz <- ceiling(round(min(horizb$x), 0) / 10) * 10 maxhoriz <- floor(round(max(horizb$x), 0) / 10) * 10 @@ -158,7 +158,7 @@ PlotSection <- function(var, horiz, depth, toptitle = '', sizetit = 1, par(mar = c(1.5, ymargin, 2.5, 0.5), mgp = c(1.5, 0.3, 0), las = 1, cex = 1.2) image(1:length(cols), 1, t(t(1:length(cols))), axes = FALSE, col = cols, - xlab = units, ylab = '') + xlab = units, ylab = '', useRaster = TRUE) box() axis(1, at = seq(0.5, length(brks) - 0.5, 1), labels = brks, cex.axis = 1) } -- GitLab From 6b8c1e6e25e383039dbbfaef8d6a07d60c2fe706 Mon Sep 17 00:00:00 2001 From: aho Date: Mon, 17 Jan 2022 13:13:10 +0100 Subject: [PATCH 09/83] Remove 'useRaster = TRUE' in PlotSection because it only can be used with regular-spaced grid --- R/PlotSection.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/PlotSection.R b/R/PlotSection.R index 1cceaab..29bdd49 100644 --- a/R/PlotSection.R +++ b/R/PlotSection.R @@ -139,9 +139,9 @@ PlotSection <- function(var, horiz, depth, toptitle = '', sizetit = 1, mgp = c(2.5, 0.5, 0), las = 1) image(horizb$x, depthb$x, array(0, dims), col = 'grey', breaks = c(-1, 1), axes = FALSE, xlab = "", ylab = "", main = toptitle, - cex.main = 1.5 * sizetit, useRaster = TRUE) + cex.main = 1.5 * sizetit) image(horizb$x, depthb$x, var[horizb$ix, depthb$ix], col = cols, - breaks = brks, axes = FALSE, xlab = "", ylab = "", add = TRUE, useRaster = TRU, useRaster = TRUE) + breaks = brks, axes = FALSE, xlab = "", ylab = "", add = TRUE) if (axelab) { minhoriz <- ceiling(round(min(horizb$x), 0) / 10) * 10 maxhoriz <- floor(round(max(horizb$x), 0) / 10) * 10 @@ -158,7 +158,7 @@ PlotSection <- function(var, horiz, depth, toptitle = '', sizetit = 1, par(mar = c(1.5, ymargin, 2.5, 0.5), mgp = c(1.5, 0.3, 0), las = 1, cex = 1.2) image(1:length(cols), 1, t(t(1:length(cols))), axes = FALSE, col = cols, - xlab = units, ylab = '', useRaster = TRUE) + xlab = units, ylab = '') box() axis(1, at = seq(0.5, length(brks) - 0.5, 1), labels = brks, cex.axis = 1) } -- GitLab From b9763e1210a47ab4719770ddf63fa9e401da9436 Mon Sep 17 00:00:00 2001 From: aho Date: Mon, 17 Jan 2022 17:14:30 +0100 Subject: [PATCH 10/83] Add error handling for 'useRaster' --- R/PlotEquiMap.R | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/R/PlotEquiMap.R b/R/PlotEquiMap.R index db1829f..9981ed3 100644 --- a/R/PlotEquiMap.R +++ b/R/PlotEquiMap.R @@ -847,9 +847,19 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, col_inf_image <- ifelse(is.null(col_inf), colNA, col_inf) col_sup_image <- ifelse(is.null(col_sup), colNA, col_sup) if (square) { - image(lonb$x, latb$x, var[lonb$ix, latb$ix], col = c(col_inf_image, cols, col_sup_image), - breaks = c(-.Machine$double.xmax, brks, .Machine$double.xmax), - axes = FALSE, xlab = "", ylab = "", add = TRUE, useRaster = TRUE) + # If lat and lon are both regular-spaced, "useRaster = TRUE" can avoid + # artifact white lines on the figure. If not, useRaster has to be FALSE (default) + tryCatch({ + image(lonb$x, latb$x, var[lonb$ix, latb$ix], + col = c(col_inf_image, cols, col_sup_image), + breaks = c(-.Machine$double.xmax, brks, .Machine$double.xmax), + axes = FALSE, xlab = "", ylab = "", add = TRUE, useRaster = TRUE) + }, error = function(x) { + image(lonb$x, latb$x, var[lonb$ix, latb$ix], + col = c(col_inf_image, cols, col_sup_image), + breaks = c(-.Machine$double.xmax, brks, .Machine$double.xmax), + axes = FALSE, xlab = "", ylab = "", add = TRUE) + }) } else { .filled.contour(lonb$x, latb$x, var[lonb$ix, latb$ix], levels = c(.Machine$double.xmin, brks, .Machine$double.xmax), -- GitLab From 3507a8d7e9310e5759e9d7d00fafdaa38e520c4f Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 20 Jan 2022 09:44:58 +0100 Subject: [PATCH 11/83] Add 'space_dim' back to documentation --- R/ACC.R | 4 ++++ man/ACC.Rd | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/R/ACC.R b/R/ACC.R index ec71d03..44c724c 100644 --- a/R/ACC.R +++ b/R/ACC.R @@ -24,6 +24,10 @@ #'@param lon_dim A character string indicating the name of the longitude #' dimension of 'exp' and 'obs' along which ACC is computed. The default value #' is 'lon'. +#'@param space_dim A character string vector of 2 indicating the name of the +#' latitude and longitude dimensions (in order) along which ACC is computed. +#' The default value is c('lat', 'lon'). This argument has been deprecated. +#' Use 'lat_dim' and 'lon_dim' instead. #'@param avg_dim A character string indicating the name of the dimension to be #' averaged, which is usually the time dimension. If no need to calculate mean #' ACC, set as NULL. The default value is 'sdate'. diff --git a/man/ACC.Rd b/man/ACC.Rd index 1402808..7df6abb 100644 --- a/man/ACC.Rd +++ b/man/ACC.Rd @@ -43,6 +43,11 @@ is 'lat'.} dimension of 'exp' and 'obs' along which ACC is computed. The default value is 'lon'.} +\item{space_dim}{A character string vector of 2 indicating the name of the +latitude and longitude dimensions (in order) along which ACC is computed. +The default value is c('lat', 'lon'). This argument has been deprecated. +Use 'lat_dim' and 'lon_dim' instead.} + \item{avg_dim}{A character string indicating the name of the dimension to be averaged, which is usually the time dimension. If no need to calculate mean ACC, set as NULL. The default value is 'sdate'.} -- GitLab From 6562c4e0f92eb31d46fac608f9898fbfc316d572 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 20 Jan 2022 11:59:40 +0100 Subject: [PATCH 12/83] Clarify the 'method' options in documentation --- R/Clim.R | 3 ++- man/Clim.Rd | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/R/Clim.R b/R/Clim.R index d01cf5d..6380bd2 100644 --- a/R/Clim.R +++ b/R/Clim.R @@ -23,7 +23,8 @@ #' complete along 'dat_dim', this startdate along 'dat_dim' will be discarded. #' The default value is "c('dataset', 'member')". #'@param method A character string indicating the method to be used. The -#' options include 'clim', 'kharin', and 'NDV'. The default value is 'clim'. +#' options include 'clim' (per-pair method), 'kharin' (Kharin method), and +#' 'NDV' (Fuckar method). The default value is 'clim'. #'@param ftime_dim A character string indicating the name of forecast time #' dimension. Only used when method = 'NDV'. The default value is 'ftime'. #'@param memb A logical value indicating whether to remain 'memb_dim' dimension diff --git a/man/Clim.Rd b/man/Clim.Rd index 50ec0d9..3237786 100644 --- a/man/Clim.Rd +++ b/man/Clim.Rd @@ -33,7 +33,8 @@ complete along 'dat_dim', this startdate along 'dat_dim' will be discarded. The default value is "c('dataset', 'member')".} \item{method}{A character string indicating the method to be used. The -options include 'clim', 'kharin', and 'NDV'. The default value is 'clim'.} +options include 'clim' (per-pair method), 'kharin' (Kharin method), and +'NDV' (Fuckar method). The default value is 'clim'.} \item{ftime_dim}{A character string indicating the name of forecast time dimension. Only used when method = 'NDV'. The default value is 'ftime'.} -- GitLab From 1fcc74a1b3d3150d3968e72602d844035514022c Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 20 Jan 2022 13:02:54 +0100 Subject: [PATCH 13/83] Add citation link --- R/Clim.R | 4 ++-- man/Clim.Rd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/R/Clim.R b/R/Clim.R index 6380bd2..52fe7c7 100644 --- a/R/Clim.R +++ b/R/Clim.R @@ -4,8 +4,8 @@ #'and observational data using one of the following methods: #'\enumerate{ #' \item{per-pair method (Garcia-Serrano and Doblas-Reyes, CD, 2012)} -#' \item{Kharin method (Karin et al, GRL, 2012)} -#' \item{Fuckar method (Fuckar et al, GRL, 2014)} +#' \item{Kharin method (Kharin et al, GRL, 2012 https://doi.org/10.1029/2012GL052647)} +#' \item{Fuckar method (Fuckar et al, GRL, 2014 https://doi.org/10.1002/2014GL060815)} #'} #'Per-pair climatology means that only the startdates covered by the #'whole experiments/observational dataset will be used. In other words, the diff --git a/man/Clim.Rd b/man/Clim.Rd index 3237786..b499e88 100644 --- a/man/Clim.Rd +++ b/man/Clim.Rd @@ -72,8 +72,8 @@ This function computes per-pair climatologies for the experimental and observational data using one of the following methods: \enumerate{ \item{per-pair method (Garcia-Serrano and Doblas-Reyes, CD, 2012)} - \item{Kharin method (Karin et al, GRL, 2012)} - \item{Fuckar method (Fuckar et al, GRL, 2014)} + \item{Kharin method (Kharin et al, GRL, 2012 https://doi.org/10.1029/2012GL052647)} + \item{Fuckar method (Fuckar et al, GRL, 2014 https://doi.org/10.1002/2014GL060815)} } Per-pair climatology means that only the startdates covered by the whole experiments/observational dataset will be used. In other words, the -- GitLab From 364e582bda029dbb8d1cd0f134ecd9e64f9ed99b Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 20 Jan 2022 15:29:16 +0100 Subject: [PATCH 14/83] Supplement the details for each method --- R/Clim.R | 5 ++++- man/Clim.Rd | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/R/Clim.R b/R/Clim.R index 52fe7c7..59f8bc9 100644 --- a/R/Clim.R +++ b/R/Clim.R @@ -3,7 +3,7 @@ #'This function computes per-pair climatologies for the experimental #'and observational data using one of the following methods: #'\enumerate{ -#' \item{per-pair method (Garcia-Serrano and Doblas-Reyes, CD, 2012)} +#' \item{per-pair method (Garcia-Serrano and Doblas-Reyes, CD, 2012 https://doi.org/10.1007/s00382-012-1413-1)} #' \item{Kharin method (Kharin et al, GRL, 2012 https://doi.org/10.1029/2012GL052647)} #' \item{Fuckar method (Fuckar et al, GRL, 2014 https://doi.org/10.1002/2014GL060815)} #'} @@ -11,6 +11,9 @@ #'whole experiments/observational dataset will be used. In other words, the #'startdates which are not all available along 'dat_dim' dimension of both #'the 'exp' and 'obs' are excluded when computing the climatologies. +#'Kharin method is the linear trend bias correction method, and Fuckar method +#'is the initial condition bias correction method. The two methods both do the +#'per-pair correction beforehand. #' #'@param exp A named numeric array of experimental data, with at least two #' dimensions 'time_dim' and 'dat_dim'. diff --git a/man/Clim.Rd b/man/Clim.Rd index b499e88..cf58525 100644 --- a/man/Clim.Rd +++ b/man/Clim.Rd @@ -71,7 +71,7 @@ A list of 2: This function computes per-pair climatologies for the experimental and observational data using one of the following methods: \enumerate{ - \item{per-pair method (Garcia-Serrano and Doblas-Reyes, CD, 2012)} + \item{per-pair method (Garcia-Serrano and Doblas-Reyes, CD, 2012 https://doi.org/10.1007/s00382-012-1413-1)} \item{Kharin method (Kharin et al, GRL, 2012 https://doi.org/10.1029/2012GL052647)} \item{Fuckar method (Fuckar et al, GRL, 2014 https://doi.org/10.1002/2014GL060815)} } @@ -79,6 +79,9 @@ Per-pair climatology means that only the startdates covered by the whole experiments/observational dataset will be used. In other words, the startdates which are not all available along 'dat_dim' dimension of both the 'exp' and 'obs' are excluded when computing the climatologies. +Kharin method is the linear trend bias correction method, and Fuckar method +is the initial condition bias correction method. The two methods both do the +per-pair correction beforehand. } \examples{ # Load sample data as in Load() example: -- GitLab From 7d28ee1490cad8326ce91b5e24a8f3ea58b9d525 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Fri, 4 Mar 2022 16:44:05 +0100 Subject: [PATCH 15/83] first version adapted from SpecsVerification --- R/DiffCorr.R | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 R/DiffCorr.R diff --git a/R/DiffCorr.R b/R/DiffCorr.R new file mode 100644 index 0000000..eea3184 --- /dev/null +++ b/R/DiffCorr.R @@ -0,0 +1,101 @@ + +library(s2dv) +library(multiApply) + +DiffCorr <- function(exp, ref, obs, conf.lev = NULL, handle.na = "na.fail", time_dim = 'year', member_dim = NULL, ncores = NULL){ + + ## Checkings + if (!is.array(exp)){stop('"exp" must be an array.')} + if (!is.array(obs)){stop('"obs" must be an array.')} + if (!is.array(ref)){stop('"ref" must be an array.')} + if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(ref)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "ref".')} + if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} + if (!is.null(conf.lev)){ + if (!is.numeric(conf.lev) | conf.lev <= 0 | conf.lev >= 1){stop('"conf.lev" must be either NULL or a number between 0 and 1.')} + } + if (!is.character(time_dim)){stop('"time_dim" must be a string.')} + if (!is.null(member_dim)){ + if (!is.character(member_dim)){stop('"member_dim" must be either NULL or a string.')} + } + if (!is.null(ncores)){ + if (!is.numeric(ncores) | ncores < 1){stop('"ncores" must be either NULL or a positive integer.')} + } + + ## Ensemble means + if (!is.null(member_dim)){ + exp <- s2dv::MeanDims(data = exp, dims = member_dim, na.rm = FALSE, drop = 'selected') + ref <- s2dv::MeanDims(data = ref, dims = member_dim, na.rm = FALSE, drop = 'selected') + } + + ## Correlation difference + output <- multiApply::Apply(data = list(exp = exp, ref = ref, obs = obs), + target_dims = time_dim, fun = .DiffCorr, + conf.lev = conf.lev, handle.na = handle.na, + time_dim = time_dim, ncores = ncores) + return(output) +} + +.DiffCorr <- function(exp, ref, obs, conf.lev, handle.na, time_dim) { + + ## handle NA's + if (handle.na == "na.fail") { + if (any(is.na(c(exp, ref, obs)))) { + stop("There are missing values.") + } + } else if (handle.na == "only.complete.triplets") { + nna <- !is.na(fcst) & !is.na(fcst.ref) & !is.na(obs) + if (all(nna == FALSE)) { + stop("There are no complete sets of forecasts and observations") + } + exp <- exp[nna] + ref <- ref[nna] + obs <- obs[nna] + } else { + stop("unknown 'handle.na' argument") + } + + ## Number of effective degrees of freedom + N <- s2dv::Eno(data = obs, time_dim = time_dim, na.action = handle.na, ncores = 1) + + ## Correlation coefficients and their confidence intervals + cor.exp <- cor(exp, obs) + cor.ref <- cor(ref, obs) + + ## Correlation difference + output <- NULL + output$corr.diff <- cor.exp - cor.ref + + ## auxiliary quantities + r12 <- cor.exp + r13 <- cor.ref + r23 <- cor(exp, ref) + + ## confidence interval, according to Zou (2007) + if (!is.null(conf.lev)){ + + ## individual confidence limits of cor.exp and cor.ref (not used) + # z.exp <- 0.5 * log((1 + cor.exp) / (1 - cor.exp)) + # z.ref <- 0.5 * log((1 + cor.ref) / (1 - cor.ref)) + + alpha <- (1. - conf.lev) / 2. + l1 <- tanh(atanh(r12) + qnorm(alpha)/sqrt(N-3)) + u1 <- tanh(atanh(r12) + qnorm(1-alpha)/sqrt(N-3)) + l2 <- tanh(atanh(r13) + qnorm(alpha)/sqrt(N-3)) + u2 <- tanh(atanh(r13) + qnorm(1-alpha)/sqrt(N-3)) + + ## Correlation between the two corr.coef r12 and r13 + c.12.13 <- ((r23 - 0.5 * r12 * r13) * (1 - r12*r12 - r13*r13 - r23*r23) + r23*r23*r23) / ((1 - r12*r12) * (1 - r13*r13)) + + ## Confidence interval + output$conf.lower <- r12 - r13 - sqrt((r12-l1)^2 + (u2 - r13)^2 - 2*c.12.13*(r12-l1)*(u2-r13)) + output$conf.upper <- r12 - r13 + sqrt((u1 - r12)^2 + (r13-l2)^2 - 2*c.12.13*(u1-r12)*(r13-l2)) + + } + + ## p-value of one-sided test for equality of dependent correlation coefficients (Steiger, 1980) + R <- (1-r12*r12-r13*r13-r23*r23) + 2*r12*r13*r23 + t <- (r12 - r13) * sqrt((N-1)*(1+r23) / (2 * ((N-1)/(N-3)) * R + 0.25*(r12+r13)^2 * (1-r23)^3)) + output$p.value <- 1 - pt(t, df=N-3) + + return(output) +} -- GitLab From 809eb885c4dcc5963c8343f87c288ba2bc8e8fcc Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Fri, 4 Mar 2022 16:49:53 +0100 Subject: [PATCH 16/83] first version (without documentation) --- R/RPS.R | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ R/RPSS.R | 64 ++++++++++++++++++++++++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 R/RPS.R create mode 100644 R/RPSS.R diff --git a/R/RPS.R b/R/RPS.R new file mode 100644 index 0000000..0081d8e --- /dev/null +++ b/R/RPS.R @@ -0,0 +1,99 @@ + +library(multiApply) +library(easyVerification) + +RPS <- function(exp, obs, n_categories, indices_for_clim, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ + + ## Checkings + if (!is.array(exp)){stop('"exp" must be an array.')} + if (!is.array(obs)){stop('"obs" must be an array.')} + if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} + if (!is.numeric(n_categories) | n_categories < 2){stop('"n_categories" must be an integer greater than 1.')} + if (!is.logical(Fair)){stop('"Fair" must be TRUE or FALSE.')} + if (!is.character(time_dim)){stop('"time_dim" must be a string.')} + if (!is.character(member_dim)){stop('"member_dim" must be a string.')} + if (!is.null(ncores)){ + if (!is.numeric(ncores) | ncores < 1){stop('"ncores" must be either NULL or a positive integer.')} + } + + ## RPS + rps <- multiApply::Apply(data = list(exp = exp, obs = obs), + target_dims = list(exp = c(time_dim, member_dim), obs = time_dim), + n_categories = n_categories, indices_for_clim = indices_for_clim, + Fair = Fair, time_dim = time_dim, member_dim = member_dim, + fun = .RPS, ncores = ncores)$output1 + return(rps) +} + +.RPS <- function(exp, obs, n_categories, indices_for_clim, Fair = FALSE, time_dim = 'year', member_dim = 'member'){ + + exp_probs <- .get_probs(data = exp, type = 'exp', indices_for_quartiles = indices_for_clim, + time_dim = time_dim, member_dim = member_dim, n_categories = n_categories)$probs + + obs_probs <- .get_probs(data = obs, type = 'obs', indices_for_quartiles = indices_for_clim, + time_dim = time_dim, member_dim = NULL, n_categories = n_categories)$probs + + rps <- .RPS_from_probs(probs_exp = exp_probs, probs_obs = obs_probs, n_categories = n_categories, Fair = Fair, n_members = as.numeric(dim(exp)[member_dim])) + + return(rps) +} + +.get_probs <- function(data, type, indices_for_quartiles, time_dim, member_dim, n_categories){ + + if (type == 'exp'){ + target_dims_quantiles = c(time_dim, member_dim) + target_dims_probs = list(member_dim, 'bin') + } else if (type == 'obs'){ + target_dims_quantiles = time_dim + target_dims_probs = list(NULL,'bin') + } else {stop("Parameter 'type' must be 'exp' or 'obs'")} + + quantiles <- multiApply::Apply(data = ClimProjDiags::Subset(x = data, along = time_dim, indices = indices_for_quartiles), + target_dims = target_dims_quantiles, + fun = .quantile_aux, n_categories = n_categories, + output_dims = 'bin', ncores = NULL)$output1 + + probs <- multiApply::Apply(data = list(data = data, quantiles = quantiles), + target_dims = target_dims_probs, + fun = .c2p, + output_dims = 'bin', ncores = NULL)$output1 + + return(list('probs' = probs, 'quantiles' = quantiles)) +} + +.quantile_aux = function(data, n_categories){ + data = as.vector(data) + q = quantile(x = data, probs = 1:(n_categories - 1) / n_categories, type = 8, na.rm = TRUE) + return(q) +} + +.c2p <- function(data, quantiles) { + if (anyNA(data)){ + output <- array(data = NA, dim = length(quantiles) + 1) + } else { + output <- colMeans(easyVerification::convert2prob(as.vector(data), threshold = as.vector(quantiles))) + } + return(output) +} + + +.RPS_from_probs <- function(probs_exp, probs_obs, n_categories, Fair, n_members){ + + rps <- NULL + for (i in 1:n_categories){ + rps[i] <- (cumsum(probs_exp)[i]-cumsum(probs_obs)[i])^2 ## (Wilks 2011, pp.348-350) + } + rps <- sum(rps) + + if (Fair == TRUE){ ## FairRPS + ## adjustment <- rowSums(-1 * (1/R - 1/R.new) * ens.cum * (R - ens.cum)/R/(R - 1)) [formula taken from SpecsVerification::EnsRps] + R <- n_members + R_new <- Inf + probs_cum <- cumsum(probs_exp) + adjustment <- -1 / (R-1) * probs_cum * (1 - probs_cum) + adjustment <- sum(adjustment) + rps <- rps + adjustment + } + + return(rps) +} diff --git a/R/RPSS.R b/R/RPSS.R new file mode 100644 index 0000000..b9d59d0 --- /dev/null +++ b/R/RPSS.R @@ -0,0 +1,64 @@ + +library(multiApply) +library(easyVerification) +library(s2dv) + +RPSS <- function(exp, obs, ref = NULL, n_categories, indices_for_clim, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ + + ## Checkings + if (!is.array(exp)){stop('"exp" must be an array.')} + if (!is.array(obs)){stop('"obs" must be an array.')} + if (!is.null(ref)){ + if (!is.array(ref)){stop('"ref" must be an array.')} + if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(ref)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "ref".')} + } + if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} + if (!is.numeric(n_categories) | n_categories < 2){stop('"n_categories" must be an integer greater than 1.')} + if (!is.logical(Fair)){stop('"Fair" must be TRUE or FALSE.')} + if (!is.character(time_dim)){stop('"time_dim" must be a string.')} + if (!is.character(member_dim)){stop('"member_dim" must be a string.')} + if (!is.null(ncores)){ + if (!is.numeric(ncores) | ncores < 1){stop('"ncores" must be either NULL or a positive integer.')} + } + + if (!is.null(ref)){ ## using "ref" as reference forecast + output <- multiApply::Apply(data = list(exp = exp, obs = obs, ref = ref), + target_dims = list(exp = c(time_dim, member_dim), obs = time_dim, ref = c(time_dim, member_dim)), + n_categories = n_categories, indices_for_clim = indices_for_clim, + Fair = Fair, time_dim = time_dim, member_dim = member_dim, + fun = .RPSS, ncores = ncores) + } else { ## using climatology as reference forecast + output <- multiApply::Apply(data = list(exp = exp, obs = obs), + target_dims = list(exp = c(time_dim, member_dim), obs = time_dim), + ref = ref, n_categories = n_categories, indices_for_clim = indices_for_clim, + Fair = Fair, time_dim = time_dim, member_dim = member_dim, + fun = .RPSS, ncores = ncores) + } + + return(output) +} + +.RPSS <- function(exp, obs, ref, n_categories, indices_for_clim, Fair, time_dim, member_dim){ + + ## RPS of the forecast + rps_exp <- .RPS(exp = exp, obs = obs, n_categories = n_categories, indices_for_clim = indices_for_clim, Fair = Fair, time_dim = time_dim, member_dim = member_dim) + + ## RPS of the reference forecast + if (is.null(ref)){ ## using climatology as reference forecast + clim_probs <- array(data = 1 / n_categories, dim = c(time = length(obs))) + obs_probs <- .get_probs(data = obs, type = 'obs', indices_for_quartiles = indices_for_clim, time_dim = time_dim, member_dim = NULL, n_categories = n_categories)$probs + rps_ref <- .RPS_from_probs(probs_exp = clim_probs, probs_obs = obs_probs, n_categories = n_categories, Fair = FALSE) + } else { ## using "ref" as reference forecast + rps_ref <- .RPS(exp = ref, obs = obs, n_categories = n_categories, indices_for_clim = indices_for_clim, Fair = Fair, time_dim = time_dim, member_dim = member_dim) + } + + ## RPSS + rpss <- 1 - mean(rps_exp) / mean(rps_ref) + + ## Significance + rps_exp <- array(data = rps_exp, dim = c(time = length(rps_exp))) + rps_ref <- array(data = rps_ref, dim = c(time = length(rps_ref))) + sign <- s2dv::RandomWalkTest(skill_A = rps_exp, skill_B = rps_ref, time_dim = 'time', ncores = NULL)$signif + + return(list(rpss = rpss, sign = sign)) +} -- GitLab From 8ec54099762aa2bf7d310d6c472abc402589aec1 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Sat, 5 Mar 2022 15:44:29 +0100 Subject: [PATCH 17/83] fixed dim(clim_probs) --- R/RPSS.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/RPSS.R b/R/RPSS.R index b9d59d0..fc25631 100644 --- a/R/RPSS.R +++ b/R/RPSS.R @@ -45,8 +45,8 @@ RPSS <- function(exp, obs, ref = NULL, n_categories, indices_for_clim, Fair = FA ## RPS of the reference forecast if (is.null(ref)){ ## using climatology as reference forecast - clim_probs <- array(data = 1 / n_categories, dim = c(time = length(obs))) obs_probs <- .get_probs(data = obs, type = 'obs', indices_for_quartiles = indices_for_clim, time_dim = time_dim, member_dim = NULL, n_categories = n_categories)$probs + clim_probs <- array(data = 1 / n_categories, dim = dim(obs_probs)) rps_ref <- .RPS_from_probs(probs_exp = clim_probs, probs_obs = obs_probs, n_categories = n_categories, Fair = FALSE) } else { ## using "ref" as reference forecast rps_ref <- .RPS(exp = ref, obs = obs, n_categories = n_categories, indices_for_clim = indices_for_clim, Fair = Fair, time_dim = time_dim, member_dim = member_dim) -- GitLab From 1b79f4171bbd132ded21c10269b635420a162c6d Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Thu, 10 Mar 2022 17:02:23 +0100 Subject: [PATCH 18/83] return.na --- R/DiffCorr.R | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/R/DiffCorr.R b/R/DiffCorr.R index eea3184..3aae37f 100644 --- a/R/DiffCorr.R +++ b/R/DiffCorr.R @@ -2,7 +2,7 @@ library(s2dv) library(multiApply) -DiffCorr <- function(exp, ref, obs, conf.lev = NULL, handle.na = "na.fail", time_dim = 'year', member_dim = NULL, ncores = NULL){ +DiffCorr <- function(exp, ref, obs, conf.lev = NULL, handle.na = 'return.na', time_dim = 'year', member_dim = NULL, ncores = NULL){ ## Checkings if (!is.array(exp)){stop('"exp" must be an array.')} @@ -23,8 +23,8 @@ DiffCorr <- function(exp, ref, obs, conf.lev = NULL, handle.na = "na.fail", time ## Ensemble means if (!is.null(member_dim)){ - exp <- s2dv::MeanDims(data = exp, dims = member_dim, na.rm = FALSE, drop = 'selected') - ref <- s2dv::MeanDims(data = ref, dims = member_dim, na.rm = FALSE, drop = 'selected') + exp <- multiApply::Apply(data = exp, target_dims = member_dim, fun = mean, na.rm = FALSE, ncores = ncores)$output1 + ref <- multiApply::Apply(data = ref, target_dims = member_dim, fun = mean, na.rm = FALSE, ncores = ncores)$output1 } ## Correlation difference @@ -50,12 +50,12 @@ DiffCorr <- function(exp, ref, obs, conf.lev = NULL, handle.na = "na.fail", time exp <- exp[nna] ref <- ref[nna] obs <- obs[nna] - } else { + } else if (handle.na != "return.na") { stop("unknown 'handle.na' argument") } ## Number of effective degrees of freedom - N <- s2dv::Eno(data = obs, time_dim = time_dim, na.action = handle.na, ncores = 1) + N <- s2dv::Eno(data = obs, time_dim = time_dim, na.action = na.pass, ncores = 1) ## Correlation coefficients and their confidence intervals cor.exp <- cor(exp, obs) -- GitLab From 3a30a3f67b4100267ea743c70431b3f6fed9fcf6 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Thu, 10 Mar 2022 17:06:58 +0100 Subject: [PATCH 19/83] . --- R/RPS.R | 5 +++-- R/RPSS.R | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/R/RPS.R b/R/RPS.R index 0081d8e..c7e7e0b 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -33,8 +33,9 @@ RPS <- function(exp, obs, n_categories, indices_for_clim, Fair = FALSE, time_dim obs_probs <- .get_probs(data = obs, type = 'obs', indices_for_quartiles = indices_for_clim, time_dim = time_dim, member_dim = NULL, n_categories = n_categories)$probs - rps <- .RPS_from_probs(probs_exp = exp_probs, probs_obs = obs_probs, n_categories = n_categories, Fair = Fair, n_members = as.numeric(dim(exp)[member_dim])) - + rps <- multiApply::Apply(data = list(probs_exp = exp_probs, probs_obs = obs_probs), target_dims = 'bin', + fun = .RPS_from_probs, n_categories = n_categories, Fair = Fair, + n_members = as.numeric(dim(exp)[member_dim]), ncores = NULL)$output1 return(rps) } diff --git a/R/RPSS.R b/R/RPSS.R index fc25631..ae6881f 100644 --- a/R/RPSS.R +++ b/R/RPSS.R @@ -47,7 +47,8 @@ RPSS <- function(exp, obs, ref = NULL, n_categories, indices_for_clim, Fair = FA if (is.null(ref)){ ## using climatology as reference forecast obs_probs <- .get_probs(data = obs, type = 'obs', indices_for_quartiles = indices_for_clim, time_dim = time_dim, member_dim = NULL, n_categories = n_categories)$probs clim_probs <- array(data = 1 / n_categories, dim = dim(obs_probs)) - rps_ref <- .RPS_from_probs(probs_exp = clim_probs, probs_obs = obs_probs, n_categories = n_categories, Fair = FALSE) + rps_ref <- multiApply::Apply(data = list(probs_exp = clim_probs, probs_obs = obs_probs), target_dims = 'bin', + fun = .RPS_from_probs, n_categories = n_categories, Fair = FALSE, ncores = NULL)$output1 } else { ## using "ref" as reference forecast rps_ref <- .RPS(exp = ref, obs = obs, n_categories = n_categories, indices_for_clim = indices_for_clim, Fair = Fair, time_dim = time_dim, member_dim = member_dim) } -- GitLab From 9c99215cf2f49aaa6624c3be06fdd9c788adcdf7 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Thu, 17 Mar 2022 11:19:55 +0100 Subject: [PATCH 20/83] first version (without documentation) --- R/ResidualCorr.R | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 R/ResidualCorr.R diff --git a/R/ResidualCorr.R b/R/ResidualCorr.R new file mode 100644 index 0000000..74e6a25 --- /dev/null +++ b/R/ResidualCorr.R @@ -0,0 +1,62 @@ + +library(s2dv) +library(multiApply) + +ResidualCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, alpha = 0.05, ncores = 1){ + + ## Checkings + if (!is.array(exp)){stop('"exp" must be an array.')} + if (!is.array(obs)){stop('"obs" must be an array.')} + if (!is.array(ref)){stop('"ref" must be an array.')} + if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(ref)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "ref".')} + if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} + if (!is.numeric(alpha) | alpha <= 0 | alpha >= 1){stop('"alpha" must be a number between 0 and 1.')} + if (!is.character(time_dim)){stop('"time_dim" must be a string.')} + if (!is.null(member_dim)){ + if (!is.character(member_dim)){stop('"member_dim" must be either NULL or a string.')} + } + if (!is.null(ncores)){ + if (!is.numeric(ncores) | ncores < 1){stop('"ncores" must be either NULL or a positive integer.')} + } + + ## Ensemble mean + if (!is.null(member_dim)){ + exp <- multiApply::Apply(data = exp, target_dims = member_dim, fun = mean, na.rm = FALSE, ncores = ncores)$output1 + ref <- multiApply::Apply(data = ref, target_dims = member_dim, fun = mean, na.rm = FALSE, ncores = ncores)$output1 + } + + ## Residual correlation and its significance + output <- multiApply::Apply(data = list(exp = exp, ref = ref, obs = obs), + target_dims = time_dim, fun = .ResidualCorr, + time_dim = time_dim, alpha = alpha, ncores = ncores) + return(output) +} + +.ResidualCorr <- function(exp, ref, obs, time_dim, alpha){ + + if (!anyNA(exp) & !anyNA(ref) & !anyNA(obs)){ + + ## Residuals of 'exp' and 'obs' (regressing 'ref' out in both 'exp' and 'obs') + exp_res <- lm(formula = y ~ x, data = list(y = exp, x = ref), na.action = NULL)$residuals + obs_res <- lm(formula = y ~ x, data = list(y = obs, x = ref), na.action = NULL)$residuals + + ## Residual correlation (and significance) + residual_cor <- NULL + residual_cor$r <- cor(exp_res,obs_res) + + ## Significance + residual_cor$n_eff <- s2dv::Eno(data = obs_res, time_dim = time_dim, na.action = na.pass, ncores = 1) + t_alpha2_n2 <- qt(p=alpha/2, df = residual_cor$n_eff-2, lower.tail = FALSE) + t <- abs(residual_cor$r) * sqrt(residual_cor$n_eff-2) / sqrt(1-residual_cor$r^2) + if (anyNA(c(t,t_alpha2_n2)) == FALSE & t >= t_alpha2_n2){ + residual_cor$sign <- TRUE + } else { + residual_cor$sign <- FALSE + } + + } else { + residual_cor <- list(r = NA, n_eff = NA, sign = NA) + } + + return(residual_cor) +} -- GitLab From 61ece2ebabd2b69f82ee38153d1ad4276fcf65c5 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Thu, 17 Mar 2022 17:20:12 +0100 Subject: [PATCH 21/83] included documentation --- R/ResidualCorr.R | 59 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 9 deletions(-) diff --git a/R/ResidualCorr.R b/R/ResidualCorr.R index 74e6a25..b9cae9d 100644 --- a/R/ResidualCorr.R +++ b/R/ResidualCorr.R @@ -1,8 +1,49 @@ - -library(s2dv) -library(multiApply) - -ResidualCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, alpha = 0.05, ncores = 1){ +#'Compute the residual correlation +#' +#'The residual correlation assesses whether a forecast captures any of the observed variability that is not +#'already captured by a reference forecast (Smith et al., 2019; https://doi.org/10.1038/s41612-019-0071-y.). +#'The procedure is as follows: the residuals of the forecasts and observations are computed by linearly regressing out +#'the reference forecast's ensemble mean from the forecasts’ ensemble mean and observations, respectively. Then, the +#'residual correlation is computed as the correlation between both residuals. Positive values of the residual correlation +#'indicate that the forecast capture more observed variability than the reference forecast, while negative values mean +#'that the reference forecast capture more. The significance of the residual correlation is computed with a two-sided t-test +#'(Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7) using a effective degrees of freedom to account for +#'the time series' autocorrelation (von Storch and Zwiers, 1999; https://doi.org/10.1017/CBO9780511612336). +#' +#'@param exp A numerical array with the forecast with, at least, time dimension. +#'@param ref A numerical array with the reference forecast data with, at least, time dimension. +#' The length of the time dimension must be the same as for "exp". +#'@param obs A numerical array with the observations with, at least, time dimension. +#' The length of the time dimension must be the same as for "exp". +#'@param time_dim A character string indicating the name of the time dimension. +#' The default value is 'year'. +#'@param member_dim A character string indicating the name of the member dimension to compute the +#' ensemble means of the forecast and reference forecast. If it is NULL, the ensemble means should +#' be provided directly to the function. The default value is NULL. +#'@param alpha Significance level to be used in the statistical significance test. The default value +#' is 0.05. +#'@param ncores An integer indicating the number of cores to use for parallel +#' computation. The default value is NULL. +#' +#'@return A list of 2: +#'\item{$r}{ +#' A numerical array with the residual correlation with the same dimensions as the input arrays +#' except "time_dim" (and "member_dim" if provided). +#'} +#'\item{$sign}{ +#' A logical array with the statistical significance of the residual correlation with the same +#' dimensions as the input arrays except "time_dim" (and "member_dim" if provided). +#'} +#' +#'@examples +#' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) +#' ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) +#' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, year = 50)) +#' ResidualCorr(exp, ref, obs, member_dim = 'member') +#' +#'@import multiApply +#'@export +ResidualCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, alpha = 0.05, ncores = NULL){ ## Checkings if (!is.array(exp)){stop('"exp" must be an array.')} @@ -45,9 +86,9 @@ ResidualCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, al residual_cor$r <- cor(exp_res,obs_res) ## Significance - residual_cor$n_eff <- s2dv::Eno(data = obs_res, time_dim = time_dim, na.action = na.pass, ncores = 1) - t_alpha2_n2 <- qt(p=alpha/2, df = residual_cor$n_eff-2, lower.tail = FALSE) - t <- abs(residual_cor$r) * sqrt(residual_cor$n_eff-2) / sqrt(1-residual_cor$r^2) + n_eff <- s2dv::Eno(data = obs_res, time_dim = time_dim, na.action = na.pass, ncores = 1) + t_alpha2_n2 <- qt(p = alpha/2, df = n_eff-2, lower.tail = FALSE) + t <- abs(residual_cor$r) * sqrt(n_eff-2) / sqrt(1-residual_cor$r^2) if (anyNA(c(t,t_alpha2_n2)) == FALSE & t >= t_alpha2_n2){ residual_cor$sign <- TRUE } else { @@ -55,7 +96,7 @@ ResidualCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, al } } else { - residual_cor <- list(r = NA, n_eff = NA, sign = NA) + residual_cor <- list(r = NA, sign = NA) } return(residual_cor) -- GitLab From 3b4232a3bcf139bee665635fc226561ba71d66de Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Thu, 17 Mar 2022 17:55:48 +0100 Subject: [PATCH 22/83] included documentation --- R/DiffCorr.R | 134 ++++++++++++++++++++++++++------------------------- 1 file changed, 68 insertions(+), 66 deletions(-) diff --git a/R/DiffCorr.R b/R/DiffCorr.R index 3aae37f..325f16f 100644 --- a/R/DiffCorr.R +++ b/R/DiffCorr.R @@ -1,8 +1,47 @@ - -library(s2dv) -library(multiApply) - -DiffCorr <- function(exp, ref, obs, conf.lev = NULL, handle.na = 'return.na', time_dim = 'year', member_dim = NULL, ncores = NULL){ +#'Compute the correlation difference and its significance +#' +#'Positive values of the correlation difference indicate that the forecast is more skilful +#'than the reference forecast, while negative values mean that the reference forecast is +#'more skilful. The statistical significance of the correlation differences is computed with +#'a one-sided test for equality of dependent correlation coefficients (Steiger, 1980; +#'https://content.apa.org/doi/10.1037/0033-2909.87.2.245; #'Siegert et al., 2017; +#'https://doi.org/10.1175/MWR-D-16-0037.1) using a effective degrees of freedom to account for +#'the time series' autocorrelation (von Storch and Zwiers, 1999; https://doi.org/10.1017/CBO9780511612336). +#' +#'@param exp A numerical array with the forecast with, at least, time dimension. +#'@param ref A numerical array with the reference forecast data with, at least, time dimension. +#' The length of the time dimension must be the same as for "exp". +#'@param obs A numerical array with the observations with, at least, time dimension. +#' The length of the time dimension must be the same as for "exp". +#'@param time_dim A character string indicating the name of the time dimension. +#' The default value is 'year'. +#'@param member_dim A character string indicating the name of the member dimension to compute the +#' ensemble means of the forecast and reference forecast. If it is NULL, the ensemble means should +#' be provided directly to the function. The default value is NULL. +#'@param alpha Significance level to be used in the statistical significance test. The default value +#' is 0.05. +#'@param ncores An integer indicating the number of cores to use for parallel +#' computation. The default value is NULL. +#' +#'@return A list of 2: +#'\item{$r}{ +#' A numerical array with the correlation differences with the same dimensions as the input arrays +#' except "time_dim" (and "member_dim" if provided). +#'} +#'\item{$sign}{ +#' A logical array with the statistical significance of the correlation differences with the same +#' dimensions as the input arrays except "time_dim" (and "member_dim" if provided). +#'} +#' +#'@examples +#' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) +#' ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) +#' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, year = 50)) +#' DiffCorr(exp, ref, obs, member_dim = 'member') +#' +#'@import multiApply +#'@export +DiffCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, alpha = 0.05, ncores = NULL){ ## Checkings if (!is.array(exp)){stop('"exp" must be an array.')} @@ -10,13 +49,11 @@ DiffCorr <- function(exp, ref, obs, conf.lev = NULL, handle.na = 'return.na', ti if (!is.array(ref)){stop('"ref" must be an array.')} if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(ref)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "ref".')} if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} - if (!is.null(conf.lev)){ - if (!is.numeric(conf.lev) | conf.lev <= 0 | conf.lev >= 1){stop('"conf.lev" must be either NULL or a number between 0 and 1.')} - } if (!is.character(time_dim)){stop('"time_dim" must be a string.')} if (!is.null(member_dim)){ if (!is.character(member_dim)){stop('"member_dim" must be either NULL or a string.')} } + if (!is.numeric(alpha) | alpha <= 0 | alpha >= 1){stop('"alpha" must be a number between 0 and 1.')} if (!is.null(ncores)){ if (!is.numeric(ncores) | ncores < 1){stop('"ncores" must be either NULL or a positive integer.')} } @@ -30,72 +67,37 @@ DiffCorr <- function(exp, ref, obs, conf.lev = NULL, handle.na = 'return.na', ti ## Correlation difference output <- multiApply::Apply(data = list(exp = exp, ref = ref, obs = obs), target_dims = time_dim, fun = .DiffCorr, - conf.lev = conf.lev, handle.na = handle.na, - time_dim = time_dim, ncores = ncores) + time_dim = time_dim, alpha = alpha, ncores = ncores) return(output) } -.DiffCorr <- function(exp, ref, obs, conf.lev, handle.na, time_dim) { - - ## handle NA's - if (handle.na == "na.fail") { - if (any(is.na(c(exp, ref, obs)))) { - stop("There are missing values.") - } - } else if (handle.na == "only.complete.triplets") { - nna <- !is.na(fcst) & !is.na(fcst.ref) & !is.na(obs) - if (all(nna == FALSE)) { - stop("There are no complete sets of forecasts and observations") - } - exp <- exp[nna] - ref <- ref[nna] - obs <- obs[nna] - } else if (handle.na != "return.na") { - stop("unknown 'handle.na' argument") - } - - ## Number of effective degrees of freedom - N <- s2dv::Eno(data = obs, time_dim = time_dim, na.action = na.pass, ncores = 1) +.DiffCorr <- function(exp, ref, obs, time_dim, alpha) { - ## Correlation coefficients and their confidence intervals - cor.exp <- cor(exp, obs) - cor.ref <- cor(ref, obs) - - ## Correlation difference - output <- NULL - output$corr.diff <- cor.exp - cor.ref - - ## auxiliary quantities - r12 <- cor.exp - r13 <- cor.ref - r23 <- cor(exp, ref) - - ## confidence interval, according to Zou (2007) - if (!is.null(conf.lev)){ - - ## individual confidence limits of cor.exp and cor.ref (not used) - # z.exp <- 0.5 * log((1 + cor.exp) / (1 - cor.exp)) - # z.ref <- 0.5 * log((1 + cor.ref) / (1 - cor.ref)) - - alpha <- (1. - conf.lev) / 2. - l1 <- tanh(atanh(r12) + qnorm(alpha)/sqrt(N-3)) - u1 <- tanh(atanh(r12) + qnorm(1-alpha)/sqrt(N-3)) - l2 <- tanh(atanh(r13) + qnorm(alpha)/sqrt(N-3)) - u2 <- tanh(atanh(r13) + qnorm(1-alpha)/sqrt(N-3)) + if (!anyNA(exp) & !anyNA(ref) & !anyNA(obs)){ - ## Correlation between the two corr.coef r12 and r13 - c.12.13 <- ((r23 - 0.5 * r12 * r13) * (1 - r12*r12 - r13*r13 - r23*r23) + r23*r23*r23) / ((1 - r12*r12) * (1 - r13*r13)) + ## Correlation difference + cor.exp <- cor(exp, obs) + cor.ref <- cor(ref, obs) + output <- NULL + output$corr.diff <- cor.exp - cor.ref - ## Confidence interval - output$conf.lower <- r12 - r13 - sqrt((r12-l1)^2 + (u2 - r13)^2 - 2*c.12.13*(r12-l1)*(u2-r13)) - output$conf.upper <- r12 - r13 + sqrt((u1 - r12)^2 + (r13-l2)^2 - 2*c.12.13*(u1-r12)*(r13-l2)) + ## Significance with one-sided test for equality of dependent correlation coefficients (Steiger, 1980) + r12 <- cor.exp + r13 <- cor.ref + r23 <- cor(exp, ref) + N <- s2dv::Eno(data = obs, time_dim = time_dim, na.action = na.pass, ncores = 1) ## effective degrees of freedom + R <- (1-r12*r12-r13*r13-r23*r23) + 2*r12*r13*r23 + t <- (r12 - r13) * sqrt((N-1)*(1+r23) / (2 * ((N-1)/(N-3)) * R + 0.25*(r12+r13)^2 * (1-r23)^3)) + p.value <- 1 - pt(t, df = N-3) + if (p.value <= alpha){ + output$sign <- TRUE + } else { + output$sign <- FALSE + } + } else { + output <- list(corr.diff = NA, sign = NA) } - ## p-value of one-sided test for equality of dependent correlation coefficients (Steiger, 1980) - R <- (1-r12*r12-r13*r13-r23*r23) + 2*r12*r13*r23 - t <- (r12 - r13) * sqrt((N-1)*(1+r23) / (2 * ((N-1)/(N-3)) * R + 0.25*(r12+r13)^2 * (1-r23)^3)) - output$p.value <- 1 - pt(t, df=N-3) - return(output) } -- GitLab From 6e50719a3978f29cad701afcf85ea1bc187de60a Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Thu, 17 Mar 2022 17:56:29 +0100 Subject: [PATCH 23/83] . --- R/ResidualCorr.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/ResidualCorr.R b/R/ResidualCorr.R index b9cae9d..a69178a 100644 --- a/R/ResidualCorr.R +++ b/R/ResidualCorr.R @@ -1,4 +1,4 @@ -#'Compute the residual correlation +#'Compute the residual correlation and its significance #' #'The residual correlation assesses whether a forecast captures any of the observed variability that is not #'already captured by a reference forecast (Smith et al., 2019; https://doi.org/10.1038/s41612-019-0071-y.). -- GitLab From a41f8bb1cba9567adc154245c7286563dd06debd Mon Sep 17 00:00:00 2001 From: Carlos Delgado Torres Date: Thu, 17 Mar 2022 18:21:56 +0100 Subject: [PATCH 24/83] . --- R/DiffCorr.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/DiffCorr.R b/R/DiffCorr.R index 325f16f..15538e0 100644 --- a/R/DiffCorr.R +++ b/R/DiffCorr.R @@ -4,7 +4,7 @@ #'than the reference forecast, while negative values mean that the reference forecast is #'more skilful. The statistical significance of the correlation differences is computed with #'a one-sided test for equality of dependent correlation coefficients (Steiger, 1980; -#'https://content.apa.org/doi/10.1037/0033-2909.87.2.245; #'Siegert et al., 2017; +#'https://content.apa.org/doi/10.1037/0033-2909.87.2.245; Siegert et al., 2017; #'https://doi.org/10.1175/MWR-D-16-0037.1) using a effective degrees of freedom to account for #'the time series' autocorrelation (von Storch and Zwiers, 1999; https://doi.org/10.1017/CBO9780511612336). #' -- GitLab From 178932ae938d67aa1d9dbb3f25c212f0b028ea61 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Thu, 17 Mar 2022 18:46:42 +0100 Subject: [PATCH 25/83] corrected typo in documentation --- R/RandomWalkTest.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/RandomWalkTest.R b/R/RandomWalkTest.R index 494be65..adeadc1 100644 --- a/R/RandomWalkTest.R +++ b/R/RandomWalkTest.R @@ -1,8 +1,8 @@ #'Random walk test for skill differences #' #'Forecast comparison of the skill obtained with 2 forecasts (with respect to a -#'common reference) based on Random Walks, with significance estimate at the 5% -#'confidence level, as in DelSole and Tippett (2015). +#'common reference) based on Random Walks, with significance estimate at the 95% +#'confidence level, as in DelSole and Tippett (2016). #' #'@param skill_A A numerical array of the time series of the skill with the #' forecaster A's. -- GitLab From 43c6d69b5e6ddb57e546d8a732c32d90d5768764 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Thu, 17 Mar 2022 18:55:35 +0100 Subject: [PATCH 26/83] included documentation --- R/RPS.R | 47 ++++++++++++++++++++++++++++++++++++++++++----- R/RPSS.R | 52 +++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 89 insertions(+), 10 deletions(-) diff --git a/R/RPS.R b/R/RPS.R index c7e7e0b..1cf25a4 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -1,8 +1,41 @@ - -library(multiApply) -library(easyVerification) - -RPS <- function(exp, obs, n_categories, indices_for_clim, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ +#'Compute the Ranked Probability Score +#' +#'The Ranked Probability Score (RPS; Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7) is defined +#'as the sum of the squared differences between the cumulative forecast probabilities (computed from the ensemble +#'members) and the observations (defined as 0% if the category did not happen and 100% if it happened). It can be +#'used to evaluate the skill of multi-categorical probabilistic forecasts. The RPS ranges between 0 (perfect +#'forecast) and n-1 (worst possible forecast), where n is the number of categories. In the case of a forecast +#'divided into two categories (the lowest number of categories that a probabilistic forecast can provide), the +#'RPS corresponds to the Brier Score (BS; Wilks, 2011) and, therefore, ranges between 0 and 1. +#' +#'@param exp A numerical array with the forecast with, at least, time dimension. +#'@param obs A numerical array with the observations with, at least, time dimension. +#' The length of the time dimension must be the same as for "exp". +#'@param indices_for_clim A vector with the indices to be taken along "time_dim" dimension for computing the thresholds +#' between the probabilistic categories. +#'@param n_categories An integer with the number of probabilistic categories. The default value is 3 (tercile categories). +#'@param Fair A logical indicating whether to compute the FairRPSS (the potential RPSS that the forecast would have with +#'an infinite ensemble size). The default value is FALSE. +#'@param time_dim A character string indicating the name of the time dimension. +#' The default value is 'year'. +#'@param member_dim A character string indicating the name of the member dimension to compute the +#' ensemble means of the forecast and reference forecast. If it is NULL, the ensemble means should +#' be provided directly to the function. The default value is 'member'. +#'@param ncores An integer indicating the number of cores to use for parallel +#' computation. The default value is NULL. +#' +#'@return +#' A numerical array with the RPS with the same dimensions as "exp" except the "time_dim" and "member_dim" dimensions. +#' +#'@examples +#' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) +#' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, year = 50)) +#' RPS(exp, obs, indices_for_clim = 1:50) +#' +#'@import multiApply +#'@importFrom easyVerification convert2prob +#'@export +RPS <- function(exp, obs, indices_for_clim, n_categories = 3, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ ## Checkings if (!is.array(exp)){stop('"exp" must be an array.')} @@ -22,6 +55,10 @@ RPS <- function(exp, obs, n_categories, indices_for_clim, Fair = FALSE, time_dim n_categories = n_categories, indices_for_clim = indices_for_clim, Fair = Fair, time_dim = time_dim, member_dim = member_dim, fun = .RPS, ncores = ncores)$output1 + + ## Returning only the mean RPS + rps <- multiApply::Apply(data = rps, target_dims = time_dim, fun = mean, na.rm = FALSE, ncores = ncores)$output1 + return(rps) } diff --git a/R/RPSS.R b/R/RPSS.R index ae6881f..a06de09 100644 --- a/R/RPSS.R +++ b/R/RPSS.R @@ -1,9 +1,51 @@ +#'Compute the Ranked Probability Skill Score +#' +#'The Ranked Probability Skill Score (RPSS; Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7) +#'is the skill score based on the Ranked Probability Score (RPS; Wilks, 2011). It can be used to assess whether +#'a forecast presents an improvement or worsening with respect to a reference forecast. The RPSS ranges between +#'minus infinite and 1. If the RPSS is positive, it indicates that the forecast has higher skill than the +#'reference forecast, while a negative value means that it has a lower skill. Examples of reference forecasts +#'are the climatological forecast (same probabilities for all categories for all time steps), persistence, a previous model version, +#'and another model. It is computed as RPSS = 1 - RPS_exp / RPS_ref. The statistical significance is obtained based +#'on a Random Walk test at the 95% confidence level (DelSole and Tippett, 2016; https://doi.org/10.1175/MWR-D-15-0218.1) +#' +#'@param exp A numerical array with the forecast with, at least, time dimension. +#'@param obs A numerical array with the observations with, at least, time dimension. +#' The length of the time dimension must be the same as for "exp". +#'@param ref NULL or a numerical array with the reference forecast with, at least, time dimension. +#' The length of the time dimension must be the same as for "exp". If it is NULL, the climatological forecast is +#' used as reference forecast. The default value is NULL. +#'@param indices_for_clim A vector with the indices to be taken along "time_dim" dimension for computing the thresholds +#' between the probabilistic categories. +#'@param n_categories An integer with the number of probabilistic categories. The default value is 3 (tercile categories). +#'@param Fair A logical indicating whether to compute the FairRPSS (the potential RPSS that the forecast would have with +#'an infinite ensemble size). The default value is FALSE. +#'@param time_dim A character string indicating the name of the time dimension. +#' The default value is 'year'. +#'@param member_dim A character string indicating the name of the member dimension to compute the +#' ensemble means of the forecast and reference forecast. If it is NULL, the ensemble means should +#' be provided directly to the function. The default value is 'member'. +#'@param ncores An integer indicating the number of cores to use for parallel +#' computation. The default value is NULL. +#' +#'@return +#'\item{$rpss}{ +#' A numerical array with the RPSS with the same dimensions as "exp" except the "time_dim" +#' and "member_dim" dimensions. +#'} +#'\item{$sign}{ +#' A logical array with the statistical significance of the RPSS with the same dimensions +#' as "exp" except the "time_dim" and "member_dim" dimensions. +#'} -library(multiApply) -library(easyVerification) -library(s2dv) - -RPSS <- function(exp, obs, ref = NULL, n_categories, indices_for_clim, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ +#'@examples +#' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) +#' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, year = 50)) +#' RPSS(exp, obs, indices_for_clim = 1:50) +#' +#'@import multiApply +#'@export +RPSS <- function(exp, obs, ref = NULL, indices_for_clim, n_categories = 3, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ ## Checkings if (!is.array(exp)){stop('"exp" must be an array.')} -- GitLab From bc63bef7eb49cfbc8854e749c415605cf852cbb8 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Thu, 24 Mar 2022 13:29:13 +0100 Subject: [PATCH 27/83] added method parameter to allow computing pearson, kendall and spearman coefficients --- R/ResidualCorr.R | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/R/ResidualCorr.R b/R/ResidualCorr.R index a69178a..bd551e5 100644 --- a/R/ResidualCorr.R +++ b/R/ResidualCorr.R @@ -20,6 +20,8 @@ #'@param member_dim A character string indicating the name of the member dimension to compute the #' ensemble means of the forecast and reference forecast. If it is NULL, the ensemble means should #' be provided directly to the function. The default value is NULL. +#'@param method A character string indicating the correlation coefficient to be computed ("pearson", +#' "kendall", or "spearman"). The default value is "pearson". #'@param alpha Significance level to be used in the statistical significance test. The default value #' is 0.05. #'@param ncores An integer indicating the number of cores to use for parallel @@ -43,7 +45,7 @@ #' #'@import multiApply #'@export -ResidualCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, alpha = 0.05, ncores = NULL){ +ResidualCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, method = 'pearson', alpha = 0.05, ncores = NULL){ ## Checkings if (!is.array(exp)){stop('"exp" must be an array.')} @@ -56,6 +58,7 @@ ResidualCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, al if (!is.null(member_dim)){ if (!is.character(member_dim)){stop('"member_dim" must be either NULL or a string.')} } + if (!method %in% c("pearson","kendall","spearman")){stop('"method" must be "pearson", "kendall", or "spearman".')} if (!is.null(ncores)){ if (!is.numeric(ncores) | ncores < 1){stop('"ncores" must be either NULL or a positive integer.')} } @@ -69,11 +72,12 @@ ResidualCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, al ## Residual correlation and its significance output <- multiApply::Apply(data = list(exp = exp, ref = ref, obs = obs), target_dims = time_dim, fun = .ResidualCorr, - time_dim = time_dim, alpha = alpha, ncores = ncores) + time_dim = time_dim, method = method, + alpha = alpha, ncores = ncores) return(output) } -.ResidualCorr <- function(exp, ref, obs, time_dim, alpha){ +.ResidualCorr <- function(exp, ref, obs, time_dim, method, alpha){ if (!anyNA(exp) & !anyNA(ref) & !anyNA(obs)){ @@ -83,7 +87,7 @@ ResidualCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, al ## Residual correlation (and significance) residual_cor <- NULL - residual_cor$r <- cor(exp_res,obs_res) + residual_cor$r <- cor(x = exp_res, y = obs_res, method = method) ## Significance n_eff <- s2dv::Eno(data = obs_res, time_dim = time_dim, na.action = na.pass, ncores = 1) -- GitLab From 69809a06d380fb457ab6ff972390e4c4dedd4575 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Thu, 24 Mar 2022 13:56:41 +0100 Subject: [PATCH 28/83] added method parameter to allow computing pearson, kendall and spearman coefficients --- R/DiffCorr.R | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/R/DiffCorr.R b/R/DiffCorr.R index 15538e0..3ebe6dd 100644 --- a/R/DiffCorr.R +++ b/R/DiffCorr.R @@ -18,6 +18,8 @@ #'@param member_dim A character string indicating the name of the member dimension to compute the #' ensemble means of the forecast and reference forecast. If it is NULL, the ensemble means should #' be provided directly to the function. The default value is NULL. +#'@param method A character string indicating the correlation coefficient to be computed ("pearson", +#' "kendall", or "spearman"). The default value is "pearson". #'@param alpha Significance level to be used in the statistical significance test. The default value #' is 0.05. #'@param ncores An integer indicating the number of cores to use for parallel @@ -41,7 +43,7 @@ #' #'@import multiApply #'@export -DiffCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, alpha = 0.05, ncores = NULL){ +DiffCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, method = 'pearson', alpha = 0.05, ncores = NULL){ ## Checkings if (!is.array(exp)){stop('"exp" must be an array.')} @@ -53,6 +55,7 @@ DiffCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, alpha if (!is.null(member_dim)){ if (!is.character(member_dim)){stop('"member_dim" must be either NULL or a string.')} } + if (!method %in% c("pearson","kendall","spearman")){stop('"method" must be "pearson", "kendall", or "spearman".')} if (!is.numeric(alpha) | alpha <= 0 | alpha >= 1){stop('"alpha" must be a number between 0 and 1.')} if (!is.null(ncores)){ if (!is.numeric(ncores) | ncores < 1){stop('"ncores" must be either NULL or a positive integer.')} @@ -67,17 +70,18 @@ DiffCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, alpha ## Correlation difference output <- multiApply::Apply(data = list(exp = exp, ref = ref, obs = obs), target_dims = time_dim, fun = .DiffCorr, - time_dim = time_dim, alpha = alpha, ncores = ncores) + time_dim = time_dim, method = method, + alpha = alpha, ncores = ncores) return(output) } -.DiffCorr <- function(exp, ref, obs, time_dim, alpha) { +.DiffCorr <- function(exp, ref, obs, time_dim, method, alpha) { if (!anyNA(exp) & !anyNA(ref) & !anyNA(obs)){ ## Correlation difference - cor.exp <- cor(exp, obs) - cor.ref <- cor(ref, obs) + cor.exp <- cor(x = exp, y = obs, method = method) + cor.ref <- cor(x = ref, y = obs, method = method) output <- NULL output$corr.diff <- cor.exp - cor.ref -- GitLab From 7fa4531030744435bdee06a87993766136bcac14 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Fri, 25 Mar 2022 12:02:00 +0100 Subject: [PATCH 29/83] indices_for_clim = NULL by default (to use the whole period for climatology) --- R/RPS.R | 9 +++++++-- R/RPSS.R | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/R/RPS.R b/R/RPS.R index 1cf25a4..4cd5120 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -12,7 +12,7 @@ #'@param obs A numerical array with the observations with, at least, time dimension. #' The length of the time dimension must be the same as for "exp". #'@param indices_for_clim A vector with the indices to be taken along "time_dim" dimension for computing the thresholds -#' between the probabilistic categories. +#' between the probabilistic categories. If NULL, the whole period is used. The default value is NULL. #'@param n_categories An integer with the number of probabilistic categories. The default value is 3 (tercile categories). #'@param Fair A logical indicating whether to compute the FairRPSS (the potential RPSS that the forecast would have with #'an infinite ensemble size). The default value is FALSE. @@ -35,12 +35,17 @@ #'@import multiApply #'@importFrom easyVerification convert2prob #'@export -RPS <- function(exp, obs, indices_for_clim, n_categories = 3, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ +RPS <- function(exp, obs, indices_for_clim = NULL, n_categories = 3, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ ## Checkings if (!is.array(exp)){stop('"exp" must be an array.')} if (!is.array(obs)){stop('"obs" must be an array.')} if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} + if (is.null(indices_for_clim)){ + indices_for_clim <- 1:as.numeric(dim(obs)[time_dim]) + } else if (!is.numeric(indices_for_clim)){ + stop('"indices_for_clim" must be NULL or a numeric vector.') + } if (!is.numeric(n_categories) | n_categories < 2){stop('"n_categories" must be an integer greater than 1.')} if (!is.logical(Fair)){stop('"Fair" must be TRUE or FALSE.')} if (!is.character(time_dim)){stop('"time_dim" must be a string.')} diff --git a/R/RPSS.R b/R/RPSS.R index a06de09..59005c2 100644 --- a/R/RPSS.R +++ b/R/RPSS.R @@ -16,7 +16,7 @@ #' The length of the time dimension must be the same as for "exp". If it is NULL, the climatological forecast is #' used as reference forecast. The default value is NULL. #'@param indices_for_clim A vector with the indices to be taken along "time_dim" dimension for computing the thresholds -#' between the probabilistic categories. +#' between the probabilistic categories. If NULL, the whole period is used. The default value is NULL. #'@param n_categories An integer with the number of probabilistic categories. The default value is 3 (tercile categories). #'@param Fair A logical indicating whether to compute the FairRPSS (the potential RPSS that the forecast would have with #'an infinite ensemble size). The default value is FALSE. @@ -45,7 +45,7 @@ #' #'@import multiApply #'@export -RPSS <- function(exp, obs, ref = NULL, indices_for_clim, n_categories = 3, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ +RPSS <- function(exp, obs, ref = NULL, indices_for_clim = NULL, n_categories = 3, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ ## Checkings if (!is.array(exp)){stop('"exp" must be an array.')} @@ -55,6 +55,11 @@ RPSS <- function(exp, obs, ref = NULL, indices_for_clim, n_categories = 3, Fair if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(ref)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "ref".')} } if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} + if (is.null(indices_for_clim)){ + indices_for_clim <- 1:as.numeric(dim(obs)[time_dim]) + } else if (!is.numeric(indices_for_clim)){ + stop('"indices_for_clim" must be NULL or a numeric vector.') + } if (!is.numeric(n_categories) | n_categories < 2){stop('"n_categories" must be an integer greater than 1.')} if (!is.logical(Fair)){stop('"Fair" must be TRUE or FALSE.')} if (!is.character(time_dim)){stop('"time_dim" must be a string.')} -- GitLab From 147a91b8e254fa0f7fa25e205f6497cbbab4a84f Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Fri, 25 Mar 2022 17:03:15 +0100 Subject: [PATCH 30/83] p.val can be return. N.eff can be defined --- R/DiffCorr.R | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/R/DiffCorr.R b/R/DiffCorr.R index 3ebe6dd..1def12d 100644 --- a/R/DiffCorr.R +++ b/R/DiffCorr.R @@ -13,6 +13,8 @@ #' The length of the time dimension must be the same as for "exp". #'@param obs A numerical array with the observations with, at least, time dimension. #' The length of the time dimension must be the same as for "exp". +#'@param N.eff Effective sample size to be used in the statistical significance test. +#' If NA, it is computed with the Eno() function. The default value is NA. #'@param time_dim A character string indicating the name of the time dimension. #' The default value is 'year'. #'@param member_dim A character string indicating the name of the member dimension to compute the @@ -20,6 +22,7 @@ #' be provided directly to the function. The default value is NULL. #'@param method A character string indicating the correlation coefficient to be computed ("pearson", #' "kendall", or "spearman"). The default value is "pearson". +#'@param p.val Logical indicating whether to regurn the p-value. The default value is TRUE. #'@param alpha Significance level to be used in the statistical significance test. The default value #' is 0.05. #'@param ncores An integer indicating the number of cores to use for parallel @@ -34,6 +37,10 @@ #' A logical array with the statistical significance of the correlation differences with the same #' dimensions as the input arrays except "time_dim" (and "member_dim" if provided). #'} +#'\item{$p.val}{ +#' A numeric array with the p-values with the same dimensions as the input arrays except "time_dim" +#' (and "member_dim" if provided). +#'} #' #'@examples #' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) @@ -43,7 +50,7 @@ #' #'@import multiApply #'@export -DiffCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, method = 'pearson', alpha = 0.05, ncores = NULL){ +DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'year', member_dim = NULL, method = 'pearson', p.val = TRUE, alpha = 0.05, ncores = NULL){ ## Checkings if (!is.array(exp)){stop('"exp" must be an array.')} @@ -51,11 +58,11 @@ DiffCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, method if (!is.array(ref)){stop('"ref" must be an array.')} if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(ref)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "ref".')} if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} + if (!is.na(N.eff) & !is.numeric(N.eff)){stop('"N.eff" must be NA or numeric.')} if (!is.character(time_dim)){stop('"time_dim" must be a string.')} - if (!is.null(member_dim)){ - if (!is.character(member_dim)){stop('"member_dim" must be either NULL or a string.')} - } + if (!is.null(member_dim) & !is.character(member_dim)){stop('"member_dim" must be either NULL or a string.')} if (!method %in% c("pearson","kendall","spearman")){stop('"method" must be "pearson", "kendall", or "spearman".')} + if (!is.logical(p.val)){stop('"p.val" must be TRUE or FALSE.')} if (!is.numeric(alpha) | alpha <= 0 | alpha >= 1){stop('"alpha" must be a number between 0 and 1.')} if (!is.null(ncores)){ if (!is.numeric(ncores) | ncores < 1){stop('"ncores" must be either NULL or a positive integer.')} @@ -70,12 +77,12 @@ DiffCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, method ## Correlation difference output <- multiApply::Apply(data = list(exp = exp, ref = ref, obs = obs), target_dims = time_dim, fun = .DiffCorr, - time_dim = time_dim, method = method, - alpha = alpha, ncores = ncores) + N.eff = N.eff, time_dim = time_dim, method = method, + p.val = p.val, alpha = alpha, ncores = ncores) return(output) } -.DiffCorr <- function(exp, ref, obs, time_dim, method, alpha) { +.DiffCorr <- function(exp, ref, obs, N.eff, time_dim, method, p.val, alpha) { if (!anyNA(exp) & !anyNA(ref) & !anyNA(obs)){ @@ -89,18 +96,22 @@ DiffCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, method r12 <- cor.exp r13 <- cor.ref r23 <- cor(exp, ref) - N <- s2dv::Eno(data = obs, time_dim = time_dim, na.action = na.pass, ncores = 1) ## effective degrees of freedom + if (is.na(N.eff)){ + N.eff <- s2dv::Eno(data = obs, time_dim = time_dim, na.action = na.pass, ncores = 1) ## effective degrees of freedom + } R <- (1-r12*r12-r13*r13-r23*r23) + 2*r12*r13*r23 - t <- (r12 - r13) * sqrt((N-1)*(1+r23) / (2 * ((N-1)/(N-3)) * R + 0.25*(r12+r13)^2 * (1-r23)^3)) - p.value <- 1 - pt(t, df = N-3) + t <- (r12 - r13) * sqrt((N.eff-1)*(1+r23) / (2 * ((N.eff-1)/(N.eff-3)) * R + 0.25*(r12+r13)^2 * (1-r23)^3)) + p.value <- 1 - pt(t, df = N.eff-3) if (p.value <= alpha){ output$sign <- TRUE } else { output$sign <- FALSE } + if (isTRUE(p.val)){output$p.val <- p.value} } else { output <- list(corr.diff = NA, sign = NA) + if (isTRUE(p.val)){output$p.val <- NA} } return(output) -- GitLab From dc9d0784af3157ef03c6452ab9fc45e3df4195b6 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Fri, 25 Mar 2022 17:14:10 +0100 Subject: [PATCH 31/83] sign=FALSE is return if p.val=NA (e.g., if there is variance is zero) --- R/DiffCorr.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/DiffCorr.R b/R/DiffCorr.R index 1def12d..c35ee91 100644 --- a/R/DiffCorr.R +++ b/R/DiffCorr.R @@ -102,7 +102,7 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'year', member_dim = R <- (1-r12*r12-r13*r13-r23*r23) + 2*r12*r13*r23 t <- (r12 - r13) * sqrt((N.eff-1)*(1+r23) / (2 * ((N.eff-1)/(N.eff-3)) * R + 0.25*(r12+r13)^2 * (1-r23)^3)) p.value <- 1 - pt(t, df = N.eff-3) - if (p.value <= alpha){ + if (!is.na(p.value) & p.value <= alpha){ output$sign <- TRUE } else { output$sign <- FALSE -- GitLab From 36a67e5e8f6b9638cd062fd2687ed640b9c971f4 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Mon, 28 Mar 2022 17:59:51 +0200 Subject: [PATCH 32/83] several modification taking into account Eleftheria feedback --- R/DiffCorr.R | 73 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 27 deletions(-) diff --git a/R/DiffCorr.R b/R/DiffCorr.R index c35ee91..4286082 100644 --- a/R/DiffCorr.R +++ b/R/DiffCorr.R @@ -13,44 +13,46 @@ #' The length of the time dimension must be the same as for "exp". #'@param obs A numerical array with the observations with, at least, time dimension. #' The length of the time dimension must be the same as for "exp". -#'@param N.eff Effective sample size to be used in the statistical significance test. -#' If NA, it is computed with the Eno() function. The default value is NA. +#'@param N.eff Effective sample size to be used in the statistical significance test. It can be NA +#' (in this case, it is computed with the s2dv::Eno() function), a numeric (which is used for all +#' cases), or an array with the same dimensions as "obs" except "time_dim" (for a particular N.eff +#' to be used for each case). The default value is NA. #'@param time_dim A character string indicating the name of the time dimension. -#' The default value is 'year'. +#' The default value is 'sdate'. #'@param member_dim A character string indicating the name of the member dimension to compute the #' ensemble means of the forecast and reference forecast. If it is NULL, the ensemble means should #' be provided directly to the function. The default value is NULL. #'@param method A character string indicating the correlation coefficient to be computed ("pearson", #' "kendall", or "spearman"). The default value is "pearson". -#'@param p.val Logical indicating whether to regurn the p-value. The default value is TRUE. -#'@param alpha Significance level to be used in the statistical significance test. The default value -#' is 0.05. +#'@param alpha Significance level to be used in the statistical significance test. If NULL, the p-value +#' is returned instead. The default value is NULL. #'@param ncores An integer indicating the number of cores to use for parallel #' computation. The default value is NULL. #' -#'@return A list of 2: +#'@return A list with: #'\item{$r}{ #' A numerical array with the correlation differences with the same dimensions as the input arrays #' except "time_dim" (and "member_dim" if provided). #'} #'\item{$sign}{ #' A logical array with the statistical significance of the correlation differences with the same -#' dimensions as the input arrays except "time_dim" (and "member_dim" if provided). +#' dimensions as the input arrays except "time_dim" (and "member_dim" if provided). Returned only +#' if "alpha" is a numeric. #'} #'\item{$p.val}{ #' A numeric array with the p-values with the same dimensions as the input arrays except "time_dim" -#' (and "member_dim" if provided). +#' (and "member_dim" if provided). Returned only if "alpha" is NULL. #'} #' #'@examples -#' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) -#' ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) -#' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, year = 50)) +#' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +#' ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +#' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) #' DiffCorr(exp, ref, obs, member_dim = 'member') #' #'@import multiApply #'@export -DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'year', member_dim = NULL, method = 'pearson', p.val = TRUE, alpha = 0.05, ncores = NULL){ +DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', member_dim = NULL, method = 'pearson', alpha = NULL, ncores = NULL){ ## Checkings if (!is.array(exp)){stop('"exp" must be an array.')} @@ -58,12 +60,19 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'year', member_dim = if (!is.array(ref)){stop('"ref" must be an array.')} if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(ref)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "ref".')} if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} - if (!is.na(N.eff) & !is.numeric(N.eff)){stop('"N.eff" must be NA or numeric.')} + if (is.array(N.eff)){ + if (!all(names(dim(N.eff)) %in% names(dim(obs)))){ + stop('If "N.eff" is provided with an array, it must have the same dimensions as "obs" except "time_dim".') + } + } else if (!is.na(N.eff) & !is.numeric(N.eff)){ + stop('"N.eff" must be NA, a numeric, or an array with the same dimensions as "obs" except "time_dim".') + } if (!is.character(time_dim)){stop('"time_dim" must be a string.')} if (!is.null(member_dim) & !is.character(member_dim)){stop('"member_dim" must be either NULL or a string.')} if (!method %in% c("pearson","kendall","spearman")){stop('"method" must be "pearson", "kendall", or "spearman".')} - if (!is.logical(p.val)){stop('"p.val" must be TRUE or FALSE.')} - if (!is.numeric(alpha) | alpha <= 0 | alpha >= 1){stop('"alpha" must be a number between 0 and 1.')} + if (!is.null(alpha)){ + if (!is.numeric(alpha) | alpha <= 0 | alpha >= 1){stop('"alpha" must be NULL or a number between 0 and 1.')} + } if (!is.null(ncores)){ if (!is.numeric(ncores) | ncores < 1){stop('"ncores" must be either NULL or a positive integer.')} } @@ -75,14 +84,16 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'year', member_dim = } ## Correlation difference - output <- multiApply::Apply(data = list(exp = exp, ref = ref, obs = obs), - target_dims = time_dim, fun = .DiffCorr, - N.eff = N.eff, time_dim = time_dim, method = method, - p.val = p.val, alpha = alpha, ncores = ncores) + output <- multiApply::Apply(data = list(exp = exp, ref = ref, + obs = obs, N.eff = N.eff), + target_dims = list(exp = time_dim, ref = time_dim, + obs = time_dim, N.eff = NULL), + fun = .DiffCorr, time_dim = time_dim, + method = method, alpha = alpha, ncores = ncores) return(output) } -.DiffCorr <- function(exp, ref, obs, N.eff, time_dim, method, p.val, alpha) { +.DiffCorr <- function(exp, ref, obs, N.eff, time_dim, method, alpha) { if (!anyNA(exp) & !anyNA(ref) & !anyNA(obs)){ @@ -102,16 +113,24 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'year', member_dim = R <- (1-r12*r12-r13*r13-r23*r23) + 2*r12*r13*r23 t <- (r12 - r13) * sqrt((N.eff-1)*(1+r23) / (2 * ((N.eff-1)/(N.eff-3)) * R + 0.25*(r12+r13)^2 * (1-r23)^3)) p.value <- 1 - pt(t, df = N.eff-3) - if (!is.na(p.value) & p.value <= alpha){ - output$sign <- TRUE + if (is.null(alpha)){ + output$p.val <- p.value } else { - output$sign <- FALSE + if (!is.na(p.value) & p.value <= alpha){ + output$sign <- TRUE + } else { + output$sign <- FALSE + } } - if (isTRUE(p.val)){output$p.val <- p.value} } else { - output <- list(corr.diff = NA, sign = NA) - if (isTRUE(p.val)){output$p.val <- NA} + + if (is.null(alpha)){ + output <- list(corr.diff = NA, p.val = NA) + } else { + output <- list(corr.diff = NA, sign = NA) + } + } return(output) -- GitLab From db13be8e56430f30be24289a2898ca921de4cfe9 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Tue, 29 Mar 2022 17:15:38 +0200 Subject: [PATCH 33/83] added handle.na parameter --- R/DiffCorr.R | 95 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 62 insertions(+), 33 deletions(-) diff --git a/R/DiffCorr.R b/R/DiffCorr.R index 4286082..5b067a5 100644 --- a/R/DiffCorr.R +++ b/R/DiffCorr.R @@ -26,6 +26,10 @@ #' "kendall", or "spearman"). The default value is "pearson". #'@param alpha Significance level to be used in the statistical significance test. If NULL, the p-value #' is returned instead. The default value is NULL. +#'@handle.na How to handle missing values. If "return.na", NA will be returned for the cases that contain +#' at least one NA in "exp", "ref" or "obs". If "only.complete.triplets", only the time steps with no +#' missing values in all "exp", "ref" and "obs" will be used. If "na.fail", an error will arise if any of +#' "exp", "ref" or "obs" contains any NA. The default value is "return.na". #'@param ncores An integer indicating the number of cores to use for parallel #' computation. The default value is NULL. #' @@ -52,7 +56,7 @@ #' #'@import multiApply #'@export -DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', member_dim = NULL, method = 'pearson', alpha = NULL, ncores = NULL){ +DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', member_dim = NULL, method = 'pearson', alpha = NULL, handle.na = 'return.na', ncores = NULL){ ## Checkings if (!is.array(exp)){stop('"exp" must be an array.')} @@ -73,6 +77,7 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', member_dim = if (!is.null(alpha)){ if (!is.numeric(alpha) | alpha <= 0 | alpha >= 1){stop('"alpha" must be NULL or a number between 0 and 1.')} } + if (!handle.na %in% c('return.na','only.complete.triplets','na.fail')){stop('"handle.na" must be "return.na", "only.complete.triplets" or "na.fail".')} if (!is.null(ncores)){ if (!is.numeric(ncores) | ncores < 1){stop('"ncores" must be either NULL or a positive integer.')} } @@ -88,49 +93,73 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', member_dim = obs = obs, N.eff = N.eff), target_dims = list(exp = time_dim, ref = time_dim, obs = time_dim, N.eff = NULL), - fun = .DiffCorr, time_dim = time_dim, - method = method, alpha = alpha, ncores = ncores) + fun = .DiffCorr, time_dim = time_dim, method = method, + alpha = alpha, handle.na = handle.na, ncores = ncores) return(output) } -.DiffCorr <- function(exp, ref, obs, N.eff, time_dim, method, alpha) { +.DiffCorr <- function(exp, ref, obs, N.eff, time_dim, method, alpha, handle.na) { - if (!anyNA(exp) & !anyNA(ref) & !anyNA(obs)){ + if (anyNA(exp) | anyNA(ref) | anyNA(obs)){ ## There are NAs - ## Correlation difference - cor.exp <- cor(x = exp, y = obs, method = method) - cor.ref <- cor(x = ref, y = obs, method = method) - output <- NULL - output$corr.diff <- cor.exp - cor.ref - - ## Significance with one-sided test for equality of dependent correlation coefficients (Steiger, 1980) - r12 <- cor.exp - r13 <- cor.ref - r23 <- cor(exp, ref) - if (is.na(N.eff)){ - N.eff <- s2dv::Eno(data = obs, time_dim = time_dim, na.action = na.pass, ncores = 1) ## effective degrees of freedom - } - R <- (1-r12*r12-r13*r13-r23*r23) + 2*r12*r13*r23 - t <- (r12 - r13) * sqrt((N.eff-1)*(1+r23) / (2 * ((N.eff-1)/(N.eff-3)) * R + 0.25*(r12+r13)^2 * (1-r23)^3)) - p.value <- 1 - pt(t, df = N.eff-3) - if (is.null(alpha)){ - output$p.val <- p.value - } else { - if (!is.na(p.value) & p.value <= alpha){ - output$sign <- TRUE + if (identical(handle.na,'na.fail')){ + + stop('The data contain NAs.') + + } else if (identical(handle.na,'only.complete.triplets')){ + + nna <- !is.na(exp) & !is.na(ref) & !is.na(obs) + if (all(nna == FALSE)){stop("there are no complete sets of forecasts and observations")} + exp <- exp[nna] + ref <- ref[nna] + obs <- obs[nna] + output <- .diff.corr(exp = exp, ref = ref, obs = obs, method = method, N.eff = N.eff, time_dim = time_dim, alpha = alpha) + + } else if (identical(handle.na,'return.na')){ + + if (is.null(alpha)){ + output <- list(corr.diff = NA, p.val = NA) } else { - output$sign <- FALSE + output <- list(corr.diff = NA, sign = NA) } - } + + } else {stop('Incorrect "handle.na"')} - } else { + } else { ## There are no NAs - if (is.null(alpha)){ - output <- list(corr.diff = NA, p.val = NA) + output <- .diff.corr(exp = exp, ref = ref, obs = obs, method = method, N.eff = N.eff, time_dim = time_dim, alpha = alpha) + + } + + return(output) +} + +.diff.corr <- function(exp, ref, obs, method, N.eff, time_dim, alpha){ + + ## Correlation difference + cor.exp <- cor(x = exp, y = obs, method = method) + cor.ref <- cor(x = ref, y = obs, method = method) + output <- NULL + output$corr.diff <- cor.exp - cor.ref + + ## Significance with one-sided test for equality of dependent correlation coefficients (Steiger, 1980) + r12 <- cor.exp + r13 <- cor.ref + r23 <- cor(exp, ref) + if (is.na(N.eff)){ + N.eff <- s2dv::Eno(data = obs, time_dim = time_dim, na.action = na.pass, ncores = 1) ## effective degrees of freedom + } + R <- (1-r12*r12-r13*r13-r23*r23) + 2*r12*r13*r23 + t <- (r12 - r13) * sqrt((N.eff-1)*(1+r23) / (2 * ((N.eff-1)/(N.eff-3)) * R + 0.25*(r12+r13)^2 * (1-r23)^3)) + p.value <- 1 - pt(t, df = N.eff-3) + if (is.null(alpha)){ + output$p.val <- p.value + } else { + if (!is.na(p.value) & p.value <= alpha){ + output$sign <- TRUE } else { - output <- list(corr.diff = NA, sign = NA) + output$sign <- FALSE } - } return(output) -- GitLab From 8f72f8b8ddca314abb93f75d5b0e7c7f1f139fb7 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Wed, 30 Mar 2022 13:15:02 +0200 Subject: [PATCH 34/83] replaced n_categories with prob_thresholds --- R/RPS.R | 57 ++++++++++++++++++++++++-------------------------------- R/RPSS.R | 45 +++++++++++++++++++++++++++++++------------- 2 files changed, 56 insertions(+), 46 deletions(-) diff --git a/R/RPS.R b/R/RPS.R index 4cd5120..b28791e 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -5,15 +5,16 @@ #'members) and the observations (defined as 0% if the category did not happen and 100% if it happened). It can be #'used to evaluate the skill of multi-categorical probabilistic forecasts. The RPS ranges between 0 (perfect #'forecast) and n-1 (worst possible forecast), where n is the number of categories. In the case of a forecast -#'divided into two categories (the lowest number of categories that a probabilistic forecast can provide), the +#'divided into two categories (the lowest number of categories that a probabilistic forecast can have), the #'RPS corresponds to the Brier Score (BS; Wilks, 2011) and, therefore, ranges between 0 and 1. #' #'@param exp A numerical array with the forecast with, at least, time dimension. #'@param obs A numerical array with the observations with, at least, time dimension. #' The length of the time dimension must be the same as for "exp". +#'@param prob_thresholds A numeric vector with the relative thresholds (from 0 to 1) between the categories. +#' The default value is c(1/3,2/3), which corresponds to tercile equiprobable categories. #'@param indices_for_clim A vector with the indices to be taken along "time_dim" dimension for computing the thresholds #' between the probabilistic categories. If NULL, the whole period is used. The default value is NULL. -#'@param n_categories An integer with the number of probabilistic categories. The default value is 3 (tercile categories). #'@param Fair A logical indicating whether to compute the FairRPSS (the potential RPSS that the forecast would have with #'an infinite ensemble size). The default value is FALSE. #'@param time_dim A character string indicating the name of the time dimension. @@ -30,23 +31,26 @@ #'@examples #' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) #' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, year = 50)) -#' RPS(exp, obs, indices_for_clim = 1:50) +#' RPS(exp = exp, obs = obs) #' #'@import multiApply +#'@importFrom ClimProjDiags Subset #'@importFrom easyVerification convert2prob #'@export -RPS <- function(exp, obs, indices_for_clim = NULL, n_categories = 3, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ +RPS <- function(exp, obs, prob_thresholds = c(1/3,2/3), indices_for_clim = NULL, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ ## Checkings if (!is.array(exp)){stop('"exp" must be an array.')} if (!is.array(obs)){stop('"obs" must be an array.')} if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} + if (!is.numeric(prob_thresholds) | !is.vector(prob_thresholds) | any(prob_thresholds <= 0) | any(prob_thresholds >= 1)){ + stop('"prob_thresholds" must be a numeric vector with the relative thresholds (from 0 to 1) between the categories.') + } if (is.null(indices_for_clim)){ indices_for_clim <- 1:as.numeric(dim(obs)[time_dim]) } else if (!is.numeric(indices_for_clim)){ stop('"indices_for_clim" must be NULL or a numeric vector.') } - if (!is.numeric(n_categories) | n_categories < 2){stop('"n_categories" must be an integer greater than 1.')} if (!is.logical(Fair)){stop('"Fair" must be TRUE or FALSE.')} if (!is.character(time_dim)){stop('"time_dim" must be a string.')} if (!is.character(member_dim)){stop('"member_dim" must be a string.')} @@ -57,7 +61,7 @@ RPS <- function(exp, obs, indices_for_clim = NULL, n_categories = 3, Fair = FALS ## RPS rps <- multiApply::Apply(data = list(exp = exp, obs = obs), target_dims = list(exp = c(time_dim, member_dim), obs = time_dim), - n_categories = n_categories, indices_for_clim = indices_for_clim, + prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, Fair = Fair, time_dim = time_dim, member_dim = member_dim, fun = .RPS, ncores = ncores)$output1 @@ -67,47 +71,34 @@ RPS <- function(exp, obs, indices_for_clim = NULL, n_categories = 3, Fair = FALS return(rps) } -.RPS <- function(exp, obs, n_categories, indices_for_clim, Fair = FALSE, time_dim = 'year', member_dim = 'member'){ +.RPS <- function(exp, obs, prob_thresholds, indices_for_clim, Fair, time_dim, member_dim){ - exp_probs <- .get_probs(data = exp, type = 'exp', indices_for_quartiles = indices_for_clim, - time_dim = time_dim, member_dim = member_dim, n_categories = n_categories)$probs + exp_probs <- .get_probs(data = exp, type = 'exp', indices_for_quantiles = indices_for_clim, + time_dim = time_dim, member_dim = member_dim, prob_thresholds = prob_thresholds) - obs_probs <- .get_probs(data = obs, type = 'obs', indices_for_quartiles = indices_for_clim, - time_dim = time_dim, member_dim = NULL, n_categories = n_categories)$probs + obs_probs <- .get_probs(data = obs, type = 'obs', indices_for_quantiles = indices_for_clim, + time_dim = time_dim, member_dim = NULL, prob_thresholds = prob_thresholds) + ## RPS for each time step rps <- multiApply::Apply(data = list(probs_exp = exp_probs, probs_obs = obs_probs), target_dims = 'bin', - fun = .RPS_from_probs, n_categories = n_categories, Fair = Fair, + fun = .RPS_from_probs, n_categories = length(prob_thresholds)+1, Fair = Fair, n_members = as.numeric(dim(exp)[member_dim]), ncores = NULL)$output1 return(rps) } -.get_probs <- function(data, type, indices_for_quartiles, time_dim, member_dim, n_categories){ +.get_probs <- function(data, type, indices_for_quantiles, time_dim, member_dim, prob_thresholds){ if (type == 'exp'){ - target_dims_quantiles = c(time_dim, member_dim) - target_dims_probs = list(member_dim, 'bin') + target_dims = member_dim } else if (type == 'obs'){ - target_dims_quantiles = time_dim - target_dims_probs = list(NULL,'bin') + target_dims = NULL } else {stop("Parameter 'type' must be 'exp' or 'obs'")} - quantiles <- multiApply::Apply(data = ClimProjDiags::Subset(x = data, along = time_dim, indices = indices_for_quartiles), - target_dims = target_dims_quantiles, - fun = .quantile_aux, n_categories = n_categories, - output_dims = 'bin', ncores = NULL)$output1 - - probs <- multiApply::Apply(data = list(data = data, quantiles = quantiles), - target_dims = target_dims_probs, - fun = .c2p, - output_dims = 'bin', ncores = NULL)$output1 + quantiles <- quantile(x = as.vector(data), probs = prob_thresholds, type = 8, na.rm = TRUE) ## Absolute thresholds - return(list('probs' = probs, 'quantiles' = quantiles)) -} - -.quantile_aux = function(data, n_categories){ - data = as.vector(data) - q = quantile(x = data, probs = 1:(n_categories - 1) / n_categories, type = 8, na.rm = TRUE) - return(q) + probs <- multiApply::Apply(data = data, target_dims = target_dims, fun = .c2p, output_dims = 'bin', + quantiles = quantiles, ncores = NULL)$output1 ## Probabilities + return(probs) } .c2p <- function(data, quantiles) { diff --git a/R/RPSS.R b/R/RPSS.R index 59005c2..f7dc80d 100644 --- a/R/RPSS.R +++ b/R/RPSS.R @@ -15,9 +15,10 @@ #'@param ref NULL or a numerical array with the reference forecast with, at least, time dimension. #' The length of the time dimension must be the same as for "exp". If it is NULL, the climatological forecast is #' used as reference forecast. The default value is NULL. +#'@param prob_thresholds A numeric vector with the relative thresholds (between 0 and 1) between the categories. +#' The default value is c(1/3,2/3), which corresponds to tercile equiprobable categories. #'@param indices_for_clim A vector with the indices to be taken along "time_dim" dimension for computing the thresholds #' between the probabilistic categories. If NULL, the whole period is used. The default value is NULL. -#'@param n_categories An integer with the number of probabilistic categories. The default value is 3 (tercile categories). #'@param Fair A logical indicating whether to compute the FairRPSS (the potential RPSS that the forecast would have with #'an infinite ensemble size). The default value is FALSE. #'@param time_dim A character string indicating the name of the time dimension. @@ -40,27 +41,31 @@ #'@examples #' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) +#' ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) #' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, year = 50)) -#' RPSS(exp, obs, indices_for_clim = 1:50) +#' RPSS(exp = exp, obs = obs) ## climatology as reference forecast +#' RPSS(exp = exp, obs = obs, ref = ref) ## ref as reference forecast #' #'@import multiApply #'@export -RPSS <- function(exp, obs, ref = NULL, indices_for_clim = NULL, n_categories = 3, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ +RPSS <- function(exp, obs, ref = NULL, prob_thresholds = c(1/3,2/3), indices_for_clim = NULL, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ ## Checkings if (!is.array(exp)){stop('"exp" must be an array.')} if (!is.array(obs)){stop('"obs" must be an array.')} + if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} if (!is.null(ref)){ if (!is.array(ref)){stop('"ref" must be an array.')} if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(ref)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "ref".')} } - if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} + if (!is.numeric(prob_thresholds) | !is.vector(prob_thresholds) | any(prob_thresholds <= 0) | any(prob_thresholds >= 1)){ + stop('"prob_thresholds" must be a numeric vector with the relative thresholds (from 0 to 1) between the categories.') + } if (is.null(indices_for_clim)){ indices_for_clim <- 1:as.numeric(dim(obs)[time_dim]) } else if (!is.numeric(indices_for_clim)){ stop('"indices_for_clim" must be NULL or a numeric vector.') } - if (!is.numeric(n_categories) | n_categories < 2){stop('"n_categories" must be an integer greater than 1.')} if (!is.logical(Fair)){stop('"Fair" must be TRUE or FALSE.')} if (!is.character(time_dim)){stop('"time_dim" must be a string.')} if (!is.character(member_dim)){stop('"member_dim" must be a string.')} @@ -71,13 +76,13 @@ RPSS <- function(exp, obs, ref = NULL, indices_for_clim = NULL, n_categories = 3 if (!is.null(ref)){ ## using "ref" as reference forecast output <- multiApply::Apply(data = list(exp = exp, obs = obs, ref = ref), target_dims = list(exp = c(time_dim, member_dim), obs = time_dim, ref = c(time_dim, member_dim)), - n_categories = n_categories, indices_for_clim = indices_for_clim, + prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, Fair = Fair, time_dim = time_dim, member_dim = member_dim, fun = .RPSS, ncores = ncores) } else { ## using climatology as reference forecast output <- multiApply::Apply(data = list(exp = exp, obs = obs), target_dims = list(exp = c(time_dim, member_dim), obs = time_dim), - ref = ref, n_categories = n_categories, indices_for_clim = indices_for_clim, + ref = ref, prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, Fair = Fair, time_dim = time_dim, member_dim = member_dim, fun = .RPSS, ncores = ncores) } @@ -85,19 +90,19 @@ RPSS <- function(exp, obs, ref = NULL, indices_for_clim = NULL, n_categories = 3 return(output) } -.RPSS <- function(exp, obs, ref, n_categories, indices_for_clim, Fair, time_dim, member_dim){ +.RPSS <- function(exp, obs, ref, prob_thresholds, indices_for_clim, Fair, time_dim, member_dim){ ## RPS of the forecast - rps_exp <- .RPS(exp = exp, obs = obs, n_categories = n_categories, indices_for_clim = indices_for_clim, Fair = Fair, time_dim = time_dim, member_dim = member_dim) + rps_exp <- .RPS(exp = exp, obs = obs, prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, Fair = Fair, time_dim = time_dim, member_dim = member_dim) ## RPS of the reference forecast if (is.null(ref)){ ## using climatology as reference forecast - obs_probs <- .get_probs(data = obs, type = 'obs', indices_for_quartiles = indices_for_clim, time_dim = time_dim, member_dim = NULL, n_categories = n_categories)$probs - clim_probs <- array(data = 1 / n_categories, dim = dim(obs_probs)) + obs_probs <- .get_probs(data = obs, type = 'obs', indices_for_quantiles = indices_for_clim, time_dim = time_dim, member_dim = NULL, prob_thresholds = prob_thresholds) + clim_probs <- .get_probs_clim(prob_thresholds = prob_thresholds, dims = dim(obs_probs), time_dim = time_dim) rps_ref <- multiApply::Apply(data = list(probs_exp = clim_probs, probs_obs = obs_probs), target_dims = 'bin', - fun = .RPS_from_probs, n_categories = n_categories, Fair = FALSE, ncores = NULL)$output1 + fun = .RPS_from_probs, n_categories = length(prob_thresholds)+1, Fair = FALSE, ncores = NULL)$output1 } else { ## using "ref" as reference forecast - rps_ref <- .RPS(exp = ref, obs = obs, n_categories = n_categories, indices_for_clim = indices_for_clim, Fair = Fair, time_dim = time_dim, member_dim = member_dim) + rps_ref <- .RPS(exp = ref, obs = obs, prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, Fair = Fair, time_dim = time_dim, member_dim = member_dim) } ## RPSS @@ -110,3 +115,17 @@ RPSS <- function(exp, obs, ref = NULL, indices_for_clim = NULL, n_categories = 3 return(list(rpss = rpss, sign = sign)) } + +.get_probs_clim <- function(prob_thresholds, dims, time_dim){ + + probs <- array(data = NA, dim = c(bin = length(prob_thresholds)+1)) + probs[1] <- prob_thresholds[1] + if (length(prob_thresholds) > 1){ + probs[2:(length(probs)-1)] <- diff(prob_thresholds) + } + probs[length(probs)] <- 1 - prob_thresholds[length(prob_thresholds)] + stopifnot(identical(sum(probs),1)) + probs <- s2dv::InsertDim(data = probs, posdim = 2, lendim = dims[[time_dim]], name = time_dim) + + return(probs) +} -- GitLab From 43665468fc0a4a93ffc60161f5a52ec7b2b273d7 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 6 Apr 2022 16:13:27 +0200 Subject: [PATCH 35/83] Combine .diff.corr() with .DiffCorr() and refine the code format --- NAMESPACE | 1 + R/DiffCorr.R | 334 ++++++++++++++++++++++++++++++------------------ man/DiffCorr.Rd | 98 ++++++++++++++ 3 files changed, 310 insertions(+), 123 deletions(-) create mode 100644 man/DiffCorr.Rd diff --git a/NAMESPACE b/NAMESPACE index ca5d500..8e17668 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -25,6 +25,7 @@ export(ConfigShowSimilarEntries) export(ConfigShowTable) export(Consist_Trend) export(Corr) +export(DiffCorr) export(EOF) export(Eno) export(EuroAtlanticTC) diff --git a/R/DiffCorr.R b/R/DiffCorr.R index 5b067a5..74421eb 100644 --- a/R/DiffCorr.R +++ b/R/DiffCorr.R @@ -1,166 +1,254 @@ #'Compute the correlation difference and its significance #' -#'Positive values of the correlation difference indicate that the forecast is more skilful -#'than the reference forecast, while negative values mean that the reference forecast is -#'more skilful. The statistical significance of the correlation differences is computed with -#'a one-sided test for equality of dependent correlation coefficients (Steiger, 1980; +#'Compute the correlation difference between two deterministic forecasts. +#'Positive values of the correlation difference indicate that the forecast is +#'more skillful than the reference forecast, while negative values mean that +#'the reference forecast is more skillful. The statistical significance of the +#'correlation differences is computed with a one-sided test for equality of +#'dependent correlation coefficients (Steiger, 1980; #'https://content.apa.org/doi/10.1037/0033-2909.87.2.245; Siegert et al., 2017; -#'https://doi.org/10.1175/MWR-D-16-0037.1) using a effective degrees of freedom to account for -#'the time series' autocorrelation (von Storch and Zwiers, 1999; https://doi.org/10.1017/CBO9780511612336). +#'https://doi.org/10.1175/MWR-D-16-0037.1) using effective degrees of freedom +#'to account for the autocorrelation of the time series (von Storch and Zwiers, +#'1999; https://doi.org/10.1017/CBO9780511612336). #' -#'@param exp A numerical array with the forecast with, at least, time dimension. -#'@param ref A numerical array with the reference forecast data with, at least, time dimension. -#' The length of the time dimension must be the same as for "exp". -#'@param obs A numerical array with the observations with, at least, time dimension. -#' The length of the time dimension must be the same as for "exp". -#'@param N.eff Effective sample size to be used in the statistical significance test. It can be NA -#' (in this case, it is computed with the s2dv::Eno() function), a numeric (which is used for all -#' cases), or an array with the same dimensions as "obs" except "time_dim" (for a particular N.eff -#' to be used for each case). The default value is NA. +#'@param exp A named numerical array of the forecast data with at least time +#' dimension. +#'@param ref A named numerical array of the reference forecast data with at +#' least time dimension. The dimensions must be the same as "exp" except +#' 'memb_dim'. +#'@param obs A named numerical array with the observations with at least time +#' dimension. The dimensions must be the same as "exp" except 'memb_dim'. +#'@param N.eff Effective sample size to be used in the statistical significance +#' test. It can be NA (and it will be computed with the s2dv:::.Eno), a +#' numeric (which is used for all cases), or an array with the same dimensions +#' as "obs" except "time_dim" (for a particular N.eff to be used for each case) +#' . The default value is NA. #'@param time_dim A character string indicating the name of the time dimension. #' The default value is 'sdate'. -#'@param member_dim A character string indicating the name of the member dimension to compute the -#' ensemble means of the forecast and reference forecast. If it is NULL, the ensemble means should -#' be provided directly to the function. The default value is NULL. -#'@param method A character string indicating the correlation coefficient to be computed ("pearson", -#' "kendall", or "spearman"). The default value is "pearson". -#'@param alpha Significance level to be used in the statistical significance test. If NULL, the p-value -#' is returned instead. The default value is NULL. -#'@handle.na How to handle missing values. If "return.na", NA will be returned for the cases that contain -#' at least one NA in "exp", "ref" or "obs". If "only.complete.triplets", only the time steps with no -#' missing values in all "exp", "ref" and "obs" will be used. If "na.fail", an error will arise if any of -#' "exp", "ref" or "obs" contains any NA. The default value is "return.na". +#'@param memb_dim A character string indicating the name of the member +#' dimension to compute the ensemble mean of the forecast and reference +#' forecast. If it is NULL (default), the ensemble mean should be provided +#' directly to the function. +#'@param method A character string indicating the correlation coefficient to be +#' computed ("pearson", "kendall", or "spearman"). The default value is +#' "pearson". +#'@param alpha A numeric of the significance level to be used in the statistical +#' significance test. If it is a numeric, "sign" will be returned. If NULL, the +#' p-value will be returned instead. The default value is NULL. +#'@param handle.na A charcater string indicating how to handle missing values. +#' If "return.na", NAs will be returned for the cases that contain at least one +#' NA in "exp", "ref", or "obs". If "only.complete.triplets", only the time +#' steps with no missing values in all "exp", "ref", and "obs" will be used. If +#' "na.fail", an error will arise if any of "exp", "ref", or "obs" contains any +#' NA. The default value is "return.na". #'@param ncores An integer indicating the number of cores to use for parallel #' computation. The default value is NULL. #' #'@return A list with: -#'\item{$r}{ -#' A numerical array with the correlation differences with the same dimensions as the input arrays -#' except "time_dim" (and "member_dim" if provided). +#'\item{$corr.diff}{ +#' A numerical array of the correlation differences with the same dimensions as +#' the input arrays except "time_dim" (and "memb_dim" if provided). #'} #'\item{$sign}{ -#' A logical array with the statistical significance of the correlation differences with the same -#' dimensions as the input arrays except "time_dim" (and "member_dim" if provided). Returned only -#' if "alpha" is a numeric. +#' A logical array of the statistical significance of the correlation +#' differences with the same dimensions as the input arrays except "time_dim" +#' (and "memb_dim" if provided). Returned only if "alpha" is a numeric. #'} #'\item{$p.val}{ -#' A numeric array with the p-values with the same dimensions as the input arrays except "time_dim" -#' (and "member_dim" if provided). Returned only if "alpha" is NULL. +#' A numeric array of the p-values with the same dimensions as the input arrays +#' except "time_dim" (and "memb_dim" if provided). Returned only if "alpha" is +#' NULL. #'} #' #'@examples #' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) #' ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) #' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) -#' DiffCorr(exp, ref, obs, member_dim = 'member') +#' res <- DiffCorr(exp, ref, obs, memb_dim = 'member') #' #'@import multiApply #'@export -DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', member_dim = NULL, method = 'pearson', alpha = NULL, handle.na = 'return.na', ncores = NULL){ +DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', + memb_dim = NULL, method = 'pearson', alpha = NULL, + handle.na = 'return.na', ncores = NULL) { - ## Checkings - if (!is.array(exp)){stop('"exp" must be an array.')} - if (!is.array(obs)){stop('"obs" must be an array.')} - if (!is.array(ref)){stop('"ref" must be an array.')} - if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(ref)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "ref".')} - if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} - if (is.array(N.eff)){ - if (!all(names(dim(N.eff)) %in% names(dim(obs)))){ - stop('If "N.eff" is provided with an array, it must have the same dimensions as "obs" except "time_dim".') + # Check inputs + ## exp, ref, and obs (1) + if (!is.array(exp) | !is.numeric(exp)) + stop('Parameter "exp" must be a numeric array.') + if (!is.array(ref) | !is.numeric(ref)) + stop('Parameter "ref" must be a numeric array.') + if (!is.array(obs) | !is.numeric(obs)) + stop('Parameter "obs" must be a numeric array.') + ## N.eff + if (is.array(N.eff)) { + if (!is.numeric(N.eff)) stop("Parameter 'N.eff' must be numeric.") + if (!all(names(dim(N.eff)) %in% names(dim(obs)))) { + stop(paste0('If parameter "N.eff" is provided with an array, it must ', + 'have the same dimensions as "obs" except "time_dim".')) + } else if (any(dim(obs)[match(names(dim(N.eff)), names(dim(obs)))] != dim(N.eff))) { + stop("Parameter 'N.eff' must have the same dimensions as 'obs' except 'time_dim'.") } - } else if (!is.na(N.eff) & !is.numeric(N.eff)){ - stop('"N.eff" must be NA, a numeric, or an array with the same dimensions as "obs" except "time_dim".') + } else if (any((!is.na(N.eff) & !is.numeric(N.eff)) | length(N.eff) != 1)) { + stop(paste0('Parameter "N.eff" must be NA, a numeric, or an array with ', + 'the same dimensions as "obs" except "time_dim".')) } - if (!is.character(time_dim)){stop('"time_dim" must be a string.')} - if (!is.null(member_dim) & !is.character(member_dim)){stop('"member_dim" must be either NULL or a string.')} - if (!method %in% c("pearson","kendall","spearman")){stop('"method" must be "pearson", "kendall", or "spearman".')} - if (!is.null(alpha)){ - if (!is.numeric(alpha) | alpha <= 0 | alpha >= 1){stop('"alpha" must be NULL or a number between 0 and 1.')} + + ## time_dim + if (!is.character(time_dim) | length(time_dim) != 1) + stop('Parameter "time_dim" must be a character string.') + if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(ref)) | + !time_dim %in% names(dim(obs))) { + stop("Parameter 'time_dim' is not found in 'exp', 'ref', or 'obs' dimension.") } - if (!handle.na %in% c('return.na','only.complete.triplets','na.fail')){stop('"handle.na" must be "return.na", "only.complete.triplets" or "na.fail".')} - if (!is.null(ncores)){ - if (!is.numeric(ncores) | ncores < 1){stop('"ncores" must be either NULL or a positive integer.')} + ## memb_dim + if (!is.null(memb_dim)) { + if (!is.character(memb_dim) | length(memb_dim) > 1) { + stop("Parameter 'memb_dim' must be a character string.") + } + if (!memb_dim %in% names(dim(exp)) | !memb_dim %in% names(dim(ref))) { + stop("Parameter 'memb_dim' is not found in 'exp' or 'ref' dimension.") + } } - - ## Ensemble means - if (!is.null(member_dim)){ - exp <- multiApply::Apply(data = exp, target_dims = member_dim, fun = mean, na.rm = FALSE, ncores = ncores)$output1 - ref <- multiApply::Apply(data = ref, target_dims = member_dim, fun = mean, na.rm = FALSE, ncores = ncores)$output1 + ## exp, ref, and obs (2) + name_exp <- sort(names(dim(exp))) + name_ref <- sort(names(dim(ref))) + name_obs <- sort(names(dim(obs))) + if (!is.null(memb_dim)) { + name_exp <- name_exp[-which(name_exp == memb_dim)] + name_ref <- name_ref[-which(name_ref == memb_dim)] + } + if (!all.equal(dim(exp)[name_exp], dim(ref)[name_ref], dim(obs)[name_obs])) { + stop(paste0("Parameter 'exp', 'ref', and 'obs' must have same length of ", + "all dimensions expect 'memb_dim'.")) + } + ## method + if (!method %in% c("pearson", "kendall", "spearman")) { + stop('Parameter "method" must be "pearson", "kendall", or "spearman".') + } + ## alpha + if (!is.null(alpha)) { + if (any(!is.numeric(alpha) | alpha <= 0 | alpha >= 1 | + length(alpha) > 1)) { + stop('Parameter "alpha" must be NULL or a number between 0 and 1.') + } + } + ## handle.na + if (!handle.na %in% c('return.na', 'only.complete.triplets', 'na.fail')) { + stop('Parameter "handle.na" must be "return.na", "only.complete.triplets" or "na.fail".') + } + if (!is.null(ncores)) { + if (any(!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | + length(ncores) > 1)) { + stop('Parameter "ncores" must be either NULL or a positive integer.') + } } - ## Correlation difference - output <- multiApply::Apply(data = list(exp = exp, ref = ref, - obs = obs, N.eff = N.eff), - target_dims = list(exp = time_dim, ref = time_dim, - obs = time_dim, N.eff = NULL), - fun = .DiffCorr, time_dim = time_dim, method = method, - alpha = alpha, handle.na = handle.na, ncores = ncores) + ############################### + + # NA check: na.fail + if (handle.na == "na.fail" & (anyNA(exp) | anyNA(ref) | anyNA(obs))) + stop('The data contain NAs.') + + # Calculate ensemble means + dim_exp <- dim(exp) + dim_ref <- dim(ref) + dim_obs <- dim(obs) + + if (!is.null(memb_dim)) { + exp_memb_dim_ind <- which(names(dim_exp) == memb_dim) + ref_memb_dim_ind <- which(names(dim_ref) == memb_dim) + exp <- apply(exp, c(1:length(dim_exp))[-exp_memb_dim_ind], mean, na.rm = FALSE) + ref <- apply(ref, c(1:length(dim_ref))[-ref_memb_dim_ind], mean, na.rm = FALSE) + if (is.null(dim(exp))) exp <- array(exp, dim = c(dim_exp[time_dim])) + if (is.null(dim(ref))) ref <- array(ref, dim = c(dim_ref[time_dim])) + +# exp <- Apply(data = exp, target_dims = memb_dim, fun = mean, na.rm = FALSE, ncores = ncores)$output1 +# ref <- Apply(data = ref, target_dims = memb_dim, fun = mean, na.rm = FALSE, ncores = ncores)$output1 + } + + # output_dims + if (is.null(alpha)) { + output_dims <- list(corr.diff = NULL, p.val = NULL) + } else { + output_dims <- list(corr.diff = NULL, sign = NULL) + } + # Correlation difference + if (is.array(N.eff)) { + output <- Apply(data = list(exp = exp, ref = ref, + obs = obs, N.eff = N.eff), + target_dims = list(exp = time_dim, ref = time_dim, + obs = time_dim, N.eff = NULL), + output_dims = output_dims, + fun = .DiffCorr, method = method, + alpha = alpha, handle.na = handle.na, ncores = ncores) + } else { + output <- Apply(data = list(exp = exp, ref = ref, + obs = obs), + target_dims = list(exp = time_dim, ref = time_dim, + obs = time_dim), + output_dims = output_dims, N.eff = N.eff, + fun = .DiffCorr, method = method, + alpha = alpha, handle.na = handle.na, ncores = ncores) + } + return(output) } -.DiffCorr <- function(exp, ref, obs, N.eff, time_dim, method, alpha, handle.na) { +.DiffCorr <- function(exp, ref, obs, N.eff, method, alpha, handle.na) { + + .diff.corr <- function(exp, ref, obs, method, N.eff, alpha) { + + # Correlation difference + cor.exp <- cor(x = exp, y = obs, method = method) + cor.ref <- cor(x = ref, y = obs, method = method) + output <- NULL + output$corr.diff <- cor.exp - cor.ref + + # Significance with one-sided test for equality of dependent correlation coefficients (Steiger, 1980) + r12 <- cor.exp + r13 <- cor.ref + r23 <- cor(exp, ref) + if (is.na(N.eff)) { + N.eff <- .Eno(x = obs, na.action = na.pass) ## effective degrees of freedom + } + R <- (1 - r12 * r12 - r13 * r13 - r23 * r23) + 2 * r12 * r13 * r23 + t <- (r12 - r13) * sqrt((N.eff - 1) * (1 + r23) / (2 * ((N.eff - 1) / (N.eff - 3)) * R + 0.25 * (r12 + r13)^2 * (1 - r23)^3)) + p.value <- 1 - pt(t, df = N.eff - 3) + if (is.null(alpha)) { + output$p.val <- p.value + } else { + output$sign <- ifelse(!is.na(p.value) & p.value <= alpha, TRUE, FALSE) + } + return(output) + } + + #================================================== - if (anyNA(exp) | anyNA(ref) | anyNA(obs)){ ## There are NAs - - if (identical(handle.na,'na.fail')){ - - stop('The data contain NAs.') - - } else if (identical(handle.na,'only.complete.triplets')){ - - nna <- !is.na(exp) & !is.na(ref) & !is.na(obs) - if (all(nna == FALSE)){stop("there are no complete sets of forecasts and observations")} - exp <- exp[nna] - ref <- ref[nna] - obs <- obs[nna] - output <- .diff.corr(exp = exp, ref = ref, obs = obs, method = method, N.eff = N.eff, time_dim = time_dim, alpha = alpha) - - } else if (identical(handle.na,'return.na')){ + if (anyNA(exp) | anyNA(ref) | anyNA(obs)) { ## There are NAs + if (handle.na == 'only.complete.triplets') { + nna <- is.na(exp) | is.na(ref) | is.na(obs) # A vector of T/F + if (all(nna)) stop("There is no complete set of forecasts and observations.") + # Remove the incomplete set + exp <- exp[!nna] + ref <- ref[!nna] + obs <- obs[!nna] + + output <- .diff.corr(exp = exp, ref = ref, obs = obs, method = method, + N.eff = N.eff, alpha = alpha) - if (is.null(alpha)){ + } else if (handle.na == 'return.na') { + # Data contain NA, return NAs directly without passing to .diff.corr + if (is.null(alpha)) { output <- list(corr.diff = NA, p.val = NA) } else { output <- list(corr.diff = NA, sign = NA) } - - } else {stop('Incorrect "handle.na"')} - - } else { ## There are no NAs - - output <- .diff.corr(exp = exp, ref = ref, obs = obs, method = method, N.eff = N.eff, time_dim = time_dim, alpha = alpha) - - } - - return(output) -} - -.diff.corr <- function(exp, ref, obs, method, N.eff, time_dim, alpha){ - - ## Correlation difference - cor.exp <- cor(x = exp, y = obs, method = method) - cor.ref <- cor(x = ref, y = obs, method = method) - output <- NULL - output$corr.diff <- cor.exp - cor.ref - - ## Significance with one-sided test for equality of dependent correlation coefficients (Steiger, 1980) - r12 <- cor.exp - r13 <- cor.ref - r23 <- cor(exp, ref) - if (is.na(N.eff)){ - N.eff <- s2dv::Eno(data = obs, time_dim = time_dim, na.action = na.pass, ncores = 1) ## effective degrees of freedom - } - R <- (1-r12*r12-r13*r13-r23*r23) + 2*r12*r13*r23 - t <- (r12 - r13) * sqrt((N.eff-1)*(1+r23) / (2 * ((N.eff-1)/(N.eff-3)) * R + 0.25*(r12+r13)^2 * (1-r23)^3)) - p.value <- 1 - pt(t, df = N.eff-3) - if (is.null(alpha)){ - output$p.val <- p.value - } else { - if (!is.na(p.value) & p.value <= alpha){ - output$sign <- TRUE - } else { - output$sign <- FALSE } + + } else { ## There is no NA + output <- .diff.corr(exp = exp, ref = ref, obs = obs, method = method, + N.eff = N.eff, alpha = alpha) } - return(output) } diff --git a/man/DiffCorr.Rd b/man/DiffCorr.Rd new file mode 100644 index 0000000..5671908 --- /dev/null +++ b/man/DiffCorr.Rd @@ -0,0 +1,98 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/DiffCorr.R +\name{DiffCorr} +\alias{DiffCorr} +\title{Compute the correlation difference and its significance} +\usage{ +DiffCorr( + exp, + ref, + obs, + N.eff = NA, + time_dim = "sdate", + memb_dim = NULL, + method = "pearson", + alpha = NULL, + handle.na = "return.na", + ncores = NULL +) +} +\arguments{ +\item{exp}{A named numerical array of the forecast data with at least time +dimension.} + +\item{ref}{A named numerical array of the reference forecast data with at +least time dimension. The dimensions must be the same as "exp" except +'memb_dim'.} + +\item{obs}{A named numerical array with the observations with at least time +dimension. The dimensions must be the same as "exp" except 'memb_dim'.} + +\item{N.eff}{Effective sample size to be used in the statistical significance +test. It can be NA (and it will be computed with the s2dv:::.Eno), a +numeric (which is used for all cases), or an array with the same dimensions +as "obs" except "time_dim" (for a particular N.eff to be used for each case) +. The default value is NA.} + +\item{time_dim}{A character string indicating the name of the time dimension. +The default value is 'sdate'.} + +\item{memb_dim}{A character string indicating the name of the member +dimension to compute the ensemble mean of the forecast and reference +forecast. If it is NULL (default), the ensemble mean should be provided +directly to the function.} + +\item{method}{A character string indicating the correlation coefficient to be +computed ("pearson", "kendall", or "spearman"). The default value is +"pearson".} + +\item{alpha}{A numeric of the significance level to be used in the statistical +significance test. If it is a numeric, "sign" will be returned. If NULL, the +p-value will be returned instead. The default value is NULL.} + +\item{handle.na}{A charcater string indicating how to handle missing values. +If "return.na", NAs will be returned for the cases that contain at least one +NA in "exp", "ref", or "obs". If "only.complete.triplets", only the time +steps with no missing values in all "exp", "ref", and "obs" will be used. If +"na.fail", an error will arise if any of "exp", "ref", or "obs" contains any +NA. The default value is "return.na".} + +\item{ncores}{An integer indicating the number of cores to use for parallel +computation. The default value is NULL.} +} +\value{ +A list with: +\item{$corr.diff}{ + A numerical array of the correlation differences with the same dimensions as + the input arrays except "time_dim" (and "memb_dim" if provided). +} +\item{$sign}{ + A logical array of the statistical significance of the correlation + differences with the same dimensions as the input arrays except "time_dim" + (and "memb_dim" if provided). Returned only if "alpha" is a numeric. +} +\item{$p.val}{ + A numeric array of the p-values with the same dimensions as the input arrays + except "time_dim" (and "memb_dim" if provided). Returned only if "alpha" is + NULL. +} +} +\description{ +Compute the correlation difference between two deterministic forecasts. +Positive values of the correlation difference indicate that the forecast is +more skillful than the reference forecast, while negative values mean that +the reference forecast is more skillful. The statistical significance of the +correlation differences is computed with a one-sided test for equality of +dependent correlation coefficients (Steiger, 1980; +https://content.apa.org/doi/10.1037/0033-2909.87.2.245; Siegert et al., 2017; +https://doi.org/10.1175/MWR-D-16-0037.1) using effective degrees of freedom +to account for the autocorrelation of the time series (von Storch and Zwiers, +1999; https://doi.org/10.1017/CBO9780511612336). +} +\examples{ +exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) +res <- DiffCorr(exp, ref, obs, memb_dim = 'member') + +} -- GitLab From c7a87618a84302edb959436756249351988b867b Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Thu, 7 Apr 2022 16:03:49 +0200 Subject: [PATCH 36/83] p.val is returned if alpha=NULL --- R/ResidualCorr.R | 51 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/R/ResidualCorr.R b/R/ResidualCorr.R index bd551e5..645e70c 100644 --- a/R/ResidualCorr.R +++ b/R/ResidualCorr.R @@ -22,19 +22,25 @@ #' be provided directly to the function. The default value is NULL. #'@param method A character string indicating the correlation coefficient to be computed ("pearson", #' "kendall", or "spearman"). The default value is "pearson". -#'@param alpha Significance level to be used in the statistical significance test. The default value -#' is 0.05. +#'@param alpha Significance level to be used in the statistical significance test. +#' If it is a numeric, "sign" will be returned. If NULL, the p-value will be returned instead. +#' The default value is NULL. #'@param ncores An integer indicating the number of cores to use for parallel #' computation. The default value is NULL. #' -#'@return A list of 2: +#'@return A list with: #'\item{$r}{ #' A numerical array with the residual correlation with the same dimensions as the input arrays #' except "time_dim" (and "member_dim" if provided). #'} #'\item{$sign}{ #' A logical array with the statistical significance of the residual correlation with the same -#' dimensions as the input arrays except "time_dim" (and "member_dim" if provided). +#' dimensions as the input arrays except "time_dim" (and "member_dim" if provided). Returned only +#' if "alpha" is a numeric. +#'} +#'\item{$p.val}{ +#' A numeric array of the p-values with the same dimensions as the input arrays +#' except "time_dim" (and "memb_dim" if provided). Returned only if "alpha" is NULL. #'} #' #'@examples @@ -45,7 +51,7 @@ #' #'@import multiApply #'@export -ResidualCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, method = 'pearson', alpha = 0.05, ncores = NULL){ +ResidualCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, method = 'pearson', alpha = NULL, ncores = NULL){ ## Checkings if (!is.array(exp)){stop('"exp" must be an array.')} @@ -53,7 +59,9 @@ ResidualCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, me if (!is.array(ref)){stop('"ref" must be an array.')} if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(ref)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "ref".')} if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} - if (!is.numeric(alpha) | alpha <= 0 | alpha >= 1){stop('"alpha" must be a number between 0 and 1.')} + if (!is.null(alpha)){ + if (!is.numeric(alpha) | alpha <= 0 | alpha >= 1){stop('"alpha" must be NULL or a number between 0 and 1.')} + } if (!is.character(time_dim)){stop('"time_dim" must be a string.')} if (!is.null(member_dim)){ if (!is.character(member_dim)){stop('"member_dim" must be either NULL or a string.')} @@ -89,18 +97,35 @@ ResidualCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, me residual_cor <- NULL residual_cor$r <- cor(x = exp_res, y = obs_res, method = method) - ## Significance + ## Effective degrees of freedom n_eff <- s2dv::Eno(data = obs_res, time_dim = time_dim, na.action = na.pass, ncores = 1) - t_alpha2_n2 <- qt(p = alpha/2, df = n_eff-2, lower.tail = FALSE) + + ## Statistic t <- abs(residual_cor$r) * sqrt(n_eff-2) / sqrt(1-residual_cor$r^2) - if (anyNA(c(t,t_alpha2_n2)) == FALSE & t >= t_alpha2_n2){ - residual_cor$sign <- TRUE + + if(is.null(alpha)){ ## p-value + + residual_cor$p.val <- pt(q = t, df = n_eff-2, lower.tail = FALSE) + + } else { + + t_alpha2_n2 <- qt(p = alpha/2, df = n_eff-2, lower.tail = FALSE) + if (anyNA(c(t,t_alpha2_n2)) == FALSE & t >= t_alpha2_n2){ + residual_cor$sign <- TRUE + } else { + residual_cor$sign <- FALSE + } + + } + + } else {## Significance + + if (is.null(alpha)){ + residual_cor <- list(r = NA, p.val = NA) } else { - residual_cor$sign <- FALSE + residual_cor <- list(r = NA, sign = NA) } - } else { - residual_cor <- list(r = NA, sign = NA) } return(residual_cor) -- GitLab From 003a4a10f61fbe9230fb5a366b3881ca955209fa Mon Sep 17 00:00:00 2001 From: aho Date: Mon, 25 Apr 2022 17:26:48 +0200 Subject: [PATCH 37/83] Format adjustment --- NAMESPACE | 1 + R/ResidualCorr.R | 207 +++++++++++++++++++++++++++++--------------- man/ResidualCorr.Rd | 87 +++++++++++++++++++ 3 files changed, 223 insertions(+), 72 deletions(-) create mode 100644 man/ResidualCorr.Rd diff --git a/NAMESPACE b/NAMESPACE index ca5d500..841814e 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -60,6 +60,7 @@ export(RatioRMS) export(RatioSDRMS) export(Regression) export(Reorder) +export(ResidualCorr) export(SPOD) export(Season) export(SignalNoiseRatio) diff --git a/R/ResidualCorr.R b/R/ResidualCorr.R index 645e70c..2171da0 100644 --- a/R/ResidualCorr.R +++ b/R/ResidualCorr.R @@ -1,126 +1,189 @@ #'Compute the residual correlation and its significance #' -#'The residual correlation assesses whether a forecast captures any of the observed variability that is not -#'already captured by a reference forecast (Smith et al., 2019; https://doi.org/10.1038/s41612-019-0071-y.). -#'The procedure is as follows: the residuals of the forecasts and observations are computed by linearly regressing out -#'the reference forecast's ensemble mean from the forecasts’ ensemble mean and observations, respectively. Then, the -#'residual correlation is computed as the correlation between both residuals. Positive values of the residual correlation -#'indicate that the forecast capture more observed variability than the reference forecast, while negative values mean -#'that the reference forecast capture more. The significance of the residual correlation is computed with a two-sided t-test -#'(Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7) using a effective degrees of freedom to account for -#'the time series' autocorrelation (von Storch and Zwiers, 1999; https://doi.org/10.1017/CBO9780511612336). +#'The residual correlation assesses whether a forecast captures any of the +#'observed variability that is not already captured by a reference forecast +#'(Smith et al., 2019; https://doi.org/10.1038/s41612-019-0071-y.). +#'The procedure is as follows: the residuals of the forecasts and observations +#'are computed by linearly regressing out the reference forecast's ensemble mean +#'from the forecasts' ensemble mean and observations, respectively. Then, the +#'residual correlation is computed as the correlation between both residuals. +#'Positive values of the residual correlation indicate that the forecast capture +#'more observed variability than the reference forecast, while negative values +#'mean that the reference forecast capture more. The significance of the +#'residual correlation is computed with a two-sided t-test +#'(Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7) using an +#'effective degrees of freedom to account for the time series' autocorrelation +#'(von Storch and Zwiers, 1999; https://doi.org/10.1017/CBO9780511612336). #' -#'@param exp A numerical array with the forecast with, at least, time dimension. -#'@param ref A numerical array with the reference forecast data with, at least, time dimension. -#' The length of the time dimension must be the same as for "exp". -#'@param obs A numerical array with the observations with, at least, time dimension. -#' The length of the time dimension must be the same as for "exp". +#'@param exp A named numerical array of the forecast with at least time +#' dimension. +#'@param ref A named numerical array of the reference forecast data with at +#' least time dimension. The dimensions must be the same as "exp" except +#' 'memb_dim'. +#'@param obs A named numerical array of the observations with at least time +#' dimension. The dimensions must be the same as "exp" except 'memb_dim'. #'@param time_dim A character string indicating the name of the time dimension. #' The default value is 'year'. -#'@param member_dim A character string indicating the name of the member dimension to compute the -#' ensemble means of the forecast and reference forecast. If it is NULL, the ensemble means should -#' be provided directly to the function. The default value is NULL. -#'@param method A character string indicating the correlation coefficient to be computed ("pearson", -#' "kendall", or "spearman"). The default value is "pearson". -#'@param alpha Significance level to be used in the statistical significance test. -#' If it is a numeric, "sign" will be returned. If NULL, the p-value will be returned instead. -#' The default value is NULL. +#'@param memb_dim A character string indicating the name of the member dimension +#' to compute the ensemble mean of the forecast and reference forecast. If it +#' is NULL, the ensemble mean should be provided directly to the function. The +#' default value is NULL. +#'@param method A character string indicating the correlation coefficient to be +#' computed ("pearson", "kendall", or "spearman"). The default value is +#' "pearson". +#'@param alpha A numeric of the significance level to be used in the statistical +#' significance test. If it is a numeric, "sign" will be returned. If NULL, the +#' p-value will be returned instead. The default value is NULL. #'@param ncores An integer indicating the number of cores to use for parallel #' computation. The default value is NULL. #' #'@return A list with: #'\item{$r}{ -#' A numerical array with the residual correlation with the same dimensions as the input arrays -#' except "time_dim" (and "member_dim" if provided). +#' A numerical array of the residual correlation with the same dimensions as +#' the input arrays except "time_dim" (and "memb_dim" if provided). #'} #'\item{$sign}{ -#' A logical array with the statistical significance of the residual correlation with the same -#' dimensions as the input arrays except "time_dim" (and "member_dim" if provided). Returned only -#' if "alpha" is a numeric. +#' A logical array of the statistical significance of the residual correlation +#' with the same dimensions as the input arrays except "time_dim" (and +#' "memb_dim" if provided). Returned only if "alpha" is a numeric. #'} #'\item{$p.val}{ #' A numeric array of the p-values with the same dimensions as the input arrays -#' except "time_dim" (and "memb_dim" if provided). Returned only if "alpha" is NULL. +#' except "time_dim" (and "memb_dim" if provided). Returned only if "alpha" is +#' NULL. #'} #' #'@examples #' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) #' ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) #' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, year = 50)) -#' ResidualCorr(exp, ref, obs, member_dim = 'member') +#' res <- ResidualCorr(exp, ref, obs, memb_dim = 'member') #' #'@import multiApply #'@export -ResidualCorr <- function(exp, ref, obs, time_dim = 'year', member_dim = NULL, method = 'pearson', alpha = NULL, ncores = NULL){ +ResidualCorr <- function(exp, ref, obs, time_dim = 'year', memb_dim = NULL, + method = 'pearson', alpha = NULL, ncores = NULL) { - ## Checkings - if (!is.array(exp)){stop('"exp" must be an array.')} - if (!is.array(obs)){stop('"obs" must be an array.')} - if (!is.array(ref)){stop('"ref" must be an array.')} - if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(ref)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "ref".')} - if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} - if (!is.null(alpha)){ - if (!is.numeric(alpha) | alpha <= 0 | alpha >= 1){stop('"alpha" must be NULL or a number between 0 and 1.')} + # Check inputs + ## exp, ref, and obs (1) + if (!is.array(exp) | !is.numeric(exp)) + stop('Parameter "exp" must be a numeric array.') + if (!is.array(ref) | !is.numeric(ref)) + stop('Parameter "ref" must be a numeric array.') + if (!is.array(obs) | !is.numeric(obs)) + stop('Parameter "obs" must be a numeric array.') + + ## time_dim + if (!is.character(time_dim) | length(time_dim) != 1) + stop('Parameter "time_dim" must be a character string.') + if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(ref)) | + !time_dim %in% names(dim(obs))) { + stop("Parameter 'time_dim' is not found in 'exp', 'ref', or 'obs' dimension.") } - if (!is.character(time_dim)){stop('"time_dim" must be a string.')} - if (!is.null(member_dim)){ - if (!is.character(member_dim)){stop('"member_dim" must be either NULL or a string.')} + ## memb_dim + if (!is.null(memb_dim)) { + if (!is.character(memb_dim) | length(memb_dim) > 1) { + stop("Parameter 'memb_dim' must be a character string.") + } + if (!memb_dim %in% names(dim(exp)) | !memb_dim %in% names(dim(ref))) { + stop("Parameter 'memb_dim' is not found in 'exp' or 'ref' dimension.") + } } - if (!method %in% c("pearson","kendall","spearman")){stop('"method" must be "pearson", "kendall", or "spearman".')} - if (!is.null(ncores)){ - if (!is.numeric(ncores) | ncores < 1){stop('"ncores" must be either NULL or a positive integer.')} + ## exp, ref, and obs (2) + name_exp <- sort(names(dim(exp))) + name_ref <- sort(names(dim(ref))) + name_obs <- sort(names(dim(obs))) + if (!is.null(memb_dim)) { + name_exp <- name_exp[-which(name_exp == memb_dim)] + name_ref <- name_ref[-which(name_ref == memb_dim)] } - - ## Ensemble mean - if (!is.null(member_dim)){ - exp <- multiApply::Apply(data = exp, target_dims = member_dim, fun = mean, na.rm = FALSE, ncores = ncores)$output1 - ref <- multiApply::Apply(data = ref, target_dims = member_dim, fun = mean, na.rm = FALSE, ncores = ncores)$output1 + if (!all.equal(dim(exp)[name_exp], dim(ref)[name_ref], dim(obs)[name_obs])) { + stop(paste0("Parameter 'exp', 'ref', and 'obs' must have same length of ", + "all dimensions expect 'memb_dim'.")) } - + ## method + if (!method %in% c("pearson", "kendall", "spearman")) { + stop('Parameter "method" must be "pearson", "kendall", or "spearman".') + } + ## alpha + if (!is.null(alpha)) { + if (any(!is.numeric(alpha) | alpha <= 0 | alpha >= 1 | + length(alpha) > 1)) { + stop('Parameter "alpha" must be NULL or a number between 0 and 1.') + } + } + ## ncores + if (!is.null(ncores)) { + if (any(!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | + length(ncores) > 1)) { + stop('Parameter "ncores" must be either NULL or a positive integer.') + } + } + + ############################### + + # Calculate ensemble mean + dim_exp <- dim(exp) + dim_ref <- dim(ref) + dim_obs <- dim(obs) + + if (!is.null(memb_dim)) { + exp_memb_dim_ind <- which(names(dim_exp) == memb_dim) + ref_memb_dim_ind <- which(names(dim_ref) == memb_dim) + exp <- apply(exp, c(1:length(dim_exp))[-exp_memb_dim_ind], mean, na.rm = FALSE) + ref <- apply(ref, c(1:length(dim_ref))[-ref_memb_dim_ind], mean, na.rm = FALSE) + if (is.null(dim(exp))) exp <- array(exp, dim = c(dim_exp[time_dim])) + if (is.null(dim(ref))) ref <- array(ref, dim = c(dim_ref[time_dim])) + } + + # output_dims + if (is.null(alpha)) { + output_dims <- list(r = NULL, p.val = NULL) + } else { + output_dims <- list(r = NULL, sign = NULL) + } + ## Residual correlation and its significance - output <- multiApply::Apply(data = list(exp = exp, ref = ref, obs = obs), - target_dims = time_dim, fun = .ResidualCorr, - time_dim = time_dim, method = method, - alpha = alpha, ncores = ncores) + output <- Apply(data = list(exp = exp, ref = ref, obs = obs), + target_dims = time_dim, fun = .ResidualCorr, + method = method, + alpha = alpha, ncores = ncores) return(output) } -.ResidualCorr <- function(exp, ref, obs, time_dim, method, alpha){ - - if (!anyNA(exp) & !anyNA(ref) & !anyNA(obs)){ +.ResidualCorr <- function(exp, ref, obs, method, alpha) { + # exp and ref and obs: [time] + + if (!anyNA(exp) & !anyNA(ref) & !anyNA(obs)) { - ## Residuals of 'exp' and 'obs' (regressing 'ref' out in both 'exp' and 'obs') + # Residuals of 'exp' and 'obs' (regressing 'ref' out in both 'exp' and 'obs') exp_res <- lm(formula = y ~ x, data = list(y = exp, x = ref), na.action = NULL)$residuals obs_res <- lm(formula = y ~ x, data = list(y = obs, x = ref), na.action = NULL)$residuals - ## Residual correlation (and significance) + # Residual correlation (and significance) residual_cor <- NULL residual_cor$r <- cor(x = exp_res, y = obs_res, method = method) - ## Effective degrees of freedom - n_eff <- s2dv::Eno(data = obs_res, time_dim = time_dim, na.action = na.pass, ncores = 1) + # Effective degrees of freedom + n_eff <- .Eno(x = obs_res, na.action = na.pass) ## Statistic - t <- abs(residual_cor$r) * sqrt(n_eff-2) / sqrt(1-residual_cor$r^2) + t <- abs(residual_cor$r) * sqrt(n_eff - 2) / sqrt(1 - residual_cor$r^2) - if(is.null(alpha)){ ## p-value - - residual_cor$p.val <- pt(q = t, df = n_eff-2, lower.tail = FALSE) - + if (is.null(alpha)) { # p-value + residual_cor$p.val <- pt(q = t, df = n_eff - 2, lower.tail = FALSE) } else { - - t_alpha2_n2 <- qt(p = alpha/2, df = n_eff-2, lower.tail = FALSE) - if (anyNA(c(t,t_alpha2_n2)) == FALSE & t >= t_alpha2_n2){ + t_alpha2_n2 <- qt(p = alpha / 2, df = n_eff - 2, lower.tail = FALSE) + if (!anyNA(c(t,t_alpha2_n2)) & t >= t_alpha2_n2) { residual_cor$sign <- TRUE } else { residual_cor$sign <- FALSE } - } - } else {## Significance + } else { # There is NA - if (is.null(alpha)){ + if (is.null(alpha)) { residual_cor <- list(r = NA, p.val = NA) } else { residual_cor <- list(r = NA, sign = NA) diff --git a/man/ResidualCorr.Rd b/man/ResidualCorr.Rd new file mode 100644 index 0000000..6bc489c --- /dev/null +++ b/man/ResidualCorr.Rd @@ -0,0 +1,87 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ResidualCorr.R +\name{ResidualCorr} +\alias{ResidualCorr} +\title{Compute the residual correlation and its significance} +\usage{ +ResidualCorr( + exp, + ref, + obs, + time_dim = "year", + memb_dim = NULL, + method = "pearson", + alpha = NULL, + ncores = NULL +) +} +\arguments{ +\item{exp}{A named numerical array of the forecast with at least time +dimension.} + +\item{ref}{A named numerical array of the reference forecast data with at +least time dimension. The dimensions must be the same as "exp" except +'memb_dim'.} + +\item{obs}{A named numerical array of the observations with at least time +dimension. The dimensions must be the same as "exp" except 'memb_dim'.} + +\item{time_dim}{A character string indicating the name of the time dimension. +The default value is 'year'.} + +\item{memb_dim}{A character string indicating the name of the member dimension +to compute the ensemble mean of the forecast and reference forecast. If it +is NULL, the ensemble mean should be provided directly to the function. The +default value is NULL.} + +\item{method}{A character string indicating the correlation coefficient to be +computed ("pearson", "kendall", or "spearman"). The default value is +"pearson".} + +\item{alpha}{A numeric of the significance level to be used in the statistical +significance test. If it is a numeric, "sign" will be returned. If NULL, the +p-value will be returned instead. The default value is NULL.} + +\item{ncores}{An integer indicating the number of cores to use for parallel +computation. The default value is NULL.} +} +\value{ +A list with: +\item{$r}{ + A numerical array of the residual correlation with the same dimensions as + the input arrays except "time_dim" (and "memb_dim" if provided). +} +\item{$sign}{ + A logical array of the statistical significance of the residual correlation + with the same dimensions as the input arrays except "time_dim" (and + "memb_dim" if provided). Returned only if "alpha" is a numeric. +} +\item{$p.val}{ + A numeric array of the p-values with the same dimensions as the input arrays + except "time_dim" (and "memb_dim" if provided). Returned only if "alpha" is + NULL. +} +} +\description{ +The residual correlation assesses whether a forecast captures any of the +observed variability that is not already captured by a reference forecast +(Smith et al., 2019; https://doi.org/10.1038/s41612-019-0071-y.). +The procedure is as follows: the residuals of the forecasts and observations +are computed by linearly regressing out the reference forecast's ensemble mean +from the forecasts' ensemble mean and observations, respectively. Then, the +residual correlation is computed as the correlation between both residuals. +Positive values of the residual correlation indicate that the forecast capture +more observed variability than the reference forecast, while negative values +mean that the reference forecast capture more. The significance of the +residual correlation is computed with a two-sided t-test +(Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7) using an +effective degrees of freedom to account for the time series' autocorrelation +(von Storch and Zwiers, 1999; https://doi.org/10.1017/CBO9780511612336). +} +\examples{ +exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) +ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) +obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, year = 50)) +res <- ResidualCorr(exp, ref, obs, memb_dim = 'member') + +} -- GitLab From 6df8a7b9a64254b35b08df95332a63777e1cadb4 Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 26 Apr 2022 10:56:34 +0200 Subject: [PATCH 38/83] Change any(is.na( to anyNA --- R/CDORemap.R | 4 ++-- R/Cluster.R | 2 +- R/ColorBar.R | 4 ++-- R/EOF.R | 2 +- R/Eno.R | 2 +- R/Histo2Hindcast.R | 2 +- R/Load.R | 14 +++++++------- R/Utils.R | 4 ++-- man/Cluster.Rd | 2 +- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/R/CDORemap.R b/R/CDORemap.R index 00824de..56dcec7 100644 --- a/R/CDORemap.R +++ b/R/CDORemap.R @@ -222,10 +222,10 @@ CDORemap <- function(data_array = NULL, lons, lats, grid, method, if (!is.numeric(lons) || !is.numeric(lats)) { stop("Expected numeric 'lons' and 'lats'.") } - if (any(is.na(lons > 0))) { + if (anyNA(lons > 0)) { stop("Found invalid values in 'lons'.") } - if (any(is.na(lats > 0))) { + if (anyNA(lats > 0)) { stop("Found invalid values in 'lats'.") } if (is.null(dim(lons))) { diff --git a/R/Cluster.R b/R/Cluster.R index 8f40118..d6c5dff 100644 --- a/R/Cluster.R +++ b/R/Cluster.R @@ -53,7 +53,7 @@ #' are same as 'data' without 'space_dim'. #'} #'\item{$centers}{ -#' A nemeric array of cluster centres or centroids (e.g. [1:K, 1:spatial degrees +#' A numeric array of cluster centres or centroids (e.g. [1:K, 1:spatial degrees #' of freedom]). The rest dimensions are same as 'data' except 'time_dim' #' and 'space_dim'. #'} diff --git a/R/ColorBar.R b/R/ColorBar.R index 206f68d..286b115 100644 --- a/R/ColorBar.R +++ b/R/ColorBar.R @@ -180,7 +180,7 @@ ColorBar <- function(brks = NULL, cols = NULL, vertical = TRUE, if (!is.null(var_limits)) { if (!(is.numeric(var_limits) && (length(var_limits) == 2))) { stop("Parameter 'var_limits' must be a numeric vector of length 2.") - } else if (any(is.na(var_limits))) { + } else if (anyNA(var_limits)) { stop("Parameter 'var_limits' must not contain NA values.") } else if (any(is.infinite(var_limits))) { stop("Parameter 'var_limits' must not contain infinite values.") @@ -210,7 +210,7 @@ ColorBar <- function(brks = NULL, cols = NULL, vertical = TRUE, brks <- length(cols) + 1 } } - if (is.null(bar_limits) || any(is.na(bar_limits))) { + if (is.null(bar_limits) || anyNA(bar_limits)) { # var_limits is defined if (is.null(bar_limits)) { bar_limits <- c(NA, NA) diff --git a/R/EOF.R b/R/EOF.R index 8f8d640..d5c79a6 100644 --- a/R/EOF.R +++ b/R/EOF.R @@ -200,7 +200,7 @@ EOF <- function(ano, lat, lon, time_dim = 'sdate', space_dim = c('lat', 'lon'), # Check if all the time steps at one grid point are NA-consistent. # The grid point should have all NAs or no NA along time dim. - if (any(is.na(ano))) { + if (anyNA(ano)) { ano_latlon <- array(ano, dim = c(nt, ny * nx)) # [time, lat*lon] na_ind <- which(is.na(ano_latlon), arr.ind = T) if (dim(na_ind)[1] != nt * length(unique(na_ind[, 2]))) { diff --git a/R/Eno.R b/R/Eno.R index 8c8d16b..e2324de 100644 --- a/R/Eno.R +++ b/R/Eno.R @@ -58,7 +58,7 @@ Eno <- function(data, time_dim = 'sdate', na.action = na.pass, ncores = NULL) { as.character(substitute(na.action)) != c("na.fail")) { stop("Parameter 'na.action' must be a function either na.pass or na.fail.") } - if(as.character(substitute(na.action))== c("na.fail") && any(is.na(data))) { + if(as.character(substitute(na.action))== c("na.fail") && anyNA(data)) { stop(paste0("Calculation fails because NA is found in paratemter 'data', ", "which is not accepted when ", "parameter 'na.action' = na.fail.")) diff --git a/R/Histo2Hindcast.R b/R/Histo2Hindcast.R index 5657457..f910a9a 100644 --- a/R/Histo2Hindcast.R +++ b/R/Histo2Hindcast.R @@ -80,7 +80,7 @@ Histo2Hindcast <- function(data, sdatesin, sdatesout, nleadtimesout, if (!is.character(sdatesout) | !is.vector(sdatesout)) { stop(paste0("Parameter 'sdatesout' must be a vector of character in the ", "format 'YYYYMMDD' or 'YYYYMM'.")) - } else if (!all(nchar(sdatesout) %in% c(6, 8)) | any(is.na(as.numeric(sdatesin)))) { + } else if (!all(nchar(sdatesout) %in% c(6, 8)) | anyNA(as.numeric(sdatesin))) { stop(paste0("Parameter 'sdatesout' must be a vector of character in the ", "format 'YYYYMMDD' or 'YYYYMM'.")) } diff --git a/R/Load.R b/R/Load.R index 955c894..cdb30be 100644 --- a/R/Load.R +++ b/R/Load.R @@ -992,7 +992,7 @@ Load <- function(var, exp = NULL, obs = NULL, sdates, nmember = NULL, if (is.null(sdates)) { stop("Error: parameter 'sdates' must be provided.") } - if (!is.character(sdates) || !all(nchar(sdates) == 8) || any(is.na(strtoi(sdates)))) { + if (!is.character(sdates) || !all(nchar(sdates) == 8) || anyNA(strtoi(sdates))) { stop("Error: parameter 'sdates' is incorrect. All starting dates should be a character string in the format 'YYYYMMDD'.") } @@ -1007,7 +1007,7 @@ Load <- function(var, exp = NULL, obs = NULL, sdates, nmember = NULL, } if (length(nmember) != length(exp)) { stop("Error: 'nmember' must contain as many values as 'exp'.") - } else if (any(is.na(nmember))) { + } else if (anyNA(nmember)) { nmember[which(is.na(nmember))] <- max(nmember, na.rm = TRUE) } } @@ -1023,7 +1023,7 @@ Load <- function(var, exp = NULL, obs = NULL, sdates, nmember = NULL, } if (length(nmemberobs) != length(obs)) { stop("Error: 'nmemberobs' must contain as many values as 'obs'.") - } else if (any(is.na(nmemberobs))) { + } else if (anyNA(nmemberobs)) { nmemberobs[which(is.na(nmemberobs))] <- max(nmemberobs, na.rm = TRUE) } } @@ -1532,7 +1532,7 @@ Load <- function(var, exp = NULL, obs = NULL, sdates, nmember = NULL, } dims <- dim_exp[na.omit(match(c('dataset', 'member', 'sdate', 'ftime', 'lat', 'lon'), names(dim_exp)))] - if (is.null(dims[['member']]) || any(is.na(unlist(dims))) || any(unlist(dims) == 0)) { + if (is.null(dims[['member']]) || anyNA(unlist(dims)) || any(unlist(dims) == 0)) { dims <- 0 dim_exp <- NULL } @@ -1844,7 +1844,7 @@ Load <- function(var, exp = NULL, obs = NULL, sdates, nmember = NULL, .warning("no data found in file system for any observational dataset.") } dims <- dim_obs[na.omit(match(c('dataset', 'member', 'sdate', 'ftime', 'lat', 'lon'), names(dim_obs)))] - if (is.null(dims[['member']]) || any(is.na(unlist(dims))) || any(unlist(dims) == 0)) { + if (is.null(dims[['member']]) || anyNA(unlist(dims)) || any(unlist(dims) == 0)) { dims <- 0 dim_obs <- NULL } @@ -1864,12 +1864,12 @@ Load <- function(var, exp = NULL, obs = NULL, sdates, nmember = NULL, # So [1, 1, 1, 1, 1, 1] will be next to [2, 1, 1, 1, 1, 1] in memory pointer_var_exp <- pointer_var_obs <- NULL if (!is.null(dim_exp) && (length(unlist(dim_exp)) == length(dim_exp)) && - !any(is.na(unlist(dim_exp))) && !any(unlist(dim_exp) == 0)) { + !anyNA(unlist(dim_exp)) && !any(unlist(dim_exp) == 0)) { var_exp <- big.matrix(nrow = prod(unlist(dim_exp)), ncol = 1) pointer_var_exp <- describe(var_exp) } if (!is.null(dim_obs) && (length(unlist(dim_obs)) == length(dim_obs)) && - !any(is.na(unlist(dim_obs))) && !any(unlist(dim_obs) == 0)) { + !anyNA(unlist(dim_obs)) && !any(unlist(dim_obs) == 0)) { var_obs <- big.matrix(nrow = prod(unlist(dim_obs)), ncol = 1) pointer_var_obs <- describe(var_obs) } diff --git a/R/Utils.R b/R/Utils.R index 76ef63a..1f39694 100644 --- a/R/Utils.R +++ b/R/Utils.R @@ -255,7 +255,7 @@ NA } result <- FALSE - if (!any(is.na(c(nlons, nlats)))) { + if (!anyNA(c(nlons, nlats))) { if ((nlons == length(lon)) && (nlats == length(lat))) { result <- TRUE @@ -583,7 +583,7 @@ } if (length(expected_dims) > 0) { dim_matches <- match(expected_dims, var_dimnames) - if (any(is.na(dim_matches))) { + if (anyNA(dim_matches)) { if (!is.null(old_members_dimname)) { expected_dims[which(expected_dims == 'lev')] <- old_members_dimname } diff --git a/man/Cluster.Rd b/man/Cluster.Rd index 7ea25de..8c46b3d 100644 --- a/man/Cluster.Rd +++ b/man/Cluster.Rd @@ -63,7 +63,7 @@ A list containing: are same as 'data' without 'space_dim'. } \item{$centers}{ - A nemeric array of cluster centres or centroids (e.g. [1:K, 1:spatial degrees + A numeric array of cluster centres or centroids (e.g. [1:K, 1:spatial degrees of freedom]). The rest dimensions are same as 'data' except 'time_dim' and 'space_dim'. } -- GitLab From 7d0833b866bc4ade28efdb9e6a54a56611741789 Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 26 Apr 2022 19:01:58 +0200 Subject: [PATCH 39/83] Add params 'N.eff' and 'handle.na'; Change time_dim default to 'sdate'; create unit tests --- R/ResidualCorr.R | 144 +++++++++++++++------ man/ResidualCorr.Rd | 25 +++- tests/testthat/test-ResidualCorr.R | 197 +++++++++++++++++++++++++++++ 3 files changed, 324 insertions(+), 42 deletions(-) create mode 100644 tests/testthat/test-ResidualCorr.R diff --git a/R/ResidualCorr.R b/R/ResidualCorr.R index 2171da0..ba00994 100644 --- a/R/ResidualCorr.R +++ b/R/ResidualCorr.R @@ -22,6 +22,11 @@ #' 'memb_dim'. #'@param obs A named numerical array of the observations with at least time #' dimension. The dimensions must be the same as "exp" except 'memb_dim'. +#'@param N.eff Effective sample size to be used in the statistical significance +#' test. It can be NA (and it will be computed with the s2dv:::.Eno), a +#' numeric (which is used for all cases), or an array with the same dimensions +#' as "obs" except "time_dim" (for a particular N.eff to be used for each case) +#' . The default value is NA. #'@param time_dim A character string indicating the name of the time dimension. #' The default value is 'year'. #'@param memb_dim A character string indicating the name of the member dimension @@ -34,11 +39,17 @@ #'@param alpha A numeric of the significance level to be used in the statistical #' significance test. If it is a numeric, "sign" will be returned. If NULL, the #' p-value will be returned instead. The default value is NULL. +#'@param handle.na A charcater string indicating how to handle missing values. +#' If "return.na", NAs will be returned for the cases that contain at least one +#' NA in "exp", "ref", or "obs". If "only.complete.triplets", only the time +#' steps with no missing values in all "exp", "ref", and "obs" will be used. If +#' "na.fail", an error will arise if any of "exp", "ref", or "obs" contains any +#' NA. The default value is "return.na". #'@param ncores An integer indicating the number of cores to use for parallel #' computation. The default value is NULL. #' #'@return A list with: -#'\item{$r}{ +#'\item{$res.corr}{ #' A numerical array of the residual correlation with the same dimensions as #' the input arrays except "time_dim" (and "memb_dim" if provided). #'} @@ -54,16 +65,17 @@ #'} #' #'@examples -#' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) -#' ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) -#' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, year = 50)) +#' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +#' ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 5, sdate = 50)) +#' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) #' res <- ResidualCorr(exp, ref, obs, memb_dim = 'member') #' #'@import multiApply #'@export -ResidualCorr <- function(exp, ref, obs, time_dim = 'year', memb_dim = NULL, - method = 'pearson', alpha = NULL, ncores = NULL) { - +ResidualCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', + memb_dim = NULL, method = 'pearson', alpha = NULL, + handle.na = 'return.na', ncores = NULL) { + # Check inputs ## exp, ref, and obs (1) if (!is.array(exp) | !is.numeric(exp)) @@ -73,6 +85,19 @@ ResidualCorr <- function(exp, ref, obs, time_dim = 'year', memb_dim = NULL, if (!is.array(obs) | !is.numeric(obs)) stop('Parameter "obs" must be a numeric array.') + ## N.eff + if (is.array(N.eff)) { + if (!is.numeric(N.eff)) stop("Parameter 'N.eff' must be numeric.") + if (!all(names(dim(N.eff)) %in% names(dim(obs))) | + any(dim(obs)[match(names(dim(N.eff)), names(dim(obs)))] != dim(N.eff))) { + stop(paste0('If parameter "N.eff" is provided with an array, it must ', + 'have the same dimensions as "obs" except "time_dim".')) + } + } else if (any((!is.na(N.eff) & !is.numeric(N.eff)) | length(N.eff) != 1)) { + stop(paste0('Parameter "N.eff" must be NA, a numeric, or an array with ', + 'the same dimensions as "obs" except "time_dim".')) + } + ## time_dim if (!is.character(time_dim) | length(time_dim) != 1) stop('Parameter "time_dim" must be a character string.') @@ -97,7 +122,8 @@ ResidualCorr <- function(exp, ref, obs, time_dim = 'year', memb_dim = NULL, name_exp <- name_exp[-which(name_exp == memb_dim)] name_ref <- name_ref[-which(name_ref == memb_dim)] } - if (!all.equal(dim(exp)[name_exp], dim(ref)[name_ref], dim(obs)[name_obs])) { + if (!identical(length(name_exp), length(name_ref), length(name_obs)) | + !identical(dim(exp)[name_exp], dim(ref)[name_ref], dim(obs)[name_obs])) { stop(paste0("Parameter 'exp', 'ref', and 'obs' must have same length of ", "all dimensions expect 'memb_dim'.")) } @@ -112,6 +138,10 @@ ResidualCorr <- function(exp, ref, obs, time_dim = 'year', memb_dim = NULL, stop('Parameter "alpha" must be NULL or a number between 0 and 1.') } } + ## handle.na + if (!handle.na %in% c('return.na', 'only.complete.triplets', 'na.fail')) { + stop('Parameter "handle.na" must be "return.na", "only.complete.triplets" or "na.fail".') + } ## ncores if (!is.null(ncores)) { if (any(!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | @@ -122,6 +152,10 @@ ResidualCorr <- function(exp, ref, obs, time_dim = 'year', memb_dim = NULL, ############################### + # NA check: na.fail + if (handle.na == "na.fail" & (anyNA(exp) | anyNA(ref) | anyNA(obs))) + stop('The data contain NAs.') + # Calculate ensemble mean dim_exp <- dim(exp) dim_ref <- dim(ref) @@ -138,58 +172,94 @@ ResidualCorr <- function(exp, ref, obs, time_dim = 'year', memb_dim = NULL, # output_dims if (is.null(alpha)) { - output_dims <- list(r = NULL, p.val = NULL) + output_dims <- list(res.corr = NULL, p.val = NULL) } else { - output_dims <- list(r = NULL, sign = NULL) + output_dims <- list(res.corr = NULL, sign = NULL) } - ## Residual correlation and its significance - output <- Apply(data = list(exp = exp, ref = ref, obs = obs), - target_dims = time_dim, fun = .ResidualCorr, - method = method, - alpha = alpha, ncores = ncores) + + # Residual correlation + if (is.array(N.eff)) { + output <- Apply(data = list(exp = exp, ref = ref, + obs = obs, N.eff = N.eff), + target_dims = list(exp = time_dim, ref = time_dim, + obs = time_dim, N.eff = NULL), + output_dims = output_dims, + fun = .ResidualCorr, method = method, + alpha = alpha, handle.na = handle.na, ncores = ncores) + } else { + output <- Apply(data = list(exp = exp, ref = ref, + obs = obs), + target_dims = list(exp = time_dim, ref = time_dim, + obs = time_dim), + output_dims = output_dims, N.eff = N.eff, + fun = .ResidualCorr, method = method, + alpha = alpha, handle.na = handle.na, ncores = ncores) + } + return(output) } -.ResidualCorr <- function(exp, ref, obs, method, alpha) { +.ResidualCorr <- function(exp, ref, obs, N.eff, method, alpha, handle.na) { # exp and ref and obs: [time] + .residual.corr <- function(exp, ref, obs, method, N.eff, alpha) { - if (!anyNA(exp) & !anyNA(ref) & !anyNA(obs)) { - # Residuals of 'exp' and 'obs' (regressing 'ref' out in both 'exp' and 'obs') exp_res <- lm(formula = y ~ x, data = list(y = exp, x = ref), na.action = NULL)$residuals obs_res <- lm(formula = y ~ x, data = list(y = obs, x = ref), na.action = NULL)$residuals # Residual correlation (and significance) - residual_cor <- NULL - residual_cor$r <- cor(x = exp_res, y = obs_res, method = method) + output <- NULL + output$res.corr <- cor(x = exp_res, y = obs_res, method = method) # Effective degrees of freedom - n_eff <- .Eno(x = obs_res, na.action = na.pass) - - ## Statistic - t <- abs(residual_cor$r) * sqrt(n_eff - 2) / sqrt(1 - residual_cor$r^2) + if (is.na(N.eff)) { + N.eff <- .Eno(x = obs_res, na.action = na.pass) + } + t <- abs(output$res.corr) * sqrt(N.eff - 2) / sqrt(1 - output$res.corr^2) if (is.null(alpha)) { # p-value - residual_cor$p.val <- pt(q = t, df = n_eff - 2, lower.tail = FALSE) + output$p.val <- pt(q = t, df = N.eff - 2, lower.tail = FALSE) } else { - t_alpha2_n2 <- qt(p = alpha / 2, df = n_eff - 2, lower.tail = FALSE) - if (!anyNA(c(t,t_alpha2_n2)) & t >= t_alpha2_n2) { - residual_cor$sign <- TRUE + t_alpha2_n2 <- qt(p = alpha / 2, df = N.eff - 2, lower.tail = FALSE) + if (!anyNA(c(t, t_alpha2_n2)) & t >= t_alpha2_n2) { + output$sign <- TRUE } else { - residual_cor$sign <- FALSE + output$sign <- FALSE } } - } else { # There is NA - - if (is.null(alpha)) { - residual_cor <- list(r = NA, p.val = NA) - } else { - residual_cor <- list(r = NA, sign = NA) + return(output) + } + + + #================================================== + + if (anyNA(exp) | anyNA(ref) | anyNA(obs)) { ## There are NAs + if (handle.na == 'only.complete.triplets') { + nna <- is.na(exp) | is.na(ref) | is.na(obs) # A vector of T/F + if (all(nna)) stop("There is no complete set of forecasts and observations.") + # Remove the incomplete set + exp <- exp[!nna] + ref <- ref[!nna] + obs <- obs[!nna] + + output <- .residual.corr(exp = exp, ref = ref, obs = obs, method = method, + N.eff = N.eff, alpha = alpha) + + } else if (handle.na == 'return.na') { + # Data contain NA, return NAs directly without passing to .diff.corr + if (is.null(alpha)) { + output <- list(res.corr = NA, p.val = NA) + } else { + output <- list(res.corr = NA, sign = NA) + } } + } else { ## There is no NA + output <- .residual.corr(exp = exp, ref = ref, obs = obs, method = method, + N.eff = N.eff, alpha = alpha) } - - return(residual_cor) + + return(output) } diff --git a/man/ResidualCorr.Rd b/man/ResidualCorr.Rd index 6bc489c..1e0adad 100644 --- a/man/ResidualCorr.Rd +++ b/man/ResidualCorr.Rd @@ -8,10 +8,12 @@ ResidualCorr( exp, ref, obs, - time_dim = "year", + N.eff = NA, + time_dim = "sdate", memb_dim = NULL, method = "pearson", alpha = NULL, + handle.na = "return.na", ncores = NULL ) } @@ -26,6 +28,12 @@ least time dimension. The dimensions must be the same as "exp" except \item{obs}{A named numerical array of the observations with at least time dimension. The dimensions must be the same as "exp" except 'memb_dim'.} +\item{N.eff}{Effective sample size to be used in the statistical significance +test. It can be NA (and it will be computed with the s2dv:::.Eno), a +numeric (which is used for all cases), or an array with the same dimensions +as "obs" except "time_dim" (for a particular N.eff to be used for each case) +. The default value is NA.} + \item{time_dim}{A character string indicating the name of the time dimension. The default value is 'year'.} @@ -42,12 +50,19 @@ computed ("pearson", "kendall", or "spearman"). The default value is significance test. If it is a numeric, "sign" will be returned. If NULL, the p-value will be returned instead. The default value is NULL.} +\item{handle.na}{A charcater string indicating how to handle missing values. +If "return.na", NAs will be returned for the cases that contain at least one +NA in "exp", "ref", or "obs". If "only.complete.triplets", only the time +steps with no missing values in all "exp", "ref", and "obs" will be used. If +"na.fail", an error will arise if any of "exp", "ref", or "obs" contains any +NA. The default value is "return.na".} + \item{ncores}{An integer indicating the number of cores to use for parallel computation. The default value is NULL.} } \value{ A list with: -\item{$r}{ +\item{$res.corr}{ A numerical array of the residual correlation with the same dimensions as the input arrays except "time_dim" (and "memb_dim" if provided). } @@ -79,9 +94,9 @@ effective degrees of freedom to account for the time series' autocorrelation (von Storch and Zwiers, 1999; https://doi.org/10.1017/CBO9780511612336). } \examples{ -exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) -ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) -obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, year = 50)) +exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 5, sdate = 50)) +obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) res <- ResidualCorr(exp, ref, obs, memb_dim = 'member') } diff --git a/tests/testthat/test-ResidualCorr.R b/tests/testthat/test-ResidualCorr.R new file mode 100644 index 0000000..e1eec1a --- /dev/null +++ b/tests/testthat/test-ResidualCorr.R @@ -0,0 +1,197 @@ +context("s2dv::ResidualCorr tests") + +############################################## + +# dat1 +set.seed(1) +exp1 <- array(rnorm(180), dim = c(lat = 3, lon = 2, memb = 3, sdate = 10)) +set.seed(2) +ref1 <- array(rnorm(120), dim = c(lat = 3, lon = 2, memb = 2, sdate = 10)) +set.seed(3) +obs1 <- array(rnorm(60), dim = c(lat = 3, lon = 2, sdate = 10)) +Neff1 <- array(rep(9:10, 3), dim = c(lat = 3, lon = 2)) + +# dat2 +set.seed(1) +exp2 <- array(rnorm(10), dim = c(sdate = 10)) +set.seed(2) +ref2 <- array(rnorm(10), dim = c(sdate = 10)) +set.seed(3) +obs2 <- array(rnorm(10), dim = c(sdate = 10)) + + + +############################################## +test_that("1. Input checks", { + # exp and obs (1) + expect_error( + ResidualCorr(c()), + 'Parameter "exp" must be a numeric array.' + ) + expect_error( + ResidualCorr(exp1, c('a')), + 'Parameter "ref" must be a numeric array.' + ) + expect_error( + ResidualCorr(exp1, ref1, c()), + 'Parameter "obs" must be a numeric array.' + ) + # N.eff + expect_error( + ResidualCorr(exp1, ref1, obs1, N.eff = array(1, dim = c(lat = 2, lon = 2))), +'If parameter "N.eff" is provided with an array, it must have the same dimensions as "obs" except "time_dim".' + ) + expect_error( + ResidualCorr(exp1, ref1, obs1, N.eff = 1:3), + 'Parameter "N.eff" must be NA, a numeric, or an array with the same dimensions as "obs" except "time_dim".' + ) + # time_dim + expect_error( + ResidualCorr(exp1, ref1, obs1, time_dim = 1), + 'Parameter "time_dim" must be a character string.' + ) + expect_error( + ResidualCorr(exp1, ref1, obs1, time_dim = 'time'), + "Parameter 'time_dim' is not found in 'exp', 'ref', or 'obs' dimension." + ) + # memb_dim + expect_error( + ResidualCorr(exp1, ref1, obs1, memb_dim = TRUE), + "Parameter 'memb_dim' must be a character string." + ) + expect_error( + ResidualCorr(exp1, ref1, obs1, memb_dim = 'member'), + "Parameter 'memb_dim' is not found in 'exp' or 'ref' dimension." + ) + # exp, ref, and obs (2) + expect_error( + ResidualCorr(exp1, array(1:10, dim = c(sdate = 10, memb = 1)), obs1, memb_dim = 'memb'), + "Parameter 'exp', 'ref', and 'obs' must have same length of all dimensions expect 'memb_dim'." + ) + # method + expect_error( + ResidualCorr(exp1, ref1, obs1, method = 'asd', memb_dim = 'memb'), + 'Parameter "method" must be "pearson", "kendall", or "spearman".' + ) + # alpha + expect_error( + ResidualCorr(exp2, ref2, obs2, alpha = 1), + 'Parameter "alpha" must be NULL or a number between 0 and 1.' + ) + # handle.na + expect_error( + ResidualCorr(exp2, ref2, obs2, handle.na = TRUE), + 'Parameter "handle.na" must be "return.na", "only.complete.triplets" or "na.fail".' + ) + # ncores + expect_error( + ResidualCorr(exp2, ref2, obs2, ncores = 1.5), + 'Parameter "ncores" must be either NULL or a positive integer.' + ) + +}) + +############################################## +test_that("2. Output checks: dat1", { +expect_equal( +names(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb')), +c("res.corr", "p.val") +) +expect_equal( +dim(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb')$res.corr), +c(lat = 3, lon = 2) +) +expect_equal( +dim(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb')$p.val), +c(lat = 3, lon = 2) +) +expect_equal( +as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb')$res.corr), +c(0.002784318, 0.537697647, -0.240071018, 0.258706464, 0.338160748, 0.432107476), +tolerance = 0.0001 +) +expect_equal( +as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb')$p), +c(0.49695468, 0.05446055, 0.25203961, 0.23522967, 0.16960864, 0.10618145), +tolerance = 0.0001 +) +expect_equal( +names(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', alpha = 0.05)), +c("res.corr", "sign") +) +expect_equal( +as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', alpha = 0.05)$res.corr), +c(0.002784318, 0.537697647, -0.240071018, 0.258706464, 0.338160748, 0.432107476), +tolerance = 0.0001 +) +expect_equal( +as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', alpha = 0.05)$sign), +rep(FALSE, 6) +) +expect_equal( +as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', N.eff = Neff1)$res), +c(0.002784318, 0.537697647, -0.240071018, 0.258706464, 0.338160748, 0.432107476), +tolerance = 0.0001 +) +expect_equal( +as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', N.eff = Neff1)$p), +c(0.49716394, 0.05446055, 0.26690777, 0.23522967, 0.18671025, 0.10618145), +tolerance = 0.0001 +) + + +#--------------------------- +exp1[1] <- NA +expect_equal( +as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb')$res.corr), +c(NA, 0.537697647, -0.240071018, 0.258706464, 0.338160748, 0.432107476), +tolerance = 0.0001 +) +expect_equal( +as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', handle.na = 'only.complete.triplets')$res.corr), +c(-0.1082588, 0.537697647, -0.240071018, 0.258706464, 0.338160748, 0.432107476), +tolerance = 0.0001 +) +expect_error( +ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', handle.na = 'na.fail'), +"The data contain NAs." +) + +exp1[1,1,1,1:3] <- NA +ref1[1,1,1,4:8] <- NA +obs1[1,1,9:10] <- NA +expect_error( +ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', handle.na = 'only.complete.triplets'), +"There is no complete set of forecasts and observations." +) + + +}) + +############################################## + +test_that("3. Output checks: dat2", { +expect_equal( +names(ResidualCorr(exp2, ref2, obs2)), +c("res.corr", "p.val") +) +expect_equal( +dim(ResidualCorr(exp2, ref2, obs2)$res.corr), +NULL +) +expect_equal( +dim(ResidualCorr(exp2, ref2, obs2)$p), +NULL +) +expect_equal( +ResidualCorr(exp2, ref2, obs2)$p, +0.2209847, +tolerance = 0.0001 +) +expect_equal( +ResidualCorr(exp2, ref2, obs2)$res, +-0.274962, +tolerance = 0.0001 +) + +}) -- GitLab From c27f3bb6210b04fe3ff545a1010019a631d7312b Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 26 Apr 2022 19:15:11 +0200 Subject: [PATCH 40/83] Add unit tests for method kendall and spearman --- tests/testthat/test-ResidualCorr.R | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/testthat/test-ResidualCorr.R b/tests/testthat/test-ResidualCorr.R index e1eec1a..c9ac4b9 100644 --- a/tests/testthat/test-ResidualCorr.R +++ b/tests/testthat/test-ResidualCorr.R @@ -128,6 +128,28 @@ expect_equal( as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', alpha = 0.05)$sign), rep(FALSE, 6) ) +expect_equal( +as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "kendall")$res), +c(0.11111111, 0.42222222, -0.20000000, 0.02222222, 0.20000000, 0.42222222), +tolerance = 0.0001 +) +expect_equal( +as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "kendall")$p), +c(0.3799615, 0.1120891, 0.2897920, 0.4757064, 0.2897920, 0.1120891), +tolerance = 0.0001 +) +expect_equal( +as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "spearman")$res), +c(0.13939394, 0.61212121, -0.27272727, 0.07878788, 0.28484848, 0.47878788), +tolerance = 0.0001 +) +expect_equal( +as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "spearman")$p), +c(0.35046594, 0.02998607, 0.22291917, 0.41435870, 0.21251908, 0.08076146), +tolerance = 0.0001 +) + + expect_equal( as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', N.eff = Neff1)$res), c(0.002784318, 0.537697647, -0.240071018, 0.258706464, 0.338160748, 0.432107476), -- GitLab From 090925f232660f25eeb246671adf1459633d0dea Mon Sep 17 00:00:00 2001 From: Carlos Delgado Torres Date: Wed, 27 Apr 2022 17:13:37 +0200 Subject: [PATCH 41/83] clarified "$sign" output --- R/ResidualCorr.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/ResidualCorr.R b/R/ResidualCorr.R index ba00994..dae0cb8 100644 --- a/R/ResidualCorr.R +++ b/R/ResidualCorr.R @@ -54,9 +54,9 @@ #' the input arrays except "time_dim" (and "memb_dim" if provided). #'} #'\item{$sign}{ -#' A logical array of the statistical significance of the residual correlation -#' with the same dimensions as the input arrays except "time_dim" (and -#' "memb_dim" if provided). Returned only if "alpha" is a numeric. +#' A logical array indicating whether the residual correlation is statistically +#' significant or not with the same dimensions as the input arrays except "time_dim" +#' (and "memb_dim" if provided). Returned only if "alpha" is a numeric. #'} #'\item{$p.val}{ #' A numeric array of the p-values with the same dimensions as the input arrays -- GitLab From b0bebd4af6e3372bfcb1a38545e619a8a9e6f714 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 28 Apr 2022 16:03:39 +0200 Subject: [PATCH 42/83] Change output name from 'corr.diff' to 'diff.corr'; add unit test; improve a few conditional statement --- R/DiffCorr.R | 21 ++-- man/DiffCorr.Rd | 2 +- man/ResidualCorr.Rd | 6 +- tests/testthat/test-DiffCorr.R | 217 +++++++++++++++++++++++++++++++++ 4 files changed, 231 insertions(+), 15 deletions(-) create mode 100644 tests/testthat/test-DiffCorr.R diff --git a/R/DiffCorr.R b/R/DiffCorr.R index 74421eb..511dd3a 100644 --- a/R/DiffCorr.R +++ b/R/DiffCorr.R @@ -45,7 +45,7 @@ #' computation. The default value is NULL. #' #'@return A list with: -#'\item{$corr.diff}{ +#'\item{$diff.corr}{ #' A numerical array of the correlation differences with the same dimensions as #' the input arrays except "time_dim" (and "memb_dim" if provided). #'} @@ -83,17 +83,15 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', ## N.eff if (is.array(N.eff)) { if (!is.numeric(N.eff)) stop("Parameter 'N.eff' must be numeric.") - if (!all(names(dim(N.eff)) %in% names(dim(obs)))) { + if (!all(names(dim(N.eff)) %in% names(dim(obs))) | + any(dim(obs)[match(names(dim(N.eff)), names(dim(obs)))] != dim(N.eff))) { stop(paste0('If parameter "N.eff" is provided with an array, it must ', 'have the same dimensions as "obs" except "time_dim".')) - } else if (any(dim(obs)[match(names(dim(N.eff)), names(dim(obs)))] != dim(N.eff))) { - stop("Parameter 'N.eff' must have the same dimensions as 'obs' except 'time_dim'.") } } else if (any((!is.na(N.eff) & !is.numeric(N.eff)) | length(N.eff) != 1)) { stop(paste0('Parameter "N.eff" must be NA, a numeric, or an array with ', 'the same dimensions as "obs" except "time_dim".')) } - ## time_dim if (!is.character(time_dim) | length(time_dim) != 1) stop('Parameter "time_dim" must be a character string.') @@ -118,7 +116,8 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', name_exp <- name_exp[-which(name_exp == memb_dim)] name_ref <- name_ref[-which(name_ref == memb_dim)] } - if (!all.equal(dim(exp)[name_exp], dim(ref)[name_ref], dim(obs)[name_obs])) { + if (!identical(length(name_exp), length(name_ref), length(name_obs)) | + !identical(dim(exp)[name_exp], dim(ref)[name_ref], dim(obs)[name_obs])) { stop(paste0("Parameter 'exp', 'ref', and 'obs' must have same length of ", "all dimensions expect 'memb_dim'.")) } @@ -169,9 +168,9 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', # output_dims if (is.null(alpha)) { - output_dims <- list(corr.diff = NULL, p.val = NULL) + output_dims <- list(diff.corr = NULL, p.val = NULL) } else { - output_dims <- list(corr.diff = NULL, sign = NULL) + output_dims <- list(diff.corr = NULL, sign = NULL) } # Correlation difference if (is.array(N.eff)) { @@ -203,7 +202,7 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', cor.exp <- cor(x = exp, y = obs, method = method) cor.ref <- cor(x = ref, y = obs, method = method) output <- NULL - output$corr.diff <- cor.exp - cor.ref + output$diff.corr <- cor.exp - cor.ref # Significance with one-sided test for equality of dependent correlation coefficients (Steiger, 1980) r12 <- cor.exp @@ -240,9 +239,9 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', } else if (handle.na == 'return.na') { # Data contain NA, return NAs directly without passing to .diff.corr if (is.null(alpha)) { - output <- list(corr.diff = NA, p.val = NA) + output <- list(diff.corr = NA, p.val = NA) } else { - output <- list(corr.diff = NA, sign = NA) + output <- list(diff.corr = NA, sign = NA) } } diff --git a/man/DiffCorr.Rd b/man/DiffCorr.Rd index 5671908..7f56289 100644 --- a/man/DiffCorr.Rd +++ b/man/DiffCorr.Rd @@ -62,7 +62,7 @@ computation. The default value is NULL.} } \value{ A list with: -\item{$corr.diff}{ +\item{$diff.corr}{ A numerical array of the correlation differences with the same dimensions as the input arrays except "time_dim" (and "memb_dim" if provided). } diff --git a/man/ResidualCorr.Rd b/man/ResidualCorr.Rd index 1e0adad..e98ea7a 100644 --- a/man/ResidualCorr.Rd +++ b/man/ResidualCorr.Rd @@ -67,9 +67,9 @@ A list with: the input arrays except "time_dim" (and "memb_dim" if provided). } \item{$sign}{ - A logical array of the statistical significance of the residual correlation - with the same dimensions as the input arrays except "time_dim" (and - "memb_dim" if provided). Returned only if "alpha" is a numeric. + A logical array indicating whether the residual correlation is statistically + significant or not with the same dimensions as the input arrays except "time_dim" + (and "memb_dim" if provided). Returned only if "alpha" is a numeric. } \item{$p.val}{ A numeric array of the p-values with the same dimensions as the input arrays diff --git a/tests/testthat/test-DiffCorr.R b/tests/testthat/test-DiffCorr.R new file mode 100644 index 0000000..2d1fbaf --- /dev/null +++ b/tests/testthat/test-DiffCorr.R @@ -0,0 +1,217 @@ +context("s2dv::DiffCorr tests") + +############################################## + +# dat1 +set.seed(1) +exp1 <- array(rnorm(180), dim = c(lat = 3, lon = 2, memb = 3, sdate = 10)) +set.seed(2) +ref1 <- array(rnorm(120), dim = c(lat = 3, lon = 2, memb = 2, sdate = 10)) +set.seed(3) +obs1 <- array(rnorm(60), dim = c(lat = 3, lon = 2, sdate = 10)) +Neff1 <- array(rep(9:10, 3), dim = c(lat = 3, lon = 2)) + +# dat2 +set.seed(1) +exp2 <- array(rnorm(10), dim = c(sdate = 10)) +set.seed(2) +ref2 <- array(rnorm(10), dim = c(sdate = 10)) +set.seed(3) +obs2 <- array(rnorm(10), dim = c(sdate = 10)) + + + +############################################## +test_that("1. Input checks", { + # exp and obs (1) + expect_error( + DiffCorr(c()), + 'Parameter "exp" must be a numeric array.' + ) + expect_error( + DiffCorr(exp1, c('a')), + 'Parameter "ref" must be a numeric array.' + ) + expect_error( + DiffCorr(exp1, ref1, c()), + 'Parameter "obs" must be a numeric array.' + ) + # N.eff + expect_error( + DiffCorr(exp1, ref1, obs1, N.eff = array(1, dim = c(lat = 2, lon = 2))), + "If parameter \"N.eff\" is provided with an array, it must have the same dimensions as \"obs\" except \"time_dim\"." + ) + expect_error( + DiffCorr(exp1, ref1, obs1, N.eff = 1:3), + 'Parameter "N.eff" must be NA, a numeric, or an array with the same dimensions as "obs" except "time_dim".' + ) + # time_dim + expect_error( + DiffCorr(exp1, ref1, obs1, time_dim = 1), + 'Parameter "time_dim" must be a character string.' + ) + expect_error( + DiffCorr(exp1, ref1, obs1, time_dim = 'time'), + "Parameter 'time_dim' is not found in 'exp', 'ref', or 'obs' dimension." + ) + # memb_dim + expect_error( + DiffCorr(exp1, ref1, obs1, memb_dim = TRUE), + "Parameter 'memb_dim' must be a character string." + ) + expect_error( + DiffCorr(exp1, ref1, obs1, memb_dim = 'member'), + "Parameter 'memb_dim' is not found in 'exp' or 'ref' dimension." + ) + # exp, ref, and obs (2) + expect_error( + DiffCorr(exp1, array(1:10, dim = c(sdate = 10, memb = 1)), obs1, memb_dim = 'memb'), + "Parameter 'exp', 'ref', and 'obs' must have same length of all dimensions expect 'memb_dim'." + ) + # method + expect_error( + DiffCorr(exp1, ref1, obs1, method = 'asd', memb_dim = 'memb'), + 'Parameter "method" must be "pearson", "kendall", or "spearman".' + ) + # alpha + expect_error( + DiffCorr(exp2, ref2, obs2, alpha = 1), + 'Parameter "alpha" must be NULL or a number between 0 and 1.' + ) + # handle.na + expect_error( + DiffCorr(exp2, ref2, obs2, handle.na = TRUE), + 'Parameter "handle.na" must be "return.na", "only.complete.triplets" or "na.fail".' + ) + # ncores + expect_error( + DiffCorr(exp2, ref2, obs2, ncores = 1.5), + 'Parameter "ncores" must be either NULL or a positive integer.' + ) + +}) + +############################################## +test_that("2. Output checks: dat1", { +expect_equal( +names(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb')), +c("diff.corr", "p.val") +) +expect_equal( +dim(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb')$diff), +c(lat = 3, lon = 2) +) +expect_equal( +dim(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb')$p.val), +c(lat = 3, lon = 2) +) +expect_equal( +as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb')$diff), +c(0.27347087, 0.50556882, 0.08855968, 0.24199701, 0.22935182, 0.88336336), +tolerance = 0.0001 +) +expect_equal( +as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb')$p), +c(0.26166060, 0.15899774, 0.39264452, 0.27959883, 0.34736305, 0.07479832), +tolerance = 0.0001 +) +expect_equal( +names(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', alpha = 0.05)), +c("diff.corr", "sign") +) +expect_equal( +as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', alpha = 0.05)$diff.corr), +c(0.27347087, 0.50556882, 0.08855968, 0.24199701, 0.22935182, 0.88336336), +tolerance = 0.0001 +) +expect_equal( +as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', alpha = 0.05)$sign), +rep(FALSE, 6) +) +expect_equal( +as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "kendall")$diff.corr), +c(0.08888889, 0.35555556, 0.00000000, -0.04444444, 0.00000000, 0.93333333), +tolerance = 0.0001 +) +expect_equal( +as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "kendall")$p), +c(0.42259038, 0.25373083, 0.50000000, 0.54183730, 0.50000000, 0.06307063), +tolerance = 0.0001 +) +expect_equal( +as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "spearman")$diff.corr), +c(0.07272727, 0.54545455, 0.10909091, -0.01212121, -0.03636364, 1.01818182), +tolerance = 0.0001 +) +expect_equal( +as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "spearman")$p), +c(0.4358970, 0.1341575, 0.3448977, 0.5114262, 0.5264872, 0.0437861), +tolerance = 0.0001 +) +expect_equal( +as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', N.eff = Neff1)$diff.corr), +c(0.27347087, 0.50556882, 0.08855968, 0.24199701, 0.22935182, 0.88336336), +tolerance = 0.0001 +) +expect_equal( +as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', N.eff = Neff1)$p), +c(0.27841537, 0.15899774, 0.40096749, 0.27959883, 0.35889690, 0.07479832), +tolerance = 0.0001 +) + + +#--------------------------- +exp1[1] <- NA +expect_equal( +as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb')$diff.corr), +c(NA, 0.50556882, 0.08855968, 0.24199701, 0.22935182, 0.88336336), +tolerance = 0.0001 +) +expect_equal( +as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', handle.na = 'only.complete.triplets')$diff.corr), +c(0.17418065, 0.50556882, 0.08855968, 0.24199701, 0.22935182, 0.88336336), +tolerance = 0.0001 +) +expect_error( +DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', handle.na = 'na.fail'), +"The data contain NAs." +) + +exp1[1,1,1,1:3] <- NA +ref1[1,1,1,4:8] <- NA +obs1[1,1,9:10] <- NA +expect_error( +DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', handle.na = 'only.complete.triplets'), +"There is no complete set of forecasts and observations." +) + + +}) + +############################################## + +test_that("3. Output checks: dat2", { +expect_equal( +names(DiffCorr(exp2, ref2, obs2)), +c("diff.corr", "p.val") +) +expect_equal( +dim(DiffCorr(exp2, ref2, obs2)$diff.corr), +NULL +) +expect_equal( +dim(DiffCorr(exp2, ref2, obs2)$p), +NULL +) +expect_equal( +DiffCorr(exp2, ref2, obs2)$p, +0.6577392, +tolerance = 0.0001 +) +expect_equal( +DiffCorr(exp2, ref2, obs2)$diff, +-0.2434725, +tolerance = 0.0001 +) + +}) -- GitLab From 66d85e3d3244656ba010888131ddfaabe782e85a Mon Sep 17 00:00:00 2001 From: aho Date: Mon, 2 May 2022 14:56:13 +0200 Subject: [PATCH 43/83] Allow dat_dim to be NULL; fix the output dimension name for some cases --- R/Clim.R | 151 +++++++++------ man/Clim.Rd | 15 +- man/ResidualCorr.Rd | 6 +- tests/testthat/test-Clim.R | 364 ++++++++++++++++++++++++++++++++++--- 4 files changed, 442 insertions(+), 94 deletions(-) diff --git a/R/Clim.R b/R/Clim.R index 59f8bc9..7d04f60 100644 --- a/R/Clim.R +++ b/R/Clim.R @@ -15,23 +15,26 @@ #'is the initial condition bias correction method. The two methods both do the #'per-pair correction beforehand. #' -#'@param exp A named numeric array of experimental data, with at least two -#' dimensions 'time_dim' and 'dat_dim'. -#'@param obs A named numeric array of observational data, same dimensions as -#' parameter 'exp' except along 'dat_dim'. +#'@param exp A named numeric array of experimental data with at least dimension +#' 'time_dim'. +#'@param obs A named numeric array of observational data that has the same +#' dimension as 'exp' except 'dat_dim'. #'@param time_dim A character string indicating the name of dimension along #' which the climatologies are computed. The default value is 'sdate'. #'@param dat_dim A character vector indicating the name of the dataset and #' member dimensions. If data at one startdate (i.e., 'time_dim') are not #' complete along 'dat_dim', this startdate along 'dat_dim' will be discarded. -#' The default value is "c('dataset', 'member')". -#'@param method A character string indicating the method to be used. The +#' If there is no dataset dimension, it can be NULL, however, it will be more +#' efficient to simply use mean() to do the calculation. The default value is +#' "c('dataset', 'member')". +#'@param method A character string indicating the method to be used. The #' options include 'clim' (per-pair method), 'kharin' (Kharin method), and #' 'NDV' (Fuckar method). The default value is 'clim'. #'@param ftime_dim A character string indicating the name of forecast time #' dimension. Only used when method = 'NDV'. The default value is 'ftime'. #'@param memb A logical value indicating whether to remain 'memb_dim' dimension -#' (TRUE) or do ensemble mean over 'memb_dim' (FALSE). The default value is TRUE. +#' (TRUE) or do ensemble mean over 'memb_dim' (FALSE). The default value is +#' TRUE. #'@param memb_dim A character string indicating the name of the member #' dimension. Only used when parameter 'memb' is FALSE. It must be one element #' in 'dat_dim'. The default value is 'member'. @@ -86,14 +89,10 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), stop(paste0("Parameter 'exp' and 'obs' must be at least two dimensions ", "containing time_dim and dat_dim.")) } - if(any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | - any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { + if (any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | + any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { stop("Parameter 'exp' and 'obs' must have dimension names.") } - if(!all(names(dim(exp)) %in% names(dim(obs))) | - !all(names(dim(obs)) %in% names(dim(exp)))) { - stop("Parameter 'exp' and 'obs' must have same dimension name") - } ## time_dim if (!is.character(time_dim) | length(time_dim) > 1) { stop("Parameter 'time_dim' must be a character string.") @@ -102,12 +101,26 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), stop("Parameter 'time_dim' is not found in 'exp' or 'obs' dimension.") } ## dat_dim - if (!is.character(dat_dim)) { - stop("Parameter 'dat_dim' must be a character vector.") - } - if (!all(dat_dim %in% names(dim(exp))) | !all(dat_dim %in% names(dim(obs)))) { - stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension.") - } + if (!is.null(dat_dim)) { + if (!is.character(dat_dim)) { + stop("Parameter 'dat_dim' must be a character vector.") + } + # Check if dat_dim is in exp + if (!all(dat_dim %in% names(dim(exp)))) { + stop("Parameter 'dat_dim' is not found in 'exp' dimensions.") + } + # If dat_dim is not in obs, add it in + if (any(!dat_dim %in% names(dim(obs)))) { + reset_obs_dim <- TRUE + ori_obs_dim <- dim(obs) + dim(obs) <- c(dim(obs), rep(1, length(dat_dim[which(!dat_dim %in% names(dim(obs)))]))) + names(dim(obs)) <- c(names(ori_obs_dim), dat_dim[which(!dat_dim %in% names(dim(obs)))]) + } else { + reset_obs_dim <- FALSE + } + } else { + reset_obs_dim <- FALSE + } ## method if (!(method %in% c("clim", "kharin", "NDV"))) { stop("Parameter 'method' must be one of 'clim', 'kharin' or 'NDV'.") @@ -126,13 +139,15 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), stop("Parameter 'memb' must be one logical value.") } ## memb_dim - if (!memb) { + if (!is.null(memb_dim) & !memb) { if (!is.character(memb_dim) | length(memb_dim) > 1) { stop("Parameter 'memb_dim' must be a character string.") } if (!memb_dim %in% names(dim(exp)) | !memb_dim %in% names(dim(obs))) { - stop("Parameter 'memb_dim' is not found in 'exp' or 'obs' dimension.") + stop("Parameter 'memb_dim' is not found in 'exp' dimension.") } + if (!memb_dim %in% dat_dim) + stop("Parameter 'memb_dim' must be one element in parameter 'dat_dim'.") } ## na.rm if (!is.logical(na.rm) | length(na.rm) > 1) { @@ -148,13 +163,15 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), ## exp and obs (2) name_exp <- sort(names(dim(exp))) name_obs <- sort(names(dim(obs))) - for (i in 1:length(dat_dim)) { - name_exp <- name_exp[-which(name_exp == dat_dim[i])] - name_obs <- name_obs[-which(name_obs == dat_dim[i])] + if (!is.null(dat_dim)) { + for (i in 1:length(dat_dim)) { + name_exp <- name_exp[-which(name_exp == dat_dim[i])] + name_obs <- name_obs[-which(name_obs == dat_dim[i])] + } } if(!all(dim(exp)[name_exp] == dim(obs)[name_obs])) { - stop(paste0("Parameter 'exp' and 'obs' must have same length of ", - "all dimension expect 'dat_dim'.")) + stop(paste0("Parameter 'exp' and 'obs' must have the same dimensions ", + "expect 'dat_dim'.")) } ############################### @@ -169,8 +186,8 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), # Calculate Clim #---------------------------------- - # Remove all sdate if not complete along dat_dim - + # Per-pair: Remove all sdate if not complete along dat_dim + if (!is.null(dat_dim)) { pos <- rep(0, length(dat_dim)) for (i in 1:length(dat_dim)) { #[dat, sdate] ## dat_dim: [dataset, member] @@ -186,7 +203,7 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), } exp[which(is.na(outrows_exp))] <- NA obs[which(is.na(outrows_obs))] <- NA - + } #----------------------------------- if (method == 'clim') { @@ -197,11 +214,17 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), dat_dim = dat_dim, memb_dim = memb_dim, memb = memb, na.rm = na.rm, ncores_input = ncores, ncores = ncores) - # Add member dimension name back - if (memb) { - if(is.null(names(dim(clim$clim_exp))[1])) { - names(dim(clim$clim_exp))[1] <- memb_dim - names(dim(clim$clim_obs))[1] <- memb_dim + + # Remove dat_dim in obs if obs doesn't have at first place + if (reset_obs_dim) { + clim_obs_dim <- ori_obs_dim[-which(names(ori_obs_dim) == time_dim)] + if (!memb & memb_dim %in% names(clim_obs_dim)) { + clim_obs_dim <- clim_obs_dim[-which(names(clim_obs_dim) == memb_dim)] + } + if (is.integer(clim_obs_dim) & length(clim_obs_dim) == 0) { + clim$clim_obs <- as.vector(clim$clim_obs) + } else { + clim$clim_obs <- array(clim$clim_obs, dim = clim_obs_dim) } } @@ -234,32 +257,44 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), na.rm = TRUE, ncores_input = NULL) { if (method == 'clim') { - # exp: [sdate, dat_dim_exp] - # obs: [sdate, dat_dim_obs] - - clim_exp <- apply(exp, which(names(dim(exp)) != time_dim), - mean, na.rm = na.rm) #average out time_dim - clim_obs <- apply(obs, which(names(dim(obs)) != time_dim), - mean, na.rm = na.rm) #[dat_dim] - - ## member mean - if (!memb) { - if (length(dim(clim_exp)) == 1) { #dim: [member] - clim_exp <- mean(clim_exp, na.rm = TRUE) - clim_obs <- mean(clim_obs, na.rm = TRUE) - } else { - pos <- which(names(dim(clim_exp)) == memb_dim) - pos <- c(1:length(dim(clim_exp)))[-pos] - dim_name <- names(dim(clim_exp)) - clim_exp <- apply(clim_exp, pos, mean, na.rm = TRUE) - clim_obs <- apply(clim_obs, pos, mean, na.rm = TRUE) - if (is.null(names(dim(as.array(clim_exp))))) { - clim_exp <- as.array(clim_exp) - clim_obs <- as.array(clim_obs) - names(dim(clim_exp)) <- dim_name[pos] - names(dim(clim_obs)) <- dim_name[pos] + if (!is.null(dat_dim)) { + # exp: [sdate, dat_dim_exp] + # obs: [sdate, dat_dim_obs] + + clim_exp <- apply(exp, which(names(dim(exp)) != time_dim), + mean, na.rm = na.rm) #average out time_dim + clim_obs <- apply(obs, which(names(dim(obs)) != time_dim), + mean, na.rm = na.rm) #[dat_dim] + + if (is.null(dim(clim_exp))) { + dim(clim_exp) <- length(clim_exp) + names(dim(clim_exp)) <- dat_dim + dim(clim_obs) <- length(clim_obs) + names(dim(clim_obs)) <- dat_dim + } + + ## ensemble mean + if (!memb) { + if (length(dim(clim_exp)) == 1 | is.null(dim(clim_exp))) { #dim: [member] + clim_exp <- mean(clim_exp, na.rm = TRUE) + clim_obs <- mean(clim_obs, na.rm = TRUE) + } else { + pos <- which(names(dim(clim_exp)) == memb_dim) + pos <- c(1:length(dim(clim_exp)))[-pos] + dim_name <- names(dim(clim_exp)) + clim_exp <- apply(clim_exp, pos, mean, na.rm = TRUE) + clim_obs <- apply(clim_obs, pos, mean, na.rm = TRUE) + if (is.null(names(dim(as.array(clim_exp))))) { + clim_exp <- as.array(clim_exp) + clim_obs <- as.array(clim_obs) + names(dim(clim_exp)) <- dim_name[pos] + names(dim(clim_obs)) <- dim_name[pos] + } } } + } else { #dat_dim = NULL + clim_exp <- mean(exp) + clim_obs <- mean(obs) } } else if (method == 'kharin') { diff --git a/man/Clim.Rd b/man/Clim.Rd index cf58525..311e699 100644 --- a/man/Clim.Rd +++ b/man/Clim.Rd @@ -18,11 +18,11 @@ Clim( ) } \arguments{ -\item{exp}{A named numeric array of experimental data, with at least two -dimensions 'time_dim' and 'dat_dim'.} +\item{exp}{A named numeric array of experimental data with at least dimension +'time_dim'.} -\item{obs}{A named numeric array of observational data, same dimensions as -parameter 'exp' except along 'dat_dim'.} +\item{obs}{A named numeric array of observational data that has the same +dimension as 'exp' except 'dat_dim'.} \item{time_dim}{A character string indicating the name of dimension along which the climatologies are computed. The default value is 'sdate'.} @@ -30,7 +30,9 @@ which the climatologies are computed. The default value is 'sdate'.} \item{dat_dim}{A character vector indicating the name of the dataset and member dimensions. If data at one startdate (i.e., 'time_dim') are not complete along 'dat_dim', this startdate along 'dat_dim' will be discarded. -The default value is "c('dataset', 'member')".} +If there is no dataset dimension, it can be NULL, however, it will be more +efficient to simply use mean() to do the calculation. The default value is +"c('dataset', 'member')".} \item{method}{A character string indicating the method to be used. The options include 'clim' (per-pair method), 'kharin' (Kharin method), and @@ -40,7 +42,8 @@ options include 'clim' (per-pair method), 'kharin' (Kharin method), and dimension. Only used when method = 'NDV'. The default value is 'ftime'.} \item{memb}{A logical value indicating whether to remain 'memb_dim' dimension -(TRUE) or do ensemble mean over 'memb_dim' (FALSE). The default value is TRUE.} +(TRUE) or do ensemble mean over 'memb_dim' (FALSE). The default value is +TRUE.} \item{memb_dim}{A character string indicating the name of the member dimension. Only used when parameter 'memb' is FALSE. It must be one element diff --git a/man/ResidualCorr.Rd b/man/ResidualCorr.Rd index 1e0adad..e98ea7a 100644 --- a/man/ResidualCorr.Rd +++ b/man/ResidualCorr.Rd @@ -67,9 +67,9 @@ A list with: the input arrays except "time_dim" (and "memb_dim" if provided). } \item{$sign}{ - A logical array of the statistical significance of the residual correlation - with the same dimensions as the input arrays except "time_dim" (and - "memb_dim" if provided). Returned only if "alpha" is a numeric. + A logical array indicating whether the residual correlation is statistically + significant or not with the same dimensions as the input arrays except "time_dim" + (and "memb_dim" if provided). Returned only if "alpha" is a numeric. } \item{$p.val}{ A numeric array of the p-values with the same dimensions as the input arrays diff --git a/tests/testthat/test-Clim.R b/tests/testthat/test-Clim.R index 1d2ff3e..f4a5cb9 100644 --- a/tests/testthat/test-Clim.R +++ b/tests/testthat/test-Clim.R @@ -26,6 +26,42 @@ context("s2dv::Clim tests") obs3 <- array(rnorm(40), dim = c(dat = 1, ensemble = 1, lon = 2, lat = 4, date = 5)) + # dat4 + set.seed(1) + exp4 <- array(rnorm(30), dim = c(dataset = 1, member = 3, sdate = 5)) + set.seed(2) + obs4 <- array(rnorm(10), dim = c(dataset = 1, member = 1, sdate = 5)) + + # dat5 + set.seed(1) + exp5 <- array(rnorm(30), dim = c(member = 3, sdate = 5)) + set.seed(2) + obs5 <- array(rnorm(10), dim = c(member = 1, sdate = 5)) + + # dat6 + set.seed(1) + exp6 <- array(rnorm(30), dim = c(dataset = 1, member = 3, sdate = 5)) + set.seed(2) + obs6 <- array(rnorm(10), dim = c(dataset = 1, sdate = 5)) + + # dat7 + set.seed(1) + exp7 <- array(rnorm(30), dim = c(dataset = 1, member = 3, sdate = 5)) + set.seed(2) + obs7 <- array(rnorm(10), dim = c(sdate = 5)) + + # dat8 + set.seed(1) + exp8 <- array(rnorm(30), dim = c(member = 3, sdate = 5)) + set.seed(2) + obs8 <- array(rnorm(10), dim = c(sdate = 5)) + + # dat9 + set.seed(1) + exp9 <- array(rnorm(30), dim = c(sdate = 5)) + set.seed(2) + obs9 <- array(rnorm(10), dim = c(sdate = 5)) + ############################################## test_that("1. Input checks", { @@ -47,10 +83,6 @@ test_that("1. Input checks", { "Parameter 'exp' and 'obs' must have dimension names." ) expect_error( - Clim(array(1:10, dim = c(a = 2, c = 5)), array(1:4, dim = c(a = 2, b = 2))), - "Parameter 'exp' and 'obs' must have same dimension name" - ) - expect_error( Clim(exp1, obs1, method = TRUE), "Parameter 'method' must be one of 'clim', 'kharin' or 'NDV'." ) @@ -68,7 +100,7 @@ test_that("1. Input checks", { ) expect_error( Clim(exp1, obs1, dat_dim = c('member', 'dat')), - "Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension." + "Parameter 'dat_dim' is not found in 'exp' dimensions." ) expect_error( Clim(exp1, obs1, method = 'NDV', ftime_dim = 4), @@ -88,7 +120,7 @@ test_that("1. Input checks", { ) expect_error( Clim(exp1, obs1, memb = FALSE, memb_dim = 'memb'), - "Parameter 'memb_dim' is not found in 'exp' or 'obs' dimension." + "Parameter 'memb_dim' is not found in 'exp' dimension." ) expect_error( Clim(exp1, obs1, na.rm = na.omit), @@ -101,8 +133,7 @@ test_that("1. Input checks", { expect_error( Clim(array(1:10, dim = c(dataset = 2, member = 5, sdate = 4, ftime = 3)), array(1:4, dim = c(dataset = 2, member = 2, sdate = 5, ftime = 3))), - paste0("Parameter 'exp' and 'obs' must have same length of ", - "all dimension expect 'dat_dim'.") + "Parameter 'exp' and 'obs' must have the same dimensions expect 'dat_dim'." ) }) @@ -110,58 +141,79 @@ test_that("1. Input checks", { ############################################## test_that("2. Output checks: dat1", { + # dimension expect_equal( dim(Clim(exp1, obs1)$clim_exp), c(dataset = 1, member = 3, ftime = 3, lon = 2, lat = 4) ) expect_equal( - dim(Clim(exp1, obs1, memb = FALSE)$clim_exp), - c(dataset = 1, ftime = 3, lon = 2, lat = 4) + dim(Clim(exp1, obs1)$clim_obs), + c(dataset = 1, member = 1, ftime = 3, lon = 2, lat = 4) ) expect_equal( - dim(Clim(exp1, obs1, time_dim = 'lon')$clim_exp), - c(dataset = 1, member = 3, sdate = 5, ftime = 3, lat = 4) + dim(Clim(exp1, obs1, memb = FALSE)$clim_exp), + c(dataset = 1, ftime = 3, lon = 2, lat = 4) ) expect_equal( - dim(Clim(exp1, obs1, method = 'kharin')$clim_exp), - c(sdate = 5, dataset = 1, member = 3, ftime = 3, lon = 2, lat = 4) + dim(Clim(exp1, obs1, memb = FALSE)$clim_obs), + c(dataset = 1, ftime = 3, lon = 2, lat = 4) ) expect_equal( - dim(Clim(exp1, obs1, method = 'NDV')$clim_exp), - c(sdate = 5, dataset = 1, member = 3, ftime = 3, lon = 2, lat = 4) + dim(Clim(exp1, obs1, time_dim = 'lon')$clim_exp), + c(dataset = 1, member = 3, sdate = 5, ftime = 3, lat = 4) ) + # clim_exp expect_equal( - dim(Clim(exp1, obs1)$clim_obs), - c(dataset = 1, member = 1, ftime = 3, lon = 2, lat = 4) + (Clim(exp1, obs1, memb = TRUE)$clim_exp)[1:5], + c(0.10592542, 0.10971142, 0.08689170, 0.14149945, 0.02359945), + tolerance = 0.001 ) expect_equal( - dim(Clim(exp1, obs1, method = 'kharin')$clim_obs), - c(dataset = 1, member = 1, ftime = 3, lon = 2, lat = 4) + (Clim(exp1, obs1, memb = FALSE)$clim_exp)[1:5], + c(0.10084284, 0.06407350, 0.09028584, 0.17526332, 0.18004387), + tolerance = 0.001 ) expect_equal( - dim(Clim(exp1, obs1, method = 'NDV')$clim_obs), - c(dataset = 1, member = 1, ftime = 3, lon = 2, lat = 4) + max(Clim(exp1, obs1)$clim_exp, na.rm = T), + 1.026186, + tolerance = 0.001 ) + # clim_obs expect_equal( (Clim(exp1, obs1)$clim_obs)[1:5], c(0.14831161, -0.60462627, 0.06609153, -0.23378059, 0.50553522), tolerance = 0.001 ) expect_equal( - (Clim(exp1, obs1, memb = FALSE)$clim_exp)[1:5], - c(0.10084284, 0.06407350, 0.09028584, 0.17526332, 0.18004387), + (Clim(exp1, obs1, memb = F)$clim_obs)[1:5], + c(0.14831161, -0.60462627, 0.06609153, -0.23378059, 0.50553522), tolerance = 0.001 ) + + # method = 'kharin' expect_equal( - max(Clim(exp1, obs1)$clim_exp, na.rm = T), - 1.026186, - tolerance = 0.001 + dim(Clim(exp1, obs1, method = 'kharin')$clim_exp), + c(sdate = 5, dataset = 1, member = 3, ftime = 3, lon = 2, lat = 4) + ) + expect_equal( + dim(Clim(exp1, obs1, method = 'kharin')$clim_obs), + c(dataset = 1, member = 1, ftime = 3, lon = 2, lat = 4) ) expect_equal( max(Clim(exp1, obs1, method = 'kharin')$clim_exp, na.rm = T), 2.282634, tolerance = 0.001 ) + + # method = 'NDV' + expect_equal( + dim(Clim(exp1, obs1, method = 'NDV')$clim_exp), + c(sdate = 5, dataset = 1, member = 3, ftime = 3, lon = 2, lat = 4) + ) + expect_equal( + dim(Clim(exp1, obs1, method = 'NDV')$clim_obs), + c(dataset = 1, member = 1, ftime = 3, lon = 2, lat = 4) + ) expect_equal( min(Clim(exp1, obs1, method = 'NDV')$clim_exp, na.rm = T), -4.025745, @@ -212,9 +264,267 @@ test_that("4. Output checks: dat3", { tolerance = 0.00001 ) +}) +############################################## +test_that("5. Output checks: dat4", { +res1 <- Clim(exp4, obs4, memb = T) +res2 <- Clim(exp4, obs4, memb = F) +expect_equal( +dim(res1$clim_exp), +c(dataset = 1, member = 3) +) +expect_equal( +dim(res1$clim_obs), +c(dataset = 1, member = 1) +) +expect_equal( +dim(res2$clim_exp), +c(dataset = 1) +) +expect_equal( +dim(res2$clim_obs), +c(dataset = 1) +) +expect_equal( +as.vector(res1$clim_exp), +c(0.1059254, 0.1097114, 0.0868917), +tolerance = 0.0001 +) +expect_equal( +as.vector(res1$clim_obs), +-0.06696949, +tolerance = 0.0001 +) +expect_equal( +as.vector(res2$clim_exp), +0.1008428, +tolerance = 0.0001 +) +expect_equal( +as.vector(res2$clim_obs), +-0.06696949, +tolerance = 0.0001 +) + +}) + + +############################################## +test_that("6. Output checks: dat5", { +res1 <- Clim(exp5, obs5, dat_dim = 'member', memb = T) +res2 <- Clim(exp5, obs5, dat_dim = 'member', memb = F) +expect_equal( +dim(res1$clim_exp), +c(member = 3) +) +expect_equal( +dim(res1$clim_obs), +c(member = 1) +) +expect_equal( +dim(res2$clim_exp), +NULL +) +expect_equal( +dim(res2$clim_obs), +NULL +) +expect_equal( +as.vector(res1$clim_exp), +c(0.1059254, 0.1097114, 0.0868917), +tolerance = 0.0001 +) +expect_equal( +as.vector(res1$clim_obs), +-0.06696949, +tolerance = 0.0001 +) +expect_equal( +as.vector(res2$clim_exp), +0.1008428, +tolerance = 0.0001 +) +expect_equal( +as.vector(res2$clim_obs), +-0.06696949, +tolerance = 0.0001 +) +}) + +############################################## +test_that("7. Output checks: dat6", { +res1 <- Clim(exp6, obs6, memb = T) +res2 <- Clim(exp6, obs6, memb = F) +expect_equal( +dim(res1$clim_exp), +c(dataset = 1, member = 3) +) +expect_equal( +dim(res1$clim_obs), +c(dataset = 1) +) +expect_equal( +dim(res2$clim_exp), +c(dataset = 1) +) +expect_equal( +dim(res2$clim_obs), +c(dataset = 1) +) +expect_equal( +as.vector(res1$clim_exp), +c(0.1059254, 0.1097114, 0.0868917), +tolerance = 0.0001 +) +expect_equal( +as.vector(res1$clim_obs), +-0.06696949, +tolerance = 0.0001 +) +expect_equal( +as.vector(res2$clim_exp), +0.1008428, +tolerance = 0.0001 +) +expect_equal( +as.vector(res2$clim_obs), +-0.06696949, +tolerance = 0.0001 +) }) +############################################## +test_that("8. Output checks: dat7", { +res1 <- Clim(exp7, obs7, memb = T) +res2 <- Clim(exp7, obs7, memb = F) +expect_equal( +dim(res1$clim_exp), +c(dataset = 1, member = 3) +) +expect_equal( +dim(res1$clim_obs), +NULL +) +expect_equal( +dim(res2$clim_exp), +c(dataset = 1) +) +expect_equal( +dim(res2$clim_obs), +NULL +) +expect_equal( +as.vector(res1$clim_exp), +c(0.1059254, 0.1097114, 0.0868917), +tolerance = 0.0001 +) +expect_equal( +as.vector(res1$clim_obs), +-0.06696949, +tolerance = 0.0001 +) +expect_equal( +as.vector(res2$clim_exp), +0.1008428, +tolerance = 0.0001 +) +expect_equal( +as.vector(res2$clim_obs), +-0.06696949, +tolerance = 0.0001 +) + +}) + + +############################################## +test_that("9. Output checks: dat8", { +res1 <- Clim(exp8, obs8, dat_dim = 'member', memb = T) +res2 <- Clim(exp8, obs8, dat_dim = 'member', memb = F) +expect_equal( +dim(res1$clim_exp), +c(member = 3) +) +expect_equal( +dim(res1$clim_obs), +NULL +) +expect_equal( +dim(res2$clim_exp), +NULL +) +expect_equal( +dim(res2$clim_obs), +NULL +) +expect_equal( +as.vector(res1$clim_exp), +c(0.1059254, 0.1097114, 0.0868917), +tolerance = 0.0001 +) +expect_equal( +as.vector(res1$clim_obs), +-0.06696949, +tolerance = 0.0001 +) +expect_equal( +as.vector(res2$clim_exp), +0.1008428, +tolerance = 0.0001 +) +expect_equal( +as.vector(res2$clim_obs), +-0.06696949, +tolerance = 0.0001 +) + +}) + +############################################## +test_that("10. Output checks: dat9", { +res1 <- Clim(exp9, obs9, dat_dim = NULL, memb = T) +res2 <- Clim(exp9, obs9, dat_dim = NULL, memb_dim = NULL, memb = F) +expect_equal( +dim(res1$clim_exp), +NULL +) +expect_equal( +dim(res1$clim_obs), +NULL +) +expect_equal( +dim(res2$clim_exp), +NULL +) +expect_equal( +dim(res2$clim_obs), +NULL +) +expect_equal( +as.vector(res1$clim_exp), +0.1292699, +tolerance = 0.0001 +) +expect_equal( +as.vector(res1$clim_obs), +-0.06696949, +tolerance = 0.0001 +) +expect_equal( +as.vector(res2$clim_exp), +0.1292699, +tolerance = 0.0001 +) +expect_equal( +as.vector(res2$clim_obs), +-0.06696949, +tolerance = 0.0001 +) + +}) + +############################################## -- GitLab From e12f814085636874e2bfeeba69148a7f2ca81b3d Mon Sep 17 00:00:00 2001 From: aho Date: Mon, 2 May 2022 18:42:39 +0200 Subject: [PATCH 44/83] Revise method NDV and kharin for output dimensions --- R/Clim.R | 172 ++++++++++++++++--------- man/Clim.Rd | 2 +- tests/testthat/test-Clim.R | 256 ++++++++++++++++++++++++++++++++++++- 3 files changed, 367 insertions(+), 63 deletions(-) diff --git a/R/Clim.R b/R/Clim.R index 7d04f60..1093c99 100644 --- a/R/Clim.R +++ b/R/Clim.R @@ -53,7 +53,7 @@ #' dimension 'memb_dim' is also removed. #'} #'\item{$clim_obs}{ -#' A numeric array with the same dimensions as parameter 'exp' +#' A numeric array with the same dimensions as parameter 'obs' #' except dimension 'time_dim' is removed. If parameter 'memb' is FALSE, #' dimension 'memb_dim' is also removed. #'} @@ -148,6 +148,8 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), } if (!memb_dim %in% dat_dim) stop("Parameter 'memb_dim' must be one element in parameter 'dat_dim'.") + } else if (is.null(memb_dim) & !memb) { + memb <- TRUE } ## na.rm if (!is.logical(na.rm) | length(na.rm) > 1) { @@ -215,19 +217,6 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), memb = memb, na.rm = na.rm, ncores_input = ncores, ncores = ncores) - # Remove dat_dim in obs if obs doesn't have at first place - if (reset_obs_dim) { - clim_obs_dim <- ori_obs_dim[-which(names(ori_obs_dim) == time_dim)] - if (!memb & memb_dim %in% names(clim_obs_dim)) { - clim_obs_dim <- clim_obs_dim[-which(names(clim_obs_dim) == memb_dim)] - } - if (is.integer(clim_obs_dim) & length(clim_obs_dim) == 0) { - clim$clim_obs <- as.vector(clim$clim_obs) - } else { - clim$clim_obs <- array(clim$clim_obs, dim = clim_obs_dim) - } - } - } else if (method == 'kharin') { clim <- Apply(list(exp, obs), target_dims = c(time_dim, dat_dim), @@ -245,6 +234,19 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), dat_dim = dat_dim, ftime_dim = ftime_dim, memb_dim = memb_dim, memb = memb, na.rm = na.rm, ncores_input = ncores, ncores = ncores) + } + + # Remove dat_dim in obs if obs doesn't have at first place + if (reset_obs_dim) { + clim_obs_dim <- ori_obs_dim[-which(names(ori_obs_dim) == time_dim)] + if (!memb & memb_dim %in% names(clim_obs_dim)) { + clim_obs_dim <- clim_obs_dim[-which(names(clim_obs_dim) == memb_dim)] + } + if (is.integer(clim_obs_dim) & length(clim_obs_dim) == 0) { + clim$clim_obs <- as.vector(clim$clim_obs) + } else { + clim$clim_obs <- array(clim$clim_obs, dim = clim_obs_dim) + } } return(clim) @@ -302,8 +304,16 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), # obs: [sdate, dat_dim_obs] # obs clim - clim_obs <- apply(obs, which(names(dim(obs)) != time_dim), - mean, na.rm = na.rm) #[dat_dim] + if (!is.null(dat_dim)) { + clim_obs <- apply(obs, which(names(dim(obs)) != time_dim), + mean, na.rm = na.rm) #[dat_dim] + if (is.null(dim(clim_obs))) { + dim(clim_obs) <- length(clim_obs) + names(dim(clim_obs)) <- dat_dim + } + } else { + clim_obs <- mean(obs) + } # exp clim ##--- NEW trend ---## @@ -312,17 +322,21 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), tmp_exp <- Trend(data = exp, time_dim = time_dim, interval = 1, polydeg = 1, conf = FALSE, ncores = ncores_input)$trend # tmp_exp: [stats, dat_dim)] - tmp_obs_mean <- apply(tmp_obs, 1, mean) #average out dat_dim (dat and member) #tmp_obs_mean: [stats = 2] - - intercept_exp <- Subset(tmp_exp, 1, 1, drop = 'selected') #[dat_dim] - slope_exp <- Subset(tmp_exp, 1, 2, drop = 'selected') #[dat_dim] - intercept_obs <- array(tmp_obs_mean[1], dim = dim(exp)[-1]) #[dat_dim] - slope_obs <- array(tmp_obs_mean[2], dim = dim(exp)[-1]) #[dat_dim] + if (!is.null(dat_dim)) { + intercept_exp <- Subset(tmp_exp, 1, 1, drop = 'selected') #[dat_dim] + slope_exp <- Subset(tmp_exp, 1, 2, drop = 'selected') #[dat_dim] + intercept_obs <- array(tmp_obs_mean[1], dim = dim(exp)[-1]) #[dat_dim] + slope_obs <- array(tmp_obs_mean[2], dim = dim(exp)[-1]) #[dat_dim] + } else { + intercept_exp <- tmp_exp[1] + slope_exp <- tmp_exp[2] + intercept_obs <- tmp_obs_mean[1] + slope_obs <- tmp_obs_mean[2] + } trend_exp <- list() trend_obs <- list() - for (jdate in 1:dim(exp)[time_dim]) { trend_exp[[jdate]] <- intercept_exp + jdate * slope_exp trend_obs[[jdate]] <- intercept_obs + jdate * slope_obs @@ -330,26 +344,40 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), # turn list into array trend_exp <- array(unlist(trend_exp), dim = c(dim(exp)[-1], dim(exp)[1])) trend_obs <- array(unlist(trend_obs), dim = c(dim(exp)[-1], dim(exp)[1])) - len <- length(dim(exp)) - trend_exp <- Reorder(trend_exp, c(len, 1:(len - 1))) - trend_obs <- Reorder(trend_obs, c(len, 1:(len - 1))) + if (!is.null(dat_dim)) { + len <- length(dim(exp)) + trend_exp <- Reorder(trend_exp, c(len, 1:(len - 1))) + trend_obs <- Reorder(trend_obs, c(len, 1:(len - 1))) + } - clim_obs_mean <- mean(apply(clim_obs, 1, mean)) #average out dat_dim, get a number + # average out dat_dim, get a number + if (is.null(dim(clim_obs))) { + clim_obs_mean <- mean(clim_obs) + } else { + clim_obs_mean <- mean(apply(clim_obs, 1, mean)) + } clim_obs_mean <- array(clim_obs_mean, dim = dim(exp)) #enlarge it for the next line clim_exp <- trend_exp - trend_obs + clim_obs_mean - - ## member mean + + ## member mean if (!memb) { - pos <- which(names(dim(clim_exp)) == memb_dim) - pos <- c(1:length(dim(clim_exp)))[-pos] - dim_name <- names(dim(clim_exp)) - clim_exp <- apply(clim_exp, pos, mean, na.rm = TRUE) - clim_obs <- apply(clim_obs, pos, mean, na.rm = TRUE) - if (is.null(names(dim(as.array(clim_exp))))) { + pos_exp <- c(1:length(dim(clim_exp)))[-which(names(dim(clim_exp)) == memb_dim)] + pos_obs <- c(1:length(dim(clim_obs)))[-which(names(dim(clim_obs)) == memb_dim)] + tmp_dim_exp <- dim(clim_exp) + tmp_dim_obs <- dim(clim_obs) + clim_exp <- apply(clim_exp, pos_exp, mean, na.rm = TRUE) + if (is.integer(pos_obs) & length(pos_obs) == 0) { + clim_obs <- mean(clim_obs) + } else { + clim_obs <- apply(clim_obs, pos_obs, mean, na.rm = TRUE) + } + if (is.null(dim(clim_exp))) { clim_exp <- as.array(clim_exp) + dim(clim_exp) <- tmp_dim_exp[pos_exp] + } + if (is.null(dim(clim_obs)) & !(is.integer(pos_obs) & length(pos_obs) == 0)) { clim_obs <- as.array(clim_obs) - names(dim(clim_exp)) <- dim_name[pos] - names(dim(clim_obs)) <- dim_name[pos] + dim(clim_obs) <- tmp_dim_obs[pos_obs] } } @@ -358,15 +386,24 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), # exp: [sdate, dat_dim, ftime] # obs: [sdate, dat_dim, ftime] - # obs clim + # obs clim clim_obs <- apply(obs, which(names(dim(obs)) != time_dim), - mean, na.rm = na.rm) #[dat_dim, ftime] + mean, na.rm = na.rm) #[(dat_dim), ftime] - # exp clim + if (is.null(dim(clim_obs))) { + dim(clim_obs) <- length(clim_obs) + names(dim(clim_obs)) <- c(dat_dim, ftime_dim) + } + + # exp clim pos_ftime <- length(dim(exp)) #a number dim_ftime <- dim(exp)[pos_ftime] #c(ftime = 4) - pos_dat <- 2:(length(dim(exp)) - 1) #1 is sdate, last is ftime - dim_dat <- dim(exp)[pos_dat] #c(dataset = 1, member = 3) + if (!is.null(dat_dim)) { + pos_dat <- 2:(length(dim(exp)) - 1) #1 is sdate, last is ftime + dim_dat <- dim(exp)[pos_dat] #c(dataset = 1, member = 3) + } else { + dim_dat <- NULL + } # Create initial data set (i.e., only first ftime) tmp <- Subset(exp, ftime_dim, 1, drop = 'selected') @@ -389,14 +426,14 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), # Find intercept and slope intercept_exp <- Subset(tmp_exp, 1, 1, drop = 'selected') #[dat_dim, ftime] slope_exp <- Subset(tmp_exp, 1, 2, drop = 'selected') #[dat_dim, ftime] - intercept_obs <- array(tmp_obs_mean[1, ], dim = c(dim_ftime, dim_dat)) - #[ftime, dat_dim] exp - intercept_obs <- Reorder(intercept_obs, c(2:length(dim(intercept_obs)), 1)) - #[dat_dim, ftime] exp - slope_obs <- array(tmp_obs_mean[2, ], dim = c(dim_ftime, dim_dat)) - #[ftime, dat_dim] exp - slope_obs <- Reorder(slope_obs, c(2:length(dim(slope_obs)), 1)) - #[dat_dim, ftime] exp + intercept_obs <- array(tmp_obs_mean[1, ], dim = c(dim_ftime, dim_dat)) #[ftime, dat_dim] exp + if (!is.null(dat_dim)) { + intercept_obs <- Reorder(intercept_obs, c(2:length(dim(intercept_obs)), 1)) #[dat_dim, ftime] exp + } + slope_obs <- array(tmp_obs_mean[2, ], dim = c(dim_ftime, dim_dat)) #[ftime, dat_dim] exp + if (!is.null(dat_dim)) { + slope_obs <- Reorder(slope_obs, c(2:length(dim(slope_obs)), 1)) #[dat_dim, ftime] exp + } trend_exp <- list() trend_obs <- list() @@ -405,7 +442,9 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), trend_exp[[jdate]] <- intercept_exp + tmp * slope_exp #[dat_dim, ftime] tmp <- array(ini_obs_mean[jdate, ], dim = c(dim_ftime, dim_dat)) #[ftime, dat_dim] - tmp <- Reorder(tmp, c(2:length(dim(tmp)), 1)) #[dat_dim, ftime] + if (!is.null(dat_dim)) { + tmp <- Reorder(tmp, c(2:length(dim(tmp)), 1)) #[dat_dim, ftime] + } trend_obs[[jdate]] <- intercept_obs + tmp * slope_obs } # turn list into array @@ -416,8 +455,11 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), trend_exp <- Reorder(trend_exp, c(len, 1:(len - 1))) trend_obs <- Reorder(trend_obs, c(len, 1:(len - 1))) #trend_: [sdate, dat_dim, ftime] - + if (is.null(dim(clim_obs))) { + clim_obs_mean <- clim_obs #[ftime] + } else { clim_obs_mean <- apply(clim_obs, length(dim(clim_obs)), mean) #average out dat_dim, [ftime] + } clim_obs_mean <- array(clim_obs_mean, dim = c(dim_ftime, dim(exp)[1], dim_dat)) #[ftime, sdate, dat_dim] len <- length(dim(clim_obs_mean)) @@ -426,18 +468,26 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), clim_exp <- trend_exp - trend_obs + clim_obs_mean - ## member mean + ## member mean if (!memb) { - pos <- which(names(dim(clim_exp)) == memb_dim) - pos <- c(1:length(dim(clim_exp)))[-pos] - dim_name <- names(dim(clim_exp)) - clim_exp <- apply(clim_exp, pos, mean, na.rm = TRUE) - clim_obs <- apply(clim_obs, pos, mean, na.rm = TRUE) - if (is.null(names(dim(as.array(clim_exp))))) { + pos_exp <- c(1:length(dim(clim_exp)))[-which(names(dim(clim_exp)) == memb_dim)] + pos_obs <- c(1:length(dim(clim_obs)))[-which(names(dim(clim_obs)) == memb_dim)] + + tmp_dim_exp <- dim(clim_exp) + tmp_dim_obs <- dim(clim_obs) + clim_exp <- apply(clim_exp, pos_exp, mean, na.rm = TRUE) + if (is.integer(pos_obs) & length(pos_obs) == 0) { + clim_obs <- mean(clim_obs) + } else { + clim_obs <- apply(clim_obs, pos_obs, mean, na.rm = TRUE) + } + if (is.null(dim(clim_exp))) { clim_exp <- as.array(clim_exp) + dim(clim_exp) <- tmp_dim_exp[pos_exp] + } + if (is.null(dim(clim_obs)) & !(is.integer(pos_obs) & length(pos_obs) == 0)) { clim_obs <- as.array(clim_obs) - names(dim(clim_exp)) <- dim_name[pos] - names(dim(clim_obs)) <- dim_name[pos] + dim(clim_obs) <- tmp_dim_obs[pos_obs] } } diff --git a/man/Clim.Rd b/man/Clim.Rd index 311e699..a5a6f19 100644 --- a/man/Clim.Rd +++ b/man/Clim.Rd @@ -65,7 +65,7 @@ A list of 2: dimension 'memb_dim' is also removed. } \item{$clim_obs}{ - A numeric array with the same dimensions as parameter 'exp' + A numeric array with the same dimensions as parameter 'obs' except dimension 'time_dim' is removed. If parameter 'memb' is FALSE, dimension 'memb_dim' is also removed. } diff --git a/tests/testthat/test-Clim.R b/tests/testthat/test-Clim.R index f4a5cb9..7751afb 100644 --- a/tests/testthat/test-Clim.R +++ b/tests/testthat/test-Clim.R @@ -7,7 +7,7 @@ context("s2dv::Clim tests") ftime = 3, lon = 2, lat = 4)) set.seed(2) obs1 <- array(rnorm(120), dim = c(dataset = 1, member = 1, - ftime = 3, lon = 2, lat = 4, sdate = 5)) + ftime = 3, lon = 2, lat = 4, sdate = 5)) # dat2 exp2 <- exp1 set.seed(1) @@ -62,6 +62,7 @@ context("s2dv::Clim tests") set.seed(2) obs9 <- array(rnorm(10), dim = c(sdate = 5)) + ############################################## test_that("1. Input checks", { @@ -307,6 +308,47 @@ as.vector(res2$clim_obs), -0.06696949, tolerance = 0.0001 ) +# method = 'kharin' +res1 <- Clim(exp4, obs4, memb = T, method = 'kharin') +res2 <- Clim(exp4, obs4, memb = F, method = 'kharin') +expect_equal( +dim(res1$clim_exp), +c(sdate = 5, dataset = 1, member = 3) +) +expect_equal( +dim(res1$clim_obs), +c(dataset = 1, member = 1) +) +expect_equal( +dim(res2$clim_exp), +c(sdate = 5, dataset = 1) +) +expect_equal( +dim(res2$clim_obs), +c(dataset = 1) +) + +# method = 'NDV' +exp4 <- array(exp4, dim = c(dim(exp4), ftime = 1)) +obs4 <- array(obs4, dim = c(dim(obs4), ftime = 1)) +res1 <- Clim(exp4, obs4, memb = T, method = 'NDV') +res2 <- Clim(exp4, obs4, memb = F, method = 'NDV') +expect_equal( +dim(res1$clim_exp), +c(sdate = 5, dataset = 1, member = 3, ftime = 1) +) +expect_equal( +dim(res1$clim_obs), +c(dataset = 1, member = 1, ftime = 1) +) +expect_equal( +dim(res2$clim_exp), +c(sdate = 5, dataset = 1, ftime = 1) +) +expect_equal( +dim(res2$clim_obs), +c(dataset = 1, ftime = 1) +) }) @@ -352,6 +394,48 @@ as.vector(res2$clim_obs), tolerance = 0.0001 ) +# method = 'kharin' +res1 <- Clim(exp5, obs5, memb = T, dat_dim = 'member', method = 'kharin') +res2 <- Clim(exp5, obs5, memb = F, dat_dim = 'member', method = 'kharin') +expect_equal( +dim(res1$clim_exp), +c(sdate = 5, member = 3) +) +expect_equal( +dim(res1$clim_obs), +c(member = 1) +) +expect_equal( +dim(res2$clim_exp), +c(sdate = 5) +) +expect_equal( +dim(res2$clim_obs), +NULL +) + +# method = 'NDV' +exp5 <- array(exp5, dim = c(dim(exp5), ftime = 1)) +obs5 <- array(obs5, dim = c(dim(obs5), ftime = 1)) +res1 <- Clim(exp5, obs5, memb = T, dat_dim = 'member', method = 'NDV') +res2 <- Clim(exp5, obs5, memb = F, dat_dim = 'member', method = 'NDV') +expect_equal( +dim(res1$clim_exp), +c(sdate = 5, member = 3, ftime = 1) +) +expect_equal( +dim(res1$clim_obs), +c(member = 1, ftime = 1) +) +expect_equal( +dim(res2$clim_exp), +c(sdate = 5, ftime = 1) +) +expect_equal( +dim(res2$clim_obs), +c(ftime = 1) +) + }) ############################################## @@ -395,6 +479,48 @@ as.vector(res2$clim_obs), tolerance = 0.0001 ) +# method = 'kharin' +res1 <- Clim(exp6, obs6, memb = T, method = 'kharin') +res2 <- Clim(exp6, obs6, memb = F, method = 'kharin') +expect_equal( +dim(res1$clim_exp), +c(sdate = 5, dataset = 1, member = 3) +) +expect_equal( +dim(res1$clim_obs), +c(dataset = 1) +) +expect_equal( +dim(res2$clim_exp), +c(sdate = 5, dataset = 1) +) +expect_equal( +dim(res2$clim_obs), +c(dataset = 1) +) + +# method = 'NDV' +exp6 <- array(exp6, dim = c(dim(exp6), ftime = 1)) +obs6 <- array(obs6, dim = c(dim(obs6), ftime = 1)) +res1 <- Clim(exp6, obs6, memb = T, method = 'NDV') +res2 <- Clim(exp6, obs6, memb = F, method = 'NDV') +expect_equal( +dim(res1$clim_exp), +c(sdate = 5, dataset = 1, member = 3, ftime = 1) +) +expect_equal( +dim(res1$clim_obs), +c(dataset = 1, ftime = 1) +) +expect_equal( +dim(res2$clim_exp), +c(sdate = 5, dataset = 1, ftime = 1) +) +expect_equal( +dim(res2$clim_obs), +c(dataset = 1, ftime = 1) +) + }) ############################################## @@ -438,6 +564,49 @@ as.vector(res2$clim_obs), tolerance = 0.0001 ) +# method = 'kharin' +res1 <- Clim(exp7, obs7, memb = T, method = 'kharin') +res2 <- Clim(exp7, obs7, memb = F, method = 'kharin') +expect_equal( +dim(res1$clim_exp), +c(sdate = 5, dataset = 1, member = 3) +) +expect_equal( +dim(res1$clim_obs), +NULL +) +expect_equal( +dim(res2$clim_exp), +c(sdate = 5, dataset = 1) +) +expect_equal( +dim(res2$clim_obs), +NULL +) + +# method = 'NDV' +exp7 <- array(exp7, dim = c(dim(exp7), ftime = 1)) +obs7 <- array(obs7, dim = c(dim(obs7), ftime = 1)) +res1 <- Clim(exp7, obs7, memb = T, method = 'NDV') +res2 <- Clim(exp7, obs7, memb = F, method = 'NDV') +expect_equal( +dim(res1$clim_exp), +c(sdate = 5, dataset = 1, member = 3, ftime = 1) +) +expect_equal( +dim(res1$clim_obs), +c(ftime = 1) +) +expect_equal( +dim(res2$clim_exp), +c(sdate = 5, dataset = 1, ftime = 1) +) +expect_equal( +dim(res2$clim_obs), +c(ftime = 1) +) + + }) @@ -482,6 +651,48 @@ as.vector(res2$clim_obs), tolerance = 0.0001 ) +# method = 'kharin' +res1 <- Clim(exp8, obs8, dat_dim = 'member', memb = T, method = 'kharin') +res2 <- Clim(exp8, obs8, dat_dim = 'member', memb = F, method = 'kharin') +expect_equal( +dim(res1$clim_exp), +c(sdate = 5, member = 3) +) +expect_equal( +dim(res1$clim_obs), +NULL +) +expect_equal( +dim(res2$clim_exp), +c(sdate = 5) +) +expect_equal( +dim(res2$clim_obs), +NULL +) + +# method = 'NDV' +exp8 <- array(exp8, dim = c(dim(exp8), ftime = 1)) +obs8 <- array(obs8, dim = c(dim(obs8), ftime = 1)) +res1 <- Clim(exp8, obs8, dat_dim = 'member', memb = T, method = 'NDV') +res2 <- Clim(exp8, obs8, dat_dim = 'member', memb = F, method = 'NDV') +expect_equal( +dim(res1$clim_exp), +c(sdate = 5, member = 3, ftime = 1) +) +expect_equal( +dim(res1$clim_obs), +c(ftime = 1) +) +expect_equal( +dim(res2$clim_exp), +c(sdate = 5, ftime = 1) +) +expect_equal( +dim(res2$clim_obs), +c(ftime = 1) +) + }) ############################################## @@ -525,6 +736,49 @@ as.vector(res2$clim_obs), tolerance = 0.0001 ) +# method = 'kharin' +res1 <- Clim(exp9, obs9, dat_dim = NULL, memb = T, method = 'kharin') +res2 <- Clim(exp9, obs9, dat_dim = NULL, memb_dim = NULL, memb = F, method = 'kharin') +expect_equal( +dim(res1$clim_exp), +c(sdate = 5) +) +expect_equal( +dim(res1$clim_obs), +NULL +) +expect_equal( +dim(res2$clim_exp), +c(sdate = 5) +) +expect_equal( +dim(res2$clim_obs), +NULL +) + +# method = 'NDV' +exp9 <- array(exp9, dim = c(dim(exp9), ftime = 1)) +obs9 <- array(obs9, dim = c(dim(obs9), ftime = 1)) +res1 <- Clim(exp9, obs9, dat_dim = NULL, memb = T, method = 'NDV') +res2 <- Clim(exp9, obs9, dat_dim = NULL, memb_dim = NULL, memb = F, method = 'NDV') +expect_equal( +dim(res1$clim_exp), +c(sdate = 5, ftime = 1) +) +expect_equal( +dim(res1$clim_obs), +c(ftime = 1) +) +expect_equal( +dim(res2$clim_exp), +c(sdate = 5, ftime = 1) +) +expect_equal( +dim(res2$clim_obs), +c(ftime = 1) +) + + }) ############################################## -- GitLab From 610ec5ffe5b7e16389bd7444cab88aa5ddcc9f63 Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 3 May 2022 19:25:11 +0200 Subject: [PATCH 45/83] Improve efficiency --- R/Clim.R | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/R/Clim.R b/R/Clim.R index 1093c99..d4773d5 100644 --- a/R/Clim.R +++ b/R/Clim.R @@ -190,21 +190,26 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), #---------------------------------- # Per-pair: Remove all sdate if not complete along dat_dim if (!is.null(dat_dim)) { - pos <- rep(0, length(dat_dim)) - for (i in 1:length(dat_dim)) { #[dat, sdate] - ## dat_dim: [dataset, member] - pos[i] <- which(names(dim(obs)) == dat_dim[i]) + pos <- which(names(dim(obs)) %in% dat_dim) + + na_array <- array(0, dim = dim(exp)[-pos]) + dat_dim_comb <- plyr::alply(expand.grid(lapply(dim(exp)[dat_dim], seq, 1)), 1) + for (i_dat in 1:length(dat_dim_comb)) { + na_array <- na_array + is.na(Subset(exp, dat_dim, dat_dim_comb[[i_dat]], drop = 'selected')) + } + dat_dim_comb <- plyr::alply(expand.grid(lapply(dim(obs)[dat_dim], seq, 1)), 1) + for (i_dat in 1:length(dat_dim_comb)) { + na_array <- na_array + is.na(Subset(obs, dat_dim, dat_dim_comb[[i_dat]], drop = 'selected')) } - outrows_exp <- MeanDims(exp, pos, na.rm = FALSE) + - MeanDims(obs, pos, na.rm = FALSE) - outrows_obs <- outrows_exp + na_array_2 <- na_array for (i in 1:length(pos)) { - outrows_exp <- InsertDim(outrows_exp, pos[i], dim(exp)[pos[i]]) - outrows_obs <- InsertDim(outrows_obs, pos[i], dim(obs)[pos[i]]) + na_array <- InsertDim(na_array, pos[i], dim(exp)[pos[i]]) + na_array_2 <- InsertDim(na_array_2, pos[i], dim(obs)[pos[i]]) } - exp[which(is.na(outrows_exp))] <- NA - obs[which(is.na(outrows_obs))] <- NA + exp[which(na_array != 0)] <- NA + obs[which(na_array_2 != 0)] <- NA + } #----------------------------------- @@ -277,18 +282,17 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), ## ensemble mean if (!memb) { - if (length(dim(clim_exp)) == 1 | is.null(dim(clim_exp))) { #dim: [member] + if (length(dim(clim_exp)) == 1) { #dim: [member] clim_exp <- mean(clim_exp, na.rm = TRUE) clim_obs <- mean(clim_obs, na.rm = TRUE) } else { - pos <- which(names(dim(clim_exp)) == memb_dim) - pos <- c(1:length(dim(clim_exp)))[-pos] dim_name <- names(dim(clim_exp)) + pos <- c(1:length(dim(clim_exp)))[-which(dim_name == memb_dim)] clim_exp <- apply(clim_exp, pos, mean, na.rm = TRUE) clim_obs <- apply(clim_obs, pos, mean, na.rm = TRUE) - if (is.null(names(dim(as.array(clim_exp))))) { - clim_exp <- as.array(clim_exp) - clim_obs <- as.array(clim_obs) + if (is.null(dim(clim_exp))) { + dim(clim_exp) <- length(clim_exp) + dim(clim_obs) <- length(clim_obs) names(dim(clim_exp)) <- dim_name[pos] names(dim(clim_obs)) <- dim_name[pos] } @@ -317,11 +321,11 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), # exp clim ##--- NEW trend ---## - tmp_obs <- Trend(data = obs, time_dim = time_dim, interval = 1, - polydeg = 1, conf = FALSE, ncores = ncores_input)$trend + tmp_obs <- Trend(data = obs, time_dim = time_dim, interval = 1, + polydeg = 1, conf = FALSE, ncores = ncores_input)$trend tmp_exp <- Trend(data = exp, time_dim = time_dim, interval = 1, polydeg = 1, conf = FALSE, ncores = ncores_input)$trend - # tmp_exp: [stats, dat_dim)] + # tmp_exp: [stats, dat_dim] tmp_obs_mean <- apply(tmp_obs, 1, mean) #average out dat_dim (dat and member) #tmp_obs_mean: [stats = 2] if (!is.null(dat_dim)) { -- GitLab From ad25390670387abe807b4b64e3c9ac6c90f91a76 Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 6 May 2022 11:33:52 +0200 Subject: [PATCH 46/83] Improve efficiency of MeanDims by substituting apply(, mean) with colMeans() --- R/Clim.R | 28 ++++++++++++---------------- R/MeanDims.R | 4 ++-- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/R/Clim.R b/R/Clim.R index d4773d5..ce9ba2e 100644 --- a/R/Clim.R +++ b/R/Clim.R @@ -190,27 +190,23 @@ Clim <- function(exp, obs, time_dim = 'sdate', dat_dim = c('dataset', 'member'), #---------------------------------- # Per-pair: Remove all sdate if not complete along dat_dim if (!is.null(dat_dim)) { - pos <- which(names(dim(obs)) %in% dat_dim) - - na_array <- array(0, dim = dim(exp)[-pos]) - dat_dim_comb <- plyr::alply(expand.grid(lapply(dim(exp)[dat_dim], seq, 1)), 1) - for (i_dat in 1:length(dat_dim_comb)) { - na_array <- na_array + is.na(Subset(exp, dat_dim, dat_dim_comb[[i_dat]], drop = 'selected')) - } - dat_dim_comb <- plyr::alply(expand.grid(lapply(dim(obs)[dat_dim], seq, 1)), 1) - for (i_dat in 1:length(dat_dim_comb)) { - na_array <- na_array + is.na(Subset(obs, dat_dim, dat_dim_comb[[i_dat]], drop = 'selected')) + pos <- rep(0, length(dat_dim)) + for (i in 1:length(dat_dim)) { #[dat, sdate] + ## dat_dim: [dataset, member] + pos[i] <- which(names(dim(obs)) == dat_dim[i]) } + outrows_exp <- MeanDims(exp, pos, na.rm = FALSE) + + MeanDims(obs, pos, na.rm = FALSE) + outrows_obs <- outrows_exp - na_array_2 <- na_array for (i in 1:length(pos)) { - na_array <- InsertDim(na_array, pos[i], dim(exp)[pos[i]]) - na_array_2 <- InsertDim(na_array_2, pos[i], dim(obs)[pos[i]]) + outrows_exp <- InsertDim(outrows_exp, pos[i], dim(exp)[pos[i]]) + outrows_obs <- InsertDim(outrows_obs, pos[i], dim(obs)[pos[i]]) } - exp[which(na_array != 0)] <- NA - obs[which(na_array_2 != 0)] <- NA - + exp[which(is.na(outrows_exp))] <- NA + obs[which(is.na(outrows_obs))] <- NA } + #----------------------------------- if (method == 'clim') { diff --git a/R/MeanDims.R b/R/MeanDims.R index 9e5dd49..0684895 100644 --- a/R/MeanDims.R +++ b/R/MeanDims.R @@ -79,8 +79,8 @@ MeanDims <- function(data, dims, na.rm = FALSE, drop = TRUE) { if (is.character(dims)) { dims <- which(names(dim_data) %in% dims) } - pos <- (1:length(dim_data))[-dims] - data <- apply(data, pos, mean, na.rm = na.rm) + data <- aperm(data, c(dims, (1:length(dim_data))[-dims])) + data <- colMeans(data, dims = length(dims), na.rm = na.rm) # If data is vector if (is.null(dim(data))) { -- GitLab From 27b1f498bc42393c3b8f6a30c94f6e7f83fd638c Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 6 May 2022 16:01:59 +0200 Subject: [PATCH 47/83] If output is a number and drop = T, return a number instead of an array --- R/MeanDims.R | 9 +++++---- man/MeanDims.Rd | 7 ++++--- tests/testthat/test-MeanDims.R | 14 +++++++++++++- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/R/MeanDims.R b/R/MeanDims.R index 0684895..56a304d 100644 --- a/R/MeanDims.R +++ b/R/MeanDims.R @@ -10,9 +10,10 @@ #' not (FALSE). #'@param drop A logical value indicating whether to keep the averaged #' dimension (FALSE) or drop it (TRUE). The default value is TRUE. -#'@return An array with the same dimension as parameter 'data' except the -#' 'dims' dimensions. If 'drop' is TRUE, 'dims' will be removed; if 'drop' is -#' FALSE, 'dims' will be preserved and the length will be 1. +#'@return A numeric or an array with the same dimension as parameter 'data' +#' except the 'dims' dimensions. If 'drop' is TRUE, 'dims' will be removed; if +#' 'drop' is FALSE, 'dims' will be preserved and the length will be 1. If all +#' the dimensions are averaged out, a numeric is returned. #' #'@examples #'a <- array(rnorm(24), dim = c(dat = 2, member = 3, time = 4)) @@ -69,7 +70,7 @@ MeanDims <- function(data, dims, na.rm = FALSE, drop = TRUE) { if (length(dims) == length(dim_data)) { if (drop) { - data <- as.array(mean(data, na.rm = na.rm)) + data <- mean(data, na.rm = na.rm) } else { data <- array(mean(data, na.rm = na.rm), dim = rep(1, length(dim_data))) diff --git a/man/MeanDims.Rd b/man/MeanDims.Rd index 721866b..94369da 100644 --- a/man/MeanDims.Rd +++ b/man/MeanDims.Rd @@ -19,9 +19,10 @@ not (FALSE).} dimension (FALSE) or drop it (TRUE). The default value is TRUE.} } \value{ -An array with the same dimension as parameter 'data' except the - 'dims' dimensions. If 'drop' is TRUE, 'dims' will be removed; if 'drop' is - FALSE, 'dims' will be preserved and the length will be 1. +A numeric or an array with the same dimension as parameter 'data' + except the 'dims' dimensions. If 'drop' is TRUE, 'dims' will be removed; if +'drop' is FALSE, 'dims' will be preserved and the length will be 1. If all + the dimensions are averaged out, a numeric is returned. } \description{ This function returns the mean of an array along a set of dimensions and diff --git a/tests/testthat/test-MeanDims.R b/tests/testthat/test-MeanDims.R index a431b99..c043c78 100644 --- a/tests/testthat/test-MeanDims.R +++ b/tests/testthat/test-MeanDims.R @@ -78,6 +78,14 @@ test_that("2. Output checks: dat1", { dim(MeanDims(dat1, dims = c('sdate', 'ftime'))), c(dat = 1) ) + expect_equal( + dim(MeanDims(dat1, dims = c('sdate', 'ftime', 'dat'))), + NULL + ) + expect_equal( + dim(MeanDims(dat1, dims = 1:3)), + NULL + ) expect_equal( MeanDims(dat1, dims = c('sdate'))[1:2], c(3, 8) @@ -96,7 +104,7 @@ test_that("2. Output checks: dat1", { ) expect_equal( dim(MeanDims(dat1, dims = 1:3, drop = T)), - 1 + NULL ) expect_equal( as.vector(drop(MeanDims(dat1, dims = 1:3, drop = F))), @@ -153,6 +161,10 @@ test_that("5. Output checks: dat4", { dim(MeanDims(dat4, dims = 1, drop = F)), 1 ) + expect_equal( + dim(MeanDims(dat4, dims = 1, drop = T)), + NULL + ) }) ############################################## -- GitLab From 006b41b4f557a461d359645754bcd4a4a076eb82 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 11 May 2022 11:38:23 +0200 Subject: [PATCH 48/83] Add time metadata to avoid cdo warning --- R/CDORemap.R | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/R/CDORemap.R b/R/CDORemap.R index 56dcec7..6a9a7e5 100644 --- a/R/CDORemap.R +++ b/R/CDORemap.R @@ -697,6 +697,8 @@ CDORemap <- function(data_array = NULL, lons, lats, grid, method, if (!is.null(unlimited_dim)) { # This will make ArrayToNc create this dim as unlimited. names(dim(data_array))[unlimited_dim] <- 'time' + # create time variable. The value is random since CDORemap() doesn't support time remapping now and we just want to avoid cdo warning + time_attr <- array(c(1:dim(data_array)[unlimited_dim]), dim = c(dim(data_array)[unlimited_dim])) } if (length(dim(lons)) == 1) { names(dim(lons)) <- lon_dim @@ -758,7 +760,11 @@ CDORemap <- function(data_array = NULL, lons, lats, grid, method, } # dims_before_crop <- dim(subset) # Make sure subset goes along with metadata - easyNCDF::ArrayToNc(setNames(list(subset, lons, lats), c('var', lon_var_name, lat_var_name)), tmp_file) + if (is.null(unlimited_dim)) { + easyNCDF::ArrayToNc(setNames(list(subset, lons, lats), c('var', lon_var_name, lat_var_name)), tmp_file) + } else { + easyNCDF::ArrayToNc(setNames(list(subset, lons, lats, time_attr), c('var', lon_var_name, lat_var_name, 'time')), tmp_file) + } } else { if (is_irregular) { pos_lon <- which(names(dim(data_array)) == lon_dim) @@ -774,7 +780,11 @@ CDORemap <- function(data_array = NULL, lons, lats, grid, method, } } # dims_before_crop <- dim(data_array) - easyNCDF::ArrayToNc(setNames(list(data_array, lons, lats), c('var', lon_var_name, lat_var_name)), tmp_file) + if (is.null(unlimited_dim)) { + easyNCDF::ArrayToNc(setNames(list(data_array, lons, lats), c('var', lon_var_name, lat_var_name)), tmp_file) + } else { + easyNCDF::ArrayToNc(setNames(list(data_array, lons, lats, time_attr), c('var', lon_var_name, lat_var_name, 'time')), tmp_file) + } } sellonlatbox <- '' if (crop) { @@ -787,7 +797,7 @@ CDORemap <- function(data_array = NULL, lons, lats, grid, method, system(paste0("cdo -s ", sellonlatbox, "remap", method, ",", grid, " ", tmp_file, " ", tmp_file2)) }) file.remove(tmp_file) - if (('try-error' %in% class(err)) || err > 0) { + if (is(err, 'try-error') || err > 0) { stop("CDO remap failed.") } ncdf_remapped <- nc_open(tmp_file2) -- GitLab From e2990e4edddf003d258901a91e0cf77e6c269080 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 11 May 2022 17:56:08 +0200 Subject: [PATCH 49/83] Formatting and combine small functions --- R/RPS.R | 172 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 96 insertions(+), 76 deletions(-) diff --git a/R/RPS.R b/R/RPS.R index b28791e..886ecec 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -1,45 +1,60 @@ #'Compute the Ranked Probability Score #' -#'The Ranked Probability Score (RPS; Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7) is defined -#'as the sum of the squared differences between the cumulative forecast probabilities (computed from the ensemble -#'members) and the observations (defined as 0% if the category did not happen and 100% if it happened). It can be -#'used to evaluate the skill of multi-categorical probabilistic forecasts. The RPS ranges between 0 (perfect -#'forecast) and n-1 (worst possible forecast), where n is the number of categories. In the case of a forecast -#'divided into two categories (the lowest number of categories that a probabilistic forecast can have), the -#'RPS corresponds to the Brier Score (BS; Wilks, 2011) and, therefore, ranges between 0 and 1. +#'The Ranked Probability Score (RPS; Wilks, 2011) is defined as the sum of the +#'squared differences between the cumulative forecast probabilities (computed +#'from the ensemble members) and the observations (defined as 0% if the category +#'did not happen and 100% if it happened). It can be used to evaluate the skill +#'of multi-categorical probabilistic forecasts. The RPS ranges between 0 +#'(perfect forecast) and n-1 (worst possible forecast), where n is the number of +#'categories. In the case of a forecast divided into two categories (the lowest +#'number of categories that a probabilistic forecast can have), the RPS +#'corresponds to the Brier Score (BS; Wilks, 2011), therefore, ranges between 0 +#'and 1. #' -#'@param exp A numerical array with the forecast with, at least, time dimension. -#'@param obs A numerical array with the observations with, at least, time dimension. -#' The length of the time dimension must be the same as for "exp". -#'@param prob_thresholds A numeric vector with the relative thresholds (from 0 to 1) between the categories. -#' The default value is c(1/3,2/3), which corresponds to tercile equiprobable categories. -#'@param indices_for_clim A vector with the indices to be taken along "time_dim" dimension for computing the thresholds -#' between the probabilistic categories. If NULL, the whole period is used. The default value is NULL. -#'@param Fair A logical indicating whether to compute the FairRPSS (the potential RPSS that the forecast would have with -#'an infinite ensemble size). The default value is FALSE. +#'@param exp A named numerical array of the forecast with at least time +#' dimension. +#'@param obs A named numerical array of the observation with at least time +#' dimension. The dimensions must be the same as 'exp' expect 'memb_dim'. #'@param time_dim A character string indicating the name of the time dimension. -#' The default value is 'year'. -#'@param member_dim A character string indicating the name of the member dimension to compute the -#' ensemble means of the forecast and reference forecast. If it is NULL, the ensemble means should -#' be provided directly to the function. The default value is 'member'. +#' The default value is 'sdate'. +#'@param memb_dim A character string indicating the name of the member dimension +#' to compute the ensemble mean of the forecast. If it is NULL, the ensemble +#' mean should be provided directly to the function. The default value is NULL. +#'@param prob_thresholds A numeric vector of the relative thresholds (from 0 to +#' 1) between the categories. The default value is c(1/3, 2/3), which +#' corresponds to tercile equiprobable categories. +#'@param indices_for_clim A vector of the indices to be taken along "time_dim" +#' for computing the thresholds between the probabilistic categories. If NULL, +#' the whole period is used. The default value is NULL. +#'@param Fair A logical indicating whether to compute the FairRPSS (the +#' potential RPSS that the forecast would have with an infinite ensemble size). +#' The default value is FALSE. #'@param ncores An integer indicating the number of cores to use for parallel #' computation. The default value is NULL. #' #'@return -#' A numerical array with the RPS with the same dimensions as "exp" except the "time_dim" and "member_dim" dimensions. +#'A numerical array of RPS with the same dimensions as "exp" except the +#'"time_dim" and "memb_dim" dimensions. +#' +#'@references +#'Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7 #' #'@examples -#' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) -#' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, year = 50)) -#' RPS(exp = exp, obs = obs) +#' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +#' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) +#' res <- RPS(exp = exp, obs = obs, memb_dim = 'member') #' #'@import multiApply #'@importFrom ClimProjDiags Subset #'@importFrom easyVerification convert2prob #'@export -RPS <- function(exp, obs, prob_thresholds = c(1/3,2/3), indices_for_clim = NULL, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ +RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = NULL, + prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, + ncores = NULL) { - ## Checkings + # Check inputs + ## exp and obs (1) + if (!is.array(exp)){stop('"exp" must be an array.')} if (!is.array(obs)){stop('"obs" must be an array.')} if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} @@ -53,81 +68,86 @@ RPS <- function(exp, obs, prob_thresholds = c(1/3,2/3), indices_for_clim = NULL, } if (!is.logical(Fair)){stop('"Fair" must be TRUE or FALSE.')} if (!is.character(time_dim)){stop('"time_dim" must be a string.')} - if (!is.character(member_dim)){stop('"member_dim" must be a string.')} + if (!is.character(memb_dim)){stop('"memb_dim" must be a string.')} if (!is.null(ncores)){ if (!is.numeric(ncores) | ncores < 1){stop('"ncores" must be either NULL or a positive integer.')} } ## RPS - rps <- multiApply::Apply(data = list(exp = exp, obs = obs), - target_dims = list(exp = c(time_dim, member_dim), obs = time_dim), - prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, - Fair = Fair, time_dim = time_dim, member_dim = member_dim, - fun = .RPS, ncores = ncores)$output1 - - ## Returning only the mean RPS - rps <- multiApply::Apply(data = rps, target_dims = time_dim, fun = mean, na.rm = FALSE, ncores = ncores)$output1 + rps <- Apply(data = list(exp = exp, obs = obs), + target_dims = list(exp = c(time_dim, memb_dim), obs = time_dim), + fun = .RPS, + prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, + Fair = Fair, + ncores = ncores)$output1 return(rps) } -.RPS <- function(exp, obs, prob_thresholds, indices_for_clim, Fair, time_dim, member_dim){ - - exp_probs <- .get_probs(data = exp, type = 'exp', indices_for_quantiles = indices_for_clim, - time_dim = time_dim, member_dim = member_dim, prob_thresholds = prob_thresholds) - - obs_probs <- .get_probs(data = obs, type = 'obs', indices_for_quantiles = indices_for_clim, - time_dim = time_dim, member_dim = NULL, prob_thresholds = prob_thresholds) - + +.RPS <- function(exp, obs, prob_thresholds, indices_for_clim, Fair) { + # exp: [sdate, memb] + # obs: [sdate] + + exp_probs <- .get_probs(data = exp, indices_for_quantiles = indices_for_clim, + prob_thresholds = prob_thresholds) + # exp_probs: [bin, sdate] + obs_probs <- .get_probs(data = obs, indices_for_quantiles = indices_for_clim, + prob_thresholds = prob_thresholds) + # obs_probs: [bin, sdate] + ## RPS for each time step - rps <- multiApply::Apply(data = list(probs_exp = exp_probs, probs_obs = obs_probs), target_dims = 'bin', - fun = .RPS_from_probs, n_categories = length(prob_thresholds)+1, Fair = Fair, - n_members = as.numeric(dim(exp)[member_dim]), ncores = NULL)$output1 + rps <- Apply(data = list(probs_exp = exp_probs, probs_obs = obs_probs), target_dims = 'bin', + fun = .RPS_from_probs, Fair = Fair, + n_members = dim(exp)[2], ncores = NULL)$output1 + # rps: [sdate] + + # Return only the mean RPS + rps <- mean(rps, na.rm = FALSE) + return(rps) } -.get_probs <- function(data, type, indices_for_quantiles, time_dim, member_dim, prob_thresholds){ - - if (type == 'exp'){ - target_dims = member_dim - } else if (type == 'obs'){ - target_dims = NULL - } else {stop("Parameter 'type' must be 'exp' or 'obs'")} - - quantiles <- quantile(x = as.vector(data), probs = prob_thresholds, type = 8, na.rm = TRUE) ## Absolute thresholds - - probs <- multiApply::Apply(data = data, target_dims = target_dims, fun = .c2p, output_dims = 'bin', - quantiles = quantiles, ncores = NULL)$output1 ## Probabilities - return(probs) -} -.c2p <- function(data, quantiles) { - if (anyNA(data)){ - output <- array(data = NA, dim = length(quantiles) + 1) - } else { - output <- colMeans(easyVerification::convert2prob(as.vector(data), threshold = as.vector(quantiles))) +.get_probs <- function(data, indices_for_quantiles, prob_thresholds) { + # if exp: [sdate, memb] + # if obs: [sdate] + if (length(dim(data)) == 1) dim(data) <- c(dim(data), 1) + + # Absolute thresholds + quantiles <- quantile(x = as.vector(data), probs = prob_thresholds, type = 8, na.rm = TRUE) + + # Probabilities + probs <- array(dim = c(bin = length(quantiles) + 1, dim(data)[1])) # [bin, sdate] + for (i_time in 1:dim(data)[1]) { + if (anyNA(data[i_time, ])) { + probs[, i_time] <- rep(NA, dim = length(quantiles) + 1) + } else { + probs[, i_time] <- colMeans(easyVerification::convert2prob(data[i_time, ], threshold = quantiles)) + } } - return(output) + + return(probs) } -.RPS_from_probs <- function(probs_exp, probs_obs, n_categories, Fair, n_members){ - - rps <- NULL - for (i in 1:n_categories){ - rps[i] <- (cumsum(probs_exp)[i]-cumsum(probs_obs)[i])^2 ## (Wilks 2011, pp.348-350) - } - rps <- sum(rps) - - if (Fair == TRUE){ ## FairRPS +.RPS_from_probs <- function(probs_exp, probs_obs, Fair, n_members) { + # probs_exp: [bin] + # probs_obs: [bin] + + rps <- sum((cumsum(probs_exp) - cumsum(probs_obs))^2) + + if (Fair) { # FairRPS ## adjustment <- rowSums(-1 * (1/R - 1/R.new) * ens.cum * (R - ens.cum)/R/(R - 1)) [formula taken from SpecsVerification::EnsRps] R <- n_members R_new <- Inf probs_cum <- cumsum(probs_exp) - adjustment <- -1 / (R-1) * probs_cum * (1 - probs_cum) + adjustment <- -1 / (R - 1) * probs_cum * (1 - probs_cum) adjustment <- sum(adjustment) rps <- rps + adjustment } return(rps) } + + -- GitLab From 1379da555e2fc3c112d4e649aab5e5ae8e146b86 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 12 May 2022 14:49:15 +0200 Subject: [PATCH 50/83] Improve RPS() efficiency and correct the uusage of indices_for_clim; unit test created --- NAMESPACE | 3 + R/RPS.R | 149 +++++++++++++++++++++++--------------- man/RPS.Rd | 70 ++++++++++++++++++ man/RPSS.Rd | 75 +++++++++++++++++++ man/RandomWalkTest.Rd | 4 +- tests/testthat/test-RPS.R | 129 +++++++++++++++++++++++++++++++++ 6 files changed, 368 insertions(+), 62 deletions(-) create mode 100644 man/RPS.Rd create mode 100644 man/RPSS.Rd create mode 100644 tests/testthat/test-RPS.R diff --git a/NAMESPACE b/NAMESPACE index 841814e..1449ad4 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -54,6 +54,8 @@ export(ProjectField) export(REOF) export(RMS) export(RMSSS) +export(RPS) +export(RPSS) export(RandomWalkTest) export(RatioPredictableComponents) export(RatioRMS) @@ -92,6 +94,7 @@ importFrom(ClimProjDiags,WeightedMean) importFrom(abind,abind) importFrom(abind,adrop) importFrom(easyNCDF,ArrayToNc) +importFrom(easyVerification,convert2prob) importFrom(grDevices,bmp) importFrom(grDevices,col2rgb) importFrom(grDevices,colorRampPalette) diff --git a/R/RPS.R b/R/RPS.R index 886ecec..744b9c7 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -14,16 +14,15 @@ #'@param exp A named numerical array of the forecast with at least time #' dimension. #'@param obs A named numerical array of the observation with at least time -#' dimension. The dimensions must be the same as 'exp' expect 'memb_dim'. +#' dimension. The dimensions must be the same as 'exp' except 'memb_dim'. #'@param time_dim A character string indicating the name of the time dimension. #' The default value is 'sdate'. #'@param memb_dim A character string indicating the name of the member dimension -#' to compute the ensemble mean of the forecast. If it is NULL, the ensemble -#' mean should be provided directly to the function. The default value is NULL. +#' to compute the probabilities of the forecast. The default value is 'member'. #'@param prob_thresholds A numeric vector of the relative thresholds (from 0 to #' 1) between the categories. The default value is c(1/3, 2/3), which #' corresponds to tercile equiprobable categories. -#'@param indices_for_clim A vector of the indices to be taken along "time_dim" +#'@param indices_for_clim A vector of the indices to be taken along 'time_dim' #' for computing the thresholds between the probabilistic categories. If NULL, #' the whole period is used. The default value is NULL. #'@param Fair A logical indicating whether to compute the FairRPSS (the @@ -34,51 +33,93 @@ #' #'@return #'A numerical array of RPS with the same dimensions as "exp" except the -#'"time_dim" and "memb_dim" dimensions. +#''time_dim' and 'memb_dim' dimensions. #' #'@references #'Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7 #' #'@examples -#' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) -#' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) -#' res <- RPS(exp = exp, obs = obs, memb_dim = 'member') +#'exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +#'obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) +#'res <- RPS(exp = exp, obs = obs) #' #'@import multiApply -#'@importFrom ClimProjDiags Subset #'@importFrom easyVerification convert2prob #'@export -RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = NULL, +RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, ncores = NULL) { # Check inputs ## exp and obs (1) - - if (!is.array(exp)){stop('"exp" must be an array.')} - if (!is.array(obs)){stop('"obs" must be an array.')} - if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} - if (!is.numeric(prob_thresholds) | !is.vector(prob_thresholds) | any(prob_thresholds <= 0) | any(prob_thresholds >= 1)){ - stop('"prob_thresholds" must be a numeric vector with the relative thresholds (from 0 to 1) between the categories.') + if (!is.array(exp) | !is.numeric(exp)) + stop('Parameter "exp" must be a numeric array.') + if (!is.array(obs) | !is.numeric(obs)) + stop('Parameter "obs" must be a numeric array.') + if(any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | + any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { + stop("Parameter 'exp' and 'obs' must have dimension names.") } - if (is.null(indices_for_clim)){ - indices_for_clim <- 1:as.numeric(dim(obs)[time_dim]) - } else if (!is.numeric(indices_for_clim)){ - stop('"indices_for_clim" must be NULL or a numeric vector.') + ## time_dim + if (!is.character(time_dim) | length(time_dim) != 1) + stop('Parameter "time_dim" must be a character string.') + if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs))) { + stop("Parameter 'time_dim' is not found in 'exp' or 'obs' dimension.") } - if (!is.logical(Fair)){stop('"Fair" must be TRUE or FALSE.')} - if (!is.character(time_dim)){stop('"time_dim" must be a string.')} - if (!is.character(memb_dim)){stop('"memb_dim" must be a string.')} - if (!is.null(ncores)){ - if (!is.numeric(ncores) | ncores < 1){stop('"ncores" must be either NULL or a positive integer.')} + ## memb_dim + if (!is.character(memb_dim) | length(memb_dim) > 1) { + stop("Parameter 'memb_dim' must be a character string.") } - - ## RPS + if (!memb_dim %in% names(dim(exp))) { + stop("Parameter 'memb_dim' is not found in 'exp' dimension.") + } + ## exp and obs (2) + name_exp <- sort(names(dim(exp))) + name_obs <- sort(names(dim(obs))) + name_exp <- name_exp[-which(name_exp == memb_dim)] + if (!identical(length(name_exp), length(name_obs)) | + !identical(dim(exp)[name_exp], dim(obs)[name_obs])) { + stop(paste0("Parameter 'exp' and 'obs' must have same length of ", + "all dimensions expect 'memb_dim'.")) + } + ## prob_thresholds + if (!is.numeric(prob_thresholds) | !is.vector(prob_thresholds) | + any(prob_thresholds <= 0) | any(prob_thresholds >= 1)) { + stop("Parameter 'prob_thresholds' must be a numeric vector between 0 and 1.") + } + ## indices_for_clim + if (is.null(indices_for_clim)) { + indices_for_clim <- 1:dim(obs)[time_dim] + } else { + if (!is.numeric(indices_for_clim) | !is.vector(indices_for_clim)) { + stop("Parameter 'indices_for_clim' must be NULL or a numeric vector.") + } else if (length(indices_for_clim) > dim(obs)[time_dim] | + max(indices_for_clim) > dim(obs)[time_dim] | + any(indices_for_clim) < 1) { + stop("Parameter 'indices_for_clim' should be the indices of 'time_dim'.") + } + } + ## Fair + if (!is.logical(Fair) | length(Fair) > 1) { + stop("Parameter 'Fair' must be either TRUE or FALSE.") + } + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | + length(ncores) > 1) { + stop("Parameter 'ncores' must be either NULL or a positive integer.") + } + } + + ############################### + + # Compute RPS rps <- Apply(data = list(exp = exp, obs = obs), - target_dims = list(exp = c(time_dim, memb_dim), obs = time_dim), + target_dims = list(exp = c(time_dim, memb_dim), + obs = time_dim), fun = .RPS, - prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, - Fair = Fair, + prob_thresholds = prob_thresholds, + indices_for_clim = indices_for_clim, Fair = Fair, ncores = ncores)$output1 return(rps) @@ -95,59 +136,47 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = NULL, obs_probs <- .get_probs(data = obs, indices_for_quantiles = indices_for_clim, prob_thresholds = prob_thresholds) # obs_probs: [bin, sdate] - - ## RPS for each time step - rps <- Apply(data = list(probs_exp = exp_probs, probs_obs = obs_probs), target_dims = 'bin', - fun = .RPS_from_probs, Fair = Fair, - n_members = dim(exp)[2], ncores = NULL)$output1 + + probs_exp_cumsum <- apply(exp_probs, 2, cumsum) + probs_obs_cumsum <- apply(obs_probs, 2, cumsum) + rps <- apply((probs_exp_cumsum - probs_obs_cumsum)^2, 2, sum) # rps: [sdate] + if (Fair) { # FairRPS + ## adjustment <- rowSums(-1 * (1/R - 1/R.new) * ens.cum * (R - ens.cum)/R/(R - 1)) [formula taken from SpecsVerification::EnsRps] + R <- dim(exp)[2] #memb + R_new <- Inf + adjustment <- (-1) / (R - 1) * probs_exp_cumsum * (1 - probs_exp_cumsum) + adjustment <- apply(adjustment, 2, sum) + rps <- rps + adjustment + } + # Return only the mean RPS rps <- mean(rps, na.rm = FALSE) return(rps) } - .get_probs <- function(data, indices_for_quantiles, prob_thresholds) { # if exp: [sdate, memb] # if obs: [sdate] + + # Add dim [memb = 1] to obs if (length(dim(data)) == 1) dim(data) <- c(dim(data), 1) # Absolute thresholds - quantiles <- quantile(x = as.vector(data), probs = prob_thresholds, type = 8, na.rm = TRUE) + quantiles <- quantile(x = as.vector(data[indices_for_quantiles, ]), probs = prob_thresholds, type = 8, na.rm = TRUE) # Probabilities probs <- array(dim = c(bin = length(quantiles) + 1, dim(data)[1])) # [bin, sdate] for (i_time in 1:dim(data)[1]) { if (anyNA(data[i_time, ])) { - probs[, i_time] <- rep(NA, dim = length(quantiles) + 1) + probs[, i_time] <- rep(NA, dim = length(quantiles) + 1) } else { - probs[, i_time] <- colMeans(easyVerification::convert2prob(data[i_time, ], threshold = quantiles)) + probs[, i_time] <- colMeans(easyVerification::convert2prob(data[i_time, ], threshold = quantiles)) } } return(probs) } - -.RPS_from_probs <- function(probs_exp, probs_obs, Fair, n_members) { - # probs_exp: [bin] - # probs_obs: [bin] - - rps <- sum((cumsum(probs_exp) - cumsum(probs_obs))^2) - - if (Fair) { # FairRPS - ## adjustment <- rowSums(-1 * (1/R - 1/R.new) * ens.cum * (R - ens.cum)/R/(R - 1)) [formula taken from SpecsVerification::EnsRps] - R <- n_members - R_new <- Inf - probs_cum <- cumsum(probs_exp) - adjustment <- -1 / (R - 1) * probs_cum * (1 - probs_cum) - adjustment <- sum(adjustment) - rps <- rps + adjustment - } - - return(rps) -} - - diff --git a/man/RPS.Rd b/man/RPS.Rd new file mode 100644 index 0000000..d1acc02 --- /dev/null +++ b/man/RPS.Rd @@ -0,0 +1,70 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/RPS.R +\name{RPS} +\alias{RPS} +\title{Compute the Ranked Probability Score} +\usage{ +RPS( + exp, + obs, + time_dim = "sdate", + memb_dim = "member", + prob_thresholds = c(1/3, 2/3), + indices_for_clim = NULL, + Fair = FALSE, + ncores = NULL +) +} +\arguments{ +\item{exp}{A named numerical array of the forecast with at least time +dimension.} + +\item{obs}{A named numerical array of the observation with at least time +dimension. The dimensions must be the same as 'exp' except 'memb_dim'.} + +\item{time_dim}{A character string indicating the name of the time dimension. +The default value is 'sdate'.} + +\item{memb_dim}{A character string indicating the name of the member dimension +to compute the probabilities of the forecast. The default value is 'member'.} + +\item{prob_thresholds}{A numeric vector of the relative thresholds (from 0 to +1) between the categories. The default value is c(1/3, 2/3), which +corresponds to tercile equiprobable categories.} + +\item{indices_for_clim}{A vector of the indices to be taken along 'time_dim' +for computing the thresholds between the probabilistic categories. If NULL, +the whole period is used. The default value is NULL.} + +\item{Fair}{A logical indicating whether to compute the FairRPSS (the +potential RPSS that the forecast would have with an infinite ensemble size). +The default value is FALSE.} + +\item{ncores}{An integer indicating the number of cores to use for parallel +computation. The default value is NULL.} +} +\value{ +A numerical array of RPS with the same dimensions as "exp" except the +'time_dim' and 'memb_dim' dimensions. +} +\description{ +The Ranked Probability Score (RPS; Wilks, 2011) is defined as the sum of the +squared differences between the cumulative forecast probabilities (computed +from the ensemble members) and the observations (defined as 0% if the category +did not happen and 100% if it happened). It can be used to evaluate the skill +of multi-categorical probabilistic forecasts. The RPS ranges between 0 +(perfect forecast) and n-1 (worst possible forecast), where n is the number of +categories. In the case of a forecast divided into two categories (the lowest +number of categories that a probabilistic forecast can have), the RPS +corresponds to the Brier Score (BS; Wilks, 2011), therefore, ranges between 0 +and 1. +} +\examples{ +exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) +res <- RPS(exp = exp, obs = obs) + +} +\references{ +Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7 +} diff --git a/man/RPSS.Rd b/man/RPSS.Rd new file mode 100644 index 0000000..47136f7 --- /dev/null +++ b/man/RPSS.Rd @@ -0,0 +1,75 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/RPSS.R +\name{RPSS} +\alias{RPSS} +\title{Compute the Ranked Probability Skill Score} +\usage{ +RPSS( + exp, + obs, + ref = NULL, + prob_thresholds = c(1/3, 2/3), + indices_for_clim = NULL, + Fair = FALSE, + time_dim = "year", + member_dim = "member", + ncores = NULL +) +} +\arguments{ +\item{exp}{A numerical array with the forecast with, at least, time dimension.} + +\item{obs}{A numerical array with the observations with, at least, time dimension. +The length of the time dimension must be the same as for "exp".} + +\item{ref}{NULL or a numerical array with the reference forecast with, at least, time dimension. +The length of the time dimension must be the same as for "exp". If it is NULL, the climatological forecast is +used as reference forecast. The default value is NULL.} + +\item{prob_thresholds}{A numeric vector with the relative thresholds (between 0 and 1) between the categories. +The default value is c(1/3,2/3), which corresponds to tercile equiprobable categories.} + +\item{indices_for_clim}{A vector with the indices to be taken along "time_dim" dimension for computing the thresholds +between the probabilistic categories. If NULL, the whole period is used. The default value is NULL.} + +\item{Fair}{A logical indicating whether to compute the FairRPSS (the potential RPSS that the forecast would have with +an infinite ensemble size). The default value is FALSE.} + +\item{time_dim}{A character string indicating the name of the time dimension. +The default value is 'year'.} + +\item{member_dim}{A character string indicating the name of the member dimension to compute the +ensemble means of the forecast and reference forecast. If it is NULL, the ensemble means should +be provided directly to the function. The default value is 'member'.} + +\item{ncores}{An integer indicating the number of cores to use for parallel +computation. The default value is NULL.} +} +\value{ +\item{$rpss}{ + A numerical array with the RPSS with the same dimensions as "exp" except the "time_dim" + and "member_dim" dimensions. +} +\item{$sign}{ + A logical array with the statistical significance of the RPSS with the same dimensions + as "exp" except the "time_dim" and "member_dim" dimensions. +} +} +\description{ +The Ranked Probability Skill Score (RPSS; Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7) +is the skill score based on the Ranked Probability Score (RPS; Wilks, 2011). It can be used to assess whether +a forecast presents an improvement or worsening with respect to a reference forecast. The RPSS ranges between +minus infinite and 1. If the RPSS is positive, it indicates that the forecast has higher skill than the +reference forecast, while a negative value means that it has a lower skill. Examples of reference forecasts +are the climatological forecast (same probabilities for all categories for all time steps), persistence, a previous model version, +and another model. It is computed as RPSS = 1 - RPS_exp / RPS_ref. The statistical significance is obtained based +on a Random Walk test at the 95% confidence level (DelSole and Tippett, 2016; https://doi.org/10.1175/MWR-D-15-0218.1) +} +\examples{ +exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) +ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) +obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, year = 50)) +RPSS(exp = exp, obs = obs) ## climatology as reference forecast +RPSS(exp = exp, obs = obs, ref = ref) ## ref as reference forecast + +} diff --git a/man/RandomWalkTest.Rd b/man/RandomWalkTest.Rd index 1110648..bd1460a 100644 --- a/man/RandomWalkTest.Rd +++ b/man/RandomWalkTest.Rd @@ -37,8 +37,8 @@ A list of 2: } \description{ Forecast comparison of the skill obtained with 2 forecasts (with respect to a -common reference) based on Random Walks, with significance estimate at the 5% -confidence level, as in DelSole and Tippett (2015). +common reference) based on Random Walks, with significance estimate at the 95% +confidence level, as in DelSole and Tippett (2016). } \examples{ fcst_A <- array(c(11:50), dim = c(sdate = 10, lat = 2, lon = 2)) diff --git a/tests/testthat/test-RPS.R b/tests/testthat/test-RPS.R new file mode 100644 index 0000000..7b1f77e --- /dev/null +++ b/tests/testthat/test-RPS.R @@ -0,0 +1,129 @@ +context("s2dv::RPS tests") + +############################################## + +# dat1 +set.seed(1) +exp1 <- array(rnorm(60), dim = c(member = 3, sdate = 10, lat = 2)) +set.seed(2) +obs1 <- array(rnorm(20), dim = c(sdate = 10, lat = 2)) + +# dat2 +set.seed(1) +exp2 <- array(rnorm(20), dim = c(member = 2, sdate = 10)) +set.seed(2) +obs2 <- array(rnorm(10), dim = c(sdate = 10)) + + + +############################################## +test_that("1. Input checks", { + # exp and obs (1) + expect_error( + RPS(c()), + 'Parameter "exp" must be a numeric array.' + ) + expect_error( + RPS(exp1, c()), + 'Parameter "obs" must be a numeric array.' + ) + + # time_dim + expect_error( + RPS(exp1, obs1, time_dim = 1), + 'Parameter "time_dim" must be a character string.' + ) + expect_error( + RPS(exp1, obs1, time_dim = 'time'), + "Parameter 'time_dim' is not found in 'exp' or 'obs' dimension." + ) + # memb_dim + expect_error( + RPS(exp1, obs1, memb_dim = TRUE), + "Parameter 'memb_dim' must be a character string." + ) + expect_error( + RPS(exp1, obs1, memb_dim = 'memb'), + "Parameter 'memb_dim' is not found in 'exp' dimension." + ) + # exp, ref, and obs (2) + expect_error( + RPS(exp1, array(1:9, dim = c(sdate = 9))), + "Parameter 'exp' and 'obs' must have same length of all dimensions expect 'memb_dim'." + ) + # prob_thresholds + expect_error( + RPS(exp1, obs1, prob_thresholds = 1), + "Parameter 'prob_thresholds' must be a numeric vector between 0 and 1." + ) + # indices_for_clim + expect_error( + RPS(exp1, obs1, indices_for_clim = array(1:6, dim = c(2, 3))), + "Parameter 'indices_for_clim' must be NULL or a numeric vector." + ) + expect_error( + RPS(exp1, obs1, indices_for_clim = 3:11), + "Parameter 'indices_for_clim' should be the indices of 'time_dim'." + ) + # Fair + expect_error( + RPS(exp1, obs1, Fair = 1), + "Parameter 'Fair' must be either TRUE or FALSE." + ) + # ncores + expect_error( + RPS(exp2, obs2, ncores = 1.5), + "Parameter 'ncores' must be either NULL or a positive integer." + ) + +}) + +############################################## +test_that("2. Output checks: dat1", { + +expect_equal( +dim(RPS(exp1, obs1)), +c(lat = 2) +) +expect_equal( +as.vector(RPS(exp1, obs1)), +c(0.3555556, 0.4444444), +tolerance = 0.0001 +) +expect_equal( +as.vector(RPS(exp1, obs1, Fair = T)), +c(0.2000000, 0.2666667), +tolerance = 0.0001 +) +expect_equal( +as.vector(RPS(exp1, obs1, indices_for_clim = 3:5)), +c(0.5000000, 0.4666667), +tolerance = 0.0001 +) +expect_equal( +as.vector(RPS(exp1, obs1, prob_thresholds = seq(0.1, 0.9, 0.1))), +c(1.600000, 1.888889), +tolerance = 0.0001 +) + +}) + +############################################## +test_that("3. Output checks: dat2", { + +expect_equal( +dim(RPS(exp2, obs2)), +NULL +) +expect_equal( +RPS(exp2, obs2), +0.75, +tolerance = 0.0001 +) +expect_equal( +RPS(exp2, obs2, indices_for_clim = 2:5, prob_thresholds = seq(0.1, 0.9, 0.1)), +2.75, +tolerance = 0.0001 +) + +}) -- GitLab From 298bb734d1fce1a171b72b76334c799837df8120 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 12 May 2022 15:24:06 +0200 Subject: [PATCH 51/83] Change the order of 'obs' and 'ref' --- R/ResidualCorr.R | 61 ++++++++++++++++++++++----------------------- man/ResidualCorr.Rd | 12 ++++----- 2 files changed, 36 insertions(+), 37 deletions(-) diff --git a/R/ResidualCorr.R b/R/ResidualCorr.R index dae0cb8..541cfe8 100644 --- a/R/ResidualCorr.R +++ b/R/ResidualCorr.R @@ -17,11 +17,11 @@ #' #'@param exp A named numerical array of the forecast with at least time #' dimension. +#'@param obs A named numerical array of the observations with at least time +#' dimension. The dimensions must be the same as "exp" except 'memb_dim'. #'@param ref A named numerical array of the reference forecast data with at #' least time dimension. The dimensions must be the same as "exp" except #' 'memb_dim'. -#'@param obs A named numerical array of the observations with at least time -#' dimension. The dimensions must be the same as "exp" except 'memb_dim'. #'@param N.eff Effective sample size to be used in the statistical significance #' test. It can be NA (and it will be computed with the s2dv:::.Eno), a #' numeric (which is used for all cases), or an array with the same dimensions @@ -66,13 +66,13 @@ #' #'@examples #' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) -#' ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 5, sdate = 50)) #' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) -#' res <- ResidualCorr(exp, ref, obs, memb_dim = 'member') +#' ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 5, sdate = 50)) +#' res <- ResidualCorr(exp = exp, obs = obs, ref = ref, memb_dim = 'member') #' #'@import multiApply #'@export -ResidualCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', +ResidualCorr <- function(exp, obs, ref, N.eff = NA, time_dim = 'sdate', memb_dim = NULL, method = 'pearson', alpha = NULL, handle.na = 'return.na', ncores = NULL) { @@ -80,10 +80,10 @@ ResidualCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', ## exp, ref, and obs (1) if (!is.array(exp) | !is.numeric(exp)) stop('Parameter "exp" must be a numeric array.') - if (!is.array(ref) | !is.numeric(ref)) - stop('Parameter "ref" must be a numeric array.') if (!is.array(obs) | !is.numeric(obs)) stop('Parameter "obs" must be a numeric array.') + if (!is.array(ref) | !is.numeric(ref)) + stop('Parameter "ref" must be a numeric array.') ## N.eff if (is.array(N.eff)) { @@ -101,9 +101,9 @@ ResidualCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', ## time_dim if (!is.character(time_dim) | length(time_dim) != 1) stop('Parameter "time_dim" must be a character string.') - if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(ref)) | - !time_dim %in% names(dim(obs))) { - stop("Parameter 'time_dim' is not found in 'exp', 'ref', or 'obs' dimension.") + if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs)) | + !time_dim %in% names(dim(ref))) { + stop("Parameter 'time_dim' is not found in 'exp', 'obs', or 'ref' dimension.") } ## memb_dim if (!is.null(memb_dim)) { @@ -116,15 +116,15 @@ ResidualCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', } ## exp, ref, and obs (2) name_exp <- sort(names(dim(exp))) - name_ref <- sort(names(dim(ref))) name_obs <- sort(names(dim(obs))) + name_ref <- sort(names(dim(ref))) if (!is.null(memb_dim)) { name_exp <- name_exp[-which(name_exp == memb_dim)] name_ref <- name_ref[-which(name_ref == memb_dim)] } - if (!identical(length(name_exp), length(name_ref), length(name_obs)) | - !identical(dim(exp)[name_exp], dim(ref)[name_ref], dim(obs)[name_obs])) { - stop(paste0("Parameter 'exp', 'ref', and 'obs' must have same length of ", + if (!identical(length(name_exp), length(name_obs), length(name_ref)) | + !identical(dim(exp)[name_exp], dim(obs)[name_obs], dim(ref)[name_ref])) { + stop(paste0("Parameter 'exp', 'obs', and 'ref' must have same length of ", "all dimensions expect 'memb_dim'.")) } ## method @@ -153,13 +153,13 @@ ResidualCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', ############################### # NA check: na.fail - if (handle.na == "na.fail" & (anyNA(exp) | anyNA(ref) | anyNA(obs))) + if (handle.na == "na.fail" & (anyNA(exp) | anyNA(obs) | anyNA(ref))) stop('The data contain NAs.') # Calculate ensemble mean dim_exp <- dim(exp) - dim_ref <- dim(ref) dim_obs <- dim(obs) + dim_ref <- dim(ref) if (!is.null(memb_dim)) { exp_memb_dim_ind <- which(names(dim_exp) == memb_dim) @@ -180,18 +180,17 @@ ResidualCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', # Residual correlation if (is.array(N.eff)) { - output <- Apply(data = list(exp = exp, ref = ref, - obs = obs, N.eff = N.eff), - target_dims = list(exp = time_dim, ref = time_dim, - obs = time_dim, N.eff = NULL), + output <- Apply(data = list(exp = exp, obs = obs, ref = ref, + N.eff = N.eff), + target_dims = list(exp = time_dim, obs = time_dim, + ref = time_dim, N.eff = NULL), output_dims = output_dims, fun = .ResidualCorr, method = method, alpha = alpha, handle.na = handle.na, ncores = ncores) } else { - output <- Apply(data = list(exp = exp, ref = ref, - obs = obs), - target_dims = list(exp = time_dim, ref = time_dim, - obs = time_dim), + output <- Apply(data = list(exp = exp, obs = obs, ref = ref), + target_dims = list(exp = time_dim, obs = time_dim, + ref = time_dim), output_dims = output_dims, N.eff = N.eff, fun = .ResidualCorr, method = method, alpha = alpha, handle.na = handle.na, ncores = ncores) @@ -200,9 +199,9 @@ ResidualCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', return(output) } -.ResidualCorr <- function(exp, ref, obs, N.eff, method, alpha, handle.na) { +.ResidualCorr <- function(exp, obs, ref, N.eff, method, alpha, handle.na) { # exp and ref and obs: [time] - .residual.corr <- function(exp, ref, obs, method, N.eff, alpha) { + .residual.corr <- function(exp, obs, ref, method, N.eff, alpha) { # Residuals of 'exp' and 'obs' (regressing 'ref' out in both 'exp' and 'obs') exp_res <- lm(formula = y ~ x, data = list(y = exp, x = ref), na.action = NULL)$residuals @@ -235,16 +234,16 @@ ResidualCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', #================================================== - if (anyNA(exp) | anyNA(ref) | anyNA(obs)) { ## There are NAs + if (anyNA(exp) | anyNA(obs) | anyNA(ref)) { ## There are NAs if (handle.na == 'only.complete.triplets') { - nna <- is.na(exp) | is.na(ref) | is.na(obs) # A vector of T/F + nna <- is.na(exp) | is.na(obs) | is.na(ref) # A vector of T/F if (all(nna)) stop("There is no complete set of forecasts and observations.") # Remove the incomplete set exp <- exp[!nna] - ref <- ref[!nna] obs <- obs[!nna] + ref <- ref[!nna] - output <- .residual.corr(exp = exp, ref = ref, obs = obs, method = method, + output <- .residual.corr(exp = exp, obs = obs, ref = ref, method = method, N.eff = N.eff, alpha = alpha) } else if (handle.na == 'return.na') { @@ -257,7 +256,7 @@ ResidualCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', } } else { ## There is no NA - output <- .residual.corr(exp = exp, ref = ref, obs = obs, method = method, + output <- .residual.corr(exp = exp, obs = obs, ref = ref, method = method, N.eff = N.eff, alpha = alpha) } diff --git a/man/ResidualCorr.Rd b/man/ResidualCorr.Rd index e98ea7a..fe7dd10 100644 --- a/man/ResidualCorr.Rd +++ b/man/ResidualCorr.Rd @@ -6,8 +6,8 @@ \usage{ ResidualCorr( exp, - ref, obs, + ref, N.eff = NA, time_dim = "sdate", memb_dim = NULL, @@ -21,13 +21,13 @@ ResidualCorr( \item{exp}{A named numerical array of the forecast with at least time dimension.} +\item{obs}{A named numerical array of the observations with at least time +dimension. The dimensions must be the same as "exp" except 'memb_dim'.} + \item{ref}{A named numerical array of the reference forecast data with at least time dimension. The dimensions must be the same as "exp" except 'memb_dim'.} -\item{obs}{A named numerical array of the observations with at least time -dimension. The dimensions must be the same as "exp" except 'memb_dim'.} - \item{N.eff}{Effective sample size to be used in the statistical significance test. It can be NA (and it will be computed with the s2dv:::.Eno), a numeric (which is used for all cases), or an array with the same dimensions @@ -95,8 +95,8 @@ effective degrees of freedom to account for the time series' autocorrelation } \examples{ exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) -ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 5, sdate = 50)) obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) -res <- ResidualCorr(exp, ref, obs, memb_dim = 'member') +ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 5, sdate = 50)) +res <- ResidualCorr(exp = exp, obs = obs, ref = ref, memb_dim = 'member') } -- GitLab From 026cb55714c2aca94a909ef813bbb000557d4520 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 12 May 2022 17:41:11 +0200 Subject: [PATCH 52/83] Correct conditional statement and unit test --- R/ResidualCorr.R | 4 +- tests/testthat/test-ResidualCorr.R | 76 +++++++++++++++--------------- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/R/ResidualCorr.R b/R/ResidualCorr.R index 541cfe8..7428d1b 100644 --- a/R/ResidualCorr.R +++ b/R/ResidualCorr.R @@ -122,8 +122,8 @@ ResidualCorr <- function(exp, obs, ref, N.eff = NA, time_dim = 'sdate', name_exp <- name_exp[-which(name_exp == memb_dim)] name_ref <- name_ref[-which(name_ref == memb_dim)] } - if (!identical(length(name_exp), length(name_obs), length(name_ref)) | - !identical(dim(exp)[name_exp], dim(obs)[name_obs], dim(ref)[name_ref])) { + if (length(name_exp) != length(name_obs) | length(name_exp) != length(name_ref) | + any(dim(exp)[name_exp] != dim(obs)[name_obs]) | any(dim(exp)[name_exp] != dim(ref)[name_ref])) { stop(paste0("Parameter 'exp', 'obs', and 'ref' must have same length of ", "all dimensions expect 'memb_dim'.")) } diff --git a/tests/testthat/test-ResidualCorr.R b/tests/testthat/test-ResidualCorr.R index c9ac4b9..c15276c 100644 --- a/tests/testthat/test-ResidualCorr.R +++ b/tests/testthat/test-ResidualCorr.R @@ -29,63 +29,63 @@ test_that("1. Input checks", { 'Parameter "exp" must be a numeric array.' ) expect_error( - ResidualCorr(exp1, c('a')), + ResidualCorr(exp1, obs1, c('a')), 'Parameter "ref" must be a numeric array.' ) expect_error( - ResidualCorr(exp1, ref1, c()), + ResidualCorr(exp1, c()), 'Parameter "obs" must be a numeric array.' ) # N.eff expect_error( - ResidualCorr(exp1, ref1, obs1, N.eff = array(1, dim = c(lat = 2, lon = 2))), + ResidualCorr(exp1, obs1, ref1, N.eff = array(1, dim = c(lat = 2, lon = 2))), 'If parameter "N.eff" is provided with an array, it must have the same dimensions as "obs" except "time_dim".' ) expect_error( - ResidualCorr(exp1, ref1, obs1, N.eff = 1:3), + ResidualCorr(exp1, obs1, ref1, N.eff = 1:3), 'Parameter "N.eff" must be NA, a numeric, or an array with the same dimensions as "obs" except "time_dim".' ) # time_dim expect_error( - ResidualCorr(exp1, ref1, obs1, time_dim = 1), + ResidualCorr(exp1, obs1, ref1, time_dim = 1), 'Parameter "time_dim" must be a character string.' ) expect_error( - ResidualCorr(exp1, ref1, obs1, time_dim = 'time'), - "Parameter 'time_dim' is not found in 'exp', 'ref', or 'obs' dimension." + ResidualCorr(exp1, obs1, ref1, time_dim = 'time'), + "Parameter 'time_dim' is not found in 'exp', 'obs', or 'ref' dimension." ) # memb_dim expect_error( - ResidualCorr(exp1, ref1, obs1, memb_dim = TRUE), + ResidualCorr(exp1, obs1, ref1, memb_dim = TRUE), "Parameter 'memb_dim' must be a character string." ) expect_error( - ResidualCorr(exp1, ref1, obs1, memb_dim = 'member'), + ResidualCorr(exp1, obs1, ref1, memb_dim = 'member'), "Parameter 'memb_dim' is not found in 'exp' or 'ref' dimension." ) # exp, ref, and obs (2) expect_error( - ResidualCorr(exp1, array(1:10, dim = c(sdate = 10, memb = 1)), obs1, memb_dim = 'memb'), - "Parameter 'exp', 'ref', and 'obs' must have same length of all dimensions expect 'memb_dim'." + ResidualCorr(exp1, obs1, array(1:10, dim = c(sdate = 10, memb = 1)), memb_dim = 'memb'), + "Parameter 'exp', 'obs', and 'ref' must have same length of all dimensions expect 'memb_dim'." ) # method expect_error( - ResidualCorr(exp1, ref1, obs1, method = 'asd', memb_dim = 'memb'), + ResidualCorr(exp1, obs1, ref1, method = 'asd', memb_dim = 'memb'), 'Parameter "method" must be "pearson", "kendall", or "spearman".' ) # alpha expect_error( - ResidualCorr(exp2, ref2, obs2, alpha = 1), + ResidualCorr(exp2, obs2, ref2, alpha = 1), 'Parameter "alpha" must be NULL or a number between 0 and 1.' ) # handle.na expect_error( - ResidualCorr(exp2, ref2, obs2, handle.na = TRUE), + ResidualCorr(exp2, obs2, ref2, handle.na = TRUE), 'Parameter "handle.na" must be "return.na", "only.complete.triplets" or "na.fail".' ) # ncores expect_error( - ResidualCorr(exp2, ref2, obs2, ncores = 1.5), + ResidualCorr(exp2, obs2, ref2, ncores = 1.5), 'Parameter "ncores" must be either NULL or a positive integer.' ) @@ -94,69 +94,69 @@ test_that("1. Input checks", { ############################################## test_that("2. Output checks: dat1", { expect_equal( -names(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb')), +names(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb')), c("res.corr", "p.val") ) expect_equal( -dim(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb')$res.corr), +dim(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb')$res.corr), c(lat = 3, lon = 2) ) expect_equal( -dim(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb')$p.val), +dim(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb')$p.val), c(lat = 3, lon = 2) ) expect_equal( -as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb')$res.corr), +as.vector(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb')$res.corr), c(0.002784318, 0.537697647, -0.240071018, 0.258706464, 0.338160748, 0.432107476), tolerance = 0.0001 ) expect_equal( -as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb')$p), +as.vector(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb')$p), c(0.49695468, 0.05446055, 0.25203961, 0.23522967, 0.16960864, 0.10618145), tolerance = 0.0001 ) expect_equal( -names(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', alpha = 0.05)), +names(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb', alpha = 0.05)), c("res.corr", "sign") ) expect_equal( -as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', alpha = 0.05)$res.corr), +as.vector(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb', alpha = 0.05)$res.corr), c(0.002784318, 0.537697647, -0.240071018, 0.258706464, 0.338160748, 0.432107476), tolerance = 0.0001 ) expect_equal( -as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', alpha = 0.05)$sign), +as.vector(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb', alpha = 0.05)$sign), rep(FALSE, 6) ) expect_equal( -as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "kendall")$res), +as.vector(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb', method = "kendall")$res), c(0.11111111, 0.42222222, -0.20000000, 0.02222222, 0.20000000, 0.42222222), tolerance = 0.0001 ) expect_equal( -as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "kendall")$p), +as.vector(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb', method = "kendall")$p), c(0.3799615, 0.1120891, 0.2897920, 0.4757064, 0.2897920, 0.1120891), tolerance = 0.0001 ) expect_equal( -as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "spearman")$res), +as.vector(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb', method = "spearman")$res), c(0.13939394, 0.61212121, -0.27272727, 0.07878788, 0.28484848, 0.47878788), tolerance = 0.0001 ) expect_equal( -as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "spearman")$p), +as.vector(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb', method = "spearman")$p), c(0.35046594, 0.02998607, 0.22291917, 0.41435870, 0.21251908, 0.08076146), tolerance = 0.0001 ) expect_equal( -as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', N.eff = Neff1)$res), +as.vector(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb', N.eff = Neff1)$res), c(0.002784318, 0.537697647, -0.240071018, 0.258706464, 0.338160748, 0.432107476), tolerance = 0.0001 ) expect_equal( -as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', N.eff = Neff1)$p), +as.vector(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb', N.eff = Neff1)$p), c(0.49716394, 0.05446055, 0.26690777, 0.23522967, 0.18671025, 0.10618145), tolerance = 0.0001 ) @@ -165,17 +165,17 @@ tolerance = 0.0001 #--------------------------- exp1[1] <- NA expect_equal( -as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb')$res.corr), +as.vector(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb')$res.corr), c(NA, 0.537697647, -0.240071018, 0.258706464, 0.338160748, 0.432107476), tolerance = 0.0001 ) expect_equal( -as.vector(ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', handle.na = 'only.complete.triplets')$res.corr), +as.vector(ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb', handle.na = 'only.complete.triplets')$res.corr), c(-0.1082588, 0.537697647, -0.240071018, 0.258706464, 0.338160748, 0.432107476), tolerance = 0.0001 ) expect_error( -ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', handle.na = 'na.fail'), +ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb', handle.na = 'na.fail'), "The data contain NAs." ) @@ -183,7 +183,7 @@ exp1[1,1,1,1:3] <- NA ref1[1,1,1,4:8] <- NA obs1[1,1,9:10] <- NA expect_error( -ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', handle.na = 'only.complete.triplets'), +ResidualCorr(exp1, obs1, ref1, memb_dim = 'memb', handle.na = 'only.complete.triplets'), "There is no complete set of forecasts and observations." ) @@ -194,24 +194,24 @@ ResidualCorr(exp1, ref1, obs1, memb_dim = 'memb', handle.na = 'only.complete.tri test_that("3. Output checks: dat2", { expect_equal( -names(ResidualCorr(exp2, ref2, obs2)), +names(ResidualCorr(exp2, obs2, ref2)), c("res.corr", "p.val") ) expect_equal( -dim(ResidualCorr(exp2, ref2, obs2)$res.corr), +dim(ResidualCorr(exp2, obs2, ref2)$res.corr), NULL ) expect_equal( -dim(ResidualCorr(exp2, ref2, obs2)$p), +dim(ResidualCorr(exp2, obs2, ref2)$p), NULL ) expect_equal( -ResidualCorr(exp2, ref2, obs2)$p, +ResidualCorr(exp2, obs2, ref2)$p, 0.2209847, tolerance = 0.0001 ) expect_equal( -ResidualCorr(exp2, ref2, obs2)$res, +ResidualCorr(exp2, obs2, ref2)$res, -0.274962, tolerance = 0.0001 ) -- GitLab From cb78b52add85f65281c67cbb23a0826402ff3699 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 12 May 2022 18:06:35 +0200 Subject: [PATCH 53/83] Improve RPSS() formatting and efficiency --- R/RPS.R | 17 ++- R/RPSS.R | 280 ++++++++++++++++++++++++------------- man/RPS.Rd | 3 +- man/RPSS.Rd | 85 ++++++----- tests/testthat/test-RPS.R | 2 +- tests/testthat/test-RPSS.R | 272 +++++++++++++++++++++++++++++++++++ 6 files changed, 516 insertions(+), 143 deletions(-) create mode 100644 tests/testthat/test-RPSS.R diff --git a/R/RPS.R b/R/RPS.R index 744b9c7..7b4af7c 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -14,7 +14,8 @@ #'@param exp A named numerical array of the forecast with at least time #' dimension. #'@param obs A named numerical array of the observation with at least time -#' dimension. The dimensions must be the same as 'exp' except 'memb_dim'. +#' dimension. The dimensions must be the same as 'exp' except 'obs' doesn't +#' have 'memb_dim'. #'@param time_dim A character string indicating the name of the time dimension. #' The default value is 'sdate'. #'@param memb_dim A character string indicating the name of the member dimension @@ -80,7 +81,7 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', if (!identical(length(name_exp), length(name_obs)) | !identical(dim(exp)[name_exp], dim(obs)[name_obs])) { stop(paste0("Parameter 'exp' and 'obs' must have same length of ", - "all dimensions expect 'memb_dim'.")) + "all dimensions expect 'obs' doesn't have 'memb_dim'.")) } ## prob_thresholds if (!is.numeric(prob_thresholds) | !is.vector(prob_thresholds) | @@ -117,16 +118,21 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', rps <- Apply(data = list(exp = exp, obs = obs), target_dims = list(exp = c(time_dim, memb_dim), obs = time_dim), + output_dims = time_dim, fun = .RPS, prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, Fair = Fair, ncores = ncores)$output1 - + + # Return only the mean RPS + rps <- MeanDims(rps, time_dim, na.rm = FALSE) + return(rps) } -.RPS <- function(exp, obs, prob_thresholds, indices_for_clim, Fair) { +.RPS <- function(exp, obs, prob_thresholds = c(1/3, 2/3), + indices_for_clim = NULL, Fair = FALSE) { # exp: [sdate, memb] # obs: [sdate] @@ -151,9 +157,6 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', rps <- rps + adjustment } - # Return only the mean RPS - rps <- mean(rps, na.rm = FALSE) - return(rps) } diff --git a/R/RPSS.R b/R/RPSS.R index f7dc80d..1498456 100644 --- a/R/RPSS.R +++ b/R/RPSS.R @@ -1,131 +1,215 @@ #'Compute the Ranked Probability Skill Score #' -#'The Ranked Probability Skill Score (RPSS; Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7) -#'is the skill score based on the Ranked Probability Score (RPS; Wilks, 2011). It can be used to assess whether -#'a forecast presents an improvement or worsening with respect to a reference forecast. The RPSS ranges between -#'minus infinite and 1. If the RPSS is positive, it indicates that the forecast has higher skill than the -#'reference forecast, while a negative value means that it has a lower skill. Examples of reference forecasts -#'are the climatological forecast (same probabilities for all categories for all time steps), persistence, a previous model version, -#'and another model. It is computed as RPSS = 1 - RPS_exp / RPS_ref. The statistical significance is obtained based -#'on a Random Walk test at the 95% confidence level (DelSole and Tippett, 2016; https://doi.org/10.1175/MWR-D-15-0218.1) +#'The Ranked Probability Skill Score (RPSS; Wilks, 2011) is the skill score +#'based on the Ranked Probability Score (RPS; Wilks, 2011). It can be used to +#'assess whether a forecast presents an improvement or worsening with respect to +#'a reference forecast. The RPSS ranges between minus infinite and 1. If the +#'RPSS is positive, it indicates that the forecast has higher skill than the +#'reference forecast, while a negative value means that it has a lower skill. +#'Examples of reference forecasts are the climatological forecast (same +#'probabilities for all categories for all time steps), persistence, a previous +#'model version, and another model. It is computed as RPSS = 1 - RPS_exp / RPS_ref. +#'The statistical significance is obtained based on a Random Walk test at the +#'95% confidence level (DelSole and Tippett, 2016). #' -#'@param exp A numerical array with the forecast with, at least, time dimension. -#'@param obs A numerical array with the observations with, at least, time dimension. -#' The length of the time dimension must be the same as for "exp". -#'@param ref NULL or a numerical array with the reference forecast with, at least, time dimension. -#' The length of the time dimension must be the same as for "exp". If it is NULL, the climatological forecast is -#' used as reference forecast. The default value is NULL. -#'@param prob_thresholds A numeric vector with the relative thresholds (between 0 and 1) between the categories. -#' The default value is c(1/3,2/3), which corresponds to tercile equiprobable categories. -#'@param indices_for_clim A vector with the indices to be taken along "time_dim" dimension for computing the thresholds -#' between the probabilistic categories. If NULL, the whole period is used. The default value is NULL. -#'@param Fair A logical indicating whether to compute the FairRPSS (the potential RPSS that the forecast would have with -#'an infinite ensemble size). The default value is FALSE. +#'@param exp A named numerical array of the forecast with at least time +#' dimension. +#'@param obs A named numerical array of the observation with at least time +#' dimension. The dimensions must be the same as 'exp' except 'obs' doesn't +#' have 'memb_dim'. +#'@param ref A named numerical array of the reference forecast data with at +#' least time dimension. The dimensions must be the same as 'exp' except +#' 'memb_dim'. If it is NULL, the climatological forecast is used as reference +#' forecast. The default value is NULL. #'@param time_dim A character string indicating the name of the time dimension. -#' The default value is 'year'. -#'@param member_dim A character string indicating the name of the member dimension to compute the -#' ensemble means of the forecast and reference forecast. If it is NULL, the ensemble means should -#' be provided directly to the function. The default value is 'member'. +#' The default value is 'sdate'. +#'@param memb_dim A character string indicating the name of the member dimension +#' to compute the probabilities of the forecast and the reference forecast. The +#' default value is 'member'. +#'@param prob_thresholds A numeric vector of the relative thresholds (from 0 to +#' 1) between the categories. The default value is c(1/3, 2/3), which +#' corresponds to tercile equiprobable categories. +#'@param indices_for_clim A vector of the indices to be taken along 'time_dim' +#' for computing the thresholds between the probabilistic categories. If NULL, +#' the whole period is used. The default value is NULL. +#'@param Fair A logical indicating whether to compute the FairRPSS (the +#' potential RPSS that the forecast would have with an infinite ensemble size). +#' The default value is FALSE. #'@param ncores An integer indicating the number of cores to use for parallel #' computation. The default value is NULL. #' #'@return #'\item{$rpss}{ -#' A numerical array with the RPSS with the same dimensions as "exp" except the "time_dim" -#' and "member_dim" dimensions. +#' A numerical array of the RPSS with the same dimensions as "exp" except the +#' 'time_dim' and 'memb_dim' dimensions. #'} #'\item{$sign}{ -#' A logical array with the statistical significance of the RPSS with the same dimensions -#' as "exp" except the "time_dim" and "member_dim" dimensions. +#' A logical array of the statistical significance of the RPSS with the same +#' dimensions as 'exp' except the 'time_dim' and 'memb_dim' dimensions. #'} - +#' +#'@references +#'Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7 +#'DelSole and Tippett, 2016; https://doi.org/10.1175/MWR-D-15-0218.1 +#' #'@examples -#' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) -#' ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) -#' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, year = 50)) -#' RPSS(exp = exp, obs = obs) ## climatology as reference forecast -#' RPSS(exp = exp, obs = obs, ref = ref) ## ref as reference forecast +#'exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +#'obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) +#'ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +#'res <- RPSS(exp = exp, obs = obs) ## climatology as reference forecast +#'res <- RPSS(exp = exp, obs = obs, ref = ref) ## ref as reference forecast #' #'@import multiApply #'@export -RPSS <- function(exp, obs, ref = NULL, prob_thresholds = c(1/3,2/3), indices_for_clim = NULL, Fair = FALSE, time_dim = 'year', member_dim = 'member', ncores = NULL){ - - ## Checkings - if (!is.array(exp)){stop('"exp" must be an array.')} - if (!is.array(obs)){stop('"obs" must be an array.')} - if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(obs)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "obs".')} - if (!is.null(ref)){ - if (!is.array(ref)){stop('"ref" must be an array.')} - if (!identical(as.numeric(dim(exp)[time_dim]), as.numeric(dim(ref)[time_dim]))){stop('"time_dim" must have the same length in "exp" and "ref".')} +RPSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', memb_dim = 'member', + prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, + ncores = NULL){ + + # Check inputs + ## exp, obs, and ref (1) + if (!is.array(exp) | !is.numeric(exp)) + stop('Parameter "exp" must be a numeric array.') + if (!is.array(obs) | !is.numeric(obs)) + stop('Parameter "obs" must be a numeric array.') + if (!is.null(ref)) { + if (!is.array(ref) | !is.numeric(ref)) + stop('Parameter "ref" must be a numeric array.') } - if (!is.numeric(prob_thresholds) | !is.vector(prob_thresholds) | any(prob_thresholds <= 0) | any(prob_thresholds >= 1)){ - stop('"prob_thresholds" must be a numeric vector with the relative thresholds (from 0 to 1) between the categories.') + ## time_dim + if (!is.character(time_dim) | length(time_dim) != 1) + stop('Parameter "time_dim" must be a character string.') + if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs))) { + stop("Parameter 'time_dim' is not found in 'exp' or 'obs' dimension.") } - if (is.null(indices_for_clim)){ - indices_for_clim <- 1:as.numeric(dim(obs)[time_dim]) - } else if (!is.numeric(indices_for_clim)){ - stop('"indices_for_clim" must be NULL or a numeric vector.') + if (!is.null(ref) & !time_dim %in% names(dim(ref))) { + stop("Parameter 'time_dim' is not found in 'ref' dimension.") } - if (!is.logical(Fair)){stop('"Fair" must be TRUE or FALSE.')} - if (!is.character(time_dim)){stop('"time_dim" must be a string.')} - if (!is.character(member_dim)){stop('"member_dim" must be a string.')} - if (!is.null(ncores)){ - if (!is.numeric(ncores) | ncores < 1){stop('"ncores" must be either NULL or a positive integer.')} - } - - if (!is.null(ref)){ ## using "ref" as reference forecast - output <- multiApply::Apply(data = list(exp = exp, obs = obs, ref = ref), - target_dims = list(exp = c(time_dim, member_dim), obs = time_dim, ref = c(time_dim, member_dim)), - prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, - Fair = Fair, time_dim = time_dim, member_dim = member_dim, - fun = .RPSS, ncores = ncores) - } else { ## using climatology as reference forecast - output <- multiApply::Apply(data = list(exp = exp, obs = obs), - target_dims = list(exp = c(time_dim, member_dim), obs = time_dim), - ref = ref, prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, - Fair = Fair, time_dim = time_dim, member_dim = member_dim, - fun = .RPSS, ncores = ncores) + ## memb_dim + if (!is.character(memb_dim) | length(memb_dim) > 1) { + stop("Parameter 'memb_dim' must be a character string.") + } + if (!memb_dim %in% names(dim(exp))) { + stop("Parameter 'memb_dim' is not found in 'exp' dimension.") + } + if (!is.null(ref) & !memb_dim %in% names(dim(ref))) { + stop("Parameter 'memb_dim' is not found in 'ref' dimension.") + } + ## exp and obs (2) + name_exp <- sort(names(dim(exp))) + name_obs <- sort(names(dim(obs))) + name_exp <- name_exp[-which(name_exp == memb_dim)] + if (!identical(length(name_exp), length(name_obs)) | + !identical(dim(exp)[name_exp], dim(obs)[name_obs])) { + stop(paste0("Parameter 'exp' and 'obs' must have same length of ", + "all dimensions expect 'obs' doesn't have 'memb_dim'.")) + } + if (!is.null(ref)) { + name_ref <- sort(names(dim(ref))) + name_ref <- name_ref[-which(name_ref == memb_dim)] + if (!identical(length(name_exp), length(name_ref)) | + !identical(dim(exp)[name_exp], dim(ref)[name_ref])) { + stop(paste0("Parameter 'exp' and 'obs' must have same length of ", + "all dimensions expect 'memb_dim'.")) + } + } + ## prob_thresholds + if (!is.numeric(prob_thresholds) | !is.vector(prob_thresholds) | + any(prob_thresholds <= 0) | any(prob_thresholds >= 1)) { + stop("Parameter 'prob_thresholds' must be a numeric vector between 0 and 1.") + } + ## indices_for_clim + if (is.null(indices_for_clim)) { + indices_for_clim <- 1:dim(obs)[time_dim] + } else { + if (!is.numeric(indices_for_clim) | !is.vector(indices_for_clim)) { + stop("Parameter 'indices_for_clim' must be NULL or a numeric vector.") + } else if (length(indices_for_clim) > dim(obs)[time_dim] | + max(indices_for_clim) > dim(obs)[time_dim] | + any(indices_for_clim) < 1) { + stop("Parameter 'indices_for_clim' should be the indices of 'time_dim'.") + } + } + ## Fair + if (!is.logical(Fair) | length(Fair) > 1) { + stop("Parameter 'Fair' must be either TRUE or FALSE.") + } + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | + length(ncores) > 1) { + stop("Parameter 'ncores' must be either NULL or a positive integer.") + } } + + ############################### + + # Compute RPSS + if (!is.null(ref)) { # use "ref" as reference forecast + data <- list(exp = exp, obs = obs, ref = ref) + target_dims = list(exp = c(time_dim, memb_dim), + obs = time_dim, + ref = c(time_dim, memb_dim)) + } else { + data <- list(exp = exp, obs = obs) + target_dims = list(exp = c(time_dim, memb_dim), + obs = time_dim) + } + output <- Apply(data, + target_dims = target_dims, + fun = .RPSS, + prob_thresholds = prob_thresholds, + indices_for_clim = indices_for_clim, Fair = Fair, + ncores = ncores) return(output) } -.RPSS <- function(exp, obs, ref, prob_thresholds, indices_for_clim, Fair, time_dim, member_dim){ - - ## RPS of the forecast - rps_exp <- .RPS(exp = exp, obs = obs, prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, Fair = Fair, time_dim = time_dim, member_dim = member_dim) +.RPSS <- function(exp, obs, ref = NULL, prob_thresholds = c(1/3, 2/3), + indices_for_clim = NULL, Fair = FALSE) { + # exp: [sdate, memb] + # obs: [sdate] + # ref: [sdate, memb] or NULL + + # RPS of the forecast + rps_exp <- .RPS(exp = exp, obs = obs, prob_thresholds = prob_thresholds, + indices_for_clim = indices_for_clim, Fair = Fair) - ## RPS of the reference forecast - if (is.null(ref)){ ## using climatology as reference forecast - obs_probs <- .get_probs(data = obs, type = 'obs', indices_for_quantiles = indices_for_clim, time_dim = time_dim, member_dim = NULL, prob_thresholds = prob_thresholds) - clim_probs <- .get_probs_clim(prob_thresholds = prob_thresholds, dims = dim(obs_probs), time_dim = time_dim) - rps_ref <- multiApply::Apply(data = list(probs_exp = clim_probs, probs_obs = obs_probs), target_dims = 'bin', - fun = .RPS_from_probs, n_categories = length(prob_thresholds)+1, Fair = FALSE, ncores = NULL)$output1 - } else { ## using "ref" as reference forecast - rps_ref <- .RPS(exp = ref, obs = obs, prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, Fair = Fair, time_dim = time_dim, member_dim = member_dim) + # RPS of the reference forecast + if (is.null(ref)) { ## using climatology as reference forecast + obs_probs <- .get_probs(data = obs, indices_for_quantiles = indices_for_clim, + prob_thresholds = prob_thresholds) + # obs_probs: [bin, sdate] + + clim_probs <- c(prob_thresholds[1], diff(prob_thresholds), 1 - prob_thresholds[length(prob_thresholds)]) + clim_probs <- array(clim_probs, dim = dim(obs_probs)) + # clim_probs: [bin, sdate] + + # Calculate RPS for each time step + probs_clim_cumsum <- apply(clim_probs, 2, cumsum) + probs_obs_cumsum <- apply(obs_probs, 2, cumsum) + rps_ref <- apply((probs_clim_cumsum - probs_obs_cumsum)^2, 2, sum) + # rps_ref: [sdate] + +# if (Fair) { # FairRPS +# ## adjustment <- rowSums(-1 * (1/R - 1/R.new) * ens.cum * (R - ens.cum)/R/(R - 1)) [formula taken from SpecsVerification::EnsRps] +# R <- dim(exp)[2] #memb +# R_new <- Inf +# adjustment <- (-1) / (R - 1) * probs_clim_cumsum * (1 - probs_clim_cumsum) +# adjustment <- apply(adjustment, 2, sum) +# rps_ref <- rps_ref + adjustment +# } + + } else { # use "ref" as reference forecast + rps_ref <- .RPS(exp = ref, obs = obs, prob_thresholds = prob_thresholds, + indices_for_clim = indices_for_clim, Fair = Fair) } - ## RPSS + # RPSS rpss <- 1 - mean(rps_exp) / mean(rps_ref) - ## Significance - rps_exp <- array(data = rps_exp, dim = c(time = length(rps_exp))) - rps_ref <- array(data = rps_ref, dim = c(time = length(rps_ref))) - sign <- s2dv::RandomWalkTest(skill_A = rps_exp, skill_B = rps_ref, time_dim = 'time', ncores = NULL)$signif + # Significance + sign <- .RandomWalkTest(skill_A = rps_exp, skill_B = rps_ref)$signif return(list(rpss = rpss, sign = sign)) } -.get_probs_clim <- function(prob_thresholds, dims, time_dim){ - - probs <- array(data = NA, dim = c(bin = length(prob_thresholds)+1)) - probs[1] <- prob_thresholds[1] - if (length(prob_thresholds) > 1){ - probs[2:(length(probs)-1)] <- diff(prob_thresholds) - } - probs[length(probs)] <- 1 - prob_thresholds[length(prob_thresholds)] - stopifnot(identical(sum(probs),1)) - probs <- s2dv::InsertDim(data = probs, posdim = 2, lendim = dims[[time_dim]], name = time_dim) - - return(probs) -} diff --git a/man/RPS.Rd b/man/RPS.Rd index d1acc02..cbb0e7a 100644 --- a/man/RPS.Rd +++ b/man/RPS.Rd @@ -20,7 +20,8 @@ RPS( dimension.} \item{obs}{A named numerical array of the observation with at least time -dimension. The dimensions must be the same as 'exp' except 'memb_dim'.} +dimension. The dimensions must be the same as 'exp' except 'obs' doesn't +have 'memb_dim'.} \item{time_dim}{A character string indicating the name of the time dimension. The default value is 'sdate'.} diff --git a/man/RPSS.Rd b/man/RPSS.Rd index 47136f7..6871d80 100644 --- a/man/RPSS.Rd +++ b/man/RPSS.Rd @@ -8,68 +8,81 @@ RPSS( exp, obs, ref = NULL, + time_dim = "sdate", + memb_dim = "member", prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, - time_dim = "year", - member_dim = "member", ncores = NULL ) } \arguments{ -\item{exp}{A numerical array with the forecast with, at least, time dimension.} +\item{exp}{A named numerical array of the forecast with at least time +dimension.} -\item{obs}{A numerical array with the observations with, at least, time dimension. -The length of the time dimension must be the same as for "exp".} +\item{obs}{A named numerical array of the observation with at least time +dimension. The dimensions must be the same as 'exp' except 'obs' doesn't +have 'memb_dim'.} -\item{ref}{NULL or a numerical array with the reference forecast with, at least, time dimension. -The length of the time dimension must be the same as for "exp". If it is NULL, the climatological forecast is -used as reference forecast. The default value is NULL.} +\item{ref}{A named numerical array of the reference forecast data with at +least time dimension. The dimensions must be the same as 'exp' except +'memb_dim'. If it is NULL, the climatological forecast is used as reference +forecast. The default value is NULL.} -\item{prob_thresholds}{A numeric vector with the relative thresholds (between 0 and 1) between the categories. -The default value is c(1/3,2/3), which corresponds to tercile equiprobable categories.} +\item{time_dim}{A character string indicating the name of the time dimension. +The default value is 'sdate'.} -\item{indices_for_clim}{A vector with the indices to be taken along "time_dim" dimension for computing the thresholds -between the probabilistic categories. If NULL, the whole period is used. The default value is NULL.} +\item{memb_dim}{A character string indicating the name of the member dimension +to compute the probabilities of the forecast and the reference forecast. The +default value is 'member'.} -\item{Fair}{A logical indicating whether to compute the FairRPSS (the potential RPSS that the forecast would have with -an infinite ensemble size). The default value is FALSE.} +\item{prob_thresholds}{A numeric vector of the relative thresholds (from 0 to +1) between the categories. The default value is c(1/3, 2/3), which +corresponds to tercile equiprobable categories.} -\item{time_dim}{A character string indicating the name of the time dimension. -The default value is 'year'.} +\item{indices_for_clim}{A vector of the indices to be taken along 'time_dim' +for computing the thresholds between the probabilistic categories. If NULL, +the whole period is used. The default value is NULL.} -\item{member_dim}{A character string indicating the name of the member dimension to compute the -ensemble means of the forecast and reference forecast. If it is NULL, the ensemble means should -be provided directly to the function. The default value is 'member'.} +\item{Fair}{A logical indicating whether to compute the FairRPSS (the +potential RPSS that the forecast would have with an infinite ensemble size). +The default value is FALSE.} \item{ncores}{An integer indicating the number of cores to use for parallel computation. The default value is NULL.} } \value{ \item{$rpss}{ - A numerical array with the RPSS with the same dimensions as "exp" except the "time_dim" - and "member_dim" dimensions. + A numerical array of the RPSS with the same dimensions as "exp" except the + 'time_dim' and 'memb_dim' dimensions. } \item{$sign}{ - A logical array with the statistical significance of the RPSS with the same dimensions - as "exp" except the "time_dim" and "member_dim" dimensions. + A logical array of the statistical significance of the RPSS with the same + dimensions as 'exp' except the 'time_dim' and 'memb_dim' dimensions. } } \description{ -The Ranked Probability Skill Score (RPSS; Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7) -is the skill score based on the Ranked Probability Score (RPS; Wilks, 2011). It can be used to assess whether -a forecast presents an improvement or worsening with respect to a reference forecast. The RPSS ranges between -minus infinite and 1. If the RPSS is positive, it indicates that the forecast has higher skill than the -reference forecast, while a negative value means that it has a lower skill. Examples of reference forecasts -are the climatological forecast (same probabilities for all categories for all time steps), persistence, a previous model version, -and another model. It is computed as RPSS = 1 - RPS_exp / RPS_ref. The statistical significance is obtained based -on a Random Walk test at the 95% confidence level (DelSole and Tippett, 2016; https://doi.org/10.1175/MWR-D-15-0218.1) +The Ranked Probability Skill Score (RPSS; Wilks, 2011) is the skill score +based on the Ranked Probability Score (RPS; Wilks, 2011). It can be used to +assess whether a forecast presents an improvement or worsening with respect to +a reference forecast. The RPSS ranges between minus infinite and 1. If the +RPSS is positive, it indicates that the forecast has higher skill than the +reference forecast, while a negative value means that it has a lower skill. +Examples of reference forecasts are the climatological forecast (same +probabilities for all categories for all time steps), persistence, a previous +model version, and another model. It is computed as RPSS = 1 - RPS_exp / RPS_ref. +The statistical significance is obtained based on a Random Walk test at the +95% confidence level (DelSole and Tippett, 2016). } \examples{ -exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) -ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, year = 50)) -obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, year = 50)) -RPSS(exp = exp, obs = obs) ## climatology as reference forecast -RPSS(exp = exp, obs = obs, ref = ref) ## ref as reference forecast +exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) +ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +res <- RPSS(exp = exp, obs = obs) ## climatology as reference forecast +res <- RPSS(exp = exp, obs = obs, ref = ref) ## ref as reference forecast } +\references{ +Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7 +DelSole and Tippett, 2016; https://doi.org/10.1175/MWR-D-15-0218.1 +} diff --git a/tests/testthat/test-RPS.R b/tests/testthat/test-RPS.R index 7b1f77e..00f89dc 100644 --- a/tests/testthat/test-RPS.R +++ b/tests/testthat/test-RPS.R @@ -49,7 +49,7 @@ test_that("1. Input checks", { # exp, ref, and obs (2) expect_error( RPS(exp1, array(1:9, dim = c(sdate = 9))), - "Parameter 'exp' and 'obs' must have same length of all dimensions expect 'memb_dim'." + "Parameter 'exp' and 'obs' must have same length of all dimensions expect 'obs' doesn't have 'memb_dim'." ) # prob_thresholds expect_error( diff --git a/tests/testthat/test-RPSS.R b/tests/testthat/test-RPSS.R new file mode 100644 index 0000000..88fa18e --- /dev/null +++ b/tests/testthat/test-RPSS.R @@ -0,0 +1,272 @@ +context("s2dv::RPSS tests") + +############################################## + +# dat1 +set.seed(1) +exp1 <- array(rnorm(60), dim = c(member = 3, sdate = 10, lat = 2)) +set.seed(2) +obs1 <- array(rnorm(20), dim = c(sdate = 10, lat = 2)) +set.seed(3) +ref1 <- array(rnorm(40), dim = c(member = 2, sdate = 10, lat = 2)) + +# dat2 +set.seed(1) +exp2 <- array(rnorm(20), dim = c(member = 2, sdate = 10)) +set.seed(2) +obs2 <- array(rnorm(10), dim = c(sdate = 10)) +set.seed(3) +ref2 <- array(rnorm(20), dim = c(member = 2, sdate = 10)) + + +############################################## +test_that("1. Input checks", { + # exp and obs (1) + expect_error( + RPSS(c()), + 'Parameter "exp" must be a numeric array.' + ) + expect_error( + RPSS(exp1, c()), + 'Parameter "obs" must be a numeric array.' + ) + + # time_dim + expect_error( + RPSS(exp1, obs1, time_dim = 1), + 'Parameter "time_dim" must be a character string.' + ) + expect_error( + RPSS(exp1, obs1, time_dim = 'time'), + "Parameter 'time_dim' is not found in 'exp' or 'obs' dimension." + ) + expect_error( + RPSS(exp2, obs2, array(rnorm(20), dim = c(member = 2, time = 10))), + "Parameter 'time_dim' is not found in 'ref' dimension." + ) + # memb_dim + expect_error( + RPSS(exp1, obs1, memb_dim = TRUE), + "Parameter 'memb_dim' must be a character string." + ) + expect_error( + RPSS(exp1, obs1, memb_dim = 'memb'), + "Parameter 'memb_dim' is not found in 'exp' dimension." + ) + expect_error( + RPSS(exp2, obs2, array(rnorm(20), dim = c(memb = 2, sdate = 10))), + "Parameter 'memb_dim' is not found in 'ref' dimension." + ) + # exp, ref, and obs (2) + expect_error( + RPSS(exp1, array(1:9, dim = c(sdate = 9))), + "Parameter 'exp' and 'obs' must have same length of all dimensions expect 'obs' doesn't have 'memb_dim'." + ) + expect_error( + RPSS(exp1, obs1, ref2), + "Parameter 'exp' and 'obs' must have same length of all dimensions expect 'memb_dim'." + ) + # prob_thresholds + expect_error( + RPSS(exp1, obs1, ref1, prob_thresholds = 1), + "Parameter 'prob_thresholds' must be a numeric vector between 0 and 1." + ) + # indices_for_clim + expect_error( + RPSS(exp1, obs1, ref1, indices_for_clim = array(1:6, dim = c(2, 3))), + "Parameter 'indices_for_clim' must be NULL or a numeric vector." + ) + expect_error( + RPSS(exp1, obs1, indices_for_clim = 3:11), + "Parameter 'indices_for_clim' should be the indices of 'time_dim'." + ) + # Fair + expect_error( + RPSS(exp1, obs1, Fair = 1), + "Parameter 'Fair' must be either TRUE or FALSE." + ) + # ncores + expect_error( + RPSS(exp2, obs2, ncores = 1.5), + "Parameter 'ncores' must be either NULL or a positive integer." + ) + +}) + +############################################## +test_that("2. Output checks: dat1", { + +expect_equal( +names(RPSS(exp1, obs1)), +c("rpss", "sign") +) +expect_equal( +names(RPSS(exp1, obs1, ref1)), +c("rpss", "sign") +) +expect_equal( +dim(RPSS(exp1, obs1)$rpss), +c(lat = 2) +) +expect_equal( +dim(RPSS(exp1, obs1)$sign), +c(lat = 2) +) +expect_equal( +dim(RPSS(exp1, obs1, ref1)$rpss), +c(lat = 2) +) +expect_equal( +dim(RPSS(exp1, obs1, ref1)$sign), +c(lat = 2) +) +# ref = NULL +expect_equal( +as.vector(RPSS(exp1, obs1)$rpss), +c(0.15789474, -0.05263158), +tolerance = 0.0001 +) +expect_equal( +as.vector(RPSS(exp1, obs1)$sign), +c(FALSE, FALSE), +) +expect_equal( +as.vector(RPSS(exp1, obs1, Fair = T)$rpss), +c(0.5263158, 0.3684211), +tolerance = 0.0001 +) +expect_equal( +as.vector(RPSS(exp1, obs1, indices_for_clim = 3:5)$rpss), +c(-0.4062500, -0.1052632), +tolerance = 0.0001 +) +expect_equal( +as.vector(RPSS(exp1, obs1, prob_thresholds = seq(0.1, 0.9, 0.1))$rpss), +c(0.03030303, -0.14478114), +tolerance = 0.0001 +) +# ref = ref +expect_equal( +as.vector(RPSS(exp1, obs1, ref1)$rpss), +c(0.5259259, 0.4771242), +tolerance = 0.0001 +) +expect_equal( +as.vector(RPSS(exp1, obs1, ref1)$sign), +c(FALSE, FALSE) +) +expect_equal( +as.vector(RPSS(exp1, obs1, ref1, Fair = T)$rpss), +c(0.6000000, 0.6190476), +tolerance = 0.0001 +) +expect_equal( +as.vector(RPSS(exp1, obs1, ref1, indices_for_clim = 3:5)$rpss), +c(0.2857143, 0.4166667), +tolerance = 0.0001 +) +expect_equal( +as.vector(RPSS(exp1, obs1, ref1, indices_for_clim = 3:5)$sign), +c(FALSE, FALSE) +) +expect_equal( +as.vector(RPSS(exp1, obs1, ref1, prob_thresholds = seq(0.1, 0.9, 0.1))$rpss), +c(0.4754098, 0.3703704), +tolerance = 0.0001 +) +expect_equal( +as.vector(RPSS(exp1, obs1, ref1, prob_thresholds = seq(0.1, 0.9, 0.1))$sign), +c(T, F) +) + +}) + +############################################## +test_that("3. Output checks: dat2", { + +expect_equal( +names(RPSS(exp2, obs2)), +c("rpss", "sign") +) +expect_equal( +names(RPSS(exp2, obs2, ref2)), +c("rpss", "sign") +) +expect_equal( +dim(RPSS(exp2, obs2)$rpss), +NULL +) +expect_equal( +dim(RPSS(exp2, obs2)$sign), +NULL +) +expect_equal( +dim(RPSS(exp2, obs2, ref2)$rpss), +NULL +) +expect_equal( +dim(RPSS(exp2, obs2, ref2)$sign), +NULL +) +# ref = NULL +expect_equal( +as.vector(RPSS(exp2, obs2)$rpss), +c(-0.7763158), +tolerance = 0.0001 +) +expect_equal( +as.vector(RPSS(exp2, obs2)$sign), +FALSE, +) +expect_equal( +as.vector(RPSS(exp2, obs2, Fair = T)$rpss), +c(-0.1842105), +tolerance = 0.0001 +) +expect_equal( +as.vector(RPSS(exp2, obs2, indices_for_clim = 3:5)$rpss), +-0.8984375, +tolerance = 0.0001 +) +expect_equal( +as.vector(RPSS(exp2, obs2, prob_thresholds = seq(0.1, 0.9, 0.1))$rpss), +c(-0.7272727), +tolerance = 0.0001 +) +# ref = ref +expect_equal( +as.vector(RPSS(exp2, obs2, ref2)$rpss), +0, +tolerance = 0.0001 +) +expect_equal( +as.vector(RPSS(exp2, obs2, ref2)$sign), +FALSE +) +expect_equal( +as.vector(RPSS(exp2, obs2, ref2, Fair = T)$rpss), +0, +tolerance = 0.0001 +) +expect_equal( +as.vector(RPSS(exp2, obs2, ref2, indices_for_clim = 3:5)$rpss), +0.03571429, +tolerance = 0.0001 +) +expect_equal( +as.vector(RPSS(exp2, obs2, ref2, indices_for_clim = 3:5)$sign), +FALSE +) +expect_equal( +as.vector(RPSS(exp2, obs2, ref2, prob_thresholds = seq(0.1, 0.9, 0.1))$rpss), +0.06557377, +tolerance = 0.0001 +) +expect_equal( +as.vector(RPSS(exp2, obs2, ref2, prob_thresholds = seq(0.1, 0.9, 0.1))$sign), +FALSE +) + + + +}) -- GitLab From 8c50012f7c8b1f9d33370cd4a67d509a5168ed43 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 12 May 2022 18:22:36 +0200 Subject: [PATCH 54/83] Move easyVerification to Import --- DESCRIPTION | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index f2577bf..9690f44 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -37,9 +37,9 @@ Imports: NbClust, multiApply (>= 2.1.1), SpecsVerification (>= 0.5.0), - easyNCDF + easyNCDF, + easyVerification Suggests: - easyVerification, testthat License: Apache License 2.0 URL: https://earth.bsc.es/gitlab/es/s2dv/ -- GitLab From 02cfb4067cc7be76f0ede438d0ae0245385751c4 Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 13 May 2022 09:42:44 +0200 Subject: [PATCH 55/83] Change the order of input obs and ref. --- R/DiffCorr.R | 60 ++++++++++++-------------- man/DiffCorr.Rd | 12 +++--- tests/testthat/test-DiffCorr.R | 78 +++++++++++++++++----------------- 3 files changed, 73 insertions(+), 77 deletions(-) diff --git a/R/DiffCorr.R b/R/DiffCorr.R index 511dd3a..c83b7b8 100644 --- a/R/DiffCorr.R +++ b/R/DiffCorr.R @@ -13,11 +13,11 @@ #' #'@param exp A named numerical array of the forecast data with at least time #' dimension. +#'@param obs A named numerical array with the observations with at least time +#' dimension. The dimensions must be the same as "exp" except 'memb_dim'. #'@param ref A named numerical array of the reference forecast data with at #' least time dimension. The dimensions must be the same as "exp" except #' 'memb_dim'. -#'@param obs A named numerical array with the observations with at least time -#' dimension. The dimensions must be the same as "exp" except 'memb_dim'. #'@param N.eff Effective sample size to be used in the statistical significance #' test. It can be NA (and it will be computed with the s2dv:::.Eno), a #' numeric (which is used for all cases), or an array with the same dimensions @@ -62,13 +62,13 @@ #' #'@examples #' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) -#' ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) #' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) -#' res <- DiffCorr(exp, ref, obs, memb_dim = 'member') +#' ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +#' res <- DiffCorr(exp, obs, ref, memb_dim = 'member') #' #'@import multiApply #'@export -DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', +DiffCorr <- function(exp, obs, ref, N.eff = NA, time_dim = 'sdate', memb_dim = NULL, method = 'pearson', alpha = NULL, handle.na = 'return.na', ncores = NULL) { @@ -76,10 +76,10 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', ## exp, ref, and obs (1) if (!is.array(exp) | !is.numeric(exp)) stop('Parameter "exp" must be a numeric array.') - if (!is.array(ref) | !is.numeric(ref)) - stop('Parameter "ref" must be a numeric array.') if (!is.array(obs) | !is.numeric(obs)) stop('Parameter "obs" must be a numeric array.') + if (!is.array(ref) | !is.numeric(ref)) + stop('Parameter "ref" must be a numeric array.') ## N.eff if (is.array(N.eff)) { if (!is.numeric(N.eff)) stop("Parameter 'N.eff' must be numeric.") @@ -95,9 +95,9 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', ## time_dim if (!is.character(time_dim) | length(time_dim) != 1) stop('Parameter "time_dim" must be a character string.') - if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(ref)) | - !time_dim %in% names(dim(obs))) { - stop("Parameter 'time_dim' is not found in 'exp', 'ref', or 'obs' dimension.") + if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs)) | + !time_dim %in% names(dim(ref))) { + stop("Parameter 'time_dim' is not found in 'exp', 'obs', or 'ref' dimension.") } ## memb_dim if (!is.null(memb_dim)) { @@ -110,15 +110,15 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', } ## exp, ref, and obs (2) name_exp <- sort(names(dim(exp))) - name_ref <- sort(names(dim(ref))) name_obs <- sort(names(dim(obs))) + name_ref <- sort(names(dim(ref))) if (!is.null(memb_dim)) { name_exp <- name_exp[-which(name_exp == memb_dim)] name_ref <- name_ref[-which(name_ref == memb_dim)] } - if (!identical(length(name_exp), length(name_ref), length(name_obs)) | - !identical(dim(exp)[name_exp], dim(ref)[name_ref], dim(obs)[name_obs])) { - stop(paste0("Parameter 'exp', 'ref', and 'obs' must have same length of ", + if (length(name_exp) != length(name_obs) | length(name_exp) != length(name_ref) | + !identical(dim(exp)[name_exp], dim(obs)[name_obs]) | !identical(dim(exp)[name_exp], dim(ref)[name_ref])) { + stop(paste0("Parameter 'exp', 'obs', and 'ref' must have same length of ", "all dimensions expect 'memb_dim'.")) } ## method @@ -161,9 +161,6 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', ref <- apply(ref, c(1:length(dim_ref))[-ref_memb_dim_ind], mean, na.rm = FALSE) if (is.null(dim(exp))) exp <- array(exp, dim = c(dim_exp[time_dim])) if (is.null(dim(ref))) ref <- array(ref, dim = c(dim_ref[time_dim])) - -# exp <- Apply(data = exp, target_dims = memb_dim, fun = mean, na.rm = FALSE, ncores = ncores)$output1 -# ref <- Apply(data = ref, target_dims = memb_dim, fun = mean, na.rm = FALSE, ncores = ncores)$output1 } # output_dims @@ -174,18 +171,17 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', } # Correlation difference if (is.array(N.eff)) { - output <- Apply(data = list(exp = exp, ref = ref, - obs = obs, N.eff = N.eff), - target_dims = list(exp = time_dim, ref = time_dim, - obs = time_dim, N.eff = NULL), + output <- Apply(data = list(exp = exp, obs = obs, ref = ref, + N.eff = N.eff), + target_dims = list(exp = time_dim, obs = time_dim, + ref = time_dim, N.eff = NULL), output_dims = output_dims, fun = .DiffCorr, method = method, alpha = alpha, handle.na = handle.na, ncores = ncores) } else { - output <- Apply(data = list(exp = exp, ref = ref, - obs = obs), - target_dims = list(exp = time_dim, ref = time_dim, - obs = time_dim), + output <- Apply(data = list(exp = exp, obs = obs, ref = ref), + target_dims = list(exp = time_dim, obs = time_dim, + ref = time_dim), output_dims = output_dims, N.eff = N.eff, fun = .DiffCorr, method = method, alpha = alpha, handle.na = handle.na, ncores = ncores) @@ -194,9 +190,9 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', return(output) } -.DiffCorr <- function(exp, ref, obs, N.eff, method, alpha, handle.na) { +.DiffCorr <- function(exp, obs, ref, N.eff = NA, method = 'pearson', alpha = NULL, handle.na = 'return.na') { - .diff.corr <- function(exp, ref, obs, method, N.eff, alpha) { + .diff.corr <- function(exp, obs, ref, method = 'pearson', N.eff = NA, alpha = NULL) { # Correlation difference cor.exp <- cor(x = exp, y = obs, method = method) @@ -224,16 +220,16 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', #================================================== - if (anyNA(exp) | anyNA(ref) | anyNA(obs)) { ## There are NAs + if (anyNA(exp) | anyNA(obs) | anyNA(ref)) { ## There are NAs if (handle.na == 'only.complete.triplets') { - nna <- is.na(exp) | is.na(ref) | is.na(obs) # A vector of T/F + nna <- is.na(exp) | is.na(obs) | is.na(ref) # A vector of T/F if (all(nna)) stop("There is no complete set of forecasts and observations.") # Remove the incomplete set exp <- exp[!nna] - ref <- ref[!nna] obs <- obs[!nna] + ref <- ref[!nna] - output <- .diff.corr(exp = exp, ref = ref, obs = obs, method = method, + output <- .diff.corr(exp = exp, obs = obs, ref = ref, method = method, N.eff = N.eff, alpha = alpha) } else if (handle.na == 'return.na') { @@ -246,7 +242,7 @@ DiffCorr <- function(exp, ref, obs, N.eff = NA, time_dim = 'sdate', } } else { ## There is no NA - output <- .diff.corr(exp = exp, ref = ref, obs = obs, method = method, + output <- .diff.corr(exp = exp, obs = obs, ref = ref, method = method, N.eff = N.eff, alpha = alpha) } return(output) diff --git a/man/DiffCorr.Rd b/man/DiffCorr.Rd index 7f56289..d920536 100644 --- a/man/DiffCorr.Rd +++ b/man/DiffCorr.Rd @@ -6,8 +6,8 @@ \usage{ DiffCorr( exp, - ref, obs, + ref, N.eff = NA, time_dim = "sdate", memb_dim = NULL, @@ -21,13 +21,13 @@ DiffCorr( \item{exp}{A named numerical array of the forecast data with at least time dimension.} +\item{obs}{A named numerical array with the observations with at least time +dimension. The dimensions must be the same as "exp" except 'memb_dim'.} + \item{ref}{A named numerical array of the reference forecast data with at least time dimension. The dimensions must be the same as "exp" except 'memb_dim'.} -\item{obs}{A named numerical array with the observations with at least time -dimension. The dimensions must be the same as "exp" except 'memb_dim'.} - \item{N.eff}{Effective sample size to be used in the statistical significance test. It can be NA (and it will be computed with the s2dv:::.Eno), a numeric (which is used for all cases), or an array with the same dimensions @@ -91,8 +91,8 @@ to account for the autocorrelation of the time series (von Storch and Zwiers, } \examples{ exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) -ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) -res <- DiffCorr(exp, ref, obs, memb_dim = 'member') +ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +res <- DiffCorr(exp, obs, ref, memb_dim = 'member') } diff --git a/tests/testthat/test-DiffCorr.R b/tests/testthat/test-DiffCorr.R index 2d1fbaf..952e14f 100644 --- a/tests/testthat/test-DiffCorr.R +++ b/tests/testthat/test-DiffCorr.R @@ -30,62 +30,62 @@ test_that("1. Input checks", { ) expect_error( DiffCorr(exp1, c('a')), - 'Parameter "ref" must be a numeric array.' + 'Parameter "obs" must be a numeric array.' ) expect_error( - DiffCorr(exp1, ref1, c()), - 'Parameter "obs" must be a numeric array.' + DiffCorr(exp1, obs1, c()), + 'Parameter "ref" must be a numeric array.' ) # N.eff expect_error( - DiffCorr(exp1, ref1, obs1, N.eff = array(1, dim = c(lat = 2, lon = 2))), + DiffCorr(exp1, obs1, ref1, N.eff = array(1, dim = c(lat = 2, lon = 2))), "If parameter \"N.eff\" is provided with an array, it must have the same dimensions as \"obs\" except \"time_dim\"." ) expect_error( - DiffCorr(exp1, ref1, obs1, N.eff = 1:3), + DiffCorr(exp1, obs1, ref1, N.eff = 1:3), 'Parameter "N.eff" must be NA, a numeric, or an array with the same dimensions as "obs" except "time_dim".' ) # time_dim expect_error( - DiffCorr(exp1, ref1, obs1, time_dim = 1), + DiffCorr(exp1, obs1, ref1, time_dim = 1), 'Parameter "time_dim" must be a character string.' ) expect_error( - DiffCorr(exp1, ref1, obs1, time_dim = 'time'), - "Parameter 'time_dim' is not found in 'exp', 'ref', or 'obs' dimension." + DiffCorr(exp1, obs1, ref1, time_dim = 'time'), + "Parameter 'time_dim' is not found in 'exp', 'obs', or 'ref' dimension." ) # memb_dim expect_error( - DiffCorr(exp1, ref1, obs1, memb_dim = TRUE), + DiffCorr(exp1, obs1, ref1, memb_dim = TRUE), "Parameter 'memb_dim' must be a character string." ) expect_error( - DiffCorr(exp1, ref1, obs1, memb_dim = 'member'), + DiffCorr(exp1, obs1, ref1, memb_dim = 'member'), "Parameter 'memb_dim' is not found in 'exp' or 'ref' dimension." ) # exp, ref, and obs (2) expect_error( - DiffCorr(exp1, array(1:10, dim = c(sdate = 10, memb = 1)), obs1, memb_dim = 'memb'), - "Parameter 'exp', 'ref', and 'obs' must have same length of all dimensions expect 'memb_dim'." + DiffCorr(exp1, array(1:10, dim = c(sdate = 10, memb = 1)), ref1, memb_dim = 'memb'), + "Parameter 'exp', 'obs', and 'ref' must have same length of all dimensions expect 'memb_dim'." ) # method expect_error( - DiffCorr(exp1, ref1, obs1, method = 'asd', memb_dim = 'memb'), + DiffCorr(exp1, obs1, ref1, method = 'asd', memb_dim = 'memb'), 'Parameter "method" must be "pearson", "kendall", or "spearman".' ) # alpha expect_error( - DiffCorr(exp2, ref2, obs2, alpha = 1), + DiffCorr(exp2, obs2, ref2, alpha = 1), 'Parameter "alpha" must be NULL or a number between 0 and 1.' ) # handle.na expect_error( - DiffCorr(exp2, ref2, obs2, handle.na = TRUE), + DiffCorr(exp2, obs2, ref2, handle.na = TRUE), 'Parameter "handle.na" must be "return.na", "only.complete.triplets" or "na.fail".' ) # ncores expect_error( - DiffCorr(exp2, ref2, obs2, ncores = 1.5), + DiffCorr(exp2, obs2, ref2, ncores = 1.5), 'Parameter "ncores" must be either NULL or a positive integer.' ) @@ -94,67 +94,67 @@ test_that("1. Input checks", { ############################################## test_that("2. Output checks: dat1", { expect_equal( -names(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb')), +names(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb')), c("diff.corr", "p.val") ) expect_equal( -dim(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb')$diff), +dim(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb')$diff), c(lat = 3, lon = 2) ) expect_equal( -dim(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb')$p.val), +dim(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb')$p.val), c(lat = 3, lon = 2) ) expect_equal( -as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb')$diff), +as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb')$diff), c(0.27347087, 0.50556882, 0.08855968, 0.24199701, 0.22935182, 0.88336336), tolerance = 0.0001 ) expect_equal( -as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb')$p), +as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb')$p), c(0.26166060, 0.15899774, 0.39264452, 0.27959883, 0.34736305, 0.07479832), tolerance = 0.0001 ) expect_equal( -names(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', alpha = 0.05)), +names(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', alpha = 0.05)), c("diff.corr", "sign") ) expect_equal( -as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', alpha = 0.05)$diff.corr), +as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', alpha = 0.05)$diff.corr), c(0.27347087, 0.50556882, 0.08855968, 0.24199701, 0.22935182, 0.88336336), tolerance = 0.0001 ) expect_equal( -as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', alpha = 0.05)$sign), +as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', alpha = 0.05)$sign), rep(FALSE, 6) ) expect_equal( -as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "kendall")$diff.corr), +as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', method = "kendall")$diff.corr), c(0.08888889, 0.35555556, 0.00000000, -0.04444444, 0.00000000, 0.93333333), tolerance = 0.0001 ) expect_equal( -as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "kendall")$p), +as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', method = "kendall")$p), c(0.42259038, 0.25373083, 0.50000000, 0.54183730, 0.50000000, 0.06307063), tolerance = 0.0001 ) expect_equal( -as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "spearman")$diff.corr), +as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', method = "spearman")$diff.corr), c(0.07272727, 0.54545455, 0.10909091, -0.01212121, -0.03636364, 1.01818182), tolerance = 0.0001 ) expect_equal( -as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', method = "spearman")$p), +as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', method = "spearman")$p), c(0.4358970, 0.1341575, 0.3448977, 0.5114262, 0.5264872, 0.0437861), tolerance = 0.0001 ) expect_equal( -as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', N.eff = Neff1)$diff.corr), +as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', N.eff = Neff1)$diff.corr), c(0.27347087, 0.50556882, 0.08855968, 0.24199701, 0.22935182, 0.88336336), tolerance = 0.0001 ) expect_equal( -as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', N.eff = Neff1)$p), +as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', N.eff = Neff1)$p), c(0.27841537, 0.15899774, 0.40096749, 0.27959883, 0.35889690, 0.07479832), tolerance = 0.0001 ) @@ -163,17 +163,17 @@ tolerance = 0.0001 #--------------------------- exp1[1] <- NA expect_equal( -as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb')$diff.corr), +as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb')$diff.corr), c(NA, 0.50556882, 0.08855968, 0.24199701, 0.22935182, 0.88336336), tolerance = 0.0001 ) expect_equal( -as.vector(DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', handle.na = 'only.complete.triplets')$diff.corr), +as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', handle.na = 'only.complete.triplets')$diff.corr), c(0.17418065, 0.50556882, 0.08855968, 0.24199701, 0.22935182, 0.88336336), tolerance = 0.0001 ) expect_error( -DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', handle.na = 'na.fail'), +DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', handle.na = 'na.fail'), "The data contain NAs." ) @@ -181,7 +181,7 @@ exp1[1,1,1,1:3] <- NA ref1[1,1,1,4:8] <- NA obs1[1,1,9:10] <- NA expect_error( -DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', handle.na = 'only.complete.triplets'), +DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', handle.na = 'only.complete.triplets'), "There is no complete set of forecasts and observations." ) @@ -192,24 +192,24 @@ DiffCorr(exp1, ref1, obs1, memb_dim = 'memb', handle.na = 'only.complete.triplet test_that("3. Output checks: dat2", { expect_equal( -names(DiffCorr(exp2, ref2, obs2)), +names(DiffCorr(exp2, obs2, ref2)), c("diff.corr", "p.val") ) expect_equal( -dim(DiffCorr(exp2, ref2, obs2)$diff.corr), +dim(DiffCorr(exp2, obs2, ref2)$diff.corr), NULL ) expect_equal( -dim(DiffCorr(exp2, ref2, obs2)$p), +dim(DiffCorr(exp2, obs2, ref2)$p), NULL ) expect_equal( -DiffCorr(exp2, ref2, obs2)$p, +DiffCorr(exp2, obs2, ref2)$p, 0.6577392, tolerance = 0.0001 ) expect_equal( -DiffCorr(exp2, ref2, obs2)$diff, +DiffCorr(exp2, obs2, ref2)$diff, -0.2434725, tolerance = 0.0001 ) -- GitLab From 07de22d56c2832db72911f66b7eb22cdcb767ddc Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 13 May 2022 17:05:18 +0200 Subject: [PATCH 56/83] Fix the bug of calculating nclusters --- R/Cluster.R | 56 +++++++++++-------- man/Cluster.Rd | 1 + tests/testthat/test-Cluster.R | 101 ++++++++++++++++++++++++++++------ 3 files changed, 117 insertions(+), 41 deletions(-) diff --git a/R/Cluster.R b/R/Cluster.R index d6c5dff..2fac687 100644 --- a/R/Cluster.R +++ b/R/Cluster.R @@ -37,7 +37,7 @@ #' "ptbiserial", "gap", "frey", "mcclain", "gamma", "gplus", "tau", "dunn", #' "hubert", "sdindex", and "sdbw". #' One can also use all of them with the option 'alllong' or almost all indices -# except gap, gamma, gplus and tau with 'all', when the optimal number of +#' except gap, gamma, gplus and tau with 'all', when the optimal number of #' clusters K is detremined by the majority rule (the maximum of histogram of #' the results of all indices with finite solutions). Use of some indices on #' a big and/or unstructured dataset can be computationally intense and/or @@ -214,8 +214,23 @@ Cluster <- function(data, weights = NULL, time_dim = 'sdate', space_dim = NULL, } ############################### - # Calculate Cluster + # Compute nclusters + if (is.null(nclusters)) { + pdf(file = NULL) + nbclust.results <- NbClust::NbClust(data, distance = 'euclidean', + min.nc = 2, max.nc = 20, + method = 'kmeans', index = index) + dev.off() + if (index == 'all' || index == 'alllong') { + kmc <- hist(nbclust.results$Best.nc[1, ], breaks = seq(0, 20), + plot = FALSE)$counts + nclusters <- which(kmc == max(kmc)) + } else { + nclusters <- nbclust.results$Best.nc[1] + } + } + # Calculate Cluster output <- Apply(list(data), target_dims = c(time_dim, space_dim), fun = .Cluster, @@ -225,7 +240,7 @@ Cluster <- function(data, weights = NULL, time_dim = 'sdate', space_dim = NULL, return(output) } -.Cluster <- function(data, weights = NULL, nclusters = NULL, index = 'sdindex') { +.Cluster <- function(data, weights = NULL, nclusters, index = 'sdindex') { # data: [time, (lat, lon)] dat_dim <- dim(data) @@ -241,27 +256,22 @@ Cluster <- function(data, weights = NULL, time_dim = 'sdate', space_dim = NULL, data <- do.call(abind::abind, c(data_list, along = 0)) } } + + kmeans.results <- kmeans(data, centers = nclusters, iter.max = 300, + nstart = 30) - if (!is.null(nclusters)) { - kmeans.results <- kmeans(data, centers = nclusters, iter.max = 300, - nstart = 30) - } else { - pdf(file = NULL) - nbclust.results <- NbClust::NbClust(data, distance = 'euclidean', - min.nc = 2, max.nc = 20, - method = 'kmeans', index = index) - dev.off() - - if (index == 'all' || index == 'alllong') { - kmc <- hist(nbclust.results$Best.nc[1, ], breaks = seq(0, 20), - plot = FALSE)$counts - kmc1 <- which(kmc == max(kmc)) - } else { - kmc1 <- nbclust.results$Best.nc[1] - } +#---------------NEW--------------- + # Add dimension names and shape space_dim back + kmeans.results$cluster <- as.array(kmeans.results$cluster) + names(dim(kmeans.results$cluster)) <- names(dat_dim)[1] + kmeans.results$centers <- array(kmeans.results$centers, + dim = c(nclusters, dat_dim[-1])) + names(dim(kmeans.results$centers)) <- c('K', names(dat_dim)[-1]) + kmeans.results$withinss <- as.array(kmeans.results$withinss) + names(dim(kmeans.results$withinss)) <- 'K' + kmeans.results$size <- as.array(kmeans.results$size) + names(dim(kmeans.results$size)) <- 'K' - kmeans.results <- kmeans(data, centers = kmc1, iter.max = 300, - nstart = 30) - } +#----------NEW_END---------------- invisible(kmeans.results) } diff --git a/man/Cluster.Rd b/man/Cluster.Rd index 8c46b3d..1fa6a1f 100644 --- a/man/Cluster.Rd +++ b/man/Cluster.Rd @@ -47,6 +47,7 @@ Other indices available in NBClust are "kl", "ch", "hartigan", "ccc", "ptbiserial", "gap", "frey", "mcclain", "gamma", "gplus", "tau", "dunn", "hubert", "sdindex", and "sdbw". One can also use all of them with the option 'alllong' or almost all indices + except gap, gamma, gplus and tau with 'all', when the optimal number of clusters K is detremined by the majority rule (the maximum of histogram of the results of all indices with finite solutions). Use of some indices on a big and/or unstructured dataset can be computationally intense and/or diff --git a/tests/testthat/test-Cluster.R b/tests/testthat/test-Cluster.R index 4e0a7b1..13297d8 100644 --- a/tests/testthat/test-Cluster.R +++ b/tests/testthat/test-Cluster.R @@ -10,7 +10,7 @@ context("s2dv::Cluster tests") # dat2 set.seed(2) dat2 <- array(rnorm(300), - dim = c(sdate = 50, lat = 2, lon = 3)) + dim = c(dat = 1, sdate = 50, lat = 2, lon = 3)) weights2 <- array(c(0.9, 1.1), dim = c(lat = 2, lon = 3)) ############################################## @@ -78,24 +78,76 @@ test_that("1. Input checks", { ############################################## test_that("2. Output checks: dat1", { -# The output is random. Only check dimensions. expect_equal( - length(Cluster(dat1, weights1, space_dim = 'space')$cluster), - 50 + names(Cluster(dat1, weights1, space_dim = 'space')), + c("cluster", "centers", "totss", "withinss", "tot.withinss", + "betweenss", "size", "iter", "ifault") ) expect_equal( - length(Cluster(dat1)$cluster), - 100 + dim(Cluster(dat1, weights1, space_dim = 'space')$cluster), + c(sdate = 50) + ) + expect_equal( + dim(Cluster(dat1)$cluster), + c(sdate = 50, space = 2) ) expect_equal( dim(Cluster(dat1, weights1, space_dim = 'space')$centers), - c(8, 2) + c(K = 7, space = 2) ) expect_equal( dim(Cluster(dat1, weights1, nclusters = 3, space_dim = 'space')$centers), - c(3, 2) + c(K = 3, space = 2) + ) + expect_equal( + dim(Cluster(dat1, weights1, space_dim = 'space')$withinss), + c(K = 7) + ) + expect_equal( + dim(Cluster(dat1, weights1, space_dim = 'space')$size), + c(K = 7) + ) + expect_equal( + as.vector(Cluster(dat1, weights1, space_dim = 'space')$cluster)[1:5], + c(7, 5, 7, 5, 4) + ) + expect_equal( + as.vector(Cluster(dat1, weights1, space_dim = 'space')$centers[1:5, 2]), + c(-0.08553708, -1.55834000, 1.60550527, 1.79873789, -0.74919031), + tolerance = 0.0001 + ) + expect_equal( + as.vector(Cluster(dat1, weights1, space_dim = 'space')$totss), + 83.08558, + tolerance = 0.0001 + ) + expect_equal( + as.vector(Cluster(dat1, weights1, space_dim = 'space')$withinss)[1:3], + c(1.8509071, 0.6242121, 0.7800697), + tolerance = 0.0001 + ) + expect_equal( + as.vector(Cluster(dat1, weights1, space_dim = 'space')$tot.withinss), + 11.71979, + tolerance = 0.0001 + ) + expect_equal( + as.vector(Cluster(dat1, weights1, space_dim = 'space')$betweenss), + 71.36579, + tolerance = 0.0001 + ) + expect_equal( + as.vector(Cluster(dat1, weights1, space_dim = 'space')$size), + c(4, 5, 4, 6, 10, 8, 13) + ) + expect_equal( + as.vector(Cluster(dat1, weights1, space_dim = 'space')$iter), + 2 + ) + expect_equal( + as.vector(Cluster(dat1, weights1, space_dim = 'space')$ifault), + 0 ) - }) @@ -103,24 +155,37 @@ test_that("2. Output checks: dat1", { test_that("3. Output checks: dat2", { expect_equal( - length(Cluster(dat2, weights2, space_dim = c('lat', 'lon'))$cluster), - 50 + names(Cluster(dat2, weights2, space_dim = c('lat', 'lon'))), + c("cluster", "centers", "totss", "withinss", "tot.withinss", + "betweenss", "size", "iter", "ifault") ) expect_equal( - length(Cluster(dat2)$cluster), - 300 + dim(Cluster(dat2, weights2, space_dim = c('lat', 'lon'))$cluster), + c(sdate = 50, dat = 1) ) expect_equal( - length(Cluster(dat2, space_dim = c('lon', 'lat'))$cluster), - 50 + dim(Cluster(dat2)$cluster), + c(sdate = 50, dat = 1, lat = 2, lon = 3) ) expect_equal( dim(Cluster(dat2, weights2, space_dim = c('lat', 'lon'))$centers), - c(7, 6) + c(K = 6, lat = 2, lon = 3, dat = 1) + ) + expect_equal( + dim(Cluster(dat2, weights2, nclusters = 3, space_dim = c('lat', 'lon'))$centers), + c(K = 3, lat = 2, lon = 3, dat = 1) + ) + expect_equal( + dim(Cluster(dat2, weights2, space_dim = c('lat', 'lon'))$withinss), + c(K = 6, dat = 1) + ) + expect_equal( + dim(Cluster(dat2, weights2, space_dim = c('lat', 'lon'))$size), + c(K = 6, dat = 1) ) expect_equal( - dim(Cluster(dat2, weights2, nclusters = 5, space_dim = c('lat', 'lon'))$centers), - c(5, 6) + as.vector(Cluster(dat2, weights2, space_dim = c('lat', 'lon'))$cluster)[1:5], + c(5, 1, 2, 1, 5) ) }) -- GitLab From ed5a8f3ef529fda86c4baa856afd6cec456ddeb9 Mon Sep 17 00:00:00 2001 From: aho Date: Mon, 16 May 2022 15:35:33 +0200 Subject: [PATCH 57/83] Allow obs to have memb_dim --- R/RPS.R | 22 +++++++++++++++------- R/RPSS.R | 22 +++++++++++++++------- man/RPS.Rd | 3 +-- man/RPSS.Rd | 3 +-- tests/testthat/test-RPS.R | 13 +++++++++++-- tests/testthat/test-RPSS.R | 10 +++++++--- 6 files changed, 50 insertions(+), 23 deletions(-) diff --git a/R/RPS.R b/R/RPS.R index 7b4af7c..84956ac 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -14,8 +14,7 @@ #'@param exp A named numerical array of the forecast with at least time #' dimension. #'@param obs A named numerical array of the observation with at least time -#' dimension. The dimensions must be the same as 'exp' except 'obs' doesn't -#' have 'memb_dim'. +#' dimension. The dimensions must be the same as 'exp' except 'memb_dim'. #'@param time_dim A character string indicating the name of the time dimension. #' The default value is 'sdate'. #'@param memb_dim A character string indicating the name of the member dimension @@ -78,10 +77,13 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', name_exp <- sort(names(dim(exp))) name_obs <- sort(names(dim(obs))) name_exp <- name_exp[-which(name_exp == memb_dim)] + if (memb_dim %in% name_obs) { + name_obs <- name_obs[-which(name_obs == memb_dim)] + } if (!identical(length(name_exp), length(name_obs)) | !identical(dim(exp)[name_exp], dim(obs)[name_obs])) { stop(paste0("Parameter 'exp' and 'obs' must have same length of ", - "all dimensions expect 'obs' doesn't have 'memb_dim'.")) + "all dimensions expect 'memb_dim'.")) } ## prob_thresholds if (!is.numeric(prob_thresholds) | !is.vector(prob_thresholds) | @@ -115,9 +117,15 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', ############################### # Compute RPS + if (!memb_dim %in% names(dim(obs))) { + target_dims_obs <- time_dim + } else { + target_dims_obs <- c(time_dim, memb_dim) + } + rps <- Apply(data = list(exp = exp, obs = obs), target_dims = list(exp = c(time_dim, memb_dim), - obs = time_dim), + obs = target_dims_obs), output_dims = time_dim, fun = .RPS, prob_thresholds = prob_thresholds, @@ -134,7 +142,7 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', .RPS <- function(exp, obs, prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE) { # exp: [sdate, memb] - # obs: [sdate] + # obs: [sdate, (memb)] exp_probs <- .get_probs(data = exp, indices_for_quantiles = indices_for_clim, prob_thresholds = prob_thresholds) @@ -162,9 +170,9 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', .get_probs <- function(data, indices_for_quantiles, prob_thresholds) { # if exp: [sdate, memb] - # if obs: [sdate] + # if obs: [sdate, (memb)] - # Add dim [memb = 1] to obs + # Add dim [memb = 1] to obs if it doesn't have memb_dim if (length(dim(data)) == 1) dim(data) <- c(dim(data), 1) # Absolute thresholds diff --git a/R/RPSS.R b/R/RPSS.R index 1498456..04c3137 100644 --- a/R/RPSS.R +++ b/R/RPSS.R @@ -15,8 +15,7 @@ #'@param exp A named numerical array of the forecast with at least time #' dimension. #'@param obs A named numerical array of the observation with at least time -#' dimension. The dimensions must be the same as 'exp' except 'obs' doesn't -#' have 'memb_dim'. +#' dimension. The dimensions must be the same as 'exp' except 'memb_dim'. #'@param ref A named numerical array of the reference forecast data with at #' least time dimension. The dimensions must be the same as 'exp' except #' 'memb_dim'. If it is NULL, the climatological forecast is used as reference @@ -63,7 +62,7 @@ #'@export RPSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', memb_dim = 'member', prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, - ncores = NULL){ + ncores = NULL) { # Check inputs ## exp, obs, and ref (1) @@ -98,10 +97,13 @@ RPSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', memb_dim = 'member', name_exp <- sort(names(dim(exp))) name_obs <- sort(names(dim(obs))) name_exp <- name_exp[-which(name_exp == memb_dim)] + if (memb_dim %in% name_obs) { + name_obs <- name_obs[-which(name_obs == memb_dim)] + } if (!identical(length(name_exp), length(name_obs)) | !identical(dim(exp)[name_exp], dim(obs)[name_obs])) { stop(paste0("Parameter 'exp' and 'obs' must have same length of ", - "all dimensions expect 'obs' doesn't have 'memb_dim'.")) + "all dimensions expect 'memb_dim'.")) } if (!is.null(ref)) { name_ref <- sort(names(dim(ref))) @@ -144,15 +146,21 @@ RPSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', memb_dim = 'member', ############################### # Compute RPSS + if (!memb_dim %in% names(dim(obs))) { + target_dims_obs <- time_dim + } else { + target_dims_obs <- c(time_dim, memb_dim) + } + if (!is.null(ref)) { # use "ref" as reference forecast data <- list(exp = exp, obs = obs, ref = ref) target_dims = list(exp = c(time_dim, memb_dim), - obs = time_dim, + obs = target_dims_obs, ref = c(time_dim, memb_dim)) } else { data <- list(exp = exp, obs = obs) target_dims = list(exp = c(time_dim, memb_dim), - obs = time_dim) + obs = target_dims_obs) } output <- Apply(data, target_dims = target_dims, @@ -167,7 +175,7 @@ RPSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', memb_dim = 'member', .RPSS <- function(exp, obs, ref = NULL, prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE) { # exp: [sdate, memb] - # obs: [sdate] + # obs: [sdate, (memb)] # ref: [sdate, memb] or NULL # RPS of the forecast diff --git a/man/RPS.Rd b/man/RPS.Rd index cbb0e7a..d1acc02 100644 --- a/man/RPS.Rd +++ b/man/RPS.Rd @@ -20,8 +20,7 @@ RPS( dimension.} \item{obs}{A named numerical array of the observation with at least time -dimension. The dimensions must be the same as 'exp' except 'obs' doesn't -have 'memb_dim'.} +dimension. The dimensions must be the same as 'exp' except 'memb_dim'.} \item{time_dim}{A character string indicating the name of the time dimension. The default value is 'sdate'.} diff --git a/man/RPSS.Rd b/man/RPSS.Rd index 6871d80..6324ea2 100644 --- a/man/RPSS.Rd +++ b/man/RPSS.Rd @@ -21,8 +21,7 @@ RPSS( dimension.} \item{obs}{A named numerical array of the observation with at least time -dimension. The dimensions must be the same as 'exp' except 'obs' doesn't -have 'memb_dim'.} +dimension. The dimensions must be the same as 'exp' except 'memb_dim'.} \item{ref}{A named numerical array of the reference forecast data with at least time dimension. The dimensions must be the same as 'exp' except diff --git a/tests/testthat/test-RPS.R b/tests/testthat/test-RPS.R index 00f89dc..e5a5f0c 100644 --- a/tests/testthat/test-RPS.R +++ b/tests/testthat/test-RPS.R @@ -14,6 +14,12 @@ exp2 <- array(rnorm(20), dim = c(member = 2, sdate = 10)) set.seed(2) obs2 <- array(rnorm(10), dim = c(sdate = 10)) +# dat2_1 +set.seed(1) +exp2_1 <- array(rnorm(20), dim = c(member = 2, sdate = 10)) +set.seed(2) +obs2_1 <- array(rnorm(10), dim = c(member = 1, sdate = 10)) + ############################################## @@ -49,7 +55,7 @@ test_that("1. Input checks", { # exp, ref, and obs (2) expect_error( RPS(exp1, array(1:9, dim = c(sdate = 9))), - "Parameter 'exp' and 'obs' must have same length of all dimensions expect 'obs' doesn't have 'memb_dim'." + "Parameter 'exp' and 'obs' must have same length of all dimensions expect 'memb_dim'." ) # prob_thresholds expect_error( @@ -125,5 +131,8 @@ RPS(exp2, obs2, indices_for_clim = 2:5, prob_thresholds = seq(0.1, 0.9, 0.1)), 2.75, tolerance = 0.0001 ) - +expect_equal( +RPS(exp2, obs2), +RPS(exp2_1, obs2_1) +) }) diff --git a/tests/testthat/test-RPSS.R b/tests/testthat/test-RPSS.R index 88fa18e..b4c0b7a 100644 --- a/tests/testthat/test-RPSS.R +++ b/tests/testthat/test-RPSS.R @@ -15,6 +15,8 @@ set.seed(1) exp2 <- array(rnorm(20), dim = c(member = 2, sdate = 10)) set.seed(2) obs2 <- array(rnorm(10), dim = c(sdate = 10)) +set.seed(2) +obs2_1 <- array(rnorm(10), dim = c(member = 1, sdate = 10)) set.seed(3) ref2 <- array(rnorm(20), dim = c(member = 2, sdate = 10)) @@ -60,7 +62,7 @@ test_that("1. Input checks", { # exp, ref, and obs (2) expect_error( RPSS(exp1, array(1:9, dim = c(sdate = 9))), - "Parameter 'exp' and 'obs' must have same length of all dimensions expect 'obs' doesn't have 'memb_dim'." + "Parameter 'exp' and 'obs' must have same length of all dimensions expect 'memb_dim'." ) expect_error( RPSS(exp1, obs1, ref2), @@ -266,7 +268,9 @@ expect_equal( as.vector(RPSS(exp2, obs2, ref2, prob_thresholds = seq(0.1, 0.9, 0.1))$sign), FALSE ) - - +expect_equal( +RPSS(exp2, obs2), +RPSS(exp2, obs2_1) +) }) -- GitLab From a28ee0ea87c1d200a5f27119e010807fc876da07 Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 17 May 2022 12:27:51 +0200 Subject: [PATCH 58/83] Remove method 'kendall' and add a warning if method == 'spearman' --- R/DiffCorr.R | 27 +++++++++++++++++---------- man/DiffCorr.Rd | 16 +++++++++------- tests/testthat/test-DiffCorr.R | 24 ++++++++++-------------- 3 files changed, 36 insertions(+), 31 deletions(-) diff --git a/R/DiffCorr.R b/R/DiffCorr.R index c83b7b8..c250814 100644 --- a/R/DiffCorr.R +++ b/R/DiffCorr.R @@ -5,11 +5,9 @@ #'more skillful than the reference forecast, while negative values mean that #'the reference forecast is more skillful. The statistical significance of the #'correlation differences is computed with a one-sided test for equality of -#'dependent correlation coefficients (Steiger, 1980; -#'https://content.apa.org/doi/10.1037/0033-2909.87.2.245; Siegert et al., 2017; -#'https://doi.org/10.1175/MWR-D-16-0037.1) using effective degrees of freedom -#'to account for the autocorrelation of the time series (von Storch and Zwiers, -#'1999; https://doi.org/10.1017/CBO9780511612336). +#'dependent correlation coefficients (Steiger, 1980; Siegert et al., 2017) using +#'effective degrees of freedom to account for the autocorrelation of the time +#'series (von Storch and Zwiers, 1999). #' #'@param exp A named numerical array of the forecast data with at least time #' dimension. @@ -30,8 +28,7 @@ #' forecast. If it is NULL (default), the ensemble mean should be provided #' directly to the function. #'@param method A character string indicating the correlation coefficient to be -#' computed ("pearson", "kendall", or "spearman"). The default value is -#' "pearson". +#' computed ("pearson" or "spearman"). The default value is "pearson". #'@param alpha A numeric of the significance level to be used in the statistical #' significance test. If it is a numeric, "sign" will be returned. If NULL, the #' p-value will be returned instead. The default value is NULL. @@ -60,6 +57,11 @@ #' NULL. #'} #' +#'@references +#'Steiger, 1980; https://content.apa.org/doi/10.1037/0033-2909.87.2.245 +#'Siegert et al., 2017; https://doi.org/10.1175/MWR-D-16-0037.1 +#'von Storch and Zwiers, 1999; https://doi.org/10.1017/CBO9780511612336 +#' #'@examples #' exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) #' obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) @@ -119,11 +121,16 @@ DiffCorr <- function(exp, obs, ref, N.eff = NA, time_dim = 'sdate', if (length(name_exp) != length(name_obs) | length(name_exp) != length(name_ref) | !identical(dim(exp)[name_exp], dim(obs)[name_obs]) | !identical(dim(exp)[name_exp], dim(ref)[name_ref])) { stop(paste0("Parameter 'exp', 'obs', and 'ref' must have same length of ", - "all dimensions expect 'memb_dim'.")) + "all dimensions except 'memb_dim'.")) } ## method - if (!method %in% c("pearson", "kendall", "spearman")) { - stop('Parameter "method" must be "pearson", "kendall", or "spearman".') + if (!method %in% c("pearson", "spearman")) { + stop('Parameter "method" must be "pearson" or "spearman".') + } + if (method == "spearman") { + warning(paste0("The test used in this function is built on Pearson method. ", + "To verify if Spearman method is reliable, you can run the ", + "Monte-Carlo simulations that are done in Siegert et al., 2017")) } ## alpha if (!is.null(alpha)) { diff --git a/man/DiffCorr.Rd b/man/DiffCorr.Rd index d920536..d8ff65c 100644 --- a/man/DiffCorr.Rd +++ b/man/DiffCorr.Rd @@ -43,8 +43,7 @@ forecast. If it is NULL (default), the ensemble mean should be provided directly to the function.} \item{method}{A character string indicating the correlation coefficient to be -computed ("pearson", "kendall", or "spearman"). The default value is -"pearson".} +computed ("pearson" or "spearman"). The default value is "pearson".} \item{alpha}{A numeric of the significance level to be used in the statistical significance test. If it is a numeric, "sign" will be returned. If NULL, the @@ -83,11 +82,9 @@ Positive values of the correlation difference indicate that the forecast is more skillful than the reference forecast, while negative values mean that the reference forecast is more skillful. The statistical significance of the correlation differences is computed with a one-sided test for equality of -dependent correlation coefficients (Steiger, 1980; -https://content.apa.org/doi/10.1037/0033-2909.87.2.245; Siegert et al., 2017; -https://doi.org/10.1175/MWR-D-16-0037.1) using effective degrees of freedom -to account for the autocorrelation of the time series (von Storch and Zwiers, -1999; https://doi.org/10.1017/CBO9780511612336). +dependent correlation coefficients (Steiger, 1980; Siegert et al., 2017) using +effective degrees of freedom to account for the autocorrelation of the time +series (von Storch and Zwiers, 1999). } \examples{ exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) @@ -96,3 +93,8 @@ ref <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) res <- DiffCorr(exp, obs, ref, memb_dim = 'member') } +\references{ +Steiger, 1980; https://content.apa.org/doi/10.1037/0033-2909.87.2.245 +Siegert et al., 2017; https://doi.org/10.1175/MWR-D-16-0037.1 +von Storch and Zwiers, 1999; https://doi.org/10.1017/CBO9780511612336 +} diff --git a/tests/testthat/test-DiffCorr.R b/tests/testthat/test-DiffCorr.R index 952e14f..e0834e1 100644 --- a/tests/testthat/test-DiffCorr.R +++ b/tests/testthat/test-DiffCorr.R @@ -66,12 +66,18 @@ test_that("1. Input checks", { # exp, ref, and obs (2) expect_error( DiffCorr(exp1, array(1:10, dim = c(sdate = 10, memb = 1)), ref1, memb_dim = 'memb'), - "Parameter 'exp', 'obs', and 'ref' must have same length of all dimensions expect 'memb_dim'." + "Parameter 'exp', 'obs', and 'ref' must have same length of all dimensions except 'memb_dim'." ) # method expect_error( DiffCorr(exp1, obs1, ref1, method = 'asd', memb_dim = 'memb'), - 'Parameter "method" must be "pearson", "kendall", or "spearman".' + 'Parameter "method" must be "pearson" or "spearman".' + ) + expect_warning( + DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', method = 'spearman'), + paste0("The test used in this function is built on Pearson method. ", + "To verify if Spearman method is reliable, you can run the ", + "Monte-Carlo simulations that are done in Siegert et al., 2017") ) # alpha expect_error( @@ -129,22 +135,12 @@ as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', alpha = 0.05)$sign), rep(FALSE, 6) ) expect_equal( -as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', method = "kendall")$diff.corr), -c(0.08888889, 0.35555556, 0.00000000, -0.04444444, 0.00000000, 0.93333333), -tolerance = 0.0001 -) -expect_equal( -as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', method = "kendall")$p), -c(0.42259038, 0.25373083, 0.50000000, 0.54183730, 0.50000000, 0.06307063), -tolerance = 0.0001 -) -expect_equal( -as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', method = "spearman")$diff.corr), +suppressWarnings(as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', method = "spearman")$diff.corr)), c(0.07272727, 0.54545455, 0.10909091, -0.01212121, -0.03636364, 1.01818182), tolerance = 0.0001 ) expect_equal( -as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', method = "spearman")$p), +suppressWarnings(as.vector(DiffCorr(exp1, obs1, ref1, memb_dim = 'memb', method = "spearman")$p)), c(0.4358970, 0.1341575, 0.3448977, 0.5114262, 0.5264872, 0.0437861), tolerance = 0.0001 ) -- GitLab From d27cb2465e12e018e2fd0950123a384c52b2e1ba Mon Sep 17 00:00:00 2001 From: Roberto Bilbao Date: Tue, 17 May 2022 13:30:40 +0200 Subject: [PATCH 59/83] Added xlonshft and xlabels parameters to modify labels --- R/PlotEquiMap.R | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/R/PlotEquiMap.R b/R/PlotEquiMap.R index 9981ed3..c725a10 100644 --- a/R/PlotEquiMap.R +++ b/R/PlotEquiMap.R @@ -261,7 +261,7 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, margin_scale = rep(1, 4), title_scale = 1, numbfig = NULL, fileout = NULL, width = 8, height = 5, size_units = 'in', - res = 100, ...) { + res = 100, xlonshft = 0, xlabels = NULL, ...) { # Process the user graphical parameters that may be passed in the call ## Graphical parameters to exclude excludedArgs <- c("cex", "cex.axis", "cex.lab", "cex.main", "col", "din", "fig", "fin", "lab", "las", "lty", "lwd", "mai", "mar", "mgp", "new", "oma", "ps", "tck") @@ -635,6 +635,12 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, } else { intxlon <- round(intxlon) } + if (!is.numeric(xlonshft)) { + stop("Parameter 'xlonshft' must be numeric.") + } else { + xlonshft <- round(xlonshft) + } + # Check legend parameters if (!is.logical(drawleg)) { @@ -761,7 +767,7 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, spaceticklab <- 0 if (axelab) { ypos <- seq(latmin, latmax, intylat) - xpos <- seq(lonmin, lonmax, intxlon) + xpos <- seq(lonmin, lonmax, intxlon) + xlonshft letters <- array('', length(ypos)) if (degree_sym == FALSE) { letters[ypos < 0] <- 'S' @@ -771,6 +777,10 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, letters[ypos > 0] <- paste(intToUtf8(176), 'N') } ylabs <- paste(as.character(abs(ypos)), letters, sep = '') + + if (!is.null(xlabels)) { + xlabs = abind(xlabels,c('')) + } else { letters <- array('', length(xpos)) if (labW) { xpos2 <- xpos @@ -795,6 +805,8 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, } else { xlabs <- paste(as.character(abs(xpos)), letters, sep = '') } + } + spaceticklab <- max(-cex_axes_ticks, 0) margins[1] <- margins[1] + 1.2 * cex_axes_labels + spaceticklab margins[2] <- margins[2] + 1.2 * cex_axes_labels + spaceticklab -- GitLab From 102232ed4f5301b2026c4ca2faf71a119168e1bc Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 17 May 2022 17:22:58 +0200 Subject: [PATCH 60/83] Add documentatiion to new parameters and add 'ylabels' and 'ylatshft' --- R/PlotEquiMap.R | 121 +++++++++++++++++++++++++++++--------------- man/PlotEquiMap.Rd | 23 ++++++++- man/ResidualCorr.Rd | 6 +-- 3 files changed, 105 insertions(+), 45 deletions(-) diff --git a/R/PlotEquiMap.R b/R/PlotEquiMap.R index c725a10..9e1121a 100644 --- a/R/PlotEquiMap.R +++ b/R/PlotEquiMap.R @@ -134,11 +134,24 @@ #'@param lab_dist_y A numeric of the distance of the latitude labels to the #' box borders. The default value is NULL and is automatically adjusted by #' the function. -#'@param degree_sym A logical indicating whether to include degree symbol (30° N) or not (30N; default). +#'@param degree_sym A logical indicating whether to include degree symbol (30° N) +#' or not (30N; default). #'@param intylat Interval between latitude ticks on y-axis, in degrees. #' Defaults to 20. #'@param intxlon Interval between latitude ticks on x-axis, in degrees. #' Defaults to 20. +#'@param xlonshft A numeric of the degrees to shift the latitude ticks. The +#' default value is 0. +#'@param ylatshft A numeric of the degrees to shift the longitude ticks. The +#' default value is 0. +#'@param xlabels A vector of character string of the custumized x-axis labels. +#' The values should correspond to each tick, which is decided by the longitude +#' and parameter 'intxlon'. The default value is NULL and the labels will be +#' automatically generated. +#'@param ylabels A vector of character string of the custumized y-axis labels. +#' The values should correspond to each tick, which is decided by the latitude +#' and parameter 'intylat'. The default value is NULL and the labels will be +#' automatically generated. #'@param axes_tick_scale Scale factor for the tick lines along the longitude #' and latitude axes. #'@param axes_label_scale Scale factor for the labels along the longitude @@ -249,7 +262,8 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, arr_scale_shaft = 1, arr_scale_shaft_angle = 1, axelab = TRUE, labW = FALSE, lab_dist_x = NULL, lab_dist_y = NULL, degree_sym = FALSE, - intylat = 20, intxlon = 20, + intylat = 20, intxlon = 20, + xlonshft = 0, ylatshft = 0, xlabels = NULL, ylabels = NULL, axes_tick_scale = 1, axes_label_scale = 1, drawleg = TRUE, subsampleg = NULL, bar_extra_labels = NULL, draw_bar_ticks = TRUE, @@ -261,7 +275,7 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, margin_scale = rep(1, 4), title_scale = 1, numbfig = NULL, fileout = NULL, width = 8, height = 5, size_units = 'in', - res = 100, xlonshft = 0, xlabels = NULL, ...) { + res = 100, ...) { # Process the user graphical parameters that may be passed in the call ## Graphical parameters to exclude excludedArgs <- c("cex", "cex.axis", "cex.lab", "cex.main", "col", "din", "fig", "fin", "lab", "las", "lty", "lwd", "mai", "mar", "mgp", "new", "oma", "ps", "tck") @@ -635,12 +649,22 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, } else { intxlon <- round(intxlon) } - if (!is.numeric(xlonshft)) { - stop("Parameter 'xlonshft' must be numeric.") - } else { - xlonshft <- round(xlonshft) + if (!is.numeric(xlonshft) | length(xlonshft) != 1) { + stop("Parameter 'xlonshft' must be a number.") + } + if (!is.numeric(ylatshft) | length(ylatshft) != 1) { + stop("Parameter 'ylatshft' must be a number.") + } + if (!is.null(xlabels)) { + if (!is.character(xlabels) | !is.vector(xlabels)) { + stop("Parameter 'xlabels' must be a vector of character string.") + } + } + if (!is.null(ylabels)) { + if (!is.character(ylabels) | !is.vector(ylabels)) { + stop("Parameter 'ylabels' must be a vector of character string.") + } } - # Check legend parameters if (!is.logical(drawleg)) { @@ -766,47 +790,62 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, cex_axes_ticks <- -0.5 * axes_tick_scale spaceticklab <- 0 if (axelab) { - ypos <- seq(latmin, latmax, intylat) - xpos <- seq(lonmin, lonmax, intxlon) + xlonshft - letters <- array('', length(ypos)) - if (degree_sym == FALSE) { - letters[ypos < 0] <- 'S' - letters[ypos > 0] <- 'N' + # Y axis label + if (!is.null(ylabels)) { + ypos <- seq(latmin, latmax, intylat) + ylatshft + if (length(ypos) != length(ylabels)) { + stop(paste0("Parameter 'ylabels' must have the same length as the latitude ", + "vector spaced by 'intylat'.")) + } + ylabs <- ylabels } else { - letters[ypos < 0] <- paste(intToUtf8(176), 'S') - letters[ypos > 0] <- paste(intToUtf8(176), 'N') + ypos <- seq(latmin, latmax, intylat) + ylatshft + letters <- array('', length(ypos)) + if (degree_sym == FALSE) { + letters[ypos < 0] <- 'S' + letters[ypos > 0] <- 'N' + } else { + letters[ypos < 0] <- paste(intToUtf8(176), 'S') + letters[ypos > 0] <- paste(intToUtf8(176), 'N') + } + ylabs <- paste(as.character(abs(ypos)), letters, sep = '') } - ylabs <- paste(as.character(abs(ypos)), letters, sep = '') + # X axis label if (!is.null(xlabels)) { - xlabs = abind(xlabels,c('')) - } else { - letters <- array('', length(xpos)) - if (labW) { - xpos2 <- xpos - xpos2[xpos2 > 180] <- 360 - xpos2[xpos2 > 180] - } - if (degree_sym == FALSE) { - letters[xpos < 0] <- 'W' - letters[xpos > 0] <- 'E' + xpos <- seq(lonmin, lonmax, intxlon) + xlonshft + if (length(xpos) != length(xlabels)) { + stop(paste0("Parameter 'xlabels' must have the same length as the longitude ", + "vector spaced by 'intxlon'.")) + } + xlabs <- xlabels } else { - letters[xpos < 0] <- paste(intToUtf8(176), 'W') - letters[xpos > 0] <- paste(intToUtf8(176), 'E') - } - if (labW) { - letters[xpos == 0] <- ' ' - letters[xpos == 180] <- ' ' + xpos <- seq(lonmin, lonmax, intxlon) + xlonshft + letters <- array('', length(xpos)) + if (labW) { + xpos2 <- xpos + xpos2[xpos2 > 180] <- 360 - xpos2[xpos2 > 180] + } if (degree_sym == FALSE) { - letters[xpos > 180] <- 'W' + letters[xpos < 0] <- 'W' + letters[xpos > 0] <- 'E' } else { - letters[xpos > 180] <- paste(intToUtf8(176), 'W') - } - xlabs <- paste(as.character(abs(xpos2)), letters, sep = '') - } else { - xlabs <- paste(as.character(abs(xpos)), letters, sep = '') - } + letters[xpos < 0] <- paste(intToUtf8(176), 'W') + letters[xpos > 0] <- paste(intToUtf8(176), 'E') + } + if (labW) { + letters[xpos == 0] <- ' ' + letters[xpos == 180] <- ' ' + if (degree_sym == FALSE) { + letters[xpos > 180] <- 'W' + } else { + letters[xpos > 180] <- paste(intToUtf8(176), 'W') + } + xlabs <- paste(as.character(abs(xpos2)), letters, sep = '') + } else { + xlabs <- paste(as.character(abs(xpos)), letters, sep = '') + } } - spaceticklab <- max(-cex_axes_ticks, 0) margins[1] <- margins[1] + 1.2 * cex_axes_labels + spaceticklab margins[2] <- margins[2] + 1.2 * cex_axes_labels + spaceticklab diff --git a/man/PlotEquiMap.Rd b/man/PlotEquiMap.Rd index 31fe4d8..47a0d98 100644 --- a/man/PlotEquiMap.Rd +++ b/man/PlotEquiMap.Rd @@ -54,6 +54,10 @@ PlotEquiMap( degree_sym = FALSE, intylat = 20, intxlon = 20, + xlonshft = 0, + ylatshft = 0, + xlabels = NULL, + ylabels = NULL, axes_tick_scale = 1, axes_label_scale = 1, drawleg = TRUE, @@ -247,7 +251,8 @@ the function.} box borders. The default value is NULL and is automatically adjusted by the function.} -\item{degree_sym}{A logical indicating whether to include degree symbol (30° N) or not (30N; default).} +\item{degree_sym}{A logical indicating whether to include degree symbol (30° N) +or not (30N; default).} \item{intylat}{Interval between latitude ticks on y-axis, in degrees. Defaults to 20.} @@ -255,6 +260,22 @@ Defaults to 20.} \item{intxlon}{Interval between latitude ticks on x-axis, in degrees. Defaults to 20.} +\item{xlonshft}{A numeric of the degrees to shift the latitude ticks. The +default value is 0.} + +\item{ylatshft}{A numeric of the degrees to shift the longitude ticks. The +default value is 0.} + +\item{xlabels}{A vector of character string of the custumized x-axis labels. +The values should correspond to each tick, which is decided by the longitude +and parameter 'intxlon'. The default value is NULL and the labels will be +automatically generated.} + +\item{ylabels}{A vector of character string of the custumized y-axis labels. +The values should correspond to each tick, which is decided by the latitude +and parameter 'intylat'. The default value is NULL and the labels will be +automatically generated.} + \item{axes_tick_scale}{Scale factor for the tick lines along the longitude and latitude axes.} diff --git a/man/ResidualCorr.Rd b/man/ResidualCorr.Rd index 1e0adad..e98ea7a 100644 --- a/man/ResidualCorr.Rd +++ b/man/ResidualCorr.Rd @@ -67,9 +67,9 @@ A list with: the input arrays except "time_dim" (and "memb_dim" if provided). } \item{$sign}{ - A logical array of the statistical significance of the residual correlation - with the same dimensions as the input arrays except "time_dim" (and - "memb_dim" if provided). Returned only if "alpha" is a numeric. + A logical array indicating whether the residual correlation is statistically + significant or not with the same dimensions as the input arrays except "time_dim" + (and "memb_dim" if provided). Returned only if "alpha" is a numeric. } \item{$p.val}{ A numeric array of the p-values with the same dimensions as the input arrays -- GitLab From 269b8791c70b05b24d310c406c1794b29cdfa95b Mon Sep 17 00:00:00 2001 From: jcos Date: Wed, 18 May 2022 18:04:46 +0200 Subject: [PATCH 61/83] first attempt at weighted quantile and probs --- R/RPS.R | 52 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/R/RPS.R b/R/RPS.R index 84956ac..b2065cd 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -48,7 +48,7 @@ #'@export RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, - ncores = NULL) { + ncores = NULL, weights = NULL) { # Check inputs ## exp and obs (1) @@ -130,7 +130,7 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', fun = .RPS, prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, Fair = Fair, - ncores = ncores)$output1 + ncores = ncores, weights = weights)$output1 # Return only the mean RPS rps <- MeanDims(rps, time_dim, na.rm = FALSE) @@ -140,12 +140,12 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', .RPS <- function(exp, obs, prob_thresholds = c(1/3, 2/3), - indices_for_clim = NULL, Fair = FALSE) { + indices_for_clim = NULL, Fair = FALSE, weights = NULL) { # exp: [sdate, memb] # obs: [sdate, (memb)] exp_probs <- .get_probs(data = exp, indices_for_quantiles = indices_for_clim, - prob_thresholds = prob_thresholds) + prob_thresholds = prob_thresholds, weights = weights) # exp_probs: [bin, sdate] obs_probs <- .get_probs(data = obs, indices_for_quantiles = indices_for_clim, prob_thresholds = prob_thresholds) @@ -168,7 +168,7 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', return(rps) } -.get_probs <- function(data, indices_for_quantiles, prob_thresholds) { +.get_probs <- function(data, indices_for_quantiles, prob_thresholds, weigths = NULL) { # if exp: [sdate, memb] # if obs: [sdate, (memb)] @@ -176,18 +176,50 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', if (length(dim(data)) == 1) dim(data) <- c(dim(data), 1) # Absolute thresholds - quantiles <- quantile(x = as.vector(data[indices_for_quantiles, ]), probs = prob_thresholds, type = 8, na.rm = TRUE) - + if (is.null(weights)){ + quantiles <- quantile(x = as.vector(data[indices_for_quantiles, ]), probs = prob_thresholds, type = 8, na.rm = TRUE) + } else { + # linear approach to compute weighted distribution thresholds. + sorted_data, sorted_weights <- .sorted_distributions(data[indices_for_quantiles, ], weights[indices_for_quantiles, ]) + # approach 1 (interpolate from discrete cumulative weights distribution. NOT type 8) + cumulative_weights <- cumsum(sorted_weights) - 0.5 * sorted_weights + cumulative_weights <- cumulative_weights - cumulative_weights[1] # fix the 0 + cumulative_weights <- cumulative_weights / cumulative_weights[length(cumulative_weights)] # fix the 1 + quantiles <- interp1(cumulative_weights, sorted_data, c(1/3,2/3), "cubic") + # approach 2 (interpolate from the polynomial fit of the cumulative weights distribution) + fit_model <- lm(cumsum(sorted_weights) ~ poly(sorted_data,10)) # order 10, but we should think what order we want to use + predicted.intervals <- predict(fit_model,data.frame(x=sorted_data)) + quantiles <- interp1(predicted.intervals, sorted_data, c(1/3,2/3), "cubic") + } # Probabilities probs <- array(dim = c(bin = length(quantiles) + 1, dim(data)[1])) # [bin, sdate] for (i_time in 1:dim(data)[1]) { - if (anyNA(data[i_time, ])) { - probs[, i_time] <- rep(NA, dim = length(quantiles) + 1) + if (is.null(weights)){ + if (anyNA(data[i_time, ])) { + probs[, i_time] <- rep(NA, dim = length(quantiles) + 1) + } else { + probs[, i_time] <- colMeans(easyVerification::convert2prob(data[i_time, ], threshold = quantiles)) + } } else { - probs[, i_time] <- colMeans(easyVerification::convert2prob(data[i_time, ], threshold = quantiles)) + sorted_data, sorted_weights <- .sorted_distributions(data[i_time, ], weights[i_time, ]) + + fit_model <- lm(cumsum(sorted_weights) ~ poly(sorted_data,10)) + predicted.intervals <- predict(fit_model,data.frame(x=sorted_data)) + integrated_probs <- interp1(sorted_data, predicted.intervals, quantiles, "cubic") + probs[, i_time] <- c(integrated_probs[1], integrated_probs[2]-integrated_probs[1], 1-integrated_probs[2]) } + } return(probs) } +.sorted_distributions <- function(data_vector, weights_vector){ + weights_vector <- as.vector(weights_vector) + data_vector <- as.vector(data_vector) + weights_vector <- weights_vector / sum(weights_vector) # normalize to 1 + sorter <- order(data_vector) + sorted_data <- data_vector[sorter] + sorted_weights <- weights_vector[sorter] + return(sorted_data, sorted_weights) +} \ No newline at end of file -- GitLab From 1283a29dad4b39c6eacf315c8755128c991f5b2d Mon Sep 17 00:00:00 2001 From: jcos Date: Thu, 19 May 2022 08:30:49 +0200 Subject: [PATCH 62/83] quantile and prob from poly fit coeff, not interp --- R/RPS.R | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/R/RPS.R b/R/RPS.R index b2065cd..1afdf6e 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -185,11 +185,11 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', cumulative_weights <- cumsum(sorted_weights) - 0.5 * sorted_weights cumulative_weights <- cumulative_weights - cumulative_weights[1] # fix the 0 cumulative_weights <- cumulative_weights / cumulative_weights[length(cumulative_weights)] # fix the 1 - quantiles <- interp1(cumulative_weights, sorted_data, c(1/3,2/3), "cubic") + quantiles <- interp1(cumulative_weights, sorted_data, c(1/3,2/3), "cubic") # library(signal) # approach 2 (interpolate from the polynomial fit of the cumulative weights distribution) fit_model <- lm(cumsum(sorted_weights) ~ poly(sorted_data,10)) # order 10, but we should think what order we want to use - predicted.intervals <- predict(fit_model,data.frame(x=sorted_data)) - quantiles <- interp1(predicted.intervals, sorted_data, c(1/3,2/3), "cubic") + a <- fit_model$coefficients + quantiles <- a[1]+a[2]*prob_threshold+a[3]*prob_threshold^2+a[4]*prob_threshold^3 } # Probabilities probs <- array(dim = c(bin = length(quantiles) + 1, dim(data)[1])) # [bin, sdate] @@ -202,10 +202,9 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', } } else { sorted_data, sorted_weights <- .sorted_distributions(data[i_time, ], weights[i_time, ]) - - fit_model <- lm(cumsum(sorted_weights) ~ poly(sorted_data,10)) - predicted.intervals <- predict(fit_model,data.frame(x=sorted_data)) - integrated_probs <- interp1(sorted_data, predicted.intervals, quantiles, "cubic") + fit_model <- lm(cumsum(sorted_weights) ~ poly(sorted_data,10)) # poly(sorted_data,10,raw=TRUE)? + a <- fit_model$coefficients + integrated_probs <- a[1]+a[2]*quantiles+a[3]*quantiles^2+a[4]*quantiles^3 probs[, i_time] <- c(integrated_probs[1], integrated_probs[2]-integrated_probs[1], 1-integrated_probs[2]) } @@ -215,11 +214,11 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', } .sorted_distributions <- function(data_vector, weights_vector){ - weights_vector <- as.vector(weights_vector) - data_vector <- as.vector(data_vector) - weights_vector <- weights_vector / sum(weights_vector) # normalize to 1 - sorter <- order(data_vector) - sorted_data <- data_vector[sorter] - sorted_weights <- weights_vector[sorter] - return(sorted_data, sorted_weights) + weights_vector <- as.vector(weights_vector) + data_vector <- as.vector(data_vector) + weights_vector <- weights_vector / sum(weights_vector) # normalize to 1 + sorter <- order(data_vector) + sorted_data <- data_vector[sorter] + sorted_weights <- weights_vector[sorter] + return(sorted_data, sorted_weights) } \ No newline at end of file -- GitLab From 762a4f529d4f4e040505a6ed585e4674578f0731 Mon Sep 17 00:00:00 2001 From: Pep Cos Date: Thu, 19 May 2022 10:01:55 +0200 Subject: [PATCH 63/83] Revert "quantile and prob from poly fit coeff, not interp" This reverts commit 1283a29dad4b39c6eacf315c8755128c991f5b2d --- R/RPS.R | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/R/RPS.R b/R/RPS.R index 1afdf6e..b2065cd 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -185,11 +185,11 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', cumulative_weights <- cumsum(sorted_weights) - 0.5 * sorted_weights cumulative_weights <- cumulative_weights - cumulative_weights[1] # fix the 0 cumulative_weights <- cumulative_weights / cumulative_weights[length(cumulative_weights)] # fix the 1 - quantiles <- interp1(cumulative_weights, sorted_data, c(1/3,2/3), "cubic") # library(signal) + quantiles <- interp1(cumulative_weights, sorted_data, c(1/3,2/3), "cubic") # approach 2 (interpolate from the polynomial fit of the cumulative weights distribution) fit_model <- lm(cumsum(sorted_weights) ~ poly(sorted_data,10)) # order 10, but we should think what order we want to use - a <- fit_model$coefficients - quantiles <- a[1]+a[2]*prob_threshold+a[3]*prob_threshold^2+a[4]*prob_threshold^3 + predicted.intervals <- predict(fit_model,data.frame(x=sorted_data)) + quantiles <- interp1(predicted.intervals, sorted_data, c(1/3,2/3), "cubic") } # Probabilities probs <- array(dim = c(bin = length(quantiles) + 1, dim(data)[1])) # [bin, sdate] @@ -202,9 +202,10 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', } } else { sorted_data, sorted_weights <- .sorted_distributions(data[i_time, ], weights[i_time, ]) - fit_model <- lm(cumsum(sorted_weights) ~ poly(sorted_data,10)) # poly(sorted_data,10,raw=TRUE)? - a <- fit_model$coefficients - integrated_probs <- a[1]+a[2]*quantiles+a[3]*quantiles^2+a[4]*quantiles^3 + + fit_model <- lm(cumsum(sorted_weights) ~ poly(sorted_data,10)) + predicted.intervals <- predict(fit_model,data.frame(x=sorted_data)) + integrated_probs <- interp1(sorted_data, predicted.intervals, quantiles, "cubic") probs[, i_time] <- c(integrated_probs[1], integrated_probs[2]-integrated_probs[1], 1-integrated_probs[2]) } @@ -214,11 +215,11 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', } .sorted_distributions <- function(data_vector, weights_vector){ - weights_vector <- as.vector(weights_vector) - data_vector <- as.vector(data_vector) - weights_vector <- weights_vector / sum(weights_vector) # normalize to 1 - sorter <- order(data_vector) - sorted_data <- data_vector[sorter] - sorted_weights <- weights_vector[sorter] - return(sorted_data, sorted_weights) + weights_vector <- as.vector(weights_vector) + data_vector <- as.vector(data_vector) + weights_vector <- weights_vector / sum(weights_vector) # normalize to 1 + sorter <- order(data_vector) + sorted_data <- data_vector[sorter] + sorted_weights <- weights_vector[sorter] + return(sorted_data, sorted_weights) } \ No newline at end of file -- GitLab From d172207b5941974abf23500db1bb7536d1d22996 Mon Sep 17 00:00:00 2001 From: Pep Cos Date: Thu, 19 May 2022 10:07:20 +0200 Subject: [PATCH 64/83] Revert "first attempt at weighted quantile and probs" This reverts commit 269b8791c70b05b24d310c406c1794b29cdfa95b --- R/RPS.R | 52 ++++++++++------------------------------------------ 1 file changed, 10 insertions(+), 42 deletions(-) diff --git a/R/RPS.R b/R/RPS.R index b2065cd..84956ac 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -48,7 +48,7 @@ #'@export RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, - ncores = NULL, weights = NULL) { + ncores = NULL) { # Check inputs ## exp and obs (1) @@ -130,7 +130,7 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', fun = .RPS, prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, Fair = Fair, - ncores = ncores, weights = weights)$output1 + ncores = ncores)$output1 # Return only the mean RPS rps <- MeanDims(rps, time_dim, na.rm = FALSE) @@ -140,12 +140,12 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', .RPS <- function(exp, obs, prob_thresholds = c(1/3, 2/3), - indices_for_clim = NULL, Fair = FALSE, weights = NULL) { + indices_for_clim = NULL, Fair = FALSE) { # exp: [sdate, memb] # obs: [sdate, (memb)] exp_probs <- .get_probs(data = exp, indices_for_quantiles = indices_for_clim, - prob_thresholds = prob_thresholds, weights = weights) + prob_thresholds = prob_thresholds) # exp_probs: [bin, sdate] obs_probs <- .get_probs(data = obs, indices_for_quantiles = indices_for_clim, prob_thresholds = prob_thresholds) @@ -168,7 +168,7 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', return(rps) } -.get_probs <- function(data, indices_for_quantiles, prob_thresholds, weigths = NULL) { +.get_probs <- function(data, indices_for_quantiles, prob_thresholds) { # if exp: [sdate, memb] # if obs: [sdate, (memb)] @@ -176,50 +176,18 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', if (length(dim(data)) == 1) dim(data) <- c(dim(data), 1) # Absolute thresholds - if (is.null(weights)){ - quantiles <- quantile(x = as.vector(data[indices_for_quantiles, ]), probs = prob_thresholds, type = 8, na.rm = TRUE) - } else { - # linear approach to compute weighted distribution thresholds. - sorted_data, sorted_weights <- .sorted_distributions(data[indices_for_quantiles, ], weights[indices_for_quantiles, ]) - # approach 1 (interpolate from discrete cumulative weights distribution. NOT type 8) - cumulative_weights <- cumsum(sorted_weights) - 0.5 * sorted_weights - cumulative_weights <- cumulative_weights - cumulative_weights[1] # fix the 0 - cumulative_weights <- cumulative_weights / cumulative_weights[length(cumulative_weights)] # fix the 1 - quantiles <- interp1(cumulative_weights, sorted_data, c(1/3,2/3), "cubic") - # approach 2 (interpolate from the polynomial fit of the cumulative weights distribution) - fit_model <- lm(cumsum(sorted_weights) ~ poly(sorted_data,10)) # order 10, but we should think what order we want to use - predicted.intervals <- predict(fit_model,data.frame(x=sorted_data)) - quantiles <- interp1(predicted.intervals, sorted_data, c(1/3,2/3), "cubic") - } + quantiles <- quantile(x = as.vector(data[indices_for_quantiles, ]), probs = prob_thresholds, type = 8, na.rm = TRUE) + # Probabilities probs <- array(dim = c(bin = length(quantiles) + 1, dim(data)[1])) # [bin, sdate] for (i_time in 1:dim(data)[1]) { - if (is.null(weights)){ - if (anyNA(data[i_time, ])) { - probs[, i_time] <- rep(NA, dim = length(quantiles) + 1) - } else { - probs[, i_time] <- colMeans(easyVerification::convert2prob(data[i_time, ], threshold = quantiles)) - } + if (anyNA(data[i_time, ])) { + probs[, i_time] <- rep(NA, dim = length(quantiles) + 1) } else { - sorted_data, sorted_weights <- .sorted_distributions(data[i_time, ], weights[i_time, ]) - - fit_model <- lm(cumsum(sorted_weights) ~ poly(sorted_data,10)) - predicted.intervals <- predict(fit_model,data.frame(x=sorted_data)) - integrated_probs <- interp1(sorted_data, predicted.intervals, quantiles, "cubic") - probs[, i_time] <- c(integrated_probs[1], integrated_probs[2]-integrated_probs[1], 1-integrated_probs[2]) + probs[, i_time] <- colMeans(easyVerification::convert2prob(data[i_time, ], threshold = quantiles)) } - } return(probs) } -.sorted_distributions <- function(data_vector, weights_vector){ - weights_vector <- as.vector(weights_vector) - data_vector <- as.vector(data_vector) - weights_vector <- weights_vector / sum(weights_vector) # normalize to 1 - sorter <- order(data_vector) - sorted_data <- data_vector[sorter] - sorted_weights <- weights_vector[sorter] - return(sorted_data, sorted_weights) -} \ No newline at end of file -- GitLab From 2c9ca69f6859d7cc77fb5035f346733451b3c1c2 Mon Sep 17 00:00:00 2001 From: jcos Date: Fri, 20 May 2022 15:59:28 +0200 Subject: [PATCH 65/83] basic workflow --- R/RPS.R | 84 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 13 deletions(-) diff --git a/R/RPS.R b/R/RPS.R index 84956ac..a5d54d7 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -48,7 +48,7 @@ #'@export RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, - ncores = NULL) { + ncores = NULL, weights = NULL) { # Check inputs ## exp and obs (1) @@ -130,8 +130,8 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', fun = .RPS, prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, Fair = Fair, - ncores = ncores)$output1 - + ncores = ncores, weights = weights)$output1 + browser() # Return only the mean RPS rps <- MeanDims(rps, time_dim, na.rm = FALSE) @@ -140,12 +140,10 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', .RPS <- function(exp, obs, prob_thresholds = c(1/3, 2/3), - indices_for_clim = NULL, Fair = FALSE) { + indices_for_clim = NULL, Fair = FALSE, weights = NULL) { # exp: [sdate, memb] # obs: [sdate, (memb)] - - exp_probs <- .get_probs(data = exp, indices_for_quantiles = indices_for_clim, - prob_thresholds = prob_thresholds) + exp_probs <- .get_probs(data = exp, indices_for_quantiles = indices_for_clim, prob_thresholds = prob_thresholds, weights = weights) # exp_probs: [bin, sdate] obs_probs <- .get_probs(data = obs, indices_for_quantiles = indices_for_clim, prob_thresholds = prob_thresholds) @@ -168,7 +166,7 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', return(rps) } -.get_probs <- function(data, indices_for_quantiles, prob_thresholds) { +.get_probs <- function(data, indices_for_quantiles, prob_thresholds, weights = NULL) { # if exp: [sdate, memb] # if obs: [sdate, (memb)] @@ -176,18 +174,78 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', if (length(dim(data)) == 1) dim(data) <- c(dim(data), 1) # Absolute thresholds - quantiles <- quantile(x = as.vector(data[indices_for_quantiles, ]), probs = prob_thresholds, type = 8, na.rm = TRUE) - + if (is.null(weights)){ + quantiles <- quantile(x = as.vector(data[indices_for_quantiles, ]), probs = prob_thresholds, type = 8, na.rm = TRUE) + } else { + # linear approach to compute weighted distribution thresholds. + weights <- s2dv::Reorder(data = weights, order = names(dim(data))) # move to check or in .rps ******* + sorted_arrays <- .sorted_distributions(data[indices_for_quantiles, ], weights[indices_for_quantiles, ]) + sorted_data <- sorted_arrays$data + sorted_weights <- sorted_arrays$weights + # approach 1 (interpolate from discrete cumulative weights distribution. NOT type 8) + # function vvvvvvvvvvvvvvvvvvv + # cumulative_weights <- cumsum(sorted_weights) - 0.5 * sorted_weights + # cumulative_weights <- cumulative_weights - cumulative_weights[1] # fix the 0 + # cumulative_weights <- cumulative_weights / cumulative_weights[length(cumulative_weights)] # fix the 1 + # # function ^^^^^^^^^^^^^^^^^^^ + # quantiles <- interp1(cumulative_weights, sorted_data, probs, "cubic") # library(pracma) + # approach 2 (interpolate from the polynomial fit of the cumulative weights distribution) + order <- 5 + fit_model <- lm(sorted_data ~ poly(cumsum(sorted_weights), order, raw=TRUE)) # order 10, but we should think what order we want to use + quantiles <- prob_thresholds*0 # make a list of zeros the length of prob_thresholds + for (i in 1:(order+1)) {quantiles <- quantiles+fit_model$coefficients[i]*prob_thresholds^(i-1)} + } # Probabilities probs <- array(dim = c(bin = length(quantiles) + 1, dim(data)[1])) # [bin, sdate] for (i_time in 1:dim(data)[1]) { - if (anyNA(data[i_time, ])) { - probs[, i_time] <- rep(NA, dim = length(quantiles) + 1) + if (is.null(weights)){ + if (anyNA(data[i_time, ])) { + probs[, i_time] <- rep(NA, dim = length(quantiles) + 1) + } else { + probs[, i_time] <- colMeans(easyVerification::convert2prob(data[i_time, ], threshold = quantiles)) + } } else { - probs[, i_time] <- colMeans(easyVerification::convert2prob(data[i_time, ], threshold = quantiles)) + sorted_arrays <- .sorted_distributions(data[i_time, ], weights[i_time, ]) + sorted_data <- sorted_arrays$data + sorted_weights <- sorted_arrays$weights + # approach 1. interpolate + cumulative_weights <- cumsum(sorted_weights) - 0.5 * sorted_weights + cumulative_weights <- cumulative_weights - cumulative_weights[1] # fix the 0 + cumulative_weights <- cumulative_weights / cumulative_weights[length(cumulative_weights)] # fix the 1 + # Solve issues for quantiles outside the sorted_data range: + xtra_length <- 10 + if (min(quantiles)max(sorted_data)){ + xtra <- seq(max(sorted_data), max(quantiles), length.out=xtra_length) + sorted_data <- c(sorted_data,xtra) + cumulative_weights <- c(cumulative_weights,numeric(xtra_length)) + } + integrated_probs <- interp1(sorted_data, cumulative_weights, quantiles, "cubic") + probs[, i_time] <- c(integrated_probs[1], integrated_probs[2]-integrated_probs[1], 1-integrated_probs[2]) + if (min(probs[, i_time])<0) {print(paste0("ERROR negative probability in i_time=",i_time))} ######################## checks + if (max(probs[, i_time])>1) {print(paste0("ERROR >1 probability in i_time=",i_time))} ######################## checks + + # approach 2. might give erroneous results for quantiles that fall outside the data range. Try normal distro + # order <- 5 + # fit_model <- lm(cumsum(sorted_weights) ~ poly(sorted_data, order, raw=TRUE)) # order 10, but we should think what order we want to use + # integrated_probs <- quantiles*0 + # for (i in 1:(order+1)) {integrated_probs <- integrated_probs+fit_model$coefficients[i]*quantiles^(i-1)} + # probs[, i_time] <- c(integrated_probs[1], integrated_probs[2]-integrated_probs[1], 1-integrated_probs[2]) } + } return(probs) } +.sorted_distributions <- function(data_vector, weights_vector){ + weights_vector <- as.vector(weights_vector) + data_vector <- as.vector(data_vector) + weights_vector <- weights_vector / sum(weights_vector) # normalize to 1 + sorter <- order(data_vector) + return(list("data" = data_vector[sorter], "weights" = weights_vector[sorter])) +} \ No newline at end of file -- GitLab From 75592c3620c065daa99c05a97f632fc9a118b450 Mon Sep 17 00:00:00 2001 From: aho Date: Mon, 23 May 2022 15:48:12 +0200 Subject: [PATCH 66/83] Fix bugs for R/4.x.x and add Load unit test --- R/Load.R | 18 ++--- R/Utils.R | 12 ++-- tests/testthat/test-Load.R | 133 +++++++++++++++++++++++++++++++++++++ 3 files changed, 148 insertions(+), 15 deletions(-) create mode 100644 tests/testthat/test-Load.R diff --git a/R/Load.R b/R/Load.R index cdb30be..3c3aa8e 100644 --- a/R/Load.R +++ b/R/Load.R @@ -1878,11 +1878,11 @@ Load <- function(var, exp = NULL, obs = NULL, sdates, nmember = NULL, } # We calculate the % of total progress that each work piece represents so # that progress bar can be updated properly - exp_work_piece_percent <- prod(dim_exp) / (prod(dim_obs) + prod(dim_exp)) - obs_work_piece_percent <- prod(dim_obs) / (prod(dim_obs) + prod(dim_exp)) + exp_work_piece_percent <- prod(unlist(dim_exp)) / (prod(unlist(dim_obs)) + prod(unlist(dim_exp))) + obs_work_piece_percent <- prod(unlist(dim_obs)) / (prod(unlist(dim_obs)) + prod(unlist(dim_exp))) # Add some important extra fields in the work pieces before sending - exp_work_pieces <- lapply(exp_work_pieces, function (x) c(x, list(dataset_type = 'exp', dims = dim_exp, out_pointer = pointer_var_exp)))###, progress_amount = exp_work_piece_progress))) - obs_work_pieces <- lapply(obs_work_pieces, function (x) c(x, list(dataset_type = 'obs', dims = dim_obs, out_pointer = pointer_var_obs)))###, progress_amount = obs_work_piece_progress))) + exp_work_pieces <- lapply(exp_work_pieces, function (x) c(x, list(dataset_type = 'exp', dims = unlist(dim_exp), out_pointer = pointer_var_exp)))###, progress_amount = exp_work_piece_progress))) + obs_work_pieces <- lapply(obs_work_pieces, function (x) c(x, list(dataset_type = 'obs', dims = unlist(dim_obs), out_pointer = pointer_var_obs)))###, progress_amount = obs_work_piece_progress))) work_pieces <- c(exp_work_pieces, obs_work_pieces) # Calculate the progress %s that will be displayed and assign them to the # appropriate work pieces @@ -1953,15 +1953,15 @@ Load <- function(var, exp = NULL, obs = NULL, sdates, nmember = NULL, bytes_obs <- 0 obs_dim_sizes <- '0' } else { - bytes_obs <- prod(c(dim_obs, 8)) - obs_dim_sizes <- paste(na.omit(as.vector(dim_obs[c('dataset', 'member', 'sdate', 'ftime', 'lat', 'lon')])), collapse = ' x ') + bytes_obs <- prod(c(unlist(dim_obs), 8)) + obs_dim_sizes <- paste(na.omit(as.vector(unlist(dim_obs)[c('dataset', 'member', 'sdate', 'ftime', 'lat', 'lon')])), collapse = ' x ') } if (length(dim_exp) == 0) { bytes_exp <- 0 exp_dim_sizes <- '0' } else { - bytes_exp <- prod(c(dim_exp, 8)) - exp_dim_sizes <- paste(na.omit(as.vector(dim_exp[c('dataset', 'member', 'sdate', 'ftime', 'lat', 'lon')])), collapse = ' x ') + bytes_exp <- prod(c(unlist(dim_exp), 8)) + exp_dim_sizes <- paste(na.omit(as.vector(unlist(dim_exp)[c('dataset', 'member', 'sdate', 'ftime', 'lat', 'lon')])), collapse = ' x ') } .message(paste("Total size of requested data: ", bytes_obs + bytes_exp, "bytes.")) .message(paste("- Experimental data: (", exp_dim_sizes, ") x 8 bytes =", bytes_exp, "bytes."), indent = 2) @@ -2146,7 +2146,7 @@ Load <- function(var, exp = NULL, obs = NULL, sdates, nmember = NULL, old_dims <- dim_exp dim_exp <- dim_exp[dim_reorder] mod_data <- - aperm(array(bigmemory::as.matrix(var_exp), dim = old_dims), dim_reorder) + aperm(array(bigmemory::as.matrix(var_exp), dim = unlist(old_dims)), dim_reorder) attr(mod_data, 'dimensions') <- names(dim_exp) names(dim(mod_data)) <- names(dim_exp) number_ftime <- dim_exp[["ftime"]] diff --git a/R/Utils.R b/R/Utils.R index 1f39694..c136914 100644 --- a/R/Utils.R +++ b/R/Utils.R @@ -349,11 +349,11 @@ if (!is.null(work_piece[['progress_amount']])) { cat("\n") } - cat(paste0("! Warning: the dataset with index ", + .warning(paste0("The dataset with index ", tail(work_piece[['indices']], 1), " in '", work_piece[['dataset_type']], "' doesn't start at longitude 0 and will be re-interpolated in order to align its longitudes with the standard CDO grids definable with the names 'tgrid' or 'rx', which are by definition starting at the longitude 0.\n")) if (!is.null(mask)) { - cat(paste0("! Warning: a mask was provided for the dataset with index ", + .warning(paste0("A mask was provided for the dataset with index ", tail(work_piece[['indices']], 1), " in '", work_piece[['dataset_type']], "'. This dataset has been re-interpolated to align its longitudes to start at 0. You must re-interpolate the corresponding mask to align its longitudes to start at 0 as well, if you haven't done so yet. Running cdo remapcon,", common_grid_name, " original_mask_file.nc new_mask_file.nc will fix it.\n")) } @@ -363,7 +363,7 @@ cat("\n") } if (!explore_dims) { - cat(paste0("! Warning: the dataset with index ", tail(work_piece[['indices']], 1), + .warning(paste0("The dataset with index ", tail(work_piece[['indices']], 1), " in '", work_piece[['dataset_type']], "' is originally on ", "a grid coarser than the common grid and it has been ", "extrapolated. Check the results carefully. It is ", @@ -836,7 +836,7 @@ if (!all(dim_matches == sort(dim_matches))) { if (!found_disordered_dims && rev(work_piece[['indices']])[2] == 1 && rev(work_piece[['indices']])[3] == 1) { found_disordered_dims <- TRUE - cat(paste0("! Warning: the dimensions for the variable ", namevar, " in the files of the experiment with index ", tail(work_piece[['indices']], 1), " are not in the optimal order for loading with Load(). The optimal order would be '", paste(expected_dims, collapse = ', '), "'. One of the files of the dataset is stored in ", filename)) + .warning(paste0("The dimensions for the variable ", namevar, " in the files of the experiment with index ", tail(work_piece[['indices']], 1), " are not in the optimal order for loading with Load(). The optimal order would be '", paste(expected_dims, collapse = ', '), "'. One of the files of the dataset is stored in ", filename)) } tmp <- aperm(tmp, dim_matches) } @@ -879,13 +879,13 @@ } if (output == 'areave' || output == 'lon') { - weights <- InsertDim(cos(final_lats * pi / 180), 1, length(final_lons)) + weights <- InsertDim(cos(final_lats * pi / 180), 1, length(final_lons), name = 'lon') weights[which(is.na(x))] <- NA if (output == 'areave') { weights <- weights / mean(weights, na.rm = TRUE) mean(x * weights, na.rm = TRUE) } else { - weights <- weights / InsertDim(MeanDims(weights, 2, na.rm = TRUE), 2, length(final_lats)) + weights <- weights / InsertDim(MeanDims(weights, 2, na.rm = TRUE), 2, length(final_lats), name = 'lat') MeanDims(x * weights, 2, na.rm = TRUE) } } else if (output == 'lat') { diff --git a/tests/testthat/test-Load.R b/tests/testthat/test-Load.R new file mode 100644 index 0000000..6a99873 --- /dev/null +++ b/tests/testthat/test-Load.R @@ -0,0 +1,133 @@ +context("s2dv::Load tests") + +############################################## + +test_that("1-1.", { + +path <- "/esarchive/exp/meteofrance/system6c3s/$STORE_FREQ$_mean/$VAR_NAME$_f6h/$VAR_NAME$_$START_DATE$.nc" +dateseq <- c("19930501", "19940501", "19950501") +suppressWarnings( +res1 <- Load(var = 'sfcWind', + exp = list(list(name = 'meteofrance/system6c3s', path = path)), + obs = 'erainterim', + sdates = dateseq, leadtimemin = 2, leadtimemax = 3, + lonmin = -9, lonmax = 1.5, latmin = 75, latmax = 79.5, + storefreq = "daily", sampleperiod = 1, nmember = 3, + output = "lonlat", method = "bilinear", + grid = "r360x180", nprocs = 1) +) +#suppressWarnings( +#res2 <- Load(var = 'sfcWind', +# exp = list(list(name = 'meteofrance/system6c3s', path = path)), +# obs = 'erainterim', +# sdates = dateseq, leadtimemin = 2, leadtimemax = 3, +# lonmin = -9, lonmax = 1.5, latmin = 75, latmax = 79.5, +# storefreq = "daily", sampleperiod = 1, nmember = 3, +# output = "lonlat", method = "bilinear", +# grid = "r360x180") +#) +#expect_equal( +#res1$mod, res2$mod +#) +#expect_equal( +#res1$obs, res2$obs +#) +#expect_equal( +#names(res1), names(res2) +#) +expect_equal( +dim(res1$mod), +c(dataset = 1, member = 3, sdate = 3, ftime = 2, lat = 5, lon = 11) +) +expect_equal( +dim(res1$obs), +c(dataset = 1, member = 1, sdate = 3, ftime = 2, lat = 5, lon = 11) +) +expect_equal( +as.vector(drop(res1$mod)[1, , 2, 3, 4]), +c(2.0504, 2.2746, 3.4189), +tolerance = 0.0001 +) +expect_equal( +as.vector(drop(res1$obs)[, 2, 3, 4]), +c(5.9923, 2.7927, 2.5408), +tolerance = 0.0001 +) +expect_equal( +mean(res1$mod, na.rm = T), +6.007487, +tolerance = 0.0001 +) +expect_equal( +mean(res1$obs, na.rm = T), +5.043017, +tolerance = 0.0001 +) + +}) + + +test_that("1-2.", { + +path <- "/esarchive/exp/meteofrance/system6c3s/$STORE_FREQ$_mean/$VAR_NAME$_f6h/$VAR_NAME$_$START_DATE$.nc" +dateseq <- c("19930501", "19940501", "19950501") +suppressWarnings( +res1 <- Load(var = 'sfcWind', + exp = list(list(name = 'meteofrance/system6c3s', path = path)), + obs = 'erainterim', + sdates = dateseq, leadtimemin = 2, leadtimemax = 3, + lonmin = -9, lonmax = 1.5, latmin = 75, latmax = 79.5, + storefreq = "daily", sampleperiod = 1, nmember = 3, + output = "areave", + nprocs = 1) +) +#suppressWarnings( +#res2 <- Load(var = 'sfcWind', +# exp = list(list(name = 'meteofrance/system6c3s', path = path)), +# obs = 'erainterim', +# sdates = dateseq, leadtimemin = 2, leadtimemax = 3, +# lonmin = -9, lonmax = 1.5, latmin = 75, latmax = 79.5, +# storefreq = "daily", sampleperiod = 1, nmember = 3, +# output = "areave") +#) +#expect_equal( +#res1$mod, res2$mod +#) +#expect_equal( +#res1$obs, res2$obs +#) +#expect_equal( +#names(res1), names(res2) +#) +expect_equal( +dim(res1$mod), +c(dataset = 1, member = 3, sdate = 3, ftime = 2) +) +expect_equal( +dim(res1$obs), +c(dataset = 1, member = 1, sdate = 3, ftime = 2) +) +expect_equal( +as.vector(drop(res1$mod)[1, , 2]), +c(5.037364, 2.395024, 5.418090), +tolerance = 0.0001 +) +expect_equal( +as.vector(drop(res1$obs)[, 2]), +c(8.728424, 2.931754, 3.918583), +tolerance = 0.0001 +) +expect_equal( +mean(res1$mod, na.rm = T), +6.162087, +tolerance = 0.0001 +) +expect_equal( +mean(res1$obs, na.rm = T), +5.178091, +tolerance = 0.0001 +) + +}) + + -- GitLab From 7536e289fd004435716c600611bafa05273ae37b Mon Sep 17 00:00:00 2001 From: jcos Date: Thu, 26 May 2022 12:34:59 +0200 Subject: [PATCH 67/83] switch to approx() and use it in the quantiles and probs --- R/RPS.R | 105 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 56 insertions(+), 49 deletions(-) diff --git a/R/RPS.R b/R/RPS.R index a5d54d7..e323936 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -131,7 +131,7 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, Fair = Fair, ncores = ncores, weights = weights)$output1 - browser() + # browser() # Return only the mean RPS rps <- MeanDims(rps, time_dim, na.rm = FALSE) @@ -178,67 +178,70 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', quantiles <- quantile(x = as.vector(data[indices_for_quantiles, ]), probs = prob_thresholds, type = 8, na.rm = TRUE) } else { # linear approach to compute weighted distribution thresholds. + # browser() + #weights<-as.array(weights) weights <- s2dv::Reorder(data = weights, order = names(dim(data))) # move to check or in .rps ******* + # is there a better way of doing this: vvvvvvvvvv sorted_arrays <- .sorted_distributions(data[indices_for_quantiles, ], weights[indices_for_quantiles, ]) sorted_data <- sorted_arrays$data - sorted_weights <- sorted_arrays$weights - # approach 1 (interpolate from discrete cumulative weights distribution. NOT type 8) - # function vvvvvvvvvvvvvvvvvvv - # cumulative_weights <- cumsum(sorted_weights) - 0.5 * sorted_weights - # cumulative_weights <- cumulative_weights - cumulative_weights[1] # fix the 0 - # cumulative_weights <- cumulative_weights / cumulative_weights[length(cumulative_weights)] # fix the 1 - # # function ^^^^^^^^^^^^^^^^^^^ - # quantiles <- interp1(cumulative_weights, sorted_data, probs, "cubic") # library(pracma) + cumulative_weights <- sorted_arrays$cumulative_weights + quantiles <- approx(cumulative_weights, sorted_data, prob_thresholds, "linear")$y # library(pracma) + # approach 2 (interpolate from the polynomial fit of the cumulative weights distribution) - order <- 5 - fit_model <- lm(sorted_data ~ poly(cumsum(sorted_weights), order, raw=TRUE)) # order 10, but we should think what order we want to use - quantiles <- prob_thresholds*0 # make a list of zeros the length of prob_thresholds - for (i in 1:(order+1)) {quantiles <- quantiles+fit_model$coefficients[i]*prob_thresholds^(i-1)} + # order <- 5 # should it be fixed? should it be provided? should it be computed according to the number of points available? + # fit_model <- lm(sorted_data ~ poly(cumsum(sorted_weights), order, raw=TRUE)) + # quantiles <- numeric(length(prob_thresholds)) # make a list of zeros the length of prob_thresholds + # for (i in 1:(order+1)) {quantiles <- quantiles+fit_model$coefficients[i]*prob_thresholds^(i-1)} } # Probabilities + # browser() probs <- array(dim = c(bin = length(quantiles) + 1, dim(data)[1])) # [bin, sdate] for (i_time in 1:dim(data)[1]) { - if (is.null(weights)){ - if (anyNA(data[i_time, ])) { + if (anyNA(data[i_time, ])) { probs[, i_time] <- rep(NA, dim = length(quantiles) + 1) - } else { - probs[, i_time] <- colMeans(easyVerification::convert2prob(data[i_time, ], threshold = quantiles)) - } } else { - sorted_arrays <- .sorted_distributions(data[i_time, ], weights[i_time, ]) - sorted_data <- sorted_arrays$data - sorted_weights <- sorted_arrays$weights - # approach 1. interpolate - cumulative_weights <- cumsum(sorted_weights) - 0.5 * sorted_weights - cumulative_weights <- cumulative_weights - cumulative_weights[1] # fix the 0 - cumulative_weights <- cumulative_weights / cumulative_weights[length(cumulative_weights)] # fix the 1 - # Solve issues for quantiles outside the sorted_data range: - xtra_length <- 10 - if (min(quantiles)max(sorted_data)){ - xtra <- seq(max(sorted_data), max(quantiles), length.out=xtra_length) - sorted_data <- c(sorted_data,xtra) - cumulative_weights <- c(cumulative_weights,numeric(xtra_length)) + if (is.null(weights)){ + probs[, i_time] <- colMeans(easyVerification::convert2prob(data[i_time, ], threshold = quantiles)) + print("............probs...................") + print(probs[, i_time]) + print("...............................") + } else { + # function vvvv + sorted_arrays <- .sorted_distributions(data[i_time, ], weights[i_time, ]) + sorted_data <- sorted_arrays$data + cumulative_weights <- sorted_arrays$cumulative_weights + # find any quantiles that are outside the data range + integrated_probs <- array(dim = c(bin=length(quantiles))) + for (i_quant in 1:length(quantiles)) { + if (quantiles[i_quant] < min(sorted_data)) { + integrated_probs[i_quant] = 0 # append + } else if (max(sorted_data) < quantiles[i_quant]) { + integrated_probs[i_quant] = 1 # append + } else { + integrated_probs[i_quant] = approx(sorted_data, cumulative_weights, quantiles[i_quant], "linear")$y + } + } + probs[, i_time] <- append(integrated_probs, 1) - append(0, integrated_probs) + # print("..........quantiles.........") + # print(quantiles) + # print("..........integrated probs.........") + # print(integrated_probs) + print("..........probs.........") + print(probs[, i_time]) + print("..............................") + print("..............................") + if (min(probs[, i_time])<0) {print(paste0("ERROR negative probability in i_time=",i_time))} ######################## checks + if (max(probs[, i_time])>1) {print(paste0("ERROR >1 probability in i_time=",i_time))} ######################## checks + # approach 2. might give erroneous results for quantiles that fall outside the data range. Try normal distro + # order <- 5 + # fit_model <- lm(cumsum(sorted_weights) ~ poly(sorted_data, order, raw=TRUE)) # order 10, but we should think what order we want to use + # integrated_probs <- quantiles*0 + # for (i in 1:(order+1)) {integrated_probs <- integrated_probs+fit_model$coefficients[i]*quantiles^(i-1)} + # probs[, i_time] <- c(integrated_probs[1], integrated_probs[2]-integrated_probs[1], 1-integrated_probs[2]) } - integrated_probs <- interp1(sorted_data, cumulative_weights, quantiles, "cubic") - probs[, i_time] <- c(integrated_probs[1], integrated_probs[2]-integrated_probs[1], 1-integrated_probs[2]) - if (min(probs[, i_time])<0) {print(paste0("ERROR negative probability in i_time=",i_time))} ######################## checks - if (max(probs[, i_time])>1) {print(paste0("ERROR >1 probability in i_time=",i_time))} ######################## checks - - # approach 2. might give erroneous results for quantiles that fall outside the data range. Try normal distro - # order <- 5 - # fit_model <- lm(cumsum(sorted_weights) ~ poly(sorted_data, order, raw=TRUE)) # order 10, but we should think what order we want to use - # integrated_probs <- quantiles*0 - # for (i in 1:(order+1)) {integrated_probs <- integrated_probs+fit_model$coefficients[i]*quantiles^(i-1)} - # probs[, i_time] <- c(integrated_probs[1], integrated_probs[2]-integrated_probs[1], 1-integrated_probs[2]) } } - return(probs) } @@ -247,5 +250,9 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', data_vector <- as.vector(data_vector) weights_vector <- weights_vector / sum(weights_vector) # normalize to 1 sorter <- order(data_vector) - return(list("data" = data_vector[sorter], "weights" = weights_vector[sorter])) + sorted_weights <- weights_vector[sorter] + cumulative_weights <- cumsum(sorted_weights) - 0.5 * sorted_weights + cumulative_weights <- cumulative_weights - cumulative_weights[1] # fix the 0 + cumulative_weights <- cumulative_weights / cumulative_weights[length(cumulative_weights)] # fix the 1 + return(list("data" = data_vector[sorter], "cumulative_weights" = cumulative_weights)) } \ No newline at end of file -- GitLab From 788eb44996b6de7303b97e30bd41679b56ef6dd0 Mon Sep 17 00:00:00 2001 From: aho Date: Mon, 30 May 2022 15:34:45 +0200 Subject: [PATCH 68/83] Add one more test --- tests/testthat/test-Load.R | 49 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tests/testthat/test-Load.R b/tests/testthat/test-Load.R index 6a99873..8266139 100644 --- a/tests/testthat/test-Load.R +++ b/tests/testthat/test-Load.R @@ -131,3 +131,52 @@ tolerance = 0.0001 }) +test_that("1-3.", { + + ecearth <- list(name = 'm04o', + path = file.path('/esarchive/exp/ecearth', + '/$EXP_NAME$/monthly_mean', + '/$VAR_NAME$_f6h/$VAR_NAME$_$START_DATE$.nc')) + + ecmwf <- list(name = 'system5c3s', + path = file.path('/esarchive/exp/ecmwf', + '/$EXP_NAME$/monthly_mean', + '/$VAR_NAME$_f6h/$VAR_NAME$_$START_DATE$.nc')) + + era5 <- list(name = 'era5', + path = file.path('/esarchive/recon/ecmwf', + '$OBS_NAME$/monthly_mean', + '$VAR_NAME$_f1h/$VAR_NAME$_$YEAR$$MONTH$.nc')) + + startDates <- format(seq(as.POSIXct('1999-01-01'), as.POSIXct('1999-12-01'), by = 'months'), '%Y%m%d') + time_length <- 2 + +suppressWarnings( + data <- Load(var = 'psl', + exp = list(ecearth, ecmwf), + obs = list(era5), + sdates = startDates, + storefreq = "monthly", + leadtimemax = time_length, + output = 'lonlat', + lonmin = -2, lonmax = 2, + latmin = -5, latmax = 5, + nprocs = 1) +) + +expect_equal( +dim(data$mod), +c(dataset = 2, member = 10, sdate = 12, ftime = 2, lat = 14, lon = 5) +) +expect_equal( +dim(data$obs), +c(dataset = 1, member = 1, sdate = 12, ftime = 2, lat = 14, lon = 5) +) +expect_equal( +as.vector(data$mod[1, 1, , 2, 2, 3]), +c(rep(NA, 4), 101250, rep(NA, 5), 100940, NA), +tolerance = 0.0001 +) + + +}) -- GitLab From 5001796129269f9ceb03ff5f03b460d2446ea695 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 1 Jun 2022 17:16:30 +0200 Subject: [PATCH 69/83] Map plotting are flexible with any longitude range --- R/PlotEquiMap.R | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/R/PlotEquiMap.R b/R/PlotEquiMap.R index 9e1121a..2aadda7 100644 --- a/R/PlotEquiMap.R +++ b/R/PlotEquiMap.R @@ -758,11 +758,6 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, latmax <- ceiling(max(lat) / 10) * 10 lonmin <- floor(min(lon) / 10) * 10 lonmax <- ceiling(max(lon) / 10) * 10 - if (min(lon) < 0) { - continents <- 'world' - } else { - continents <- 'world2' - } # # Plotting the map @@ -947,24 +942,15 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, # Plotting continents # ~~~~~~~~~~~~~~~~~~~~~ # - # maps::map has the global map range [0, 360] or [-180, 180]. - # Set xlim so lon = 0 won't show a straight line when lon = [0, 359]. - # NOTE: It works except Antartic area. Don't know why. ylim is also set - # but it doesn't work. - if (continents == 'world') { # [-180, 180] - xlim_conti <- c(-179.99, 179.99) - } else { # [0, 360] - xlim_conti <- c(0.01, 359.99) - } + wrap_vec <- c(lon[1], lon[1] + 360) old_lwd <- par('lwd') par(lwd = coast_width) # If [0, 360], use GEOmap; if [-180, 180], use maps::map # UPDATE: Use maps::map for both cases. The difference between GEOmap and # maps is trivial. The only thing we can see for now is that # GEOmap has better lakes. - coast <- maps::map(continents, interior = country.borders, wrap = TRUE, - xlim = xlim_conti, ylim = c(-89.99, 89.99), - fill = filled.continents, add = TRUE, plot = FALSE) + coast <- maps::map(interior = country.borders, wrap = wrap_vec, + fill = filled.continents, add = TRUE, plot = FALSE) if (filled.continents) { polygon(coast, col = continent_color, border = coast_color, lwd = coast_width) @@ -972,7 +958,7 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, lines(coast, col = coast_color, lwd = coast_width) } if (!is.null(lake_color)) { - maps::map('lakes', add = TRUE, fill = filled.continents, col = lake_color) + maps::map('lakes', add = TRUE, wrap = wrap_vec, fill = filled.continents, col = lake_color) } par(lwd = old_lwd) @@ -981,8 +967,8 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, old_lwd <- par('lwd') par(lwd = coast_width) - outline <- maps::map(continents, fill = T, plot = FALSE) # must be fill = T - xbox <- xlim_conti + c(-2, 2) + outline <- maps::map(wrap = wrap_vec, fill = T, plot = FALSE) # must be fill = T + xbox <- wrap_vec + c(-2, 2) ybox <- c(-92, 92) outline$x <- c(outline$x, NA, c(xbox, rev(xbox), xbox[1])) outline$y <- c(outline$y, NA, rep(ybox, each = 2), ybox[1]) @@ -992,9 +978,9 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, } # Plot shapefile + #NOTE: the longitude range cannot cut shapefile range, or not all the shapefile will be plotted. if (!is.null(shapefile)) { - maps::map(shape, interior = country.borders, #wrap = TRUE, - xlim = xlim_conti, ylim = c(-89.99, 89.99), + maps::map(shape, interior = country.borders, #wrap = wrap_vec, fill = filled.continents, add = TRUE, plot = TRUE, lwd = shapefile_lwd, col = shapefile_color) } -- GitLab From 281ff94a074846ace6d65a5ab2c1c06d1b54858d Mon Sep 17 00:00:00 2001 From: jcos Date: Wed, 8 Jun 2022 16:39:54 +0200 Subject: [PATCH 70/83] cleanup --- R/RPS.R | 39 ++++++--------------------------------- 1 file changed, 6 insertions(+), 33 deletions(-) diff --git a/R/RPS.R b/R/RPS.R index e323936..e0e19b4 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -122,7 +122,6 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', } else { target_dims_obs <- c(time_dim, memb_dim) } - rps <- Apply(data = list(exp = exp, obs = obs), target_dims = list(exp = c(time_dim, memb_dim), obs = target_dims_obs), @@ -177,24 +176,13 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', if (is.null(weights)){ quantiles <- quantile(x = as.vector(data[indices_for_quantiles, ]), probs = prob_thresholds, type = 8, na.rm = TRUE) } else { - # linear approach to compute weighted distribution thresholds. - # browser() - #weights<-as.array(weights) weights <- s2dv::Reorder(data = weights, order = names(dim(data))) # move to check or in .rps ******* - # is there a better way of doing this: vvvvvvvvvv sorted_arrays <- .sorted_distributions(data[indices_for_quantiles, ], weights[indices_for_quantiles, ]) sorted_data <- sorted_arrays$data cumulative_weights <- sorted_arrays$cumulative_weights - quantiles <- approx(cumulative_weights, sorted_data, prob_thresholds, "linear")$y # library(pracma) - - # approach 2 (interpolate from the polynomial fit of the cumulative weights distribution) - # order <- 5 # should it be fixed? should it be provided? should it be computed according to the number of points available? - # fit_model <- lm(sorted_data ~ poly(cumsum(sorted_weights), order, raw=TRUE)) - # quantiles <- numeric(length(prob_thresholds)) # make a list of zeros the length of prob_thresholds - # for (i in 1:(order+1)) {quantiles <- quantiles+fit_model$coefficients[i]*prob_thresholds^(i-1)} + quantiles <- approx(cumulative_weights, sorted_data, prob_thresholds, "linear")$y } # Probabilities - # browser() probs <- array(dim = c(bin = length(quantiles) + 1, dim(data)[1])) # [bin, sdate] for (i_time in 1:dim(data)[1]) { if (anyNA(data[i_time, ])) { @@ -202,42 +190,27 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', } else { if (is.null(weights)){ probs[, i_time] <- colMeans(easyVerification::convert2prob(data[i_time, ], threshold = quantiles)) - print("............probs...................") - print(probs[, i_time]) - print("...............................") } else { - # function vvvv sorted_arrays <- .sorted_distributions(data[i_time, ], weights[i_time, ]) sorted_data <- sorted_arrays$data cumulative_weights <- sorted_arrays$cumulative_weights # find any quantiles that are outside the data range integrated_probs <- array(dim = c(bin=length(quantiles))) for (i_quant in 1:length(quantiles)) { + # for thresholds falling under the distribution if (quantiles[i_quant] < min(sorted_data)) { - integrated_probs[i_quant] = 0 # append + integrated_probs[i_quant] = 0 + # for thresholds falling over the distribution } else if (max(sorted_data) < quantiles[i_quant]) { - integrated_probs[i_quant] = 1 # append + integrated_probs[i_quant] = 1 } else { integrated_probs[i_quant] = approx(sorted_data, cumulative_weights, quantiles[i_quant], "linear")$y } } probs[, i_time] <- append(integrated_probs, 1) - append(0, integrated_probs) - # print("..........quantiles.........") - # print(quantiles) - # print("..........integrated probs.........") - # print(integrated_probs) - print("..........probs.........") - print(probs[, i_time]) - print("..............................") - print("..............................") + # This shouldn't happen, idk if this cehck is needed then if (min(probs[, i_time])<0) {print(paste0("ERROR negative probability in i_time=",i_time))} ######################## checks if (max(probs[, i_time])>1) {print(paste0("ERROR >1 probability in i_time=",i_time))} ######################## checks - # approach 2. might give erroneous results for quantiles that fall outside the data range. Try normal distro - # order <- 5 - # fit_model <- lm(cumsum(sorted_weights) ~ poly(sorted_data, order, raw=TRUE)) # order 10, but we should think what order we want to use - # integrated_probs <- quantiles*0 - # for (i in 1:(order+1)) {integrated_probs <- integrated_probs+fit_model$coefficients[i]*quantiles^(i-1)} - # probs[, i_time] <- c(integrated_probs[1], integrated_probs[2]-integrated_probs[1], 1-integrated_probs[2]) } } -- GitLab From 4f878edcb99f1f23546624169a8b083e4a8c6002 Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 10 Jun 2022 13:47:53 +0200 Subject: [PATCH 71/83] Improve error message to facilitate xlabels correction. --- R/PlotEquiMap.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/PlotEquiMap.R b/R/PlotEquiMap.R index 2aadda7..ee10ec3 100644 --- a/R/PlotEquiMap.R +++ b/R/PlotEquiMap.R @@ -790,7 +790,7 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, ypos <- seq(latmin, latmax, intylat) + ylatshft if (length(ypos) != length(ylabels)) { stop(paste0("Parameter 'ylabels' must have the same length as the latitude ", - "vector spaced by 'intylat'.")) + "vector spaced by 'intylat' (length = ", length(ypos), ").")) } ylabs <- ylabels } else { @@ -811,7 +811,7 @@ PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, xpos <- seq(lonmin, lonmax, intxlon) + xlonshft if (length(xpos) != length(xlabels)) { stop(paste0("Parameter 'xlabels' must have the same length as the longitude ", - "vector spaced by 'intxlon'.")) + "vector spaced by 'intxlon' (length = ", length(xpos), ").")) } xlabs <- xlabels } else { -- GitLab From f4c5f17a6969c9fa40879cf4146f3ba0a02b5c4f Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 10 Jun 2022 17:28:52 +0200 Subject: [PATCH 72/83] Add 'weights' documentation --- R/RPS.R | 53 ++++++++++++++++++++++++-------------- R/RPSS.R | 26 +++++++++++++++---- man/RPS.Rd | 5 ++++ man/RPSS.Rd | 5 ++++ tests/testthat/test-RPS.R | 21 ++++++++++++++- tests/testthat/test-RPSS.R | 21 ++++++++++++++- 6 files changed, 105 insertions(+), 26 deletions(-) diff --git a/R/RPS.R b/R/RPS.R index e0e19b4..00d0c10 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -28,6 +28,9 @@ #'@param Fair A logical indicating whether to compute the FairRPSS (the #' potential RPSS that the forecast would have with an infinite ensemble size). #' The default value is FALSE. +#'@param weights A named two-dimensional numerical array of the weights for each +#' member and time. The dimension names should include 'memb_dim' and +#' 'time_dim'. The default value is NULL. #'@param ncores An integer indicating the number of cores to use for parallel #' computation. The default value is NULL. #' @@ -47,8 +50,8 @@ #'@importFrom easyVerification convert2prob #'@export RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', - prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, - ncores = NULL, weights = NULL) { + prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, + weights = NULL, ncores = NULL) { # Check inputs ## exp and obs (1) @@ -106,6 +109,18 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', if (!is.logical(Fair) | length(Fair) > 1) { stop("Parameter 'Fair' must be either TRUE or FALSE.") } + ## weights + if (!is.null(weights)) { + if (!is.array(weights) | !is.numeric(weights)) + stop('Parameter "weights" must be a two-dimensional numeric array.') + if (length(dim(weights)) != 2 | any(!names(dim(weights)) %in% c(memb_dim, time_dim))) + stop("Parameter 'weights' must have two dimensions with the names of memb_dim and time_dim.") + if (dim(weights)[memb_dim] != dim(exp)[memb_dim] | + dim(weights)[time_dim] != dim(exp)[time_dim]) { + stop("Parameter 'weights' must have the same dimension lengths as memb_dim and time_dim in 'exp'.") + } + weights <- Reorder(weights, c(time_dim, memb_dim)) + } ## ncores if (!is.null(ncores)) { if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | @@ -129,7 +144,7 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', fun = .RPS, prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, Fair = Fair, - ncores = ncores, weights = weights)$output1 + weights = weights, ncores = ncores)$output1 # browser() # Return only the mean RPS rps <- MeanDims(rps, time_dim, na.rm = FALSE) @@ -145,7 +160,7 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', exp_probs <- .get_probs(data = exp, indices_for_quantiles = indices_for_clim, prob_thresholds = prob_thresholds, weights = weights) # exp_probs: [bin, sdate] obs_probs <- .get_probs(data = obs, indices_for_quantiles = indices_for_clim, - prob_thresholds = prob_thresholds) + prob_thresholds = prob_thresholds, weights = NULL) # obs_probs: [bin, sdate] probs_exp_cumsum <- apply(exp_probs, 2, cumsum) @@ -173,52 +188,52 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', if (length(dim(data)) == 1) dim(data) <- c(dim(data), 1) # Absolute thresholds - if (is.null(weights)){ + if (is.null(weights)) { quantiles <- quantile(x = as.vector(data[indices_for_quantiles, ]), probs = prob_thresholds, type = 8, na.rm = TRUE) } else { - weights <- s2dv::Reorder(data = weights, order = names(dim(data))) # move to check or in .rps ******* + # weights: [sdate, memb] sorted_arrays <- .sorted_distributions(data[indices_for_quantiles, ], weights[indices_for_quantiles, ]) sorted_data <- sorted_arrays$data cumulative_weights <- sorted_arrays$cumulative_weights quantiles <- approx(cumulative_weights, sorted_data, prob_thresholds, "linear")$y } + # Probabilities probs <- array(dim = c(bin = length(quantiles) + 1, dim(data)[1])) # [bin, sdate] for (i_time in 1:dim(data)[1]) { if (anyNA(data[i_time, ])) { - probs[, i_time] <- rep(NA, dim = length(quantiles) + 1) + probs[, i_time] <- rep(NA, dim = length(quantiles) + 1) } else { - if (is.null(weights)){ - probs[, i_time] <- colMeans(easyVerification::convert2prob(data[i_time, ], threshold = quantiles)) + if (is.null(weights)) { + probs[, i_time] <- colMeans(easyVerification::convert2prob(data[i_time, ], threshold = quantiles)) } else { sorted_arrays <- .sorted_distributions(data[i_time, ], weights[i_time, ]) sorted_data <- sorted_arrays$data cumulative_weights <- sorted_arrays$cumulative_weights # find any quantiles that are outside the data range - integrated_probs <- array(dim = c(bin=length(quantiles))) + integrated_probs <- array(dim = c(bin = length(quantiles))) for (i_quant in 1:length(quantiles)) { # for thresholds falling under the distribution if (quantiles[i_quant] < min(sorted_data)) { - integrated_probs[i_quant] = 0 + integrated_probs[i_quant] <- 0 # for thresholds falling over the distribution } else if (max(sorted_data) < quantiles[i_quant]) { - integrated_probs[i_quant] = 1 + integrated_probs[i_quant] <- 1 } else { - integrated_probs[i_quant] = approx(sorted_data, cumulative_weights, quantiles[i_quant], "linear")$y + integrated_probs[i_quant] <- approx(sorted_data, cumulative_weights, quantiles[i_quant], "linear")$y } } probs[, i_time] <- append(integrated_probs, 1) - append(0, integrated_probs) - # This shouldn't happen, idk if this cehck is needed then - if (min(probs[, i_time])<0) {print(paste0("ERROR negative probability in i_time=",i_time))} ######################## checks - if (max(probs[, i_time])>1) {print(paste0("ERROR >1 probability in i_time=",i_time))} ######################## checks + if (min(probs[, i_time]) < 0 | max(probs[, i_time]) > 1) { + stop(paste0("Probability in i_time = ", i_time, " is out of [0, 1].")) + } } } - } return(probs) } -.sorted_distributions <- function(data_vector, weights_vector){ +.sorted_distributions <- function(data_vector, weights_vector) { weights_vector <- as.vector(weights_vector) data_vector <- as.vector(data_vector) weights_vector <- weights_vector / sum(weights_vector) # normalize to 1 @@ -228,4 +243,4 @@ RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', cumulative_weights <- cumulative_weights - cumulative_weights[1] # fix the 0 cumulative_weights <- cumulative_weights / cumulative_weights[length(cumulative_weights)] # fix the 1 return(list("data" = data_vector[sorter], "cumulative_weights" = cumulative_weights)) -} \ No newline at end of file +} diff --git a/R/RPSS.R b/R/RPSS.R index 04c3137..c4e5744 100644 --- a/R/RPSS.R +++ b/R/RPSS.R @@ -34,6 +34,9 @@ #'@param Fair A logical indicating whether to compute the FairRPSS (the #' potential RPSS that the forecast would have with an infinite ensemble size). #' The default value is FALSE. +#'@param weights A named two-dimensional numerical array of the weights for each +#' member and time. The dimension names should include 'memb_dim' and +#' 'time_dim'. The default value is NULL. #'@param ncores An integer indicating the number of cores to use for parallel #' computation. The default value is NULL. #' @@ -62,7 +65,7 @@ #'@export RPSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', memb_dim = 'member', prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, - ncores = NULL) { + weights = NULL, ncores = NULL) { # Check inputs ## exp, obs, and ref (1) @@ -135,6 +138,18 @@ RPSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', memb_dim = 'member', if (!is.logical(Fair) | length(Fair) > 1) { stop("Parameter 'Fair' must be either TRUE or FALSE.") } + ## weights + if (!is.null(weights)) { + if (!is.array(weights) | !is.numeric(weights)) + stop('Parameter "weights" must be a two-dimensional numeric array.') + if (length(dim(weights)) != 2 | any(!names(dim(weights)) %in% c(memb_dim, time_dim))) + stop("Parameter 'weights' must have two dimensions with the names of memb_dim and time_dim.") + if (dim(weights)[memb_dim] != dim(exp)[memb_dim] | + dim(weights)[time_dim] != dim(exp)[time_dim]) { + stop("Parameter 'weights' must have the same dimension lengths as memb_dim and time_dim in 'exp'.") + } + weights <- Reorder(weights, c(time_dim, memb_dim)) + } ## ncores if (!is.null(ncores)) { if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | @@ -167,25 +182,26 @@ RPSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', memb_dim = 'member', fun = .RPSS, prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, Fair = Fair, + weights = weights, ncores = ncores) return(output) } .RPSS <- function(exp, obs, ref = NULL, prob_thresholds = c(1/3, 2/3), - indices_for_clim = NULL, Fair = FALSE) { + indices_for_clim = NULL, Fair = FALSE, weights = NULL) { # exp: [sdate, memb] # obs: [sdate, (memb)] # ref: [sdate, memb] or NULL # RPS of the forecast rps_exp <- .RPS(exp = exp, obs = obs, prob_thresholds = prob_thresholds, - indices_for_clim = indices_for_clim, Fair = Fair) + indices_for_clim = indices_for_clim, Fair = Fair, weights = weights) # RPS of the reference forecast if (is.null(ref)) { ## using climatology as reference forecast obs_probs <- .get_probs(data = obs, indices_for_quantiles = indices_for_clim, - prob_thresholds = prob_thresholds) + prob_thresholds = prob_thresholds, weights = NULL) # obs_probs: [bin, sdate] clim_probs <- c(prob_thresholds[1], diff(prob_thresholds), 1 - prob_thresholds[length(prob_thresholds)]) @@ -209,7 +225,7 @@ RPSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', memb_dim = 'member', } else { # use "ref" as reference forecast rps_ref <- .RPS(exp = ref, obs = obs, prob_thresholds = prob_thresholds, - indices_for_clim = indices_for_clim, Fair = Fair) + indices_for_clim = indices_for_clim, Fair = Fair, weights = weights) } # RPSS diff --git a/man/RPS.Rd b/man/RPS.Rd index d1acc02..5062671 100644 --- a/man/RPS.Rd +++ b/man/RPS.Rd @@ -12,6 +12,7 @@ RPS( prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, + weights = NULL, ncores = NULL ) } @@ -40,6 +41,10 @@ the whole period is used. The default value is NULL.} potential RPSS that the forecast would have with an infinite ensemble size). The default value is FALSE.} +\item{weights}{A named two-dimensional numerical array of the weights for each +member and time. The dimension names should include 'memb_dim' and +'time_dim'. The default value is NULL.} + \item{ncores}{An integer indicating the number of cores to use for parallel computation. The default value is NULL.} } diff --git a/man/RPSS.Rd b/man/RPSS.Rd index 6324ea2..ca33c07 100644 --- a/man/RPSS.Rd +++ b/man/RPSS.Rd @@ -13,6 +13,7 @@ RPSS( prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, + weights = NULL, ncores = NULL ) } @@ -47,6 +48,10 @@ the whole period is used. The default value is NULL.} potential RPSS that the forecast would have with an infinite ensemble size). The default value is FALSE.} +\item{weights}{A named two-dimensional numerical array of the weights for each +member and time. The dimension names should include 'memb_dim' and +'time_dim'. The default value is NULL.} + \item{ncores}{An integer indicating the number of cores to use for parallel computation. The default value is NULL.} } diff --git a/tests/testthat/test-RPS.R b/tests/testthat/test-RPS.R index e5a5f0c..04df1bb 100644 --- a/tests/testthat/test-RPS.R +++ b/tests/testthat/test-RPS.R @@ -7,7 +7,8 @@ set.seed(1) exp1 <- array(rnorm(60), dim = c(member = 3, sdate = 10, lat = 2)) set.seed(2) obs1 <- array(rnorm(20), dim = c(sdate = 10, lat = 2)) - +set.seed(3) +weights1 <- array(abs(rnorm(30)), dim = c(member = 3, sdate = 10)) # dat2 set.seed(1) exp2 <- array(rnorm(20), dim = c(member = 2, sdate = 10)) @@ -76,6 +77,19 @@ test_that("1. Input checks", { RPS(exp1, obs1, Fair = 1), "Parameter 'Fair' must be either TRUE or FALSE." ) + # weights + expect_error( + RPS(exp1, obs1, weights = c(0, 1)), + 'Parameter "weights" must be a two-dimensional numeric array.' + ) + expect_error( + RPS(exp1, obs1, weights = array(1, dim = c(member = 3, time = 10))), + "Parameter 'weights' must have two dimensions with the names of memb_dim and time_dim." + ) + expect_error( + RPS(exp1, obs1, weights = array(1, dim = c(member = 3, sdate = 1))), + "Parameter 'weights' must have the same dimension lengths as memb_dim and time_dim in 'exp'." + ) # ncores expect_error( RPS(exp2, obs2, ncores = 1.5), @@ -111,6 +125,11 @@ as.vector(RPS(exp1, obs1, prob_thresholds = seq(0.1, 0.9, 0.1))), c(1.600000, 1.888889), tolerance = 0.0001 ) +expect_equal( +as.vector(RPS(exp1, obs1, weights = weights1)), +c(0.3692964, 0.5346627), +tolerance = 0.0001 +) }) diff --git a/tests/testthat/test-RPSS.R b/tests/testthat/test-RPSS.R index b4c0b7a..c63add0 100644 --- a/tests/testthat/test-RPSS.R +++ b/tests/testthat/test-RPSS.R @@ -9,7 +9,8 @@ set.seed(2) obs1 <- array(rnorm(20), dim = c(sdate = 10, lat = 2)) set.seed(3) ref1 <- array(rnorm(40), dim = c(member = 2, sdate = 10, lat = 2)) - +set.seed(4) +weights1 <- array(abs(rnorm(30)), dim = c(member = 3, sdate = 10)) # dat2 set.seed(1) exp2 <- array(rnorm(20), dim = c(member = 2, sdate = 10)) @@ -87,6 +88,19 @@ test_that("1. Input checks", { RPSS(exp1, obs1, Fair = 1), "Parameter 'Fair' must be either TRUE or FALSE." ) + # weights + expect_error( + RPS(exp1, obs1, weights = c(0, 1)), + 'Parameter "weights" must be a two-dimensional numeric array.' + ) + expect_error( + RPS(exp1, obs1, weights = array(1, dim = c(member = 3, time = 10))), + "Parameter 'weights' must have two dimensions with the names of memb_dim and time_dim." + ) + expect_error( + RPS(exp1, obs1, weights = array(1, dim = c(member = 3, sdate = 1))), + "Parameter 'weights' must have the same dimension lengths as memb_dim and time_dim in 'exp'." + ) # ncores expect_error( RPSS(exp2, obs2, ncores = 1.5), @@ -154,6 +168,11 @@ c(0.5259259, 0.4771242), tolerance = 0.0001 ) expect_equal( +as.vector(RPSS(exp1, obs1, ref1, weights = weights1)$rpss), +c(0.6596424, 0.4063579), +tolerance = 0.0001 +) +expect_equal( as.vector(RPSS(exp1, obs1, ref1)$sign), c(FALSE, FALSE) ) -- GitLab From dc4eed7d5c3b326ffefef3288afe62cef7119706 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 15 Jun 2022 09:48:19 +0200 Subject: [PATCH 73/83] Bugfix for 'var' as list --- DESCRIPTION | 2 +- R/PlotLayout.R | 15 ++++++++++++++- man/PlotLayout.Rd | 15 ++++++++++++++- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 9690f44..68a4320 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -47,4 +47,4 @@ BugReports: https://earth.bsc.es/gitlab/es/s2dv/-/issues LazyData: true SystemRequirements: cdo Encoding: UTF-8 -RoxygenNote: 7.0.1 +RoxygenNote: 7.2.0 diff --git a/R/PlotLayout.R b/R/PlotLayout.R index 50a87f2..b6bc467 100644 --- a/R/PlotLayout.R +++ b/R/PlotLayout.R @@ -56,6 +56,19 @@ #' b) providing a list of named sub-lists in 'special_args', where the names #' of each sub-list match the names of the parameters to be adjusted, and #' each value in a sub-list contains the value of the corresponding parameter. +#' For example, if the plots are two maps with different arguments, the +#' structure would be like:\n +#' var:\n +#' List of 2\n +#' $ : num [1:360, 1:181] 1 3.82 5.02 6.63 8.72 ...\n +#' $ : num [1:360, 1:181] 2.27 2.82 4.82 7.7 10.32 ...\n +#' special_args:\n +#' List of 2\n +#' $ :List of 2\n +#' ..$ arg1: ...\n +#' ..$ arg2: ...\n +#' $ :List of 1\n +#' ..$ arg1: ...\n #'@param nrow Numeric value to force the number of rows in the automatically #' generated layout. If higher than the required, this will yield blank cells #' in the layout (which can then be populated). If lower than the required @@ -225,7 +238,7 @@ PlotLayout <- function(fun, plot_dims, var, ..., special_args = NULL, is_single_na <- function(x) ifelse(length(x) > 1, FALSE, is.na(x)) # Check var - if (is.array(var) || (is_single_na(var))) { + if (!is.list(var) & (is.array(var) || (is_single_na(var)))) { var <- list(var) } else if (is.list(var)) { if (!all(sapply(var, is.array) | sapply(var, is_single_na))) { diff --git a/man/PlotLayout.Rd b/man/PlotLayout.Rd index 10bb39e..eaa2197 100644 --- a/man/PlotLayout.Rd +++ b/man/PlotLayout.Rd @@ -94,7 +94,20 @@ a) splitting your array into a list of sub-arrays (each with the data for one plot) and providing it as parameter 'var', b) providing a list of named sub-lists in 'special_args', where the names of each sub-list match the names of the parameters to be adjusted, and -each value in a sub-list contains the value of the corresponding parameter.} +each value in a sub-list contains the value of the corresponding parameter. +For example, if the plots are two maps with different arguments, the +structure would be like:\n +var:\n + List of 2\n + $ : num [1:360, 1:181] 1 3.82 5.02 6.63 8.72 ...\n + $ : num [1:360, 1:181] 2.27 2.82 4.82 7.7 10.32 ...\n +special_args:\n + List of 2\n + $ :List of 2\n + ..$ arg1: ...\n + ..$ arg2: ...\n + $ :List of 1\n + ..$ arg1: ...\n} \item{nrow}{Numeric value to force the number of rows in the automatically generated layout. If higher than the required, this will yield blank cells -- GitLab From 01b077d150ce38dc35f12c66b8f56a81ede1aa1b Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 16 Jun 2022 15:45:17 +0200 Subject: [PATCH 74/83] Version bumping to 1.2.0 --- DESCRIPTION | 2 +- NEWS.md | 14 ++++++++++++++ R/PlotLayout.R | 24 ++++++++++++------------ man/PlotLayout.Rd | 24 ++++++++++++------------ man/s2dv-package.Rd | 10 +--------- man/sampleDepthData.Rd | 6 ++++-- man/sampleMap.Rd | 6 ++++-- man/sampleTimeSeries.Rd | 6 ++++-- 8 files changed, 52 insertions(+), 40 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 68a4320..a768066 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: s2dv Title: A Set of Common Tools for Seasonal to Decadal Verification -Version: 1.1.0 +Version: 1.2.0 Authors@R: c( person("BSC-CNS", role = c("aut", "cph")), person("An-Chi", "Ho", , "an.ho@bsc.es", role = c("aut", "cre")), diff --git a/NEWS.md b/NEWS.md index 71993f0..df06e6b 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,17 @@ +# s2dv 1.2.0 (Release date: 2022-06-16) +- Cluster(): Fix a bug of calculating nclusters ("K"): the function didn't use the whole data to calculate "K" if parameter "nclusters" is NULL.; Add missing output dimension names +- Clim(): Correct the output dimensions for some cases; allow dat_dim to be NULL; obs doesn't need to have dat_dim. +- MeanDims(): if the result is a number and drop = T, return a numeric instead of an array +- Load(): Bugfix for R >= 4.0.0 regarding list and vector confusion +- PlotLayout(): Bugfix when param "var" is a list +- ACC(): Add area-weighting into the calculation and ensure the data has a spatial mean of zero. "space_dim" is deprecated and replaced by "lat_dim" and "lon_dim". "dat_dim" can be NULL. +- PlotEquiMap(): Add useRaster = TRUE in image() if possible (i.e., latitude and longitude are regularly spaced.) +- PlotEquiMap(): New parameters xlonshft ylatshft xlabels ylabels for self-defined axis +- PlotEquiMap(): Flexible map longitude range +- New function: WeightCells, DiffCorr, ResidualCorr, RPSS, RPSSS +- Clim() and MeanDims() efficiency improvement +- CDORemap(): Add time metadata to avoid cdo warning like Warning (find_time_vars): Time variable >time< not found! + # s2dv 1.1.0 (Release date: 2021-12-14) - New functions: RatioPredictableComponents, SignalNoiseRatio - CDORemap(): Able to interpolate irregular grid to regular grid; include new cdo methods 'con2', 'laf' and 'nn' diff --git a/R/PlotLayout.R b/R/PlotLayout.R index b6bc467..742478e 100644 --- a/R/PlotLayout.R +++ b/R/PlotLayout.R @@ -57,18 +57,18 @@ #' of each sub-list match the names of the parameters to be adjusted, and #' each value in a sub-list contains the value of the corresponding parameter. #' For example, if the plots are two maps with different arguments, the -#' structure would be like:\n -#' var:\n -#' List of 2\n -#' $ : num [1:360, 1:181] 1 3.82 5.02 6.63 8.72 ...\n -#' $ : num [1:360, 1:181] 2.27 2.82 4.82 7.7 10.32 ...\n -#' special_args:\n -#' List of 2\n -#' $ :List of 2\n -#' ..$ arg1: ...\n -#' ..$ arg2: ...\n -#' $ :List of 1\n -#' ..$ arg1: ...\n +#' structure would be like:\cr +#' var:\cr +#' List of 2\cr +#' $ : num [1:360, 1:181] 1 3.82 5.02 6.63 8.72 ...\cr +#' $ : num [1:360, 1:181] 2.27 2.82 4.82 7.7 10.32 ...\cr +#' special_args:\cr +#' List of 2\cr +#' $ :List of 2\cr +#' ..$ arg1: ...\cr +#' ..$ arg2: ...\cr +#' $ :List of 1\cr +#' ..$ arg1: ...\cr #'@param nrow Numeric value to force the number of rows in the automatically #' generated layout. If higher than the required, this will yield blank cells #' in the layout (which can then be populated). If lower than the required diff --git a/man/PlotLayout.Rd b/man/PlotLayout.Rd index eaa2197..f8e7bae 100644 --- a/man/PlotLayout.Rd +++ b/man/PlotLayout.Rd @@ -96,18 +96,18 @@ b) providing a list of named sub-lists in 'special_args', where the names of each sub-list match the names of the parameters to be adjusted, and each value in a sub-list contains the value of the corresponding parameter. For example, if the plots are two maps with different arguments, the -structure would be like:\n -var:\n - List of 2\n - $ : num [1:360, 1:181] 1 3.82 5.02 6.63 8.72 ...\n - $ : num [1:360, 1:181] 2.27 2.82 4.82 7.7 10.32 ...\n -special_args:\n - List of 2\n - $ :List of 2\n - ..$ arg1: ...\n - ..$ arg2: ...\n - $ :List of 1\n - ..$ arg1: ...\n} +structure would be like:\cr +var:\cr + List of 2\cr + $ : num [1:360, 1:181] 1 3.82 5.02 6.63 8.72 ...\cr + $ : num [1:360, 1:181] 2.27 2.82 4.82 7.7 10.32 ...\cr +special_args:\cr + List of 2\cr + $ :List of 2\cr + ..$ arg1: ...\cr + ..$ arg2: ...\cr + $ :List of 1\cr + ..$ arg1: ...\cr} \item{nrow}{Numeric value to force the number of rows in the automatically generated layout. If higher than the required, this will yield blank cells diff --git a/man/s2dv-package.Rd b/man/s2dv-package.Rd index 5576921..871a8b6 100644 --- a/man/s2dv-package.Rd +++ b/man/s2dv-package.Rd @@ -6,15 +6,7 @@ \alias{s2dv-package} \title{s2dv: A Set of Common Tools for Seasonal to Decadal Verification} \description{ -The advanced version of package 's2dverification'. It is - intended for 'seasonal to decadal' (s2d) climate forecast verification, but - it can also be used in other kinds of forecasts or general climate analysis. - This package is specially designed for the comparison between the experimental - and observational datasets. The functionality of the included functions covers - from data retrieval, data post-processing, skill scores against observation, - to visualization. Compared to 's2dverification', 's2dv' is more compatible - with the package 'startR', able to use multiple cores for computation and - handle multi-dimensional arrays with a higher flexibility. +The advanced version of package 's2dverification'. It is intended for 'seasonal to decadal' (s2d) climate forecast verification, but it can also be used in other kinds of forecasts or general climate analysis. This package is specially designed for the comparison between the experimental and observational datasets. The functionality of the included functions covers from data retrieval, data post-processing, skill scores against observation, to visualization. Compared to 's2dverification', 's2dv' is more compatible with the package 'startR', able to use multiple cores for computation and handle multi-dimensional arrays with a higher flexibility. } \references{ \url{https://earth.bsc.es/gitlab/es/s2dv/} diff --git a/man/sampleDepthData.Rd b/man/sampleDepthData.Rd index 77e4a7a..47e2f1b 100644 --- a/man/sampleDepthData.Rd +++ b/man/sampleDepthData.Rd @@ -5,7 +5,8 @@ \alias{sampleDepthData} \title{Sample of Experimental Data for Forecast Verification In Function Of Latitudes And Depths} -\format{The data set provides with a variable named 'sampleDepthData'.\cr\cr +\format{ +The data set provides with a variable named 'sampleDepthData'.\cr\cr sampleDepthData$exp is an array that contains the experimental data and the dimension meanings and values are:\cr @@ -18,7 +19,8 @@ but in this sample is not defined (NULL).\cr\cr sampleDepthData$depths is an array with the 7 longitudes covered by the data.\cr\cr -sampleDepthData$lat is an array with the 21 latitudes covered by the data.\cr\cr} +sampleDepthData$lat is an array with the 21 latitudes covered by the data.\cr\cr +} \usage{ data(sampleDepthData) } diff --git a/man/sampleMap.Rd b/man/sampleMap.Rd index eaf8aa5..e4ec5a5 100644 --- a/man/sampleMap.Rd +++ b/man/sampleMap.Rd @@ -4,7 +4,8 @@ \name{sampleMap} \alias{sampleMap} \title{Sample Of Observational And Experimental Data For Forecast Verification In Function Of Longitudes And Latitudes} -\format{The data set provides with a variable named 'sampleMap'.\cr\cr +\format{ +The data set provides with a variable named 'sampleMap'.\cr\cr sampleMap$mod is an array that contains the experimental data and the dimension meanings and values are:\cr c(# of experimental datasets, # of members, # of starting dates, # of lead-times, # of latitudes, # of longitudes)\cr @@ -16,7 +17,8 @@ sampleMap$obs is an array that contains the observational data and the dimension sampleMap$lat is an array with the 2 latitudes covered by the data (see examples on Load() for details on why such low resolution).\cr\cr - sampleMap$lon is an array with the 3 longitudes covered by the data (see examples on Load() for details on why such low resolution).} + sampleMap$lon is an array with the 3 longitudes covered by the data (see examples on Load() for details on why such low resolution). +} \usage{ data(sampleMap) } diff --git a/man/sampleTimeSeries.Rd b/man/sampleTimeSeries.Rd index 05a8e79..7f058e2 100644 --- a/man/sampleTimeSeries.Rd +++ b/man/sampleTimeSeries.Rd @@ -4,7 +4,8 @@ \name{sampleTimeSeries} \alias{sampleTimeSeries} \title{Sample Of Observational And Experimental Data For Forecast Verification As Area Averages} -\format{The data set provides with a variable named 'sampleTimeSeries'.\cr\cr +\format{ +The data set provides with a variable named 'sampleTimeSeries'.\cr\cr sampleTimeSeries$mod is an array that contains the experimental data and the dimension meanings and values are:\cr c(# of experimental datasets, # of members, # of starting dates, # of lead-times)\cr @@ -16,7 +17,8 @@ sampleTimeSeries$obs is an array that contains the observational data and the di sampleTimeSeries$lat is an array with the 2 latitudes covered by the data that was area averaged to calculate the time series (see examples on Load() for details on why such low resolution).\cr\cr -sampleTimeSeries$lon is an array with the 3 longitudes covered by the data that was area averaged to calculate the time series (see examples on Load() for details on why such low resolution).} +sampleTimeSeries$lon is an array with the 3 longitudes covered by the data that was area averaged to calculate the time series (see examples on Load() for details on why such low resolution). +} \usage{ data(sampleTimeSeries) } -- GitLab From 7d2c324dae7639a6a996816dc298521a74182551 Mon Sep 17 00:00:00 2001 From: jcos Date: Thu, 16 Jun 2022 17:39:41 +0200 Subject: [PATCH 75/83] docu: add thresholds to use the W method consistently --- R/RPS.R | 4 +++- R/RPSS.R | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/R/RPS.R b/R/RPS.R index 00d0c10..8ded53e 100644 --- a/R/RPS.R +++ b/R/RPS.R @@ -30,7 +30,9 @@ #' The default value is FALSE. #'@param weights A named two-dimensional numerical array of the weights for each #' member and time. The dimension names should include 'memb_dim' and -#' 'time_dim'. The default value is NULL. +#' 'time_dim'. The default value is NULL. The ensemble should have at least 70 +#' members or span at least 10 time steps and have more than 45 members if +#' consistency between the weighted and unweighted methodologies is desired. #'@param ncores An integer indicating the number of cores to use for parallel #' computation. The default value is NULL. #' diff --git a/R/RPSS.R b/R/RPSS.R index c4e5744..3b24777 100644 --- a/R/RPSS.R +++ b/R/RPSS.R @@ -36,7 +36,9 @@ #' The default value is FALSE. #'@param weights A named two-dimensional numerical array of the weights for each #' member and time. The dimension names should include 'memb_dim' and -#' 'time_dim'. The default value is NULL. +#' 'time_dim'. The default value is NULL. The ensemble should have at least 70 +#' members or span at least 10 time steps and have more than 45 members if +#' consistency between the weighted and unweighted methodologies is desired. #'@param ncores An integer indicating the number of cores to use for parallel #' computation. The default value is NULL. #' -- GitLab From fdc803bbfee91697f9da7d11bb3ca4d452be6175 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 16 Jun 2022 18:06:45 +0200 Subject: [PATCH 76/83] Fix 'class(x == y)' by inherits() --- R/AMV.R | 4 ++-- R/GMST.R | 4 ++-- R/GSAT.R | 4 ++-- R/Load.R | 2 +- R/Persistence.R | 6 +++--- R/Regression.R | 2 +- R/SPOD.R | 4 ++-- R/TPI.R | 6 +++--- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/R/AMV.R b/R/AMV.R index a51a819..e14897b 100644 --- a/R/AMV.R +++ b/R/AMV.R @@ -98,10 +98,10 @@ AMV <- function(data, data_lats, data_lons, type, lat_dim = 'lat', lon_dim = 'lo stop("Parameter 'data' must be a numeric array.") } # data_lats and data_lons part1 - if (!(class(data_lats) == 'numeric' | class(data_lats) == 'integer')) { + if (!(inherits(data_lats, 'numeric') | inherits(data_lats, 'integer'))) { stop("Parameter 'data_lats' must be a numeric vector.") } - if (!(class(data_lons) == 'numeric' | class(data_lons) == 'integer')) { + if (!(inherits(data_lons, 'numeric') | inherits(data_lons, 'integer'))) { stop("Parameter 'data_lons' must be a numeric vector.") } # type diff --git a/R/GMST.R b/R/GMST.R index 0d6c49e..85b382d 100644 --- a/R/GMST.R +++ b/R/GMST.R @@ -125,10 +125,10 @@ GMST <- function(data_tas, data_tos, data_lats, data_lons, mask_sea_land, sea_va stop("The dimension of data_tas and data_tos must be identical.") } # data_lats and data_lons part1 - if (!(class(data_lats) == 'numeric' | class(data_lats) == 'integer')) { + if (!(inherits(data_lats, 'numeric') | inherits(data_lats, 'integer'))) { stop("Parameter 'data_lats' must be a numeric vector.") } - if (!(class(data_lons) == 'numeric' | class(data_lons) == 'integer')) { + if (!(inherits(data_lons, 'numeric') | inherits(data_lons, 'integer'))) { stop("Parameter 'data_lons' must be a numeric vector.") } # lat_dim diff --git a/R/GSAT.R b/R/GSAT.R index 1774bd6..30975b9 100644 --- a/R/GSAT.R +++ b/R/GSAT.R @@ -94,10 +94,10 @@ GSAT <- function(data, data_lats, data_lons, type, lat_dim = 'lat', lon_dim = 'l stop("Parameter 'data' must be a numeric array.") } # data_lats and data_lons part1 - if (!(class(data_lats) == 'numeric' | class(data_lats) == 'integer')) { + if (!(inherits(data_lats, 'numeric') | inherits(data_lats, 'integer'))) { stop("Parameter 'data_lats' must be a numeric vector.") } - if (!(class(data_lons) == 'numeric' | class(data_lons) == 'integer')) { + if (!(inherits(data_lons, 'numeric') | inherits(data_lons, 'integer'))) { stop("Parameter 'data_lons' must be a numeric vector.") } # type diff --git a/R/Load.R b/R/Load.R index 3c3aa8e..e188299 100644 --- a/R/Load.R +++ b/R/Load.R @@ -2121,7 +2121,7 @@ Load <- function(var, exp = NULL, obs = NULL, sdates, nmember = NULL, }) - if (class(errors) == 'try-error') { + if (inherits(errors, 'try-error')) { invisible(list(load_parameters = load_parameters)) } else { # Before ending, the data is arranged in the common format, with the following diff --git a/R/Persistence.R b/R/Persistence.R index 5a53857..9895f47 100644 --- a/R/Persistence.R +++ b/R/Persistence.R @@ -122,7 +122,7 @@ Persistence <- function(data, dates, time_dim = 'time', start, end, ft_start, stop(paste0("Parameter 'dates' must be a sequence of integer (YYYY) or ", "string (YYYY-MM-DD) in class 'Date'.")) } - } else if (class(dates) == 'Date') { #(YYYY-MM-DD) + } else if (inherits(dates, 'Date')) { #(YYYY-MM-DD) } else { stop(paste0("Parameter 'dates' must be a sequence of integer (YYYY) or ", @@ -148,7 +148,7 @@ Persistence <- function(data, dates, time_dim = 'time', start, end, ft_start, stop(paste0("Parameter 'start' must start at least 40 time steps after ", "the first 'dates'.")) } - } else if (class(start) == 'Date') { + } else if (inherits(start, 'Date')) { if (length(start) > 1 | any(start < as.Date(ISOdate(1850, 1, 1))) | any(start > as.Date(ISOdate(2021, 1, 1)))) { stop(paste0("Parameter 'start' must be an integer or a string in class ", @@ -176,7 +176,7 @@ Persistence <- function(data, dates, time_dim = 'time', start, end, ft_start, stop(paste0("Parameter 'end' must end at most 1 time steps after ", "the last 'dates'.")) } - } else if (class(end) == 'Date') { + } else if (inherits(end, 'Date')) { if (length(end) > 1 | any(end < as.Date(ISOdate(1850, 1, 1))) | any(end > as.Date(ISOdate(2020, 12, 31)))) { stop(paste0("Parameter 'end' must be an integer or a string in class ", diff --git a/R/Regression.R b/R/Regression.R index 244ddc7..1cd12e6 100644 --- a/R/Regression.R +++ b/R/Regression.R @@ -123,7 +123,7 @@ Regression <- function(datay, datax, reg_dim = 'sdate', formula = y ~ x, stop("Parameter 'reg_dim' is not found in 'datay' or 'datax' dimension.") } ## formula - if (class(formula) != 'formula') { + if (!inherits(formula, 'formula')) { stop("Parameter 'formula' must the an object of class 'formula'.") } ## pval diff --git a/R/SPOD.R b/R/SPOD.R index 51717b3..2599477 100644 --- a/R/SPOD.R +++ b/R/SPOD.R @@ -97,10 +97,10 @@ SPOD <- function(data, data_lats, data_lons, type, lat_dim = 'lat', lon_dim = 'l stop("Parameter 'data' must be a numeric array.") } # data_lats and data_lons part1 - if (!(class(data_lats) == 'numeric' | class(data_lats) == 'integer')) { + if (!(inherits(data_lats, 'numeric') | inherits(data_lats, 'integer'))) { stop("Parameter 'data_lats' must be a numeric vector.") } - if (!(class(data_lons) == 'numeric' | class(data_lons) == 'integer')) { + if (!(inherits(data_lons, 'numeric') | inherits(data_lons, 'integer'))) { stop("Parameter 'data_lons' must be a numeric vector.") } # type diff --git a/R/TPI.R b/R/TPI.R index 80d958e..d3f0550 100644 --- a/R/TPI.R +++ b/R/TPI.R @@ -96,10 +96,10 @@ TPI <- function(data, data_lats, data_lons, type, lat_dim = 'lat', lon_dim = 'lo stop("Parameter 'data' must be a numeric array.") } # data_lats and data_lons part1 - if (!(class(data_lats) == 'numeric' | class(data_lats) == 'integer')) { + if (!(inherits(data_lats, 'numeric') | inherits(data_lats, 'integer'))) { stop("Parameter 'data_lats' must be a numeric vector.") } - if (!(class(data_lons) == 'numeric' | class(data_lons) == 'integer')) { + if (!(inherits(data_lons, 'numeric') | inherits(data_lons, 'integer'))) { stop("Parameter 'data_lons' must be a numeric vector.") } # type @@ -181,7 +181,7 @@ TPI <- function(data, data_lats, data_lons, type, lat_dim = 'lat', lon_dim = 'lo } # indices_for_clim if (!is.null(indices_for_clim)) { - if (!class(indices_for_clim) %in% c('numeric', 'integer') + if (!(inherits(indices_for_clim, 'numeric') | inherits(indices_for_clim, 'integer')) & !(is.logical(indices_for_clim) & !any(indices_for_clim))) { stop(paste0("The parameter 'indices_for_clim' must be a numeric vector ", "or NULL to compute the anomalies based on the whole period, ", -- GitLab From 41d516bdf2f1bc3b709cf56134406e5d9c21d767 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 16 Jun 2022 18:10:37 +0200 Subject: [PATCH 77/83] Update document --- man/RPS.Rd | 4 +++- man/RPSS.Rd | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/man/RPS.Rd b/man/RPS.Rd index 5062671..ee5c241 100644 --- a/man/RPS.Rd +++ b/man/RPS.Rd @@ -43,7 +43,9 @@ The default value is FALSE.} \item{weights}{A named two-dimensional numerical array of the weights for each member and time. The dimension names should include 'memb_dim' and -'time_dim'. The default value is NULL.} +'time_dim'. The default value is NULL. The ensemble should have at least 70 +members or span at least 10 time steps and have more than 45 members if +consistency between the weighted and unweighted methodologies is desired.} \item{ncores}{An integer indicating the number of cores to use for parallel computation. The default value is NULL.} diff --git a/man/RPSS.Rd b/man/RPSS.Rd index ca33c07..5b8bd7e 100644 --- a/man/RPSS.Rd +++ b/man/RPSS.Rd @@ -50,7 +50,9 @@ The default value is FALSE.} \item{weights}{A named two-dimensional numerical array of the weights for each member and time. The dimension names should include 'memb_dim' and -'time_dim'. The default value is NULL.} +'time_dim'. The default value is NULL. The ensemble should have at least 70 +members or span at least 10 time steps and have more than 45 members if +consistency between the weighted and unweighted methodologies is desired.} \item{ncores}{An integer indicating the number of cores to use for parallel computation. The default value is NULL.} -- GitLab From 2ebc648ad959bcbf9909765ab0c39ef2770d11ec Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 16 Jun 2022 18:14:05 +0200 Subject: [PATCH 78/83] Update author list --- DESCRIPTION | 1 + 1 file changed, 1 insertion(+) diff --git a/DESCRIPTION b/DESCRIPTION index a768066..e8382cd 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -6,6 +6,7 @@ Authors@R: c( person("An-Chi", "Ho", , "an.ho@bsc.es", role = c("aut", "cre")), person("Nuria", "Perez-Zanon", , "nuria.perez@bsc.es", role = "aut"), person("Roberto", "Bilbao", , "roberto.bilbao@bsc.es", role = "ctb"), + person("Josep", "Cos", , "josep.cos@bsc.es", role = "ctb"), person("Carlos", "Delgado", , "carlos.delgado@bsc.es", role = "ctb"), person("Llorenç", "Lledó", , "llorenc.lledo@bsc.es", role = "ctb"), person("Andrea", "Manrique", , "andrea.manrique@bsc.es", role = "ctb"), -- GitLab From c4669ae02fb5d626a778d8a4ed984468664a1bae Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 16 Jun 2022 20:13:59 +0200 Subject: [PATCH 79/83] Update manual --- s2dv-manual.pdf | Bin 381308 -> 402805 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/s2dv-manual.pdf b/s2dv-manual.pdf index b6faa89fbc92c8735e85d4fa7bc4d0f68d47030b..dab70611f5a50086733b604b43015acbc0240458 100644 GIT binary patch delta 347678 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 z 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%0Dgs6tCQ~F2t*cox2U5hQWvm? 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 z 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 z

7N?Z~zW<#>;2g5r3DGNENx1;BIJzGFF*8G)qL(Km+T@p=@0g#=Ub?JRAZl#kt zyHx6*PD7=1crI<#sdRZC0Q>SE0%NbEVVD81t9ib%=}~>2nR@h@(-IPGcZ#N;dj?(u zyEAH7MY<=f?=bou<>`OB_h(McVg?sZ-P8T;{hK%XnsdNolkKBHGqAjb)D`%*8)Rbr z#o&E8Xb_G;7VTw=1PZ8adH-@ep;_P;Vug%TA~;axGu;qXB_6bhM+U#UM+STKAw}sv zZx&{9qrXe3Zf6vmd)#Ab=AeZd&Q-13BOB(C3-&fEkH$1@<2!#MyMIx3FgBZ=&pWhY$MFk_^fx;2yQ#_27TRkt>tQDAezXmA5>w|sD%ZI(GC)(jum3)t37?TTg@ z+=^AMJXMdUc|L!Guwom>bUhJhe&{Zw0W*JEF% zLGfT&Hy+q*;{kFv9@y6L071utu~f&SJ7iurO74Qs1FnA$3F>TWBVC(Wa4S2nerv!W zWxm~$&|@=jU^FZh_J&`3emL^&Rd@*UJmy{Gv1ySWo~41 zbaG{3Z3>sn!vY8cGBh)nAp`*v0yi_4(OCg0f2CO6Z`(Kwf6rfGYy;{5jcZx**Km8- zt?6xtZnsO*y>!Lk#!hO$u|3=A$A5pMNGEpc6fN$FvPhBCPZUMkHdcmh{5AS>J~}y* zz7blX=Xl0^X$af4r1A{kvn^LT#ymEzOd-_xdj9vxnUWn*>G_r?LQtfIX31E%=Bi5S ze>yF4lpon_rllumPFKN1s!(f~I6h92p7JirdaL(5^gSyKoYv~cF)S8lR;MMN zLla$Z;4`g>&Szs~o0n5-56C|JjO0XkmK`W^FJBaJg0H|o2aACNAUAaW8dyEiK^?vc zpg@}WW_{BNY4m`SQIac&Zt8>v%Yuc=sEV>I$w&mtywqfAaj? zqA-_U7p71VOb%>Z1f=xGICMzIaGdw=Q~(|YRv^4x%(~LdQXMHU(l7vR?$J{Oz*S~c zRncQjjQg~?rBR%&lN>J?a~3~s*UmNc59Kkf%!`|vhlD!FRmr}weN8m4%p+EIMAK0o z)8GiS@*GJllCl{Be4VUset~wpe+410hd~4Oa2gyI=w0B!O-vWJ#BH}gU;0dN4c)5H z%#wW7uqa)*(2S#IXQrL(dhZ82>xjwAbPt8l){@7TfNDJOf_lD*hfw6%BXR<>1hA95 zA+dBxG1a?zLV8x<2JI!%DX*Ie=CjKwhhjI7AYBGRwW|=wzDu+voXC?&f1SojOrK|I zO$iU2<0}6M6PFfzSBoUJeyenKBX+-2oio*;Wd4EPT8hA zT1QE7NwjHs5W5g(8GqG)c@)!_Bi1%?E3e3alD#c|z3K&;x1jgmhF2X+_}sCC`^Tb* z;L!Vr!!F#0T{nO^;|vC2e_*-3|Nla8FkcE+TGE&OggJeP)@8Q$vK*q?(Ev1hYMVcO zup5%Dx8sRx+va(JCyt|9>!vZ>)rdw>O*GAS@_13{-r!6^PQBkkW&>nwgn77t7m6XV zs*bBQ8~S5HbcSJjaSBIT=h>yD->q$r>hm`Y1XGu}Te;6qEp@XTv(RPDf zse)*kVF{y!m{NG*=sWO!)aP@^%ZGRNYp0>zo_?5cXF4U~%m*S1oE`41uEcxi znm4bQ9uk$;NS;Sr`*p>Nm^e(Y`~G(IzfPfgR$*yzp4cknSbxjs_N_&(+T?>V);WP4 z5ZaOB_87}1ZQ9Ugf0*CQC@ty;-ey4^Rh$KJe8RBmYdI&JEwr$1>0geCc*C-J&T@NwUlr~KjCo!jo%p5-{(#B{XHTsskEDah6= z@agN9?=GqQ@<|RTRM^pkFV;tH>!;6gUCUKY9~Rt;E+$^Ee;3Gve)w|J)7izvdqUW={`1<#hRa4VT{G5Yu56QMiT zeoY03iHlnt@V7K6?#?pt%7y7Cd4M}aUI*Irj zQY4n4(Id0lX=v%_#mA4V(7lo7xBXpPlUs*DbV328mG>GDsm=EW+I$Dv{4n4u;WVii zRa!QO+xOwN#@&a_w|6y9)&DJ^nf=1Z=O=}RM`M@Xf40Y?wrJ{VMB%Y82jm})n9aC$ z^=l#a1S@$KWw=3KYvkr}sQ%BA2&*$`2WI_y6M-T<{%PAzLme)C!t1wdHmS@&1~#zL z_RTuUmXkQaWjWS>$b*s~$*_S96jhQqx!mLneG2-ktO|7e4hqMbW*QO%jagCh8pO22 z3p&70e}+mzJPmBa!cJ?BO?-uIon{EGqyx2+i0Zmnq*0?wSorSOyg}P8>i#^(jmAm7 zNJxp+&f>ad54m;*X%x+Xov=Y20K{5W#hOOVaD)FO!t{-5xN*>-(eL!5tY&5h+SnS> zO%BTa;$C80XQ}>YAvr`<8=^3AMkI!(qDpVZQjTqI8pd0-u*z^JzXz7Gdte-=1&bzhW6F8Ip#_69`x(>%Q{*mFE82;|Mb{p;`Xi7!tzO{9X%c&=)t3h<3Ud# zP5uY13P!1y!NUR*12Q!+mmvfJ69P9em*J%YD}POo+cprr@2@ZxDON^fMHEF!Dv-k# z-4qCd6bQV%BtfB-XVDj_X zkMpw^uOdE4{Zxi>GG9(u5coWjlUN46;NfJxn7sGisVNiQs!?rQ)YbIk{Pl}hJho=> zRDb$$nu1NO&zL}^v%oC#;#Fv`G2=4v6D}vSFh(IwYSiktMX{OAL=bo{sX1>KS*OmQ zqcyNJW6V#5ApK?CY<6Yl=s!^NH#PU}JW2Dmw^`{-n!mfg8eJi;tL5>UeyMI9?Et=y zYFC+`6A|)S}3{tXhytQRU@sQB*7X+^rSK!EaQheUqk_b+2-_F7h=g8Epxk)_=S6 zYz%B;M+9EcQk&PC?XFV`|C3&AjyPiw3pOtIC*mR_3m3V^1>_nRXbmoPGZn(~r!y|N zH`m9L1jdwkV2XJybm%znp~!mcFI67j&!Fs*UxGi{UTEbEA%B2Ecn1ifQH!*b?y!1lGy zNr=T3+vt%#Gqjl*qnqeMt04!*Y#9Qx&4pr#hT3=Q46%&mKIMXRoo%M;9jVaAB!Dd~MEz~u76c%U5Wu3NeqQgeRMh>< zw3JqDNnI(|IMs)w1AoQb2;EVo`)#KYyGP-k#x&HF&>)zt1+q##eo+D}Uz828Dq@p=?d8^5EX(ffD11~>DF zm%?bgjOcpVm_EtLLj~S_2ZKhroIpnpiars}zUe0PYAuB`cfDdz%3P`@1B>O(k5CJ6 zPnp>yHBP~T;iS)eoa;e4&voG&5;n{l9=+heKFH}a75&v9v8ES3+F8emE37i3H?Q(i z*!r1ea2fL5#u)>0Wu}i^nyKkmJ`R~#AMyZ1Nj^j`k(yGMcN>6zs!m4TbD77vqOL!N zU`XtfTWZIr@KGBi{oK=sxTCfn9W22!E27@MNd(6+TGsX};mmOpiD#3Dz%j^Y5WesP zV$C_|w1rlpRj73n3HF}=$46ybfql)f`8QCS+z{YDi3Y;V_MaU%`+q20SO53EYZGP= zn7-O%On=~cw!nQLbb!D5OmE%jmTY_|T|jA~ZKCVao{&mfKKpHbd%f%GSG;Hf>l2BX zlHqpMNGBnM04@0pgV?^Q5Jp&Ci-vc0o#5!Ij1h(?@goM!P0WlZuXoGqzkelY5`T$f zf*8jH6AatCUja`jZRC^G?gtMOw;DF|`-`Jf17H!PpEkIgM@NERgY~2c^{g)X-b`7r z81GNjO15=_VuvTTSprC(-KXrV3!Wtw&D7MY7lq|brYoX5$8@(Y6(vV57)*c^cSL2a zlc&hnE%ELa9;;yzK#$4>!WG2CaWKi|eFOkJHZ^ zE}K59eFByhOTBCO>cbABA9y?mMxF>)*p?~lfl^Z0EPLYtr$gKssE zc2HN)ci6Y%R6$xcxPxeu?(*KBevcmSdLPT(U;1{?#|-SQB|7BUBAC&t=&aqg0u`xB zLaStq6;KSkIVI#~|Eb9SbQN)1=7Tfqi+oqd!7Q~6bs%Vlz2;LlQ)yfNcshmMB}GLU zUD8%bl`R0huM%HvZ}t$*^j$Hg&blDZF?A=%D)Qk-dk*@ojluNlSV+lyzCmCDL8KjY zMF68A#6N6SCt;6XEWB#1He)GH}t*yF3P_K`!|>0KZE-BQIr?x zk8phBA<^D87i2!NRN!ppc>iM4*;{zFLJBz0v4a^kXa2(eN&b?87MCp{S>Lu_U3o-C zCh_B^BJNj&uIkQ3J&U^U-&;@UTi{X`V58PY%$fk9X+%tb{mDgXm0QUa=+46J?MpM& z9e|x_1bw}3>IO19>S6`63s>R;0V4Q&nEH>?MZSuAP+WlCOU~Gk(Y;^)p7Z2^Zx{+R zL2#n?gw_2q{)1XAGzK`aOqch7mM2Pu2r=^Fyf@pw&$&*k^?aeDLx*atWCAbN-yWNN}r<5p>gV`Ihn(uAYeA6luz3xz%Q*u47|my7^Rs7I5n)D93UOb$vA?2q$<3M;z zFL;a8_}==#0i2z*Fjq#au5Q=wM+3C6A9H3=GEl=0XP+byhyVwEcA*F)X1Q zlt|Yy3(E?H@elvhxXsA`W|lDs?X#$iLeP+@@00YRo)nM#{+=CsH9NTTmzdRV&e zqi9%b2LI<7beJd3Z~}|RS_WRYLgUkzG90R5i#8SCW**3+0#jX2_;*0at=|U@`Mr>m z$NWW(Ox`*AGBzftvm-lD&92R|5=EwtphU@uKDKBYySe|(9(Olv#?TYAqq zi^Kj0?7H5QCEP=OUbwE>=+EMFdDCjQKz(FaEv5unlmg0q2mt{4q)=%2-(X@-6QTk} z1OA_6q6J*UEr=t1`vJsA^SUEi5|^n~c(CmiujvSd-Q2 z4T#fO6Ft=!dDY)OPUxke+l&gEtTRH1d-tDc8GvbC47(nM>cE0f({!`rb!N!~$+Qh8 z8iAVeE6M(ZZdS(!+S+q^j0whxY$FmY#m4$l+lA#4tpjfN@sOK8KNf{%iY8nsA88xU z68p0Wi8iJXNrN~Qx$>oSXZqyajwn-{!D+TlkfgppB{vyhCkd=8}$V@KFA~T4JcJ$0S9GqIm7n)Z*3PP$W)eYg`8WKLfHXqewU+#OKewn zrmway7EPrwPqZEhYol%OynJvZ4=y5Kr=CJvjg19qbv%wt4n|02m#+o$F#8K`m7uQu zdBaD&KzqnmVzBc-QQ{cuC^2t)d%yW?Gy!}Ps8lIx)|G_KsWw4);8Zs!j~JB=dUhml z4dptk$oFF`(zg!5e88FVxllkY&t4BNIHE?Kw{`bn|6xq8NJw6B6_u15|0%Y%yV`Oz3XG~!$R z_$>^|#Hj<7lvnm+A8}ql#~Otj)*~?5V~x@%b?wDe{nBW-+3JAX6|@Jf%f_1% z7k$_4u&SG-*&zL5zeKa6nLLkeo}}4-D+teE@DhRWYH1;BdvW4eo?+K_w*x?GgpON; zuQec&%m3O>>r|#H;&C$olO9#Ki!92c+Z^0;bzO(%Z~`9QGD@ms1~J%(pAD^()K`w$ zRW$xMs2h8REiVW$XstcIfM{09&uFslisBgvGa~TXAquVwQP7U()XlxfMp}}oZXn@G zEVsmgC_(o7uq0uT?_8KZ(E@_p-#M^yEaxV29bplmN0VIBsXeNMq0evI{?)8%rBMW3pRWe_~4L04gT zMB4EIwMnkPLKxOkkf(gyzuw)^7s)}DI6Dogl+bVs^D%YDX{=NPaRK09tzvxf@C6$3 zT=DzH6DZH(xOs*+jy@1JpK}(JS@&Oz7ZKvlE8pmupI!^OTJc5v?241%Yr@mnQbLto zv_jlX%DX1F5)!*%pK~$})lbYPajEihEkW;$Oz8NN>?-Rd(HEkUrzfDTRsZHQu=d-R z+lN%8d+`00P9czltpPF@5+dt35(oIF7c|5f|0Xtv<)>FPjn6mt)8&&^1kWw}GZ|m8 z>VmkZ!b4KZ_XW1jccepC#FkD03)hG}EE4VUQ>S}we*ffb+?VDqU3XUUnLrJt7Aqe& zN$;eVi-wq=9UKN74x|$u)@uj;je6i=vMQvP^zI-w2H(kGfB>8k+;RUL@4zp@;X@httdO@(-txWdF@nY6rGNK%mlfp)+jF zE(E=eY1<3I&kK$%Ee0Ry34Y2QmHu7mO@?am!6^!pm(vGM&miC!lf+c`621?1*-O!A zVn16${55uyGKv;-xFO*xxOmomK*YC8;kO0$G==Cc^(Vj*THCU0jf9D@%sfmW;Y$(0 ztL25!#AzQwh}+G@_F;(|XCWnL5~12g`twZ$Y;TlVQ$>N%a!3{iLRmHXb^jgdHr(;w z_&#AZe~yt4yx9J|jCwa3Powtv#)yU^|Lb3uk2`@Jf!oNsC6R^D*_KjWYS4#*kmqs4 zl&AZ*OM5VwNp8viv>-t^*pu#z$bWE}%>NHglkLCgfhmm%J8cf6tqYo0a5OFkCm@n2 z_S$yr%L5Ur5 z{>vd70K`S1ngAmAho?(0x(BH+2%d}2P#%*Oh!$2e8ajZTt%f~~7nHC^=d@hal3Sq~ z9SgIrWouXfXqXGl(|d!#z;j8l7>I*R?+=KB;c9P-BlsifDB+fBVNi~t5m-B#O?h7k z6IBu_R_i4KRxH`S2MSIsWNBzgT!P%xXN8Ooph`3ZLJ{9+e-P!Xh^08Ev=*~qWa%ux zIiwpFOm2mI~Z2u9OMXTx(BVSH>GeA`-M`XVv3wt}BUAKZ*aW;Tsi{cm7-`3eFi;8OOPDYa7aqEEdT&&@z7wP`J z{rrnFxS@tovgOsozvn4yBP&k8{(3=GtH;wfWBG<%|9U~>k2~PIsV@ocAVhX^ z_61QXSB_E&ZZmby^&@DQk-bmBZk>iy{}-+r!+PWb(BZX;+=owGcR5sKWZmP zJ-ALmA7_i$CusC65#x^Wx}03l7-QAp>1U?~&$x$^1s{`=#|1TMYB$LTDw+~P&5uk; zwRx#V)yuFUin&c*%z91M6dNUqxkb_iH-ONoTx)Qp;^n z0i+S4>Nm|t0ap}{P=J>9m?r;uHRQ-P8H1>@=ZBJ zWxBU5&PP1RJzlI#eF$812DPpL4Hh=MR_qbWrPyhYQmiexJPV|mzx%Fb(uy(DkTwc}H85nt zpTMB60tx@@X0Bam&d#Hg+-kbmwoxh+Di+Wx-0M z4A+s4l#Oz^WD7RUYtAlGc1#x1JX3jg+R%0k@{*;Q(}-RmhrC+az$o(l4o^izD;(+W zXF3|^k1!jqI^cQF{{JpSI9Su_ zL~rdh{8Wrb17cvVm$&wFm@G4drt zQga;l=df0TqPpq~rk4$;XVh!#s+a8t7RNq$p;1oE4jhI*7^SmW4gK&Srsd9j9JprG z^6a*&cEtCB*`iql_I^Rl%l1qZP$L%lZ9VZh0rZ)iN3*gj0X3X983PLULA~alhiFqv zVG5H}0k6}*O1WGTQ|p|_Cw@2uAM2igrwz&*pCxfH7o1P9n4Fb*c4aRg#T@b1je#_^SS15Z+#6_06*Zj4OrvUc}cG zK)OPmG=@>iU__o+@q>aB<(pN_@0Risil~#lX*>o4{WvZfPP#+*brc$e#4zVHv7&$J0FDA^ z&VxQGBKKb)Tu?@Hu%?N*!-p^Vi&8xP8rJ>wcF-hAsp`8xKL#dUYl`@!HnGnCYIFj`(+E80OVN*i~wTV_FvDsTE0BvJW{ zmFf`i{rV7Zc$KLIv1R!{LKjm01i+qWMih)^k+z`3Rb_LQHlSo{Hw}!tbJ*Z@;bxMg zaBjK$Wt*~`Z{?8jLRcBPJU8AlI{LRD*tE-yH9=P zAFhcNNGOxUGlEBonb0k+E{SQ+mnt29VO7{_`FifWI(f1;X{=iTjYO#TsqJHrl9 zz*UODwSW91AZOgxct93@07xthAYD%z#=nx>J5uzy^8p8@%B@TY!$rQr)~SbW-w!Y% zHca9Jdo}v2t`&7`2tBi2B|oz1uK1GKRkka+r{-y`{QFQeq*c0Z&MA!f<4rZr0}@S4 zCe#8!V{ul}Jpe1UI|de9OS;YBat2B%arVWsSz_1g@deV1?d~pp1qeI2a9va7pETxm zZm}NKn(nvZ6QtSe+dl;Z;T=}G-l{@LN3R|JNJ$efkC4d~{B#SU?E?XsTV;%U0t&h< zt-O$ra~OC?Nn^Cz%*-RU;%wU3n@F&$Vspva95v_0U!|SZF{VXoT-QB7V?#n9r(N4z4lPP}6<_T1U758@ zX2)^wDt;3E9j_@QWaR_&$C*%YP$V2Cy*4bOQy7HIMlK;J6k80daoHh}m3wt@HF14|5RFK$Ut$naHmY^9xa#ZoU#O*ds6F^zKpcD6A;<h{25`*O>pp% zOtT!xo8t!QKaDVR`5?Sr-(x1%zBCKw{?$LSJZ3^{H%RZxM)s(i*=2Z8;#0G@gWSTy zcw8KUMo2uKQ_ViI$7n6NV&o18P=AMo!WB$u=K?~}H+~F96Pv@o-3uL!@#6h8^HfBI&N^9@*hF&#VgU$Nn@1X_q)az0e(0r*o?Dp*zWt2 z9%SjoN{t^dW?;=Nb-+ZtU1Z5S!EoF+@Cyjn;r~7l{SR*v9r*wM@&0d}rbhu8?0@df zF1}+CS4B7)2jGYJ;Lh}x4QI*5#nO!-Q=L~f$_S~HnzPT_C-|nOif3 zYYgfFRW;kblk=MBYGO*0%N?3{VuqRM4fWyuymDq2SC?_S9OX;Tr001X)!H9zUr$>j zjV{NrDTRd5=dGtTPYr_}p$g6$5)X=*+h$)m+mc}=ZpNtQEBH~i$NA?gjLoiG!t zMHgw5aSn1Mxq&)(YM$~=_ZN3n*ioe)&+^{?ayC8xwfx|)FeZ2-0}0F9dHC2Q3o z|E;Lulh-?Up?76_tMiWzY;mC42>{+6qg{IJTNZ`@aY`=jwjUEwZ>^XN+TIMAwsZq# z)ciLlfO8y!cMc17TZ$(R9;~?%Z{kZL&Z_h|wm#Tg2c=-KNvE3*F+A{>vLG9;PuQnAJQIn3M<{cSgx7~=CS-vL% z)t(ao*JSw-V>sh4m{>h_ttL5-(xbsYWR-2v54F?_z=N1tYB8y*$`ciH^^tUye@)S^ zNjt*C5`*aSE6A&xYK>qk=lZQ`Yn|wHN-eSfzRW`w3&|!KBT!uYNnMkjp~~KNa8Rs?EB-v<6T$~#S|5gP5ApynNVcK zoE_5_8XzTx6GigHMcrX}5wPzO@DQHltEY9#nks-5+H?s(9(-TIQGRy6qVZoMRq(W( zp`#%Ffeu1mX{ZI`xajt-8j2B8yCn$#)j9EcXrq zJgYhk+yNC$6U=VY&*R!bSXBD(vtcsRDcvD zT@5@vxxN-yGF^0w(G!J2aJ^YFU%$3;P;Q}0SfUs!0D)_e3i}fiQ~{SMA-*RAN0W9$Xqn4m9nxNEjrobZIz%=rjPce`NM^MY#Scy2@sJ{37X7WNMT13H^Zok6Zh|a}h?etb2 zwyf>Iauddq6N5l(I~^f)OM868;Z6wY((`W0{t6ou!&!V{xKpWMRd&REJdfGYbrsE2 zp^ULjMwm#$+*u`Wj!9hlph%Q_PfXfGN{u%>Aw-DwmTz&1aWmM6t$Q0lYL>Om5m6?W zS?kJi^In9Lr&rO-gsH0CwT_+V@RE&P&F!YMvH5R-m=xiud%7lf-YGp0Y)tU$$b~|p z2b%`%dM5jFj**fR(q1-ThnQIG<+xXkByIUFj_eYyP{lx0 zH*CDLYfE2uHhV8S7lt9g^U}&zC5WR>pqtv5_ z+zi_V*rnei%>NWaO*U?A==tGokHX&Y8+G7|E~!nege@lXkeHM-B}k z>4{cr6G%QW!Q=vm0SOK=OM_~N8ja8QeY7w zwKTC2CZ^l0?rNhZpXi~%|8kj~=$a^;L1<#BNq4z`IGG{1UR!3jLx`3NMv!tgcs!VjZpdK`vw}`hB6UVJC zJxTL-X`m9azBmusz!9+kdnqTS`(4JNPZJ0}#Du~(>_}&?U&Jz}itFCWeU{uk?(5$I zOrD~`0H2T_pt;;_{(e}Y_Ow#SAx|UXMI`_jM+)ube{=7DX_xFANrtLF1{W;dxNP=Y zUjR6_m{vSUpAQKeqNP{4Qb~f>8ZTK{IOq;N3as|zcFA`)OD+?vw@%`P%!5B~^oa4y z%W8L1lh4J=Qcc!U6o;YJkzOuXL{nQ+@Qt@&vWDfpwkhZ%#gzS4H(LwsKvYd{M;fnO?PJk0>hP#MUk}v zINqu^2In{~tV-bBZ+Aao?{_tl9>Iu9YrO?zK5E9+6Kivhc=59@fbSAYtPDsH-8;0x zi$NRworaix5!-T$Aa+s{cEV*Ix$bkxF+`WUKNXU^4aW;c)MDqY5irP1wu#vtr9B+YvV}Q z<;6Tt!_%hN>T0zlfOjYRZmq8aRGV)|tlwZW&Tmx=>C(<}aa?S7cbiMd26IZ0x<9^7 zI3X{5R0B#brbM%n#n0xiqju9FwMl!TO{$o4mg$}aOJ=qfGa!pLV8sMYOCAD;MV>Itjct?d zWl2z{*G+)O@$CDKnI>K(yePio_DKLNslqS)o(&~P2i93!Ac_NZg3WBQ4`J*Rh=>&j zGtA1Afx|XSRh@9&+ski+_ni>1u0A?Q9z2EtT!_1v) z>q2e@`Q5n$uqaA95SWR!^5ptbkpD6*1jWa%6L35x3KB&VB}cA`FgdC0tP~4J+-n0sB%)M?y8^5OzFDLna+}s?{N!6|? zs^_e3^|`D=vrmF;O5#L08Q@wlEM|f?E|=Bufk=qS@wLiUxg}~AMIoit^PH>Uy^vG_ zfQkpqhRsk&SwNl#u&dl8-ODxS^`zBfR{=<3<}g3RDp<>QyU48Je6E8&)u1J+D3~H~ zzQXCbUs|29D)n^O$}K@_JsBMPKMIeNy=`AC&8u_&d>A`EU*8}KJ_K$L3~r%GE5l<) z>5o5=RUdZ{w|9q7hM^_eurVronmf?|G9RH|?fwkAa{C!ekFZ;oI<)lu8DWq9w8?nW zYPJ6q9CQuFg?fTM=23RbV+=b3cdo-MY zeUT01I?wT2N$vLbmk@Tk;dzh2%4B+#tGyND*XeX-sUfDO5CN^zzrtM+B-*_J`2G-x zk&1yDjZDR(l<==#W$K8m!mQK~Vcux<2V!LtyMehY2zvW#pesn)iqrp4{F{Oj#J8J| z-=8)Dj-?l#(PGY_N?1s%%YY+Qf&*8N@{`nT?5a4We!&9?FrB)9G}7^-+d%reP3qlg z68S7o+%>Rx0wz&a2+Q6xvsLi`VRri21hOs>g?9ner6tCtkzz|ph;urf1n3`Jw5%s5R1S# zc_#l(YWX)qe|X?mwH+=Dx=ft0PE1x4gAhTB0S zo%+>&S~|Kt(ZOkuo+#woMpur*Ajo8TnYBb11uYt$Hy<44fz-W%1=1oOnua_4B^njz`g zMAKD7s4ub;a7pnZYE!DLpbf1Pupx!6u!vr)E(f1cdQz?YqrF(A+qk20bZp_f=9crf z&#BT24of)Gnc&b-wg4TUGL#8)$gBhRkUD(|-24k*WIU|y#24gOR|$#p$_i_I+s^W! zs&LhyiTD2b^YLxig~G;E2A#?_7eYBf1E=l4nq!Uo;sytb1 z%_IWwjKqFsGowT@qx@w?jJ7~KXqXg2nMu1iKCz9(e)Zc&(59FhT&E;7HJ@s{ev1lJ zzw&$rqOHji5>qO;Fg3`>>b%?Y{e0;N^0&Gi+hbaZ4J{FbB#kD5t%Pq*@GOFNv?{1S zB-81mcf78`f;@K-x2@8vZUI5G1p@F86Hg<6t6%k1#xq^4SFNwyxfQDig#jKQpQBX~ zW*9`WfVKL|@K$*5hKj0YIjzKd^0VC+XxHjomfc^MV#iok7rNDrH6q_|L#p)`3g-M= z###)r^d>T_x>8Ew-`zdeVPysBs=D&^y`BIcM~JlV7|qWFb?5JAkh$pdqa;qDUp;&fX))Y4WQZ zRaf1Iz3;lx(0PzmfHO-$_Ui(3oA)}j;kJ*1c-Jx)-w0$R-*G9^eH1IhO}dSZr&e`e z(siUPA7Nr3n=vev9i~4WjmSF8$OQ^WP!M!#&#gib0!u&#Sz9VWQS7QXnaK(eqLm<3 zvU6G!1+-ym-)5U1bsp?My*BL6*pMvbu=ag{+FSd909G8?{NTHy;{Yuoe6_xeCrJW( z(DmJlJE6Dc>X4Q1(&dk3BPv>QMIhMDTiY&%_QF0A>!EDy>LD&``mmt^V;g{9Toqrz zrmI9@l1nC(ZMIzF$J6u-`yL4B?BcsCKsyo|4$*y@$%mo`Nq|YChfdjYdnZ+~*!m8W z#3)q|CUrvMIu`lm5%13shGb6&`?vlr$;ab&4cR<7eay*Tx=2xToI%1Y_G#Y9tg~9)Y~2_Vk3B8KHw8l3N#r{Zw7guKR_%y}{KDVG4HORA)fIyxyt%oQMN7BE_{>KGt74T_9&7#k1{ zk2I!9l*l4TiV^Cy5pzX!wb;m?J)LO+Z&EFIzR6rUipJ!A- zSrXpDA_c88&HrG3|6WV14J*t>n=wX-Bm$=X2O;|f;e{!N{-3M>W=y-g20;VnND7do z1}tez#r{-lx^I-Rgn%c8v}hDlX~9noH^^-xS;Jx$WR%hBNjIcT#?a5U4zG9yu;-JD zbO)!(DGuOgvUFG&r9*R*d(g@wGFk2-C#!z<2Yo zPlPzE=3ytB>+m55xgmHlEe$X#5cS$Vdrd-}}x%wGAo;bqw5vP-9 zGYH&LnyoPIK7r;`uGFr==^N<+02&Vln)bJ?xarFk*1UWD-hX0Rm*xmwE-HRlSg=~` zZc7KtDV=NXrc07I12ndp{`TmtF26{;B-wPD{w5da>LHLiQUPRf z+hEfbJir4ql;Yg#!{H(WhA1J%3$ZMMjF8wU#i7NS;)8!kn^E{o#T`ED` z{=C&?TZ>tZUoP3dt*;CN0JBM9)pTSum(yr6DK9Vvsxh|f)dz8&TjSXuj1PJjW6q8?`*J?*hL^t!!xgq;+b~tSl?F>$Ljz+j z!{?#lxfXxF(x8!dX213W}W1|ZB{NHddS`Lx6oMWTygpu<)zS4QdQ6Ofrh zpsl*0iy80-7h>zsKX2VZfv?cEX1#L3=Gv0H{Ss(1@JjulzaOByjl|!rm~HK^R`HEF zLY{Zk?*Es3g{l%@0bPNdVyTGMPKH|FHY_~%>8UA=pyanO@WZ)-d_zE^A~beM7J0FSD;f&uE_Z-k zxCv~Y09mjlZoE!vLe7-VWVLT(=PTF$Q0==Y=Z^5$fyLj&cDvSpfA?C$1*^HUAobxW zx}UA14hH>gvHj$S0t@CBlQoBrgqD0t;eMu@vo}M^wD(o}w0*I4bNi?2Z2A6_7E{1C z^in!cw0*9<2zL^xoYbgvVoY>YDSa1Gbzw=j0#Ni$Mn_h;0S@4*x2y|Qd{=!@%4s0Ys&t6Ka{7ph+5rvFCmD0#}%qDDn@)g0K~MT;mC-t0`6+Q@k*LZuWB z&~5FZUMZ8{O==sHn-225tvc*ng8T*!iUf0?gg&3!K|A3QGBI&VxDyJfO-I58EP|WY z7{lQV94z`B9efpF@N@zFwv?$tmC=j_JY9Ydsb2wY7+QLDhm;ZI;Am8R#?`xdPGSlv zpn-I*!uDLeDCzBnu!r2|q5b}#08jo*>W?}QpfUk8mPC9d-AfdF7`Z+%ocbQx{x|iQ z{_9O+OJchDao1@4m*;b>{|gP27&JjRp-`{(Nu+~pAk^+65$$~zBY<|Unen0|QK#kG z&)p}1O2RJ5H=?BDAYo?UU_d#%!7=>dV*lxL|D4=J{=5u1Ci}e!6=}bL(P=;YHCyqd z+hMz-#r`Ih@CMM+ZdivtK0g|_fQB-b@6QaUg#^gi_|V(>?F|w)6oGd=^wo85gCZpEGGdFY3I-w1M zT?F_|&*u0;V=f|9Y4c)w?Lr!Y?3V%pfXKptcKN?jDX7N3&eQYBhrcJ4`88BebnnMk z+qJ_GV)gZ}{|Z_oN2q{=GbJNOD8*0tqlOAOVmV#403k91&Q|&5 zZ2o$5nVqZpHI`WDBr`FORTMkOYDe)dy)^UZ2WY=bo!9P<+7E zfpzhUh4N;|yj&E_nFJAwYpgJBG)q@~gPDf`oF0K1eUFqd8&|YARyp(@H%QeB&HG9# zmmLIGmCXqC!8z!|b7FV*vc{c;QyUkC7}|9kf>A;^3xKUv_vm}~_R#UAvg<5oP8#yB#B z*=4jG(}~z45{%vaG40j0)d#KMy?}gLj{PGuM}rzTrD{9MCVJg& zU6FKIcr66y_68p!i6k9R;oboG5*-QQVwLeHehg&@WPH zj(>t7c56wR`R~`>vC^|~JOP+h2#AgKXK34?q#Vr5-k_$7MT>zIs--ka@hRSB-pVOz)2kL^LP z@DCwpiW~-J1+r#3rG9_CK+Oxz>u969lb>c!RbX~Ei^s`tN~>~BR}2b+PF-&b9Y@XE zK*G7Cn1dWw%@XCQ)wAjsa0KJPfk5v6svX-l7mMcoO>i;`H!UUq1Ir8mS<&5C6szGy zVdNa1U8(JqUyDBVN8jsC%>;GRc6Pui;!1n?W3b`4mKGUTN4@t?Bjr~3QGUsbC2)-& z9(~bnZu@CXoVQDWhi0f3$tW3$F+%39LePWYwdi|~%cH-Gkv-`fkarMzM0fzfX z0eI}3w~AL4HxR@M#_-g@7OyYBfS{9T)hgL3G#;uu$cFIEPOXhsd>-|xGN{v!8Z)KEt+W$uySAR=eI+#ZWn3J*XM4Yn4F~;{HF%$2 z6HmWL2s7om$h2x{8Vybdi{gMHRXsZg{@As-rXlJT2H_mB5^^kFTV8R=^9*Lh%+WR| zr>-TNR%n_%yGna{bjp`J)Y3gv#b&vv>!iVw2F_1TE_sx`E(Sg$v@ww9Vj)K8;9%|bPa^2;n?t|y(hD~2D0_lYV6dqDj8j!1QY@X z+t#?UnFOLyDCE)!!vdU@xe0X%M7K|}cG%SwIk|AmG6+q3N3uO%p5Jf~tJ04Ee1Eel z4c?ZxWwHI55r_q*NZvHqN~nvwx0<$W70bPbPlfwg?;dC!mU(X6kFd0;H+9mfekMEcw39kS zHS_0sv1Q}moFnEehOzO3=hhtq@CIX~Hk+x1LK$}*+yNAK;$V|ytz2$bYBs7RE;TU1 z=!I#o?Y)WV4Q18 z8bhFW*F<}F_{cG~z*55r7?!yZt2B$GPzFBB@%(k^F^9$*6Q$|{VgpnVaH2iMEK1y` zAlbqg!Y@z((7yp!<@2 zezcko>$Q^l%l#i{%g4ahC=Vbd_&pKU@WxOFMcH&kTG0ypDlu5`K<@xwWul^+V8Z!x z-#V}7>^}T4ty(Sso3k*yW(l3PET7U0i#}D;xebo5$}1~4?<3RP!tZj$7&?%8T%;sC zPC6GP(T%;?-{5CT+$-}is{TLbFP=zwm6X5X@FfbZ`L?t6n)i%7zJhiBFXYN>N66(= zk{_%GgO3V`Mw7Q1*EGj5u#ITE4-2HYEC@4etXV{q+)2^^hbXH)^m!gzO5B6#Kgb+f zi*6j`V7Az6PZ3O`EeEI|(A0-@J-aSz!dL{S&Y>Ri_%iMIHF}G9{5};;?oN=YVH-rG z^x2mI74N%Z26g9Ae&XV=SSK@<-ly+HUxp1-+D9$Nsh^=Nc`Ug$dPkPcX0vHk1GHvB zwXwbsfHiJ_Z}@6WPsE$X7RjxVLI!XHDGp)$o28ZKn7xEWJeD&+XTfSRmaW@*y?Pk_ zu?p0N)SLtrrzI)X)JfsEZjS;^*l z04fu3lNj=keiT(;Z#hyxM%U#$-14jE|FHEAVVXo+v~8-=th8<0wpD4{HvhD3v(mQB zO53(=-aO~r_kFkVdeMpQo-1O{HO2wVnQ)=~&kFapYa#@3KOaXF$i4nMCKoK#C#V1X z12S2-B>%7|>>?~fe0GCw)Lr`fTu;@B*q)kk@ zLD-<7$S3L_M4AZ?8C=}T1z)$`uyzQMbP&iKe*>Q&&WxF24L_BcIRl@*HK82>tS1OX zCg+)32G(7Of>q^boZMp_Fw4a(H1fn#6qKD((+p<3w$e3%>B*f)hG1-byTI&I7J#3# zb<-KDE8$<@N)vsQ#dV_vPRuqSmc-4hLycod+@M1*zoQvvRlmk+GfWnA*r^Cj3@-4i z;z4kIXA>;9EG5W!g_7gGA4U_wUS-Fgg1bmzxFLQ(p|Lzh!pB6b(|k-?|ER01|*SI|d6kXE-=VOfVC5q~g`TEOb`7KKC#@dt;;=8jXp? zh_%7eKU>qpFAAHR7ocIPB&45+QT=orzRMihG=(FoPK?xNp%HtaweIrU5a2W%SaqTD z%yNd+;qjp%xzb;_*sX|R8&@0=Y1_5=B*ZEV)j+w3h{eqsJydONwFbCh>Q&RT=1p3I z2P^0)jq~`3Yrg41^Lo9>x%narmJ*d`mg+Ow)n+Uf)_AM3tw6ucJJrA!?&+h2f*$(7 z_oDNA`hN&}CaKveppZY2j3f+-_P;fws-M!wI@`skuc$o*B80hP%ExDIDEtW=c0|5< zLs#WMUtMw}!^o7i+49wLEDEK#>*kZv!#@;B#l04Dz-{XdI{)TJYgbzbLZE2#KSNCV z=J(*6Pg%s_NRlUZMFRA7$J>(U^>w#vRlpCXy942ODEsK1Y=Q~FKYJ)l!ue>xbpQ2L z5w!>I;3*m0-jF6)*k9Q$zVc8de6{n@=Pvvcr}boy8e6>r4#Xxj!$eUe8;S*JImYK zo#~q{x#zBf9^Yq^9m@@s@>2W&ytgY4$MXWhybz=qq?guSxme_=nQ2{#tOr*0TTo(YoC_|biEo*+_5eb zt%@YDTDfkzWEB0&!wiTqwcs%aM=8YgmSh&W;9C6ZNI*IPQ7eM0B#4U+xM_mkQ&mDF z5btxL@UeptGTSrPKOdzVX=qxMlfBqDTyp1RreBm2*$SOcNNJ>62q&ensiv!8cdU3) z!{mfiwlW6Qjlu~^XJt|X%#6OUS`q@0m#HoW6D>)z5F(u^$RVcV=690Iv2`GsPS~=Y zJbEu;c@zG<{l!5Ec9ndC0|69)3p5jx?m0dQ4@6;Rx(r;4!wK~70*J@>pV@aOdB&Al zWEN7E!zLpEey*qb!(De-hB$Utb(6h`TP`>BQxbhfo0w}$`btz4fS0KTtVa0t-?R$9 z+CNIva^}$dBZk3oT_l5lfA6)E#|`#SLpvuUb(>mcx~lD5J|#%zi3!v$GptAQB`FdQ z=)#rRa7wIq%&gI1sYYl*?hV5*sWlpC)D#cW<=)_4*&A0Y5*T72&IKl#g6hD9R#+7f z#j}D12tWyqe=m?K0_@1$8IbN-yv?0>vfo!h#9ieK?_o#X+UL54hr=oMVP4>QKj0Hz;C;ovW!xJ`=fQ#&up*irRN^ozM$EZLhfU;YC3FaNpNWB@@Yf2 zf+A6DVHZVEedd49s!KZ_iilKD*^{1$RtCA~X^zIwSNg2u0K(6hm4!tNwn)L7ls^-d z9uHt4(UceQGSN1g)0weWd7#PIAO=fyCFG)deIEW%bn?8x-k#<~g5I;zmO5IVC9r2` z1rm&Y3aNRQza3XnHq(G#cjk=Ch=C6r2piJt4@qsSo@sNspaDWR6U8Q5y+hcfu1S--g-ix<+ds?VeuJDoy@ zaUvbaLH6ba{qJazqV0e!#>ohyE&aO0rTc$PESO280q8+r7aka}&As9d`$G+XXmcPC zg`u8^{xCDXlWjjk=BU~nKC~o5=K<1~)mp*%b2q)!CNo4MNNFl+4cBLGzX}G#--==s^C@ot$6Fcy!?^|!eu@5EZ?fm{-#p0rMt$#Pf9s%^8<@~8J65tc)BVwT@)m< zHcY&y{5D7kwD)`9OS^y|K9t?~napLjNDQ3#9U9QFrwoUXiiH$2a;dHMtJLCY%J_*2 zg40*i?Z-t~+2Tn?rk^Ekf0@5+VIawx2HEbAIof;=i-v@$wr4b8pL6k;iOK`#ChKSSGj5z?|H2K#5h~ zJRHaZ9^#%O-5g9jxMtACHli3w=p8LWYfF$Tgtphj2D9fIk%O@NpYRQS!Oh3yFVPbG zb874+XY3}NukXPRf=HVzkQoE}UFs1grhNx2Fa7v=Fs7DqS7QqR>X1Ki0=S}I)K&vO zb=J1v^v67NQuMW<$GcBg*DJoc@afwBeswbcpoUO^IsW6npaQ7=5MtR70nd7b1fWE~ z@e>G&2_26HHVH(+?JnURe2qSNv};S{2=WE%2R+;I;+(1l*8dpv)qz4s_BU^@+)B8A z+g&1EPaZ6KGw~jmu}7LhNq4@E6$Xj$$aS(1#_vpI9{>0+>PcRBzAZfQ?m-pt0?qq- z<516xn`jry)&OUdWeal@GGQGMbdvBa1G=onWd;TQ)J;k@0?c}g(u;5p2p6zflbvy< ziV6At2!b*n1s`+SV1&dIWfB@Z9}wAxyI`Y8Z}D1C>?3DW+E>Bz2?oCj z2UVJ@IzL6gEPhZru)r>Y`bFdvap=XtwB!ZZ)k-^D7P&H3pS}mMjp__lT9cBI-A{IJ?$vE>4*yT#nr9*T8&^lR z+z-b59hTdZ?)eB7f1uWuN-}(YWcpCyFzUUA3BbFlC^dZuU%b#YsqU$cysys#bIWBG z?vpw62?^sPSfdjN+#ysp7oM~FSb>JvJ08G>HGgDi!cMg{XVY3m>reSoy+{lzGz#l1 z@i|YP$V=^hS**MIlO1r;0>q=^5FNZ zGr(MU1*oG3C?}F)e8tIc#3MawLRv5{w-|m$d69PA&ShD7S>ilq} zI(@xv<)VIpyuRqry0Eyq=Icl<)hkK(P(OgrFT4}WEbFdO__O@e9-Wdzm-}udH~@@0 zJS3U*y~|ZE&ToUoqUAdbvP^k(72re1w(l-X%TD$RB);MM0G+|Z{nh?Vgm{dNBRVv` zUZ&o=&ggd_82kix@0`ZV6(z#FPS|e4Vn)R`GSyEeOAYU3jG^hO`vs9iNv*MQM+cKMG4SAe{9FD;9Pa%7s=mvWca7rg`r$~4TWKvHDSH# zlo0K1E*Bjd2f>WTx&MVURxmZe%LpFo2F^{Z1xI%cS0)Z7O?s~|&=i|xR8ntt>kmQf zaOt(VgX_d^e?P`_0@>o&LN13%BmxubYP1tau*LX$^V?^lI*aVzgY{Q&C?y~6Z9ov5OHH@`2 zwRV+Q=eZ{Uo_0UHk1<@f;1F`Lrk$?@v4hP1G+^r4It5-HNx6*ANA7N8$#^Yp+!-GU z3H;a+uMhVT;(A*e<4+!s=BzAT#OVTfxQ$-TYMQ9H{rFyJ(1Vv8D_Z39Y@G)0#9K9M z=I>f>2hZK$Y&bl)tT-h^a*a9wHgqx6oF0ds+*gi%8WGHOP{&}nx8>05!6t+;Y3)mY z04bJ+TLNnfENnoM<|^c;I^V##W*9#JF!cZXHA1L3zFk^#L!$?b6Du_p$&gx~eX6Zqo$9vOPgm*Y%P;YQc?n?Zz>))rQotTWL z#7H}$@1YYhz5O_3V`YmtmGC?&eiMpnVlt)HkDX%LWc0_CH`FkY5Q%b|{p1EzD*&1T z7mPGwuCl_>t3efDEi((w2qD$y*kHgG3b3h8KaCF7WyLSgw8V}CBF_+ZqX+txt&-tjkVM7KcUBAlqrmMxPRHR@rs)dLK$j4-)@}}N>vfbi5 z%fW$3#T5X-Wwd8m9 z(sso4XYY6D1kL%Sa7%>_3QK#SlaIZKnl^N9@v;Gocml~>hL2u?O-6I44|l7J{(f*! z8$11WU^Jx>vjph4z$0}$YaJ4+Zs6rAF`Y7f);Df=N~ zv(W(#{V}EC2&AK{eZLusPQDAr+@7Sc3DEQDJ%0h_+fbOVF?2q@#Zu)AAoJ=5c7Y!5 znv2(t=uRdrFdIZRLEu$@JR4@$E)*PPRIe9FTh}2w!2d|JQ?FGvOn12yERWkXtg^jR=fk)fdb$I|LZ>i1cNhhwUJKM^dg^jjJ@Ho{<^z++)yC@_I>z|C9poZY1=a+i3%Sj@8$n6}1LJ(ji8 z9V+3xX51gKstnMVo~k`G(se6=4C#7~%)2@eXkc!+_Q2sC9+zo!RCMz7get;4wCE_CDc4z> z&4)H!!3U_GeLKPS(CA((V#KR8k&1j(VRhvzU1>^?R8}aAA<`()Fq7p0aEbBDsCky_ zek3_nDgX1*hD$<=NVdN)z#Gy4>(CU4&I@M*SbQQOuvuB8Nn$$Hh z2t%2s?|2Vdlhh+uJnf8rPw>(C@_7xJn^6_{4+J2Bl}VybFO{iJ07|XM(_4R=5K*;R z227X+W*;RHH2KPT|GSX#m|ULUE6$jte7YEHq2- zOZ7Ifi0H2>DAEj0B(O#LD5cERFMzn&xO8g!XQCD+J}8z#6i}JYzTT%9h?Do1F`2=d zFm;o9D5|x;^iI0Zh*L$QkYl_6=U$EmsJ9F_PMdbUV{xLXC8L^cR!Z4|aM!VfyQnn6 znK+-g#UAe_?e|6Km{I*Z)peT;lU;M*(3(ktr4AXlPpYI` zq1LuZ!u@uKHNdeh?Sr+i7PQ_z^Ouf%F@>q<>cOYD@el)~6bB1zB{wT;0|v!`u&#)z zrH-txRl{bjN?D5YJ^AqHEk?7p816ERr^bTxC)J(YEmUHnag*yCaYQ5z4+^1MGKI->A)f#=iUk1|Jz2=k$BAF&voi{m`SdP85|t zWL8Cv%a;()81TI-y%t0*>SZ)RSiQ<9D{;N7Ryt>e2`A2=!U{yKc>Bx&8N!2hDo3YK z@jGfX*?=Iw!V1y!o6J8a`H7hD7wx5T1RhF4mxD-C)>9w|f6Sd%lcZ0z@X}eEMuC7j zx03oR&+v}x?9YhdkeQLloBWdEVUh*>9^K+A1WoA)(+DhME@cp!#<|3GnKOt=ygI8r z8kIams;N9H(z}jk$!}tbn?|0JSI{jFP{fLK@c@{T_~YQ)8j8@e=}~j0ibC0l?6=9j z#FvNuY4xBsO6WMy$;r4ml^3T~!#ys&hSSx)r_G(oTX!ak#V>f2>wLWn6P&!{Pdrp51W?F^q~q zB=M5wmg1gD1y8kZ|=;^A9P`*-cXoHTcf-pmkb(oyF|oJQ6l@uC z5GV;=Z<*k&8<(|R1h?!4ChXlD0MTAHswE?dooLmTig~GOeM-Gf4FIA$h7a^PfQU;G z#kYVX64Q(mY9GPSZ*(l0Q!BnO=mQnOr3nHr{P3-Ki0xGbhbVXwsoSULLPsi!Ul{p* zeKJQ0i`Usx%MaAmUUk}HjsEc8q}~RJQ31l!ENohZS~aTotfA}M6a%cW?g-6Y+PjUs zKENc~Dc7(+?n;5Phxy^fn!d_?(hQHaZL9+>n%ECr$n=o26GT6zFnX?|>+&$E?{?cc z$%f&8gXr_TdWfHcn&|s>Ys@8H@B}dN6y$)&D1iAZMIJ0}F2WQi0pTgF> z*dB8v2iO-zoml?)r?Zr8;uN|)(+_KZ1rSst3t_5ped|h|8qt?Q=&A++Fz@#Ae3#(9 z#8|)9k==fdDo_vTUq=6pF%Y)@DH>AopMa?Wi)!otsge6Ut3g`$C;KG}MWoQ6o(Qj* z!hl5<{PWD6%iED^q!mCb_+q*s6YH02_pJ#ICn5%Z#s2jFVa~h-kFQeUx{9G zoiZ_A$P=w>*L6!lh@@4#MMbLEZ)m6EiT?@F_g)RhSGC>MZB!A@GCpsfe5@}$KFa|R z&;M0-B*=v;87jvUrPgYmbQQpH%e`vPI*YrCkt@MW|5u}th`O+AE1Vz-c`sGlf%!a` zDY5GUB;zHwLg~TuP`xZWU1N3Hog)<$P+pat!d}2KpGhG3k;DG3SqYl*qC$)pR4D>L z&ac?P6G1Vlm}q4pf3=yiwoO=0yLgkxl3OrZ$l-nGPkC0jv~ocmXRD6!^Cqg00D z>H)xWoao<~X>))Oi>f*)!$8WYw}?G+VA&G^oVp))e;uYkhZ4j%1LIB=B?KUdMdbIp z{IpqnOr@b3rMrj#Fu`#EiYnk|AIahAWl7`DrnRcO4o)wjw8@wQaq*l3aftO%TEA}C z?XRWNy7l%M{myIm@B*$9Pm_5`n0&vr>gj{n4uadbSn%l(e1 zWir>NBg$@z>KA}495=DE?M2nR@0SLu+4Sr|q%hp1Yz+=VM{KI1T?s#rIom?O>q;w{ zxH&G21&GzE24)ut0k~Slio-vcqIBS|C#f@6xMLM9)n95)0LxWyHU=ouVmq!VBaq&A zOHPoam=0(?Ol{l;h~^CHKNMZ_%;z~alO9DyLGuuKD<|k?nC1tSui0}0(cN-p8ZN{$ z-+Bp9r{(`2JdN@Hhb8%c6>5_jsK=PhlKZ68^0cd4B@1AjqEJV61;d;*f;f3CtV` zLCsABWBvITjMj(-$@&X`>9^Pf*YAXu}Gy8Az!e$dFz&kOifrr0Iy`WqDpya)km+Z2SqtwEFy^!Y-1oP-(DR zsxL+*lcZVBfJ2pJRNNce2XGxh8`MmaE|dA>wg+`xWsw}@bCV~5479QH@xJ6PA`&)7xBxIv&|^j7cn;{=Tp<_b`w5hK>H1WuQPJW&I4-Lb1*ocnIDz8x z(3>tikO)K?`B@}%aJ`B;xWvku+(}mItKk$QlMm1|<77U81jl>@2$FNSlH@IKkwK87 z-|%D_FHC>Qk=&^Z0v8?B3F$k^gE4U^r&igaaBKt=D&1>g&-tA3q- zpcv2dNQG!7R>SqBIf_9tShg>d0Ux^9P;{F3BhaB-9+*fp@q<;ivnh-}b@$a?`Uu}y zUu#Vfl2c_yMgk_E?yjB~wY7sTNu40DV-;+(+h~2ZO$Y2EL>Xb-l|?kvfHt( zyFI(%1GafXDr$Y6pO~!qFS>tLPT=s`$`HOkI|c$Xd)zWFYZy8@e7tY8HmB{HuiX&b z^se}?@SfPau0NaKAEqbi-Sh^M-wh`Vo)gMZtU5xvG67x`z<9=PABp)byX9_0SNr&Y zFI3G)-7zH+&xW?oyVv{2NPQ`bSkss-+$DiyZ6iTxOcCX9I2~hHo3_CqG^UWH3?s2| zT#?8jrYyk+>;=l20I|f#x$ek2?DW_dufYpqrb23pq^iLS%aV!e`m|Mf+i1pj&X-=5 zMe~zYBY^oa^4c9nT7>8|CwKRXuU*Xh2{aqHjb2PQc} zneA|z5ZQ=!$%2h2F)89MPE?8!be%c$o1;I2k7kI36f$gC0|t?#Jm%aH!(Z8jU=){G zL6+iJi3RXkWAjWB=^3+3jHy3Ej!L5Vq3Ei!C4k#qDm;I{iZS_Y+N>cFo`_Wlc^O;* zBc}L|ZhNmytA6J6eP*?(@ej+sk2@G&QiNp|RvK9!r-ii#Zlgx@3mvA&J}B3keVl}u zwFv*CjwvT8$rIL$j$!`L&$iCrmcVlPuE8)=7*v^MjFii05(A z3!cTatDrC^PU>NM0*q&0w0PTkt#mojG@-?+G+9FP=Hf7 zyeuO9<1I4%_;?g;*S>wl@kpg3vR#^4W(G4{d;$xOOw|cf9 zL`dvpfBHlCUwF?2eJTy9tuGRg6)u5y`mL+PU28F5*eVi9bM>l9+=*Oi!ia<4o0L;Q zPDg!`cIV{+(5y)Q(=bwjEP#la=VB(AJ!P~g5Im4WBHbAd{l?h&C!wr8`ygeWe##i_ znckV`Qms2EJatX?9j}BWAvOE2(!96=mR=E9e_&uRaCZdTP*8AHVg0>pkSIPpIxsR^ z&_pp|{W&&m{ZYrjB(%f@gM{XjB2bw*_(X<-Fv&H;1g@WFZJkU>D*)bDB0c=b<;$;nW-kAKidye+jOO@gvWx2bwLA+<$`FgrN0hhA?oHu6 z@#~x)Xd|71{l}b<0PlEwTs@1AJt$phZ_0r7Rv@?9q0(G6?$J&hz{95jY=fiRCmW;x zLu=@MlLpM*lk<+&cmY$XFB^bl&i07M(#F}6l?urt_>Dqe9$D+|Ym34QNB|W35an*O zFJm%`=95NkM~5&2y5J?EF_whreBDFhPsOoWMW)aPTjO|q7 ztt`!HBThUg|v6RivxGfUN`Qyh6?CO>gG^T^qF#h$Rm`m(Wzvs z9$sXq>gW>bOMzli#SKg^nmdVLzA?07%R6&)YJONvV-%5(YdSgUAetgok5)l=6z+a{mEA@KcRU8JkFCqK3I* zE9&1!8dk9KO}^+%wgM!HKIr6s!uurJOW6;%|0I4c~TFzO!9-?kYXr8;7|0HedjL!z(D6nGz#PHj@EvNTrTg z>bE8mcFfmWgx(ZGCHaS$ZlJ3NqU3#3xnSRV$_MYUfsI;Ak0L#cj zdE&IQ#lAA*wcfDdITK^d&IdKaeW0@wwOK}Ipvg8-M6;1B6?Zv%mKc#42;`sWA~JX1 z?1!WCHLel_U{nS6NM$dc>63q;v#dYrwz+zElBact+y^>$R!g5be1xcHuINO1JKt~F z1CU{pxfNgo=_?)ome<*uH_ae9E-y}w#yI0hSdxxeI|d*WvfzZkv;JDAPrtHn;`?FL7&he zTb?_@1Tv?q^};#_Tdkz;e7siy_mO^gNuzPUew^-jmq*#fhflZLHQ&tsfl@iKyvqf( z?Z-liR?{mg)zgtR@IT?-^nWNlNhDu@j4ZJ%QUN2vbnS-U?B|L@VB zsQ=UQU`{1?`nkb8RF}5f|5@XHSA+Db0~3LMO!0e)E0CNef}9y%A9q!xV6%am8Av`M z`+DXcAT*JBG&QoGMLQwfwKsi9iyhb{XSOn9JP#dms~CFJLD6hWB^NZTYEGF>Ll+BA zCYy*H=+(5TM0hfqcPXe`%f5GboPX3w!vgK+xt-$)J^c%)z<)bw)VKU~BL{1z*3lst zA%*2U&&}8178=rGm(CymYzxmCEG|T!l<{kVV&Xbfp*fh#bJxc+!5^Z zZmF}dK>OCsk?^7&ekWz|tBI8!Jl|P*WZGJh_2XG~ktSKMLvc8SUA~iDhTztkP=UR^5M$yb*^wduCW=QKUzbW|O9$}kyMpoHpkPU6txk+^@Eps z^jB`dLWvXCeHf1<s26!g6Ib7sQeg5Y7aMfd2x4BL#!g5l6lZG6rS4P%Y2a zM=M^{W00mBj9Ti%X==WCg8?@3*Ky-^0puCkhQBHg_I_wP3KW;boRnUA%yas}8tvkf zZw4X{d-^*}`IBwpyg3N_oM~Qb_g6^;&uJ-kI?auCxBXBaaE4u$?{`6P z7!d$WGW2~&0oh;_nTJ}%fs;Zsn(}LsrrIGu55MzdfMG5Tc1Wzb4?9CQs;zYAS&%0- z!btTpJrJ(1uX!J3WS{|fNK(KH-+%fZDiR@BM%ps?g{>%ujdmd+|NCf2y~gOIfU?)i1t)V222t*QI25YU6#2r2#N| zv#5!P8+L%1chGsfHsD3dHql!uhVWtV#Tdu&%M?(G@B+PRZPD=gn5;m>(pF&ZCp=TC zqfz@bihB#wRJ39vbNM4%4z!fPLD!{;wj+d&>Uj7DTA~Ib$e#NUcEn!WgJv*fg~X@= z(@RfffYmQ0E;RYZtJU^GlScKe&;f(=`&kENIW!Y~&qGL;uU>qW@0RorcXm}k|0)R2 z?M>hakp1j&{^2dk4j4FA^#sjl((S(IuiUn5_fDg?F(N-yDQocm7Gi$fwo&}Nvg}NN zqhHIAzYeXTkMS&&!A7(5LGMP{>ls-c;9=wBc3mtR7zy@%Rd^gM!zBsuE(GA5n$IfY z(Vmfv2R8?B{1we+RnSa}bf-ScLBIklBrtFfCx63JL$jj*Zdm7Yl8g7VHHmD^h?+)sYtt2t}jVIKc1mz1=@n}K1 zPp3Wj?;}f=6O&Rd&p?kT5Cl*;7o({iOQP-)Y65K{g1iole>#hfCqKc9Vx~c6cBZKa zZ#3o28gXO$5<Wk-OjUudKdLElOiGuYwxems8Re`%E4WB`l-BxZA)n%MvLk1g16S zjvZ(w%^3AvUJeM8!jyR$u%1>axM|4&QTa+3iVCEV9EvV-Rtri~M5A{Cu{+C?)T>YL zkuQdbJDe}7k_hGx>F7mQ;UYOED{iw6^?MAY5R;#{FSBLSpkzZ!_j0U6Zjm2{-h-xH zk?+@Am%@e>Ue;8EVed6m_bhKR^p!=@~Ts+5@#*POw>JZv?Gp!)%hKTEIbuW_WZzb`PPr6 z6E7VQ!bu{CC?h^3^meSXdS6|h#)mFe&lw!hzJw$XwJULvzCGZvw|s20D%3g|bS-GxZ!!e`N|XUxvfxl_sDrn3m461{8wyUmJFA{vP+iH(PR&&s%fA_myf7%9qez zVfL(KaEJG;S_m^U^oAN{V0ml` zMqaQJ-}|{a5~GX!Q)D_2dYJ@AokF+L*;E1=9CUHq7ZEBO`4rYDt-D_v`F^j?@;!sY z<8n4#YKw^F8&kzbYfIb{<|sG%OcbD+&JR z`4=C`h!U`>#yYB`bZYt_nc#$!M$h1IbHUsBKwt(FYHbX~61%E^jwjFMJ?(Z6;l}g! z{zCTGu~HzZB}9l~KaGY}0YhPbNW`jfaPM(LSk0u4%c3^qS}gwF5Eu0r3+N=U`{qMs z`Y`r`>=!yPf43eZbLGck=uhVJ3cyW_ZMU_G2C`6CAzPx-W2=scer z%gjSnEM8puN9z(mc4g7+x=ME^QO?p?9>XZKW|hK+b}Ox!(3VVB)DgkJlSvIGnQI}S z=j$toY38qC>MxT+OK+m>B(j7Q%wYJLD{L;s6$D51I*$W>_2qT~e9?F-3(VMSi`GH+ ztwYiC!_K;`Wa-RoV!s5Yry?oZDfL60c}qFiIrfxp*bYm8+%g1iRTChIUErTI&?mOD zp98V_lpWZm=N>2>t_PLl=HcaNj~!u9<1(ue`rAhtg%}{nb&l-ngIC;WM zP`8G_N~>$Y*8``kaOP`Rabaw=FAfPbbW)>(Jv0a63Z!1MimVk@GK_oCxwoW92xmi2 zv5%Y+NxIwczfvFqi(G7XNPpC_(bQ!uqTa~ghhNQPj$6MmWKFOOdZgZt#QguAi1c!< zSyz|q_zRXMd6k6^AIlU<%h=Oy5;SJ;X3oDh(6kwLleFJwKX~!f*CR z+~u@YEfF>B)J$Z4peh4H)y0y*T>SZ|JM7R2ml%QBgnWv~g zFWf#IfSPPlHygTv8k1I}MX}>a0wOe*dH0>CcCvo2Wyzc zvr>fH%rjW@+w&hCzr*Y^fdDTAm334eFHVz)h^Eoheo$-~lK#MyV6cd--zPWpK4?~` zx+h?IRnHy6_4=9v_VZ81UdZxxn(r8*=T;yqpp6i2v)W9$%`7m!ZtF&cMMzu<*^xx1 zns6hs|AifnlSx+E&kuql3@^iS^Xinok}h$`2`N7F?eOsWRVX0}FngM-WY&ey>|0R{ zkNp-X55)QgR(sirWk_+6M)%qloR%AYDq50@SMVNo@<-N`-EAR1%vu~*$p#+OfXi}2 zX1D&A#9yQc2eF~aeuyuH73TVBpv8c^*C4GkiC~oH&JMe>_!)@$yltiDr11EAvg*ZP z;rj>v=T71uK(oR2!)sz6h+f$@&}r7_)_=bzfI0u$8~+iF{0AbKt*T>pE`sPYT~iDF zyX;TLyU9o!2nhit6_pKPnY($#*h=QoPOLunhHBXN)Wj55opMRbMyUC6gPG}cdiDgJ z6CUo-2gjQ)Cl{~sT)OAH0N9k{q5UvV8Hm|$hUwIP4YH|AcLyIW&{gmw8KYhhc!2V+OzYE7!cs^!<#xC)r=*0H-|IH2-;NT9HR|w}=h+-)^uCDB!_-^GD4Q*`|Mh_gl23h+FfX>Ykk~6ei;j zH4{-f$j`zM?Gs=4mrxQ`hcg`+UumgiRZlU+FNGEr_&;61s)5>~g#gWsh|9FOnI#jANSiZfJ@8FX8L=e5G<`?CRD-O^W zn@x;=;7(kC8?U#Qr7u?SkAvE6K1$&&Cg_eu-*vY}{O8XCUg-ugwT=Yd9cRZhGC*Ll zq-JWK>}pT0X1*o1`szEmj+x25jv~?beZi6nvo!a2&nKvWT-9$93+`$5r3I0l*rSwp z^KP6^*1cLvrCP$Z% z%%E|5L_YSMb4vC21eXDwgBulB<6qH&*k9QE_;PU>ko2$z-;!~XBGvv)58=Z#PNmQpkAlh^+WHk^_|G10p$yxQQdYKGGph^46Q%uV(WLuDMbpJKA^`gP zF#?ffe)?{PL}=B}lkP$st$%Nv;HOa<_{bT`dp@EG+&7;5cE=CU2`S732C==1Aj4|_ zDD!lBjnA(IqLh2mVDa?rPzj7~qBD1*wUi><+qa?+4Zm&5$8h*)eoA^2_YB3*gvv2ndc@|cjRpIIYXBqum3(stLm`wweGQDV z4-*LnIv#=YBX)%eW9M3D<>L;>pqC$n=5-7Y$i5;zuDY`ZY~J{uIfEOK0#Qgpt18gATPhf3G^PuCWBm3ZhM z1W6BJNhA*y{H~8jQ$E<}am(w=z`@f)Rt4Af;~8Jhfy-}v`ntNW|6#sa82)2FMFwSJ zVo9t6`{8_Ju2-+O-ty}0vX2W~ocNwJ)2T*K%?!T0{;qQ-TU>%+kPC)C6B>H~bBLD!s8g||W@L9@MZ(9@Fp_oJ-i|@YZ zFI)GQ1?vv>DfB(pd?8O)g59eSuY{B7@b)EcM;nmjeV3nk&sU(u+3= zk6oT7_7^Yje_y?@or4v2vfFiwvw~GylDB?^Khxu-Y#w@IFRHuI66>DbexUWvJTHuv ziUBGNM6?wqyvwnYYDa|q(%uO;P$c{J;CroJHf`}s{Lw!)TNm6d#GF!7j~%l;oRG3wLnZ!6@CGPuFfInEiV6TB1Ur>Z`e-$kqS&_ghmc zr`)Zbm($&DfR2SJy@aFJcN*-D!Jvri@&g`qn}in87-7Qw!h$2C)x%8d5QXaEJgYF1*iqVG@*QJ zd_qHRoODj15lGo%NSyYOHaO(_@o7Qg;0SIUuduqv+~mogCd86obSqp$$)Ff8sR7=r zcZ~$oATmcD>Mx=Da$XK`K5;l79NF1t)aKT$(+vtdPc(QpisSJ-p`-zsSm#e3gyoEJ z{-MroY`BLW4=C=ZJ+qWiI^VG|@pUr$=PKJS0Tkh#ca@$hF~(*LIKw#y(Frs0_!icI zkUL^v@$&;}GWY}!{g?353c58~rT`J7_+m-xJbzTUt!m5%G#%G*Xim&*E?Zb5XQSJd zmI9gdwqLnA)w=C<9R-aJ%YJCJ~bpT#1n*A(w zi@%F+|Dut^5A>$uf`?V6sLUN$N3}fuCS^PihHTcg&o4s%OaG9t=6SjX@!+U9z<;d( z9pWN0trQ?J3^y>L%tPV}mXBa4+ehpyKKjU08VpzQLnU~287j3>GYTd(rVx;C} zs#HR;WJxABZ2DQ;+V){nxn()Am7s2sy2#+Vo+oDvIwuLFqj+lm&`x_Lyec6PN5(K3 z<_|Vv8)ISaXx332VW0%35er3tJ^EZLA%G5n4(_?!@Z_)g`=Yz&*-2q^^Zzg*O9ln3 z(?`e3euXb4oSo+*UjgJjy=U8X=5LbPjtkQ3=g)z#Ow*)QxyPU1{(5cxAL8Dzxzp%v z(~WK0PC7O^wmaz9ww?T9+qP}nwr!(hCzI!y|Lk2;HT&IE?RWPVxNBW&UFUfm$*S{^ zV+sRAL-yt1nXMwm!+0sRr48 z3@7bqi8798kf)ONtrm$#pAppx;&$5njZ+uv)}cq_tqI8vtKk4l3E$Q%CH#gX zCQIboVy8S$s2)#5KTkxK5TaNik$v1blR0<;*=vU6XYFhO<NrsjN?Cs5xks3bo(WCv?L~L5Iyn_W5HxG+_;So2OzbJRU&6Z-nNj4>r_o(E%HX zD{D*AN^vb=AH9n$Y{~%KyM=2qYfU7`)(G3u@?jjbi^&pW>xoK{5p;U*H=zyktrWbGECQp4Pgs4QUA4@YoJ{g-gG^5AAf8^iO4|NCXH_u!y0%+SlX zHj3eUyTMedTpG|{l3YP(&I&BDk}VpY0km$9N|yo=z+ofgtbA>ql1vLr&mk3_)`+7Y zqH|Dm)8AGuN@GrRP<>!AbQQv9@6Wt0)y$aRjI+9@$u3T>OoA!_WM>VEsw|+OTHH@Yj&HRgA1TQs;@N;dt7W)4U0qE&XKlX z`^>|$SwJ{SLmvlr5pp+S1@R4Z@Lf#~Pb15c_bq;z8YoEHTjwA$dDrpmNmYo5l+9%? z>-}c9t6plb$6-QLDUMNQI!#bTPXKpBPxz&wu}=pkfllfZIYAL$_OsoW%r;M!Py&Ze ze)_xk*#!_Wm5Tfper!3P-LZW7r*oZM#F4@kMUGd0t!enOI=-BHm<@^7-R)f)l6%b1 zLB+%~Y3rh_`P*Hf{lVAvS=V|O@7q7`rUVhutTYgcW%Jc(d|+sS+BFJgBp!>DPAGel z3BdrtFKzr9UTE*bk(swz}_XFiZ#k_38coriet!OB{bIK%Eg~@ zORFeboGC5+G41VyrRM#RmbFDGp1DMcsrs4Tx$~L>JFrkf{R?sZbHgA$m?UXy>0~(M zl|TH=kwSMyJ(55(F+_`2NhOHklda;_&gJH>w=3nnyw^ZtlM|5N1`agBI zZTy(Skr-FXj_IfaZhmHlC#(LX=U#B z&X>m}9%O_{QM_8l=)RQZ13R3yVFXBARPl4MeZ$wh06N;@71l zrf++>s&Y%`?~;p-4@iOI)Ijs@{Ao)I6xP-mWot=qL+#S#`1@8RWk698Ql4UEdA;_! zBd?nO!Om*+PlQvOV-0h2{s*bF>DuZ!E7_8PPq`(7{Lv88DbrAs;z^YK{j~S1T}q{* z($LQslDd?B4=<_+(y!>o_TD)rcdq66qEg8`{q5S9!e3mbRbPC8l({aIEG<&R)R%Jg zxgR{?tHApKYbwY|9RL;V7}Jm%!mb1u%V;jY7eR-3^lGApvlmCw@qhhJ%*&$D)Hde1 z@Dl&2|Gf}-&OP+xF$798pv4qt|Nfz_5TC-_;(@%!-_EjtMO%UNOra#XTn6#R9ghh< z6_0s*YCW<0>OV!DdUnm|%KNl@Ld=F{?{mX1SJEac4QWW*q>GP$8DkKB7BJT6BY` z<+9Bes~DFzW+ZMFV{^AoIWwO_Ln8M+o1-!U(|LO_n^#MnS5y?!m{~He-!nzG!hs!B zyTR<^s8_UKW_ns1n{-NI^rQsf`$qzgLYyAQEi%m zsg`nbt0~n(a(4d0(-0vNDuF}}(nJbrI5un%s0Q1t@qcy;m>6DgNsFtTJ%jUHVk;wR zH8BJ>oh;CvoLS%t66_qAg&5B3vkpi>1&sAVw&)g@H)+m)_M&2ey+*>>Kf3hAh{j1Us#sN<> zEJ`WGO4b^Nga=j5`Zl9~#&S&!`qYd51opsM@Bk8@3@}9J*r~2N0#5dya_lILA7fd@ z_O0=w@`Ry28gbT016!==AZk)<&&$of6hyyfZ3a?<=y%k2arn29u<>P29plo*o}P;c zYt{O3pFpTmC%3d%&nY}VMvnUQ1O#!OtFe7u`b~g!uIof&e9@LcanLXrLN6JjM>thz zQ~?{u5iyu01;xD&7bBYWBppqab)i^0LVuRhv>Up6IC%=n?ZABdiZq`4U8@fZhrL8@ z5B6@pLTW^Min9pu=-7erNopvG<3r`8)i8dyn%PA}j>jis4VP$FT>LrTK2oDOPqQc@ z1#=4dxt&;x{_r;8(CB3$>jhx_IOVBWTLIjxk-OIJK@V$m6|(yAbjfL}7-<$V91IBt z3F*q7tVCX=k35~4r3o(>=J|6)(Hnm6Vvo~ft4&Mujmaz*7Y~0^w=hJhQsYxcz2FM>Oix10LP+Vs3$0BWaE}Gfs!^Z;dBf_})gsBEt!4x(S$Skjy~P?< z{SH)jb=OSE|{FTxFdOmyw^0EarKr;~=I`Mx29``_1}h zosCG++suGp`#loONNT z9)PA;`SMh%sM}H_cO}~wcHpkzVDKIudUsEv8>{SPV}9y(;zPB>e`gNfF zej9<*$$dWB9kSqfpN5{Mqz-h`Fs|ZqAZMDmO8m|))(Q?MO?E@N6F#q;P9kQE?VZGVOI~JES5i<~Y@7&9 zHY7>m0IeS@HVcIxsjq0SEDFh)9c67%6)9O%*9&ZCKsUrz%FQTs=QiLZugsK{XItj* zLrPlAy#){1^|zFii04({a!7M-1~9T%@I+HGdi#Q9ft!`27|K<-QigC^O%{^$C~h2J zgbW!>2x-Oyz@uR(FW37TEC!V-V`wi0(S$N6B=B9xB+$({qvp$UF!~FeTDheD>Bwb$ zEK=RAV{2IiGAZTm{$*To^yda9*Ln@kvRQA!WVOC5cHowAytfnk2r_ox32^Cnarz+z zi9bAyHI%z!K**Pu6>57)7%a=NFQq#-7m??Nlu2cSJw3bhd06AXNtIO=`_UFYP9qsL zHbK>c91}9|N!LCR@6~!1aY{d?ij9+{=NNYw{)E45%)5D~0xpW4#I(*kY)Huj^ooDs z6L10W5Rv2sjXQdQ{vQ(@y-gFwNwoTakk5D-^?_cLBQUu=t2_p7ZCT z(--_Kd$GN)W*6BLhD`;w&E|#wPf9EsmlD)*tLk8?wU3#0or-aY$=Hxbc6Z{MH@y!!uDzss^&Gf#t%(XR_vEO`_ z+S3cRsU@}8`UHeSwCiyNvrBdQM5=nm`WkuV`74Y2rc{9s0H}q4o~3`otAjQjz$`?m zlM4o&x7b*-3o|&b^e{(A;!amGrOFp`aagr=1ik&M#xIl^D1{i*hVd9DA@_GAIFZC zmLAN@$2fVUZRX9E?;g>1Ow`O0k#l&i8aIn2={=UkHvs>Jg!dVr<4OY&b8UeWPU3r? zA#-fM3H9!>p;KSHdk=dxLlHoVkI%}HNyq-ypH-iov-ny(YWhG*@hGfA6z%3f{-`8j zV_W5guCHyRzPmC|V8bBg!-0Jpzw(QEmZ0vj%^^j2h~92CqxS`En|I4%N8N{U$F8TA zwW1~=ZKyuYn_hdX#720O*YoCCa{ug5mLzBaZZI-f`{w_#^&v_hA07 zCss62b`HiAra(|?fZB%5h8U9f%3mZgU?qXk%b*nu>RoPg6jFO7O-X`zuw2n~5~(;C z2K&$FthKcwiC_e}g42lBm9;dMpXJg}C2oW|17=SZhCJZ85WT~m2*lFa+J0E;3|tk9 zaV4c+qiC7(yGg3erSeP8A8%EU}XLrKqsU9Ie}AMP*{07?b770!On|IAUR5A_G{Uz`5x@<_I49D%7mfQ92< zD>`#5lGyY5Tm%qa|D4a>Ffs>3mgid&)${S%aaKnAR#ChjrObX+|tUrWTJZSDk zA=R~+wZ^X?+nr?iNMq_>pu8E?*-#uro}_l4Os&}<08DZm-#!}1+;Hz4I*IW_jALuz zDBD&%W!Z6O2ndP3t0ggMT<8?TJu*>PCjI;%S6Q9y*=+q%Uk~ZNU6Jbz^{h>!saY|^ zm2+8b@2*2E8jU#ijq7?G4xR?pCY%~9xXNb9xP;Ty>VI_JL{W{nUG-HJ`0f54!pes4 z495)>fO1-;daCA{>(hxfF0Yw7RBT2=9s|M@zaNUQcVO10S^RW%DVy{AJa9B#@IOpO5y^qS@4V154y$!UX?x$jUnYSrJ2YJiR*W zL!;4cZx<(*J;Sd)EJYqi&emdf%2d1d%jUl(04z}8k+)XMY&{Vv&D6)a%eO9Cd#5Ov z%_`W|+$p@_mRu-ot-}@U)PlX2$280{XwW3qYon)V8;fGo`A+jY?fg^`_`_W?-j|%N zlWji0XGB^dgQ;$7a?2+P+qo{Dpikyp)APA6&%+nZ6wK8@HPfv=f(1ugcE|Pjqt3){ z0M4JGz`qOL&MsL?*b0IN=ZhSN%8<~C9@TJc#ND>DQ;srkd=1f#%Yo{YXE1Zp|HM?0 zfPNc}54>*|e?dHpu;t91oGuN;Wz(&wMD_8f@&Ue&qwWqtWw^`Y+-=&eRhy>}Wjkib z1|&NMGRH-n28 zy?t-8Cu>X0&{JZ}&`m>C!}v_;y=TZ$G4*yXR6}%DPM1yW4k!=j$&Pj4o0OSKdqzf` z*6T*D!OD;uqk~~G!HZJJt{$cbkfMix_SBxB23p0iAmIBMIfby^VD#0P_3*IB0f7gS z`~7L}NKfB{fz(ih!1P7j5iczc@heE&|Ae-WeA~$j#J3jG?B?AsU)< z+q7FZj)=KOf+_-sq5UeND`tvK>e)Pwin8hwU_x;aO|iC5l8|Nl&~ji;bLURAMheWm zqf|4c$XV*SY@>93g_HBrkJMec0FYSX=;M75L{Gc^IZ>ct`5gNB$o*PcCp^WpzfK<8 zMj;1(F=IjzWa|(S5tX@6avds^yA{RC{LubcQA_2@&moWfo;b*b!GE#P`Flb0CbVAw zfzC0zDhP%lsv4WxM6-%+hQ&gs05t{lrO?TkFljQpN}8%nGiN)7D6I!X4mgNy8U7M0 zgBd~sPXF`hzTMfluBqI?Jcd6iL)*^aK+uO-94muJZXuxZVngIi|0&s}L4Zf${owPR zZ}sfAb=V}hXBlFSKtO6&f)HvTZ|RCO^f(SrD5FH4@I)}=gGG;11zXvLWT67!JND-G za6gCaT&ALC6(wqd8eZ$J2Y6dz9UUZQN2nS&V(+J)J`&^!FP>C7P1I71d?C=A*+d5T+;hD6r^BGWAY^aM;-(KTe#1%IAbwl; z_G!WLc)!18$xopHNf6`Cs5Sac`k$uu!(^?0M?HQZ(D1s2W^kf-tA+eNJW4&2HBb7U zOq;-l&0¨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

x)>B#VY(@qr_Q#{t()l^l9w()IT?XuBH>RYE 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 TT0Buv0U;0$E32}$3eNuleP+*= -- GitLab From 7a8687bfeb4bab04b128b957c74b7d8a5ab56c94 Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 17 Jun 2022 09:43:50 +0200 Subject: [PATCH 80/83] Fix typo --- NEWS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NEWS.md b/NEWS.md index df06e6b..704763c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -8,9 +8,9 @@ - PlotEquiMap(): Add useRaster = TRUE in image() if possible (i.e., latitude and longitude are regularly spaced.) - PlotEquiMap(): New parameters xlonshft ylatshft xlabels ylabels for self-defined axis - PlotEquiMap(): Flexible map longitude range -- New function: WeightCells, DiffCorr, ResidualCorr, RPSS, RPSSS +- New function: WeightCells, DiffCorr, ResidualCorr, RPS, RPSS - Clim() and MeanDims() efficiency improvement -- CDORemap(): Add time metadata to avoid cdo warning like Warning (find_time_vars): Time variable >time< not found! +- CDORemap(): Add time metadata to avoid cdo warning like "Warning (find_time_vars): Time variable >time< not found!" # s2dv 1.1.0 (Release date: 2021-12-14) - New functions: RatioPredictableComponents, SignalNoiseRatio -- GitLab From 4ae74c6e272303fc29b6b1dc9d2bb833f31ad76b Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 22 Jun 2022 11:58:23 +0200 Subject: [PATCH 81/83] Stop printing cdo command messages. Improve 'crop' documentation --- NEWS.md | 3 ++- R/CDORemap.R | 48 +++++++++++++++++++++++++++++---------------- man/CDORemap.Rd | 41 ++++++++++++++++++++++++++------------ man/s2dv-package.Rd | 1 + 4 files changed, 63 insertions(+), 30 deletions(-) diff --git a/NEWS.md b/NEWS.md index 704763c..558b667 100644 --- a/NEWS.md +++ b/NEWS.md @@ -10,7 +10,8 @@ - PlotEquiMap(): Flexible map longitude range - New function: WeightCells, DiffCorr, ResidualCorr, RPS, RPSS - Clim() and MeanDims() efficiency improvement -- CDORemap(): Add time metadata to avoid cdo warning like "Warning (find_time_vars): Time variable >time< not found!" +- CDORemap(): Add arbitrary time metadata to avoid cdo warning like "Warning (find_time_vars): Time variable >time< not found!" +- CDORemap(): Stop printing messages from cdo command. # s2dv 1.1.0 (Release date: 2021-12-14) - New functions: RatioPredictableComponents, SignalNoiseRatio diff --git a/R/CDORemap.R b/R/CDORemap.R index 6a9a7e5..ce3ed35 100644 --- a/R/CDORemap.R +++ b/R/CDORemap.R @@ -42,18 +42,35 @@ #' for the price of writing more intermediate files (whis usually is #' unconvenient) by setting the parameter \code{avoid_writes = TRUE}. #'@param crop Whether to crop the data after interpolation with -#' 'cdo sellonlatbox' (TRUE) or to extend interpolated data to the whole -#' world as CDO does by default (FALSE). If \code{crop = TRUE} then the -#' longitude and latitude borders which to crop at are taken as the limits of -#' the cells at the borders ('lons' and 'lats' are perceived as cell centers), -#' i.e. the resulting array will contain data that covers the same area as -#' the input array. This is equivalent to specifying \code{crop = 'preserve'}, -#' i.e. preserving area. If \code{crop = 'tight'} then the borders which to -#' crop at are taken as the minimum and maximum cell centers in 'lons' and -#' 'lats', i.e. the area covered by the resulting array may be smaller if -#' interpolating from a coarse grid to a fine grid. The parameter 'crop' also -#' accepts a numeric vector of custom borders which to crop at: -#' c(western border, eastern border, southern border, northern border). +#' 'cdo sellonlatbox' (TRUE) or to extend interpolated data to the whole +#' world as CDO does by default (FALSE). The default value is TRUE.\cr +#' \itemize{ +#' \item{ +#' If \code{crop = TRUE}, the longitude and latitude borders to be cropped +#' at are taken as the limits of the cells at the borders (not the values +#' of 'lons' and 'lats', which are perceived as cell centers), i.e., the +#' resulting array will contain data that covers the same area as the input +#' array. This is equivalent to specifying \code{crop = 'preserve'}, i.e., +#' preserving area. Notice that the longitude range of returning array will +#' follow the original data 'lons' instead of the target grid 'grid'. +#' } +#' \item{ +#' If \code{crop = FALSE}, the returning array is not cropped, i.e., a +#' global domain, and the longitude range will be the same as the target +#' grid 'grid'. +#' } +#' \item{ +#' If \code{crop = 'tight'}, the borders to be cropped at are taken as the +#' minimum and maximum cell centers in 'lons' and 'lats', i.e., the area +#' covered by the resulting array may be smaller if interpolating from a +#' coarse grid to a fine grid. +#' } +#' \item{ +#' The parameter 'crop' also accepts a numeric vector of customized borders +#' to be cropped at:\cr +#' c(western border, eastern border, southern border, northern border). +#' } +#' } #'@param force_remap Whether to force remapping, even if the input data array #' is already on the target grid. #'@param write_dir Path to the directory where to create the intermediate @@ -414,7 +431,6 @@ CDORemap <- function(data_array = NULL, lons, lats, grid, method, } if (is.logical(crop)) { if (crop) { - warning("Parameter 'crop' = 'TRUE'. The output grid range will follow the input lons and lats.") if (length(lons) == 1 || length(lats) == 1) { stop("CDORemap cannot remap if crop = TRUE and values for only one ", "longitude or one latitude are provided. Either a) provide ", @@ -525,8 +541,6 @@ CDORemap <- function(data_array = NULL, lons, lats, grid, method, } ###--- } - } else if (crop == FALSE) { - warning("Parameter 'crop' = 'FALSE'. The output grid range will follow parameter 'grid'.") } } else if (is.numeric(crop)) { if (length(crop) != 4) { @@ -794,11 +808,11 @@ CDORemap <- function(data_array = NULL, lons, lats, grid, method, ',', format(lat_extremes[2], scientific = FALSE), ' -') } err <- try({ - system(paste0("cdo -s ", sellonlatbox, "remap", method, ",", grid, " ", tmp_file, " ", tmp_file2)) + system(paste0("cdo -s ", sellonlatbox, "remap", method, ",", grid, " ", tmp_file, " ", tmp_file2), ignore.stdout = T, ignore.stderr = T) }) file.remove(tmp_file) if (is(err, 'try-error') || err > 0) { - stop("CDO remap failed.") + stop("CDO remap failed. Possible problem: parameter 'grid'.") } ncdf_remapped <- nc_open(tmp_file2) if (!lons_lats_taken) { diff --git a/man/CDORemap.Rd b/man/CDORemap.Rd index b49f944..61f6101 100644 --- a/man/CDORemap.Rd +++ b/man/CDORemap.Rd @@ -49,18 +49,35 @@ for the price of writing more intermediate files (whis usually is unconvenient) by setting the parameter \code{avoid_writes = TRUE}.} \item{crop}{Whether to crop the data after interpolation with -'cdo sellonlatbox' (TRUE) or to extend interpolated data to the whole -world as CDO does by default (FALSE). If \code{crop = TRUE} then the -longitude and latitude borders which to crop at are taken as the limits of -the cells at the borders ('lons' and 'lats' are perceived as cell centers), -i.e. the resulting array will contain data that covers the same area as -the input array. This is equivalent to specifying \code{crop = 'preserve'}, -i.e. preserving area. If \code{crop = 'tight'} then the borders which to -crop at are taken as the minimum and maximum cell centers in 'lons' and -'lats', i.e. the area covered by the resulting array may be smaller if -interpolating from a coarse grid to a fine grid. The parameter 'crop' also -accepts a numeric vector of custom borders which to crop at: -c(western border, eastern border, southern border, northern border).} +'cdo sellonlatbox' (TRUE) or to extend interpolated data to the whole +world as CDO does by default (FALSE). The default value is TRUE.\cr +\itemize{ + \item{ + If \code{crop = TRUE}, the longitude and latitude borders to be cropped + at are taken as the limits of the cells at the borders (not the values + of 'lons' and 'lats', which are perceived as cell centers), i.e., the + resulting array will contain data that covers the same area as the input + array. This is equivalent to specifying \code{crop = 'preserve'}, i.e., + preserving area. Notice that the longitude range of returning array will + follow the original data 'lons' instead of the target grid 'grid'. + } + \item{ + If \code{crop = FALSE}, the returning array is not cropped, i.e., a + global domain, and the longitude range will be the same as the target + grid 'grid'. + } + \item{ + If \code{crop = 'tight'}, the borders to be cropped at are taken as the + minimum and maximum cell centers in 'lons' and 'lats', i.e., the area + covered by the resulting array may be smaller if interpolating from a + coarse grid to a fine grid. + } + \item{ + The parameter 'crop' also accepts a numeric vector of customized borders + to be cropped at:\cr + c(western border, eastern border, southern border, northern border). + } +}} \item{force_remap}{Whether to force remapping, even if the input data array is already on the target grid.} diff --git a/man/s2dv-package.Rd b/man/s2dv-package.Rd index 871a8b6..3c98a95 100644 --- a/man/s2dv-package.Rd +++ b/man/s2dv-package.Rd @@ -31,6 +31,7 @@ Authors: Other contributors: \itemize{ \item Roberto Bilbao \email{roberto.bilbao@bsc.es} [contributor] + \item Josep Cos \email{josep.cos@bsc.es} [contributor] \item Carlos Delgado \email{carlos.delgado@bsc.es} [contributor] \item Llorenç Lledó \email{llorenc.lledo@bsc.es} [contributor] \item Andrea Manrique \email{andrea.manrique@bsc.es} [contributor] -- GitLab From dbb6719d648e87eaa95de373112db7f80f7a2974 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 22 Jun 2022 14:23:32 +0200 Subject: [PATCH 82/83] Update publish date --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 558b667..d65a824 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# s2dv 1.2.0 (Release date: 2022-06-16) +# s2dv 1.2.0 (Release date: 2022-06-22) - Cluster(): Fix a bug of calculating nclusters ("K"): the function didn't use the whole data to calculate "K" if parameter "nclusters" is NULL.; Add missing output dimension names - Clim(): Correct the output dimensions for some cases; allow dat_dim to be NULL; obs doesn't need to have dat_dim. - MeanDims(): if the result is a number and drop = T, return a numeric instead of an array -- GitLab From 2b5455510367845f6ad780e758d482f42fa1912f Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 22 Jun 2022 14:31:27 +0200 Subject: [PATCH 83/83] Update pdf --- s2dv-manual.pdf | Bin 402805 -> 404372 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/s2dv-manual.pdf b/s2dv-manual.pdf index dab70611f5a50086733b604b43015acbc0240458..2b6da42257033ded7f67d7307378f372ae3a10fe 100644 GIT binary patch delta 282422 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%0ARYl0^x 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 delta 280821 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

tKky> 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

l{!b) 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

p@nZa zDI3IZOW$5?ST67Pw=B6yG$3(8oN4t2zX|`7)ION3weP6M4+JW1x6lj@6mRtq-h;!` zQyGh-?}@bWU$8lBk)z@qk;qaZA%q_-^_UNXmbdgV@B&o-Gukl!$7=r{yYCMmj}kEX zlcE0kNp+p8A)Vx*=`(rp!5qi3NzC_9rmG7eO2}7?By|AcpT*Y|0JhVzbi%0Tqm>?J z0wyr$?kl#y|_2JJ^h)=nxn6$a8$)1hXdi0Wg?#j;fo?RQ{l?lV4zFZ zQ?q{`$po!tPP7mns;psU4yR{Q0l1uNeRX3_Io%xuL8%DCbsJ3*4 z&8tq1@4@T&dr%fQq+a+GzOHX$Iy}($v*uxrz^?j5JOb0`KL1DO@+y1h=ep1To`~1D zV$}jxSL6XXMN-M$d4P^H;pZbX?N^_7tv-)yK5f%#tfgB3oLh(q;ggn}EC|SjJQr2? z4Sq7HYok7B!F=Ze=|9xD0Jii<`xgxVgL71Ao{q;`P}1cEx6p6H)i5A}qBB=bw*-?g zcCrnFmNt97ppRH+Qq(3cDsqxyt)86%?i;W66Du<5!gV`bbWw`n`mG9M^J!c7zx{JMB&*)6tDTziLMw;=jKN~Xr9kmkGa_G_% zxz3o_KS->Qj%;geo^buT&NgfT8k_G>bJ3;Q)b@Ao-+ka$%d{+iFpqdL?D#M;%lY^l}J7epN0@v|zNIb&Gaz={P`if`TMMl|K=^YCwT$)Z2^mNw`u#**X;UbieROXoSoNxX3H< z5J;Og7i0I=RV~@g=m}%e11gjp3Y;i^5DacmJ8`h4@9)KtrTkxme!7$k44F+d`F4~k z5@-2&Eh1kl{=Q*DI@|7`Z@^Y5hJn<3C~=iV;Mp=KbQ^azJC}eqVB-CJZdaPnn-pEV zzx)C|TI_{DPBS2qPGz#9XSv%?FnIaOYJ7C!FhjtupB_8%Qf|Asly`aTW`D3prK9&8 zk%W`ZP%O^gV$cN9-b8MBocU2z*q9YaO%96Vg11w=N(xur{K^PwZ9hRQB!Ere-6dEgIHk1$9y?2H6) ztu~6PFo)!Ds{H$B&{D{Q_zx@7jz{2X6~yN}$E-!T@OS_~+^^vzg<#jF=2kzVG;q_E z%yo38Z}1P(s0iA8ow;kIWL1G;Nyp&1&Fwa$w^X1X-lhxeSIOfkD33D%EEJ|P94#XO z&T4Z*`@c;%O-3Yf34RZm*kvdGqg*^Eh#UHW5qEZi$OE-^GRKy=n9f+9YiXp=N-6iT2 z9i62@SmZ=7d~~+I7v=~#7tQ8}=Q_(B6bXZ3Z{Nqyz3h<4n!6-$^2LUN_=u4iXJ^I= z$|2+mQT7Y1*bf3n08bXXH}WiYuQBy0VB-q1HOUH46QG;R9WVFp>*0w18YgLLSvnf# zY3Qt*%0w^_BZXS!*=*EeS|Q&n6#zN=1$SB**dFq9Y%3EsMdV!+_w}KKR?9l3&p`yv zhrsc|`wIKOD|-BoXD*jLi9D8-w?E3%wZEd3@uok*y*uhSa+GF2xv_GRlOE~p8d|%I z?a~uKe*{#cBx3A1)LSuvQ2w`pw+a|y1&yO|wewya51a0z4*REaJD97o3*P`kJBnxdSN z2QbY)M3GxR`Qcmo-WERq>hyMSs>;(A803`z=rEKlURKd9Mwy^opsA;`XDl2b7zM+# zXNeWT!~YC$(?nkIm?JE1c~_^FE$b>z+R12Doc5Iwp~N|&`NRtqMeDFFb~sD6*G~YA zX}-Q4*Hm<3WNiusMJa=6?-AJByN{YV`kJ9nQ1OvO^|Qq^^J{`Bg9JOxV9;2hCtwpw{%Kq;|WIkOPmTVxiaOH`LQiZ=A6lpHuvu zV{eo&5+?#lT806mCO+)K@eYMH;vUFo*=EYXzdkfte5>OCKw(DtDSm_?s9=mNEX*ki zrayjR=Kl_JDK@>pumF7sL(nFoaF5?jh`-WZaMl{6qVoFLz#4?P1|Ie#95OzBc1Pk` z4v9lH!I!8p2e(&lURNRxV&`#O9-n(5gAw;?y!fQDC?31!wb+cy&Mo-S`7_QSS5X+N zC(omX*gxuvv5nEsb*hBdhv~uT<7&4B&f$cauz0Y-Gt@}(5x_$qYxsrR*Vwsb#y!Q- z@R4p{gj0*c`PMF|ioyv=tr@Ggxky^rpNy$aUpXeuNB>cBQcabl2IWd~D_c_JMl0ne zbk0fMU0?<3TIE*DYkbc7GRw5^BIhET%UDZm~#_UJ@m0?vD7}j(?=qVnPj1;3x;Mg>79s_WW0yS;Tj$srM!# z`%TKCZ8hBg5_A9kEf5hAdC|nqG`T}uew2(5jw@2hDs`~lQUBe8B13$J+NM=h*#$ZQ zFk`kIG6O^x>`JUednyZs(Ug9gyu=UU<=LM$2UJg>KrW^S;YiHBv! zrBb#Z<@vnBsP3N}np~osD6G%a6F0}ASk^FMTHZ?UXQLviT>!Acq ze2K_zC!&FF$otUN8s8=jMwS6eh)n8=BTmm0&@ZhP%wGW4%y_%YA&=Uoh+yfzWr=>& zjt0;QpqIj8aH5scfbGL4aG}JOIuivOS~gr~kxX5!x|WxkckRii`$_&jS;J2ttYb$q zf^a~H6-R_pP9h#WZ6w-7u`AJg*w2*)78lq$lb^r2-E?kq;S2T3k@-VBd}q<&{i5|% z*AezgC^QJm2M^_$vMVC!mo$jh(7mTpt_Rq4CX!5Sv{TcOlmESZm7VBOqBo(gVQ67Y z)X(w(@{wPm=Kj{0_AZOA>55}r(U{p2ElE!v?a{}-9nc2?!Wp93evoZRR5d9=0&a5+ zs?2ia|I`<#KHSz)xpv5>9X_E_D4Ls+c5gOXU$W$UBsj3fj8f2ULUXG$TKlen4F?R6 z%k$&ouTKZ-6^B9ktd5ECf_nfNFs5d6OyKzxJoG!SZXW(QYe$Yue6YF z@m_@_FGcj%b$|o*>3OXY?O_fnn)m;NE7M&~-2-ZAq6gF`8hLq%3OFPCkFa zD1Ah0Knv=@Wg|w=(WjAt|IuWCgaRsrw#1GtrX3Z1+{wdb=rRO`5q%N{31}W%5s~|a zQX{;WvmmSfip&LiOYQ$ncrb5rWu7|mi|rd|Q~Xo8m*{1sSoW9+n=R!5!zVtAv|!%^ zj8>j_6Y6L&@r#2#bibW5s;WP@B{@X9V;DW7V(Sdl)|nqdhcsf&m0p83lH@e7ttDZ6hPg$J7;V$8AsjK{swVNo?5qAS%HH z91%?#?Nq5!LP5uP{nll$CLA|blAoCOPX3`S4ABY|Sa%6HgZ6z4?9M226HYY49kH?# zeM(jQ^PUbd1ica-g=X_uEzZjjmF;_-ReW;0%awBOo#hD`Z=V#|UIuV3a637aN_`o* zhM_{18dUvF)7wg8#`*+|=yqL@x8QGTW9(Zm( zCw~f#TbSSPJueaGgMi8Lh{3}Z%K6?{5cFLO@pI#9DF2a&cL>3**BAWU%7mq_!ILkK z76HAnkCTOFkLUgnVqdmYLV{ecZ+9RgMpwfpIIm9^cY7YZZg1Ddms>_(0RzX+o4>$C z@Ww^lqMiQED&B0LISrdRgq9S;&qXC_EH*gxA>E)ijHjMHC4kXB$?y2D6=#7=Ud2SB zBjL>7Q7p*=z(#a9u>+vw2mxlD6pFL6DC+So({+P@vE&;xt*(=ln^hl9UH{{@t8c4_ z?b<`VzH#0%4#iY^Qd|3nZH(m&yMOv#kHadthex@1hQnq-y=2oX6LdUS1KnDQKl^_P>N~9eJLe~XufrxhdpUq7~@6vb+p)OegW7zxuPrL^=Rdalr5T6Z0`Gw)3T{5Oh!)OFPjp4w9LdX_p) z4O%wm(&$lf&vW@xW7c%{?6yOaur>xTHK)Iy13F5R;=0FwF z$qD3Kis@evQ+YcSf~futY6efq+PE}oN~r*hNhW%Q=p^@*RB={e8m%WsWvK53>+Sp- zI?o(666;pig8szGJ;#a%b)JmLxH5I<84Y|E9Phju-dXnn_v3cqmkW$((@SJlq@L8H4f@QYb`xcZq*^mLQj!$pP%$nJ8M{xbaK(4?Tof7c7S&~8jZaD&` zWl*;eyY$jwju?@S2k{!>wqE83Y2b>jYb_)TS}Pnm?^hnecx%aaLefzX`DbZS-2_Kn zj)p@t^Bz2sdt|1%rBOA@2lSe%<8l|B45A60G_t8@Svr9ASN%g<>%Wv2y`HI(MYa zdpJvS;GIu9n&Ye?Vd<_~i)sC46Qrg*^R_aIT5LY0CM?hlxft}qVj8=QRoDyqv*3>O zL|B04Qz$*c%|ck9zQCCV|1RA4RK$n=RGcc|lqx7psV@RZxS7&N zW1cF;1D%(5!W{c0IzLVdoL2$(!QD|&q3q&Nu1{f=+%tRsLx!!^C07yC11Y8vWTTCf z?`b#8L@oy!8_P#2qs&;0?!mffny>KJWHn+P6;89xGb7z}V}i)wc{JS!e5l&>FxRE6 zya%cGk8R4QaV7aT8|X3?&$d!EBy>2JlgA2tdvw~wy0jRIVb}^UESx`{8He#GIcZl28Z1X-~V67 z=6~}4AWSU(v#6T|ncz*1QQ7EMpCu{BM7ZE&} zgdzRA8yt7+(>Q?pVRk;;|8xMv{+~Jk-#5{K*M|4yTe)jq(KJ?8syQK5w4P8haC=`s z!q!V4j%o4IMQ2(UBD3&a{_`i@P3Q5tNb~*ECxwS_9 zgZx1r^5drsK1AMfUz4{^S#U_%^&)kE(eSri`nPRB6%tH`((-s>{mfa@+z)5(tG~al zUE8(*`@G6zK#C`O8wBeu8~fLyIcp>!6gE6fP9*^4$qfq05g#msNJ4!B*bN@Aa=FiP z;}3X~s96^?*ki33bt`9K2;W=z+xFy+N4~{S=5vsi`#VbhthC7xEmJ6k06d0Hhb!A1 z;^z50d6q$7$(ei?EP_ftmDXfTQP)#vku=+r|Ca&`->qOWJB_xx-`>c1@m4uNwPcOR zln@!I)~*&Ac9sT1kOD(-`jNrqhzgi*A!WUc3a2gA&vl@@@Vi*xneTGP%@XAs=xmDV z8Y;JvnB_#AxTICcJ5|1Mm-+BvWlS#fCg8@7Of#k;N8l{`i zPLAqnS|I6Fz1T*S0G1kw{R-HS7 zQuN|_C!~#!bB%~6hxx&P?L0KN^VIBrU~!Q+!D+>A;vZ0g_yg(wVkgnD=kD^bII4&= zK3C`A3d>bPFj6DRp@FGmE_u+_g6A*a5*#yKx!^hyM2MWWd*6T*d_I6KGx^veq<5@f z;blwk4zWJE04F+wx~fE-O#TLmR;nHNev7#awzAZ`lbarWoef%aXP5e@viSjw0n>I3 zjb`B{k~a)Y6#8rFhlEU)9}+V-kkD?f7+!3{O|`Lyt9zMN=?9X4Y~+yl`RbeGZvL6> z%h|Zfvt`Gl;7>X;3}cE^Ys_R;)460;cy3~oOxiJpYs#*5KCzxK2?>Ap@7#>%Hr(%_ zb-22Lk$cI-yAJX+dUVFR6D(p3N$GZhqB!6x^a#Uf0fkUbqC#=`?Pt1226=9N8ePa~ z)H3uFSHFC0SasUcF1$axUxk2S%*u6Ec)2uBx^zmePJ~>8 z;8x?tdar7^wqT3_%%uHQ-AM~ohgq1gT8PZE?Tkn=6Na>d3RU2?iGPp-;kk5ovcn2J+hm0YS{T#Y~ z%tMs*MlPxG$TCdP&Tmq!J!D(#QKlw;kW>D7vLhBWI+07k;|0F{uF1xCj`Ab`RSb7j z9twJHfC+ikk1$ktx-!th!H}`GpkHLTE@++zy$ksNpaKxvi1U9}0r-w-r+L}}e65Fo z#>C8%Mc)GVv2}fTPG?h=(m?}qG^>0HXTgwkJTW+JK+K0_YP7N8wpySU6J)%;&V2{f%N(=oW+oQ|ToAI9ppvTOqSNlTOEcHWdS8-eA!=wp-dm7>S zX9#!nHbq-fkaPBB!8w>!y*dSV|isGS0 z$w;r8FYWO0E5t*)3>S*&3VDPY)G_7)WFV46(19l936fJU5SBq(JiJM` z_aY4<8FUi$H9dvrXB0pdC8JNsneAd;_wvPV=LV0IEuAB_6o>I<^UzIgQl-Es45|a17=p*}6mzVQgQVP-`Fg1Z8OH^T*MpSOgHEcMGEoy`Hhjv3Am5G&uA$ zw*L#TVuZ?;LiJ5mDXrf34|DQ9eb+H&=So>Sq=P@OJ@?-uFJ$BEni*vS_=|5n@`Myy!7cv4a|2ld46jB zH0Y94NSQLeu7?J$nAaw_l4vOE;?fW4_YYqu${WZK;h0*^J zfemkGg*88gKHpyqA6^WiOLdC0i02PzRdGv-kGSpqgN8Q3a37z0-%-Mw74w-k0x&v===lICvgK-dC=uOs^^j* zXirb@>I|z5`CB$GBPy@_eq19k+0HJPE52Z_HEm1CRsQGUzU}!Ori~aByNzRhW>HFM zCWx0vi#y#}1&llwhi5I^9==LrY3|muWq9?_;mJK%2lfY}d^HdlgnX=9o96u@-hqNa zxJamFyp^T6>6Qr+=jcV6^n85robVZTR+?{LAWVn}U5qy!A1iXSmyBA8;`)aXJ1D}+ zyxPZ-Z5{BtE06+Wt)(`>WlC{dGaW9fn7h#K3{`O6+JI>m!y%hLTN>Syv@JhL%j+>A zYu(^)Se7P4)|vwU2E@RpiN^ry-^NU;I3{7*f5mm8q3aL|2Kndh?{jfJ4j812lmCZ3Fk zpG@jA8@k9H?x!K4EUvJhA*AD#Uq@G_Lz%=(fPFF2hG|XM)Cp3>lu&LJnIxI#Kq6V- zTk%KE5dY%{`7uQk@psAXh2p~C$_F=*4+Huntw)Ah7DO5^CfRxq%>~@Y-I8os72_Z4 z0BAr<(i(N_ND|&(LVgU{tYX}Muns#El8FUJ>a-Rjq$6!IwYWASUH_c9y_?sO(6pk;R8;Kkvw=WYNSHW239Wy#XJh6m7q(Y z)9z~=D$zo7aK}cJ^nhjUtNo7MiTzk*)5ciABSXSs?7{>7v>AojnKO8p%oQA5b!-nQ zebnn%g1vxp2#dkWhFodthXwf+{b<3Y=tg-Qj+TEj>YZ^y{rK2uk(Rmf{wm~_ZiO4Y z0IYOLvHdtle+%-lGb?mN$t$bBZY0P3@}simcG3$`SmG>{P&3tMiNOMvyj=ahL^l1! z%9@}7e&uyI7QPEdN=`NZz#yO#M>y>88W0+5w>-O#l}{5j_ekRD_#gIJkb(!77c0i{JTV|M z`8z$)?P!^iGN_xG)M%O=;xc$Q!(t2fe+JgyjEfPd3zqr=`yXsT>K|P=pjFZR0p$FN zCp6qzoVhCulalqc%axkt#W76@@{Hz}T-*W?Qi@67Z%g*Tr>IyD0Isz`tWJ;Pw>Rh~ zO;Hw=8cpyGe#N~hx}d_uTCTjSkw?=F5MV87(*^(fOL>*G_gBWGT)y&5Nf@cY#nacE z*=$hE@v!xWS1IWGCFx%i`zFsc4mdlrZ0z!B0U)TU8F|Rw*T7EK{ zvp-MEbzyM*eEZx#+`QiIA6aO@du-EZ@O^i^pYBSv*vF=eV!{aHW^DQcuCI_qeZ{bF zzmra^TTV?%-(S|R0bunbcJ->!{u4jf*N4+53M|PpbCvLL@t8b9pbva7W=9%zvlM=% zc?z~OHj^mbz~`B5mRj-v9>0rGeK`WNSz)dPVcG~*zfKcv)b^beI|H$B_5J{J<+xO1 zEEx>%m|sE>3!(V{WR@pDvH8d`fo9&vERcg`ZJt9+o@41O`z!I;M>myfy^wQLn|fB| zr2H}6i?g$AUhS=cvdG2dW5_3DTr?e$MY{b=E0BmZQWW!Lg6AUaDjF zZ@6PG#1G3U@>$)S)A#zJ_(f+2Zsy-Z%*BJZUdTQ2+^)UV!;UbOVfiN}GqF}yEfG<9 zt>!E^BB(|=OK(Ee9FnLo7USrKj%ZBwAoR3@iT4DW3hOjE_bpwhC-X*J3X|sUtOcBl zKg;A_yL>tzk>hRvlBodmLHH^M9AT--S<7F-j#P|4aBNBotH(gp$6BF>>~vWSr1L!A zR7}`VlVD$$-s+TVN~iAYB(GmiC@+%%=GtQUYZU1Y;a^;5h+g6tyFx+Y*~LhukTA&U zd9gY-%^9*`gXU;5tbJd7hpta=m8hNt4Trs1_3UE@F_x!d4(4?$;qdustVa{D>{~|V zd)y+*}_5dzA}&h%es-le);%sLw!V7i#02H{vAQziZz^Sr-JCj?BS$%@nSW8*n9kTef2>u?P@ zlX)63i{gOhrm%h@Yx&B06}`PdX*yky^`3n^2aoSLe~XMBS|gDJ(4$C?*%cCDx*=YB zxqnJAg)b zz-u=razxVEHIC2(#EkDkS;?5?L`#+|bHWc*$dTaR#cCDF9QLJO)_#-d?njY=wblaq z?ZnyU*Nk6mo8f)XwfmYh>e9P>f&GeuUoZDwS2yT`cHp1vAISt{0PmST2mkL#xe`!P zmNQ@Rv5enfY$q3(#Jbq(GnV?a9~@*9gr&Ag&;{Nu`YIamSM5EDCqD)c5iWcg{y@AY zeQAO)9^suay0YbkczI1VB~Np7XDHK|)nXaVWNhyq(?DuGAF3*!F7Ma)v<=Ls$;209 zGDH+pG?e*mz;PG}-n_e=J|nUa#6hIkC?%SJzDC25Fp`aqrm}uH`L!b!1sQ1sae_F$ zb5z;gI6r(ahbfR86uWi$gWt)sNHZxBFuHguC^k0vn03Q3Jqi%iD!9!BK*Pyv)|r!2FOo25K!a4Z9d0YO z+ci_;wR!fyX%LZ1UR`N3!Bx1q7%LE~UrMTYK$xNmjy3QJF&%Aj81a*n7(;lMwcU!% zxlo!>PCKQ8s{HQR(qBi?uG{XGqnCWk;I4$kBx>dtB-JGnv?~(GCtw0vYlwSlstEI zbLL1@5IAEj3IE7#q|5%jBj z0O=+IC+&1flKt9e=rp2(*%awpz!;jR%WV7Y3n+uz-YK<@rfCS%B}0pS2NQO&N)%oG zqFYek`J6`k%%mlc0sbgYOHYA2Ur6Y-+`li%q_<(^vvp+{ z5>Vl8*LfQYQF6}Qa}qI5gpy+1kX6{MY<0#koVzB^HoiH^0X>xzByg4(K5 z@<-3}!DPErGrbt%wPU4=G#s4JHZQ$MK6A{`BYL6f)Mkovx>EIGM`?^`9-bz`dj6lv zW+0OAd?6lAO_*-o37n;gU5I)GY1(za&F0JXq_eA}vMs?S+dmxsOm*El@;G;;fXPH* z2-p;H!MwtG#N5dOk44@2i(0gu9ZJ@_wX!gG)Pj6=_a`^ioYhH(r)BA$(H7!pKyf@d z4Gbvx`lN36t}H@=o!b#kzkAE4a}B*S#I@OVq%&W{K9td&EVrY8 zCP)ZA>`s~l^%eQ|EgybD8jJcXK+`WYc*Jmkr>+z-uvX|jY{SAD+>DR$(K}7JjQfi~ zqlVJO?e&q-mz-`c^{JAW+Tcn7V)K4=Ea6p#M^Y8chuN$Jgm~qvMIUe9NGe!JwH-{) zUc|^{!Z(eRMk6%^x1IR35v})M5q%duAUU%aO88t$_J*@ayRusUh5j8$=OPPfT20Bogw&bK<@FjDuigV{tAogxiJzL6^5#oE%9-S$otF)hd z%-b+I5tB82C~Eg{35sm`!-!Qhf9G*<4k%+;VO2mNV!y}msCW-W`n%;0NcFJ6?l14R zKt;%SCqWUS|1Ca%kPs?EqQGPO&zx`CABzIW@Gg9!awS}KA!w(^Px}I;)zX6qGXtWv zpj}M?H%QnS?Lj%9w1Txg3j*Q)ohwXtPJkr#CJDMl^*NrlD4t0G4GeTRXnqagr-pUUjin*Hz%6 zVLJw5T=5=$#Xy)8FEQ$4XM(WIe`Rj^==H!t(SN1n)uTG69IF}&kofU&ar3E4BUm?{ zjeIGtiTyfa^2U=99R#VTUnIr#)x*mO1P`hSh#V~!MQq(p8jKcW?*Q5`iO$N+`$V%N+c+u!e`>1OIZ$-QM~XW$ zya%m|{_PCv1zh;~ctawNI$fI1)l=CQZEFI-8zkv(E1y`l*Ax4m1*EO%aPWY2RkR|M zRK+(zG~L>2C?cqB6w(8(!cQyz52ypnkq2}_uUqd?045z7FcYKrd(uY~x=%^`4Nd=i z!qsJi?MlaIs1X@kd(^=3v=nVv+)RxM#{Rw35Sq8F(2g`)QI9eB>2D?>{W|rA$v#Nw zz@eoi*g20yNGUS4Hz>6Rv9@MZUm>A$t7ln9@JmATc@>X@YTPlR8s!Djj7SKOKE6f3 zwBV!V3b|k{AP5ql7m^KcL_bpvEh2pN47xZ4hJSHkr>d>vQk2sjRx%C^*_0B(F#|k5 za)|}Eb`KQ;@@51s+V_tw{s;wd8~oUj!}z?#djlelpA@Va#I`sIz|d=N;pKvz>Dk`KE8UTr>-}Bl zN>T3=3nw{xR{tcG9P72PhmRg34I}4m;!&HP_nF|E+{Vc9w{fS59%J#41x7idvg30{ z;o5HVgTye?l3Bsr;E)dSQG{^CHP#tetVy|Tc^Sklkot?(@}^I`wUP=vkKE!Z!1427R?7#*e+BPR!FzRoNqf$#+yO9CGY1ee9*X3g#u@!u6hOO+Nkhy5wTt$; z>&TVQ0JJK{*)Db?c=ZT4Z$o8Z{@WdSthY5`uRBgIX`XNgRRNo#+_uOA7AX`8ob4?& zaum^juc>`K>M^>@w=N`^wgVTM*2N58h>CvzDAXcVe)teLok1iP$WJ^<7Vj9~d4_kh z*ln>?4gt4&=$JDh2%OeKLyoka&}NOi(P)(tdq6y18M5Gvsy#quDedAH{Pj088xS!_yqd8syDc z0BiM<**EZg50diF zX;vR$%R>4`A(ZHv0NDP8U?Sy1Q%5@^#gX~TCv$i>4%K~H_u$jVo~yg1OAfUfZanjN z%jX!`%PJ9G%EPt`PIY=CNt59*kF`1~8l#UuM|)S3dG|Gyp&x%osWe%ytqQ|V z`i^}QsbWcOz7Ed#S6n+xwxMxh>h4m+i9R+h2&mK*Th!2ca!nv^I#EHS!lube(+^lk zJb?pYoTgxALaJV+T)%HV5kL!8nb8Ej7wMfuy-Sl*K$8xDn+xUH^utYPvanc`X?AT# z3{TwTo~qCje}nuxoyu~Rt7=PPEdu~AES0zmz(Vm}hst^Sr2KX{icuV)1jiA@VEo1_ zs50g{FKc>-r!d$N79Zlo01rx1hqNCkt2`5DGzYV}w07(HhlAJP4wyh$K9&Khj-@>Q1L8EJSLul}n4vY>Y)vb}IB1A(oPl^V^67(vZ5l|oc=yp| zS34-o2&y#%HWW|F#WS`dbhcgZ73#2&z1+2sD|R?)hxJmNx1nU)EWHTL@O=Q^*%9vJ zWP}Ir#(3<*25h8Gxb=E<4&!?oQOSl`_b&!V`J=qGdJ_Hum2vA+Re`*`7H=IN0&ZF4 z>$*_JaAM}QEtwXj;R*vQ{OUmy!^{5DoY5TpO|VMUm)=&Im+})Gn(5sIy4fR$LSVt@T>eDHfPD12IMyia<;?>j#?5XU2H)u$b!*2 zJ=6P5BCN1jO66R9N4GCZg}fK0y~>IAny+n$s># zjrU#t0G=iyebWvV+8x)Mhd(S2(5|bN8H?hdO2_HN+!#P`%7u3EJoOsS#_oWBtjAsZ)Vv-r zd4O7^$|h{>y0CEtfdtUfZo|)!yFI*J9btY0f#H+7X=SGU7f!3Y zX!)pPHglFts;;91xP}erikK=J2;kL=i<6%cp}luK%{{k1DxCC>33;LEc^xcFV%ORq zwXleoS5D^u9HN$sVbdqoHe_bzJpH4JA}VgvL|h%Mn`{}nwtj4@n5lX9BGE64=clYs z#732EQ9~D0^Bhv`AyYlh+Zk;un{OVM{2I_J<{eG}PsZ`7^i(N9m)~;n4^TP|Z@GH8 ziQIflx96W`ynPuT@{fkS+1^8mFj~bRoR@_^(=L=zv`a1iZkx8Lk#|29SO9%Q!dkk{RWNM2J!Y%|-w>fYgJAtg%LDU!IN2p-# zU0L6yT>=Us;2^!s@RLCsJ;1N}FDloaJ$@VS&+B$}I0LGI1* zbbp1)n63^oFJZ6e?;L6#@554tQ2Z@Z0H0QQ%@sWQXX8h52|ERd6M%6*Je(}luv!e+ zpd$)34KWd}t$znMktpQ6nMZ&*J9%#_xfq;V4%1%2N9UM|wQ1rF9^r0!cdRte6{+g3 zquMMG%{nsjIr77ujwPnL+EYEi6Y@y*?Dv}YTi;Y_p#4dzvAw-%5ThGiW6OAb0#lsD zFWV(%ocmu#0msaL0Dz1P6`eU)U}%1;m3bVG-$(e#yKBM4_cjRJAH2STwb7MrEc=0H zN8X5}+_j)VvK>xs`53H=F@JW9AB-|ZaWoRy$oev4-u=w^!QN}#^6ngLGFAONU9V)$ zHrGFj3R_wo;(Kezc)pQu7TbyxtHsiEZyK%^*EF2)Y0KO!E>0SsW}e)P#&75=C#tH?4_Dlk~xP8 z*DmPFl}I4;$*N_c1zc$laFRQ{exal9hvaag+X3HsfqSE<5g6w)1DR*_Scw^;F6;2U zboWwH4*KnOt@Kfb{X9O#r8Z}Xu&tY2)xOxm(|RSj`@kS8 zm#)Cd&JraarVBf&QS!i7i-M%EMhD>2<0HL_-rt|v=nBykHZSo3uX~2x4~Q&mV%PsY z^b-`K(ZQHmSqT37GGCdX^S6%yE%^GK+Tm1R=6iL(lP%xoH3?}X_b8CfLkq~ z+niV(Dz0Zl1o7~|TX)LSzXyYWK_=KFUIq&sMN*c7q8nHgN^!_<2kHlPe=A8&D%C<1 z6{kRIRmA(A=#11|G%Hi)KV|zwx@#SovD|tQ7-1q%W`!x04G@ zzVd5lsz<>4m-m|cF3rn|+*VDILYPg^(E^e759H)~wITN~RrO4n2c!ELHtC#_LbF>Cxw+uxqs_Gur$ zrbvH!{#P7_<3B25as*Ch7<=YrN~w01N4=Chhznw9RYEG|&5 zFC+zYEKqP|5UK#Ihz*!1Tw@-v-52k12UT+0CdOu+M(3%aN-e^4dk6FC9;u@2-ait0 zugX$tz1uuiI7?Y<+S~sPXF!<0)r#>0O`i8}EO|Hwo+4u!ei&Y^@IjzbvOsRm)5n$&$>q-Hs=h81WH)iIz=Eh@R-ZL67F3_8`QX5mz-!g&s@ zlFWHnva4|(sC7Gj>#1|2FpAWRVb7ttsnRyj`3Q|~vg|7dXl4-O5byJm zSpY5{sc~m=Jx*}y@^J#*=UxSCaoZs?k_v!Bv-b&q_#?JII(2GS5$HBnld_AZ09-1} z&AAK|szG51)puPew3bfwj!Gi|hpQ(~t`1+N=P*Tqoqv-K-~IDne5TFtywJK$A%@rQ zfBf;q)n}j0XIrhCLn05Gt?FAZzrcQa^ZH$S@+2LeLZ$|#*?;yF8^e7$zQJA_6z2E_ zs%LV4LVpUmJJj{`8yF3i;TwP-zJ7D_>f7sg>3KSQ{ngWScy|5syL4Xn+5djJ#uqRD zbA5IA5*)5yzk5rMvm;*}zPWyT^Zw1N>$gXjwSV@H>+gSf`Nhr8={Z?OkBv^JxooY! zz|dSF|aZ4F^DlJV^GJS zjln>cfh+@A2C@uf8OSn_WgyEymVqn-SqHKXWF5#lkaZyIK-Ph*16c>M4rCk1Hjr%~ z+d#H~Yy;T_vJGS#$TpCDAp1b}f$Rf+*$1)@WFN>rkbNNgK#qYN133nA4CENdF_2>* z$3TvO90R!wdv(Ll3g-=#t=QJ$d&+Dd*b5_ob&df*O4 z+}kD~6Rbn~R{XI@48=4k;$AEt6%#rBR@#h&uOxwJQJ@0~#YD<7yro-zY*ovIL|v$u zQMZo89pxrc87+NlD2ZKBedY-VTeur)Sd8g-X3Rzi_rT&Hfsl^RCxTdMp&5AuvKB)O zH`D|w$Rm(i8e({BGfCu?aieeS%k6Czc7D2S8Lx&Q-u02TLmGmYvGzgKW<}pwbwVsTOP&@VVrsX2;&yIWq%|=2=p|4&`?jB=PkEKBaxZGq1cX%Ckj*%V;^4NysJKvURLNO z!j_`!C>11NEDiqCGO`S@M{<~m7-2_mT@k=_4`X<389uR1NVJuIB-o&|#0b(*Un{~E zo7`F&^Q;Mpy53>#A%ng1lfy*jk98hN5`t~WJajT-6)bxiNTB>yWEpc3eSMm%s;GDL zoaSP@x%7{d@C)QsbW(`w=e$ZKGufMvxIiT=wH-;EDnMy%^NE}AxBv$fU0QE(K*~MK zXuK?sUaSKR0c1pfFIEAQ4A)m$r_m{Pp3ojCI6XCwV|9xx6A~9N41o^rY4*u5L^DWC z^dT084MSlO$n^`HX6{TO5J-6ni_}-!L=v&EBVZ`Qc_Le2ovkz9Myd;?Wa})?+7hwQ zG7JHf2W$cBEKKkaKwUirth3E}0KW*v|0 z4RPJA%vi*F6E&v0wVhKMb2_cr2}5407GS~XsdSlkv%TrbYsqcB%QQxE-d_|J zAIhr}a1=99$U?PnD5bDX#kMI$!Ahv{qFjTkn8{-0A>dF8W%MrPtQLww%wl>Hc>$Nj zmYvXlU{BtH4ON)WjD=l*MF_I14l1Ee{0`fD$vpizHWp_jE|6aFL{OWa zq%-_0a5;d}RnhM#;M}!hpuU zdf@>%IN{@%MG(C}0VE9Jykve7h4hTiXKqt}ZM}U6V>k=alYOv}R%QjM=+YVp8^L}J zVtPJan%|2c_7YvDvMB4@6l`Jbhhe8oj~z~*I*XO3v!fmq#&niH>}9cm#-LuO7fDvy zDZ(jlzKssrD8_!XgC=(mXn7Bl|EBTaE1q{IpRagYY`mxVu}iSGZ)3`?Htkn$ZQi*! zEc?f=7{{+%F^*5YVtoJBW|VRLu8iwiAV1zpC-!`rZEl zW|eD(mqBj=69Y9lGMB;O1QWL+RRq^?0W_Dv;RF=74#otq8lqmOr1OT&)oU3s@B{3bU*#}u3d|gOi_hV$OLF)Dh{**F|sgy z<^jlC+8Q}KDFbcgf!wl;a;7GhfDbtb0wtx0qp2at5@;uC2r}gXXqcJ+L`{tWf2^zk z7H)2C1WJGi(B9qA(%b?BpixuSprxm0_?P4_6M&KXKQ$koPL}3&0IH7{7gHOcy{)Mo z=p)4c*ipsQ6aca?1(;ddm;yu;6t$$}B>*%M@@fDHQ#(^fLmPmivyqLZF+kSR*woI+ zlontHbOhM^;{Y%Q+L>7XRhkpie@84KCx9Wq$==l1^25#4&DhlbFBJp8-qg|7(#h%L z9boAMFn2Vx1AX)W1O!;x8QVCU`~~1cZU+1tki8@D!@~AM_Yq7H=mc^ycC@qy0Y0)S zii-aOC&#b_mRW&5D$r84$qo`5$r#?^#1>m`|lk6mrMNr zd!PS3w79d4jl7}l#{m3e#{fQ-jG-OiW6uC&0e>wTXWReF#n9H$#{K{0^zYUhrvE@I z474%%cbyc-@S`O{cIF?nd}jLm522-#xTTw^iJ~RQ*aBc?X!Fspf4}8wb|$8dHkNj# zAH4qEQUD{%=g|^X3m1Tqjh*G=?tK8_{_@%Tze)LbAeMif>Hb?7F*{?R$zNlm0y4BS`Ixl-6#S(&c6N09Ao%ag|55cn z&wtOnsi~W(F~ZV3(3m&KDm5bwRD+u{^ix!)uZIP4DA>NZUbP_KuL{`hn;N#sU2gDN z9n91)!SmMYK6h;YXIGkTZ=?suhPpf1^gNHqo1C^cAAOCgf1Q(lFMwIE7&+}kBg*q) zR(1nQ`^#tby{(^0%6dhwFvJt>Y>sdj543*dF8O{~6!-QhKE^3^G1whw4PY2GKaNkR z5)L2ksRu@fhX%W^pnG=->9b?tDR~WXeUgsJ5<%_;j<@y3Z_v*!oc3U9qt5o)(n}&t zaVCvz>2hY3e`|EU8O;6km6}XjbJbP%H@0#~>H)e@!nXHCqDs!yhtstZ4p7Yl19QY+ z^|9$>rO?l6u{{sbjUcGd(fxabNzTt4%r(%`Y!x*vG~wnwnBhlYjHFN{GH&d#qaJ*$ z97(?m{A-PTIOJdXjnelbO*?OUkHC3^L%7eNw9-8me=q$

o=g3pLBW!d;O@i#4<_ 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 b_nAk~N^@XEqCywqNP{nEQ#P -- GitLab