RPEGLMEN (version 1.0)

glmnet_exp: Elastic Net Penalized Exponentially Distributed Response Variables

Description

git.glmGammaNet Fit glmnet model for exponentiall distributed response data.

Usage

glmnet_exp(A, b, alpha.EN = 0.5, num_lambda = 100L, glm_type = 1L,
  max_iter = 100L, abs_tol = 1e-04, rel_tol = 0.01,
  normalize_grad = FALSE, k_fold = 5L, has_intercept = TRUE,
  k_fold_iter = 5L, ...)

Arguments

A

The matrix of independent variables.

b

The vector of response variables.

alpha.EN

The coefficient of elastic net regularizer (1 means lasso).

num_lambda

Size of the lambda grid.

glm_type

Type of glm model, 1 is exponential, 2 is gamma (not implemented yet).

max_iter

Max number of iteration for the prox grad descent optimizer.

abs_tol

Absolute error threshold for the pgd optimizer.

rel_tol

Relative error threshold for the pgd optimizer (not used for vanilla PGD).

normalize_grad

Swtich for whether to normalize the gradient or not.

k_fold

The number of folds for cross validation.

has_intercept

Parameter to determine if there is an intercept (TRUE) or not (FALSE).

k_fold_iter

The number of iterations for the cross-validation.

...

Additional Parameters.

Value

Vector of optimal coefficient for the glm model.

Examples

Run this code
# NOT RUN {
# Function to return the periodogram of data series
myperiodogram <- function (data, max.freq = 0.5, 
                           twosided = FALSE, keep = 1){
  data.fft <- fft(data)
  N <- length(data)
  tmp <- Mod(data.fft[2:floor(N/2)])^2/N
  freq <- ((1:(floor(N/2) - 1))/N)
  tmp <- tmp[1:floor(length(tmp) * keep)]
  freq <- freq[1:floor(length(freq) * keep)]
  if (twosided) {
    tmp <- c(rev(tmp), tmp)
    freq <- c(-rev(freq), freq)
  }
  return(list(spec = tmp, freq = freq))
}

# Function to compute the standard error based the periodogram of 
# the influence functions time series
SE.Exponential <- function(data, d = 7, alpha = 0.5, keep = 1){
  N <- length(data)
  # Compute the periodograms
  my.periodogram <- myperiodogram(data)
  my.freq <- my.periodogram$freq
  my.periodogram <- my.periodogram$spec
  # Remove values of frequency 0 as it does not contain information 
  # about the variance
  my.freq <- my.freq[-1]
  my.periodogram <- my.periodogram[-1]
  # Implement cut-off
  nfreq <- length(my.freq)
  my.freq <- my.freq[1:floor(nfreq*keep)]
  my.periodogram <- my.periodogram[1:floor(nfreq*keep)]
  # GLM with BFGS optimization
  # Create 1, x, x^2, ..., x^d
  x.mat <- rep(1,length(my.freq))
  for(col.iter in 1:d){
    x.mat <- cbind(x.mat,my.freq^col.iter)
  }
  # Fit the Exponential model
  res <- glmnet_exp(x.mat, my.periodogram, alpha.EN = alpha)
  # Return the estimated variance
  return(sqrt(exp(res[1])/N))
}

# Loading hedge fund data from PA
data(edhec, package = "PerformanceAnalytics")
colnames(edhec)

# Computing the expected shortfall for the time series of returns
library(RPEIF)
test.mat <- apply(edhec, 2, IF.ES)
test.mat <- apply(test.mat, 2, as.numeric)

# Returning the standard errors from the Exponential distribution fit
apply(test.mat, 2, SE.Exponential)

# }

Run the code above in your browser using DataLab