CST_Calibration: Forecast Calibration

View source: R/CST_Calibration.R

CST_CalibrationR Documentation

Forecast Calibration

Description

Five types of member-by-member bias correction can be performed. The "bias" method corrects the bias only, the "evmos" method applies a variance inflation technique to ensure the correction of the bias and the correspondence of variance between forecast and observation (Van Schaeybroeck and Vannitsem, 2011). The ensemble calibration methods "mse_min" and "crps_min" correct the bias, the overall forecast variance and the ensemble spread as described in Doblas-Reyes et al. (2005) and Van Schaeybroeck and Vannitsem (2015), respectively. While the "mse_min" method minimizes a constrained mean-squared error using three parameters, the "crps_min" method features four parameters and minimizes the Continuous Ranked Probability Score (CRPS). The "rpc-based" method adjusts the forecast variance ensuring that the ratio of predictable components (RPC) is equal to one, as in Eade et al. (2014). It is equivalent to function Calibration but for objects of class s2dv_cube.

Usage

CST_Calibration(
  exp,
  obs,
  exp_cor = NULL,
  cal.method = "mse_min",
  eval.method = "leave-one-out",
  multi.model = FALSE,
  na.fill = TRUE,
  na.rm = TRUE,
  apply_to = NULL,
  alpha = NULL,
  memb_dim = "member",
  sdate_dim = "sdate",
  dat_dim = NULL,
  ncores = NULL
)

Arguments

exp

An object of class s2dv_cube as returned by CST_Start function with at least 'sdate' and 'member' dimensions, containing the seasonal hindcast experiment data in the element named data. The hindcast is used to calibrate the forecast in case the forecast is provided; if not, the same hindcast will be calibrated instead.

obs

An object of class s2dv_cube as returned by CST_Start function with at least 'sdate' dimension, containing the observed data in the element named $data.

exp_cor

An optional object of class s2dv_cube as returned by CST_Start function with at least 'sdate' and 'member' dimensions, containing the seasonal forecast experiment data in the element named data. If the forecast is provided, it will be calibrated using the hindcast and observations; if not, the hindcast will be calibrated instead. If there is only one corrected dataset, it should not have dataset dimension. If there is a corresponding corrected dataset for each 'exp' forecast, the dataset dimension must have the same length as in 'exp'. The default value is NULL.

cal.method

A character string indicating the calibration method used, can be either bias, evmos, mse_min, crps_min or rpc-based. Default value is mse_min.

eval.method

A character string indicating the sampling method used, it can be either in-sample or leave-one-out. Default value is the leave-one-out cross validation. In case the forecast is provided, any chosen eval.method is over-ruled and a third option is used.

multi.model

A boolean that is used only for the mse_min method. If multi-model ensembles or ensembles of different sizes are used, it must be set to TRUE. By default it is FALSE. Differences between the two approaches are generally small but may become large when using small ensemble sizes. Using multi.model when the calibration method is bias, evmos or crps_min will not affect the result.

na.fill

A boolean that indicates what happens in case calibration is not possible or will yield unreliable results. This happens when three or less forecasts-observation pairs are available to perform the training phase of the calibration. By default na.fill is set to true such that NA values will be returned. If na.fill is set to false, the uncorrected data will be returned.

na.rm

A boolean that indicates whether to remove the NA values or not. The default value is TRUE. See Details section for further information about its use and compatibility with na.fill.

apply_to

A character string that indicates whether to apply the calibration to all the forecast ("all") or only to those where the correlation between the ensemble mean and the observations is statistically significant ("sign"). Only useful if cal.method == "rpc-based".

alpha

A numeric value indicating the significance level for the correlation test. Only useful if cal.method == "rpc-based" & apply_to == "sign".

memb_dim

A character string indicating the name of the member dimension. By default, it is set to 'member'.

sdate_dim

A character string indicating the name of the start date dimension. By default, it is set to 'sdate'.

dat_dim

A character string indicating the name of dataset dimension. The length of this dimension can be different between 'exp' and 'obs'. The default value is NULL.

ncores

An integer that indicates the number of cores for parallel computations using multiApply function. The default value is one.

Details

Both the na.fill and na.rm parameters can be used to indicate how the function has to handle the NA values. The na.fill parameter checks whether there are more than three forecast-observations pairs to perform the computation. In case there are three or less pairs, the computation is not carried out, and the value returned by the function depends on the value of this parameter (either NA if na.fill == TRUE or the uncorrected value if na.fill == TRUE). On the other hand, na.rm is used to indicate the function whether to remove the missing values during the computation of the parameters needed to perform the calibration.

Value

An object of class s2dv_cube containing the calibrated forecasts in the element data with the dimensions nexp, nobs and same dimensions as in the 'exp' object. 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. If 'exp_cor' is provided the returned array will be with the same dimensions as 'exp_cor'.

Author(s)

Verónica Torralba, veronica.torralba@bsc.es

Bert Van Schaeybroeck, bertvs@meteo.be

References

Doblas-Reyes F.J, Hagedorn R, Palmer T.N. The rationale behind the success of multi-model ensembles in seasonal forecasting-II calibration and combination. Tellus A. 2005;57:234-252. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1111/j.1600-0870.2005.00104.x")}

Eade, R., Smith, D., Scaife, A., Wallace, E., Dunstone, N., Hermanson, L., & Robinson, N. (2014). Do seasonal-to-decadal climate predictions underestimate the predictability of the read world? Geophysical Research Letters, 41(15), 5620-5628. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1002/2014GL061146")}

Van Schaeybroeck, B., & Vannitsem, S. (2011). Post-processing through linear regression. Nonlinear Processes in Geophysics, 18(2), 147. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.5194/npg-18-147-2011")}

Van Schaeybroeck, B., & Vannitsem, S. (2015). Ensemble post-processing using member-by-member approaches: theoretical aspects. Quarterly Journal of the Royal Meteorological Society, 141(688), 807-818. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1002/qj.2397")}

See Also

CST_Start

Examples

# Example 1:
mod1 <- 1 : (1 * 3 * 4 * 5 * 6 * 7)
dim(mod1) <- c(dataset = 1, member = 3, sdate = 4, ftime = 5, lat = 6, lon = 7)
obs1 <- 1 : (1 * 1 * 4 * 5 * 6 * 7)
dim(obs1) <- c(dataset = 1, member = 1, sdate = 4, ftime = 5, lat = 6, lon = 7)
lon <- seq(0, 30, 5)
lat <- seq(0, 25, 5)
coords <- list(lat = lat, lon = lon)
exp <- list(data = mod1, coords = coords)
obs <- list(data = obs1, coords = coords)
attr(exp, 'class') <- 's2dv_cube'
attr(obs, 'class') <- 's2dv_cube'
a <- CST_Calibration(exp = exp, obs = obs, cal.method = "mse_min", eval.method = "in-sample")

# Example 2:
mod1 <- 1 : (1 * 3 * 4 * 5 * 6 * 7)
mod2 <- 1 : (1 * 3 * 1 * 5 * 6 * 7)
dim(mod1) <- c(dataset = 1, member = 3, sdate = 4, ftime = 5, lat = 6, lon = 7)
dim(mod2) <- c(dataset = 1, member = 3, sdate = 1, ftime = 5, lat = 6, lon = 7)
obs1 <- 1 : (1 * 1 * 4 * 5 * 6 * 7)
dim(obs1) <- c(dataset = 1, member = 1, sdate = 4, ftime = 5, lat = 6, lon = 7)
lon <- seq(0, 30, 5)
lat <- seq(0, 25, 5)
coords <- list(lat = lat, lon = lon)
exp <- list(data = mod1, coords = coords)
obs <- list(data = obs1, coords = coords)
exp_cor <- list(data = mod2, lat = lat, lon = lon)
attr(exp, 'class') <- 's2dv_cube'
attr(obs, 'class') <- 's2dv_cube'
attr(exp_cor, 'class') <- 's2dv_cube'
a <- CST_Calibration(exp = exp, obs = obs, exp_cor = exp_cor, cal.method = "evmos")


CSTools documentation built on Oct. 20, 2023, 5:10 p.m.