R/asymmetric_laplace.R

Defines functions dalp ralp random_asymmetric_error

# ASYMMETRIC LAPLACE FUNCTIONS

# Density
dalp <- function(x, sigma, p) {
  kernel <- ifelse (
    x >= 0,
    exp(- p * x / sigma),
    exp((1 - p) * x / sigma)
  )
  d <- (p * (1 - p) / sigma) * kernel
  return(d)
}

# Random one sigma
ralp <- function(n, sigma = 1, p = 0.5) {
  x <- seq(-10, 10, 0.05)
  prob <- dalp(x, sigma, p)

  if (any(prob > 0)) {
    sample_alp <- sample(
      x = x,
      size = n,
      prob = prob
    )
  } else {
    sample_alp <- rep(0, n)
  }

  return(sample_alp)
}

# Random different sigmas vector
random_asymmetric_error <- function(sigmas, p) {
  unique_sigmas <- unique(sigmas)
  error <- vector(length = length(sigmas))

  for (sigma in unique_sigmas) {
    dim <- sum(sigmas == sigma)
    simulations <- ralp(dim, sigma = sigma, p)
    error[sigmas == sigma] <- simulations
  }

  return(error)
}
opardo/GPDPQuantReg documentation built on Nov. 24, 2019, 3:28 a.m.