R/translator.R

Defines functions parametrisation_translator

Documented in parametrisation_translator

#' Transforms one parametrisation into another one.
#' From Gamma-inspired parameters (`noven`) to standard (i.e. `(xi, sigma)`).
#' @param params Parameters to transform.
#' @param parametrisation Given parametrisation.
#' @param target Target parametrisation (in `"standard"`, `"noven"` or
#'      `transform`).
#' @return Transformed parameters.
#' @examples
#' parametrisation_translator(c(1, 1, 19), "noven", "standard")
#' @export
parametrisation_translator <- function(params,
                                       parametrisation, target = "noven") {
  assertthat::assert_that(length(params) == 3)
  assertthat::assert_that(parametrisation %in% c("standard", "noven"))
  assertthat::assert_that(
    parametrisation %in% c("standard", "noven", "transform")
  )

  target_alpha <- 1.0 # or target_xi

  # from parametrisation to noven
  params_target <- params

  if (parametrisation == target) {
    return(params)
  }

  if (parametrisation == "standard" & target == "noven") {
    # (xi, sigma, kappa) to (alpha, beta, kappa)
    params_target[1] <- 1 / params[1]
    params_target[2] <- params[2] / abs(params[1]) - params[3]
  }
  if (parametrisation == "noven" & target == "standard") {
    # (alpha, beta, kappa) to (xi, sigma, kappa)
    params_target[1] <- 1 / params[1]
    params_target[2] <- (params[2] + params[3]) / abs(params[1])
  }
  if (parametrisation == "standard" & target == "transform") {
    # (xi, sigma, kappa) to (1, 1+kappa, kappa)
    params_target[1] <- 1.0 / target_alpha
    params_target[2] <- (1.0 + params[3]) * abs(target_alpha)
  }
  if (parametrisation == "noven" & target == "transform") {
    # (alpha, beta, kappa) to (1., 1. + kappa, kappa)
    params_target[1] <- 1.0 / target_alpha
    params_target[2] <- (1.0 + params[3]) / abs(target_alpha)
  }

  return(params_target)
}
valcourgeau/gammaextremes documentation built on Sept. 9, 2021, 5:42 a.m.