R/robMean_SE.R

Defines functions robMean.SE

Documented in robMean.SE

#'
#' @import RPEIF RobStatTM
#'
#' @title Standard Error Estimate for Robust Location (Mean) M-Estimator of Returns
#'
#' @description \code{robMean.SE} computes the standard error of the robust location (mean) M-estimator of the returns.
#'
#' @param data Data of returns for one or multiple assets or portfolios.
#' @param family Family for robust m-estimator of location. Must be one of "mopt" (default), "opt" or "bisquare".
#' @param eff Tuning parameter for the normal distribution efficiency. Default is 0.99.
#' @param se.method A character string indicating which method should be used to compute
#' the standard error of the estimated standard deviation. One or a combination of:
#' \code{"IFiid"} (default), \code{"IFcor"}, \code{"IFcorPW"}, \code{"IFcorAdapt"} (default),
#' \code{"BOOTiid"} or \code{"BOOTcor"}.
#' @param cleanOutliers Boolean variable to indicate whether the pre-whitenning of the influence functions TS should be done through
#' a robust filter. Default if FALSE.
#' @param fitting.method Distribution used in the standard errors computation. Should be one of "Exponential" (default) or "Gamma".
#' @param d.GLM.EN Order of the polynomial for the Exponential or Gamma fitting. Default polynomial order of 5.
#' @param freq.include Frequency domain inclusion criteria. Must be one of "All" (default), "Decimate" or "Truncate."
#' @param freq.par Percentage of the frequency used if \code{"freq.include"} is "Decimate" or "Truncate." Default is 0.5.
#' @param corOut Return correlation of the returns or the influence function transformed returns.
#' Must be one of "retCor", "retIFCor" or "none" (default).
#' @param return.coef Boolean variable to indicate whether the coefficients of the penalized GLM fit are returned. Default if FALSE.
#' @param ... Additional parameters.
#'
#' @return A vector or a list depending on \code{se.method}.
#'
#' @export
#'
#' @author Anthony-Alexander Christidis, \email{anthony.christidis@stat.ubc.ca}
#'
#' @examples
#' # Loading data
#' data(edhec, package = "PerformanceAnalytics")
#' # Changing the data colnames
#' names(edhec)  =  c("CA", "CTA", "DIS", "EM", "EMN",
#'                  "ED", "FIA", "GM", "LS", "MA",
#'                  "RV", "SS", "FOF")
#' # Computing the standard errors for
#' # the two influence functions based approaches
#' robMean.SE(edhec, se.method = c("IFiid","IFcorAdapt"),
#'            fitting.method = c("Exponential", "Gamma")[1],
#'            family = "mopt", eff = 0.95)
#'
robMean.SE <- function(data, family = c("mopt", "opt", "bisquare")[1], eff = 0.95,
                       se.method = c("IFiid","IFcor","IFcorAdapt","IFcorPW","BOOTiid","BOOTcor")[c(1,4)],
                       cleanOutliers = FALSE, fitting.method = c("Exponential", "Gamma")[1], d.GLM.EN  =  5,
                       freq.include = c("All", "Decimate", "Truncate")[1], freq.par = 0.5,
                       corOut  =  c("none", "retCor","retIFCor", "retIFCorPW")[1],
                       return.coef = FALSE,
                       ...){

  # Outlier cleaning disabled for robMean.SE
  if(cleanOutliers)
    warning("Outlier cleaning disabled for robMean.SE.")

  # Point estimate
  if(is.null(dim(data)) || ncol(data) == 1)
    point.est <- robMean(data, family = family, eff = eff) else
      point.est <- apply(data, 2, function(x) robMean(x, family = family, eff = eff))

    # SE Computation
    if(is.null(se.method)){
      return(point.est)
    } else{
      SE.out <- list(robMean = point.est)
      for(mymethod in se.method){
        SE.out[[mymethod]] <- EstimatorSE(data, estimator.fun = "robMean", family = family, eff = eff,
                                          se.method = mymethod,
                                          cleanOutliers = FALSE,
                                          fitting.method = fitting.method, d.GLM.EN = d.GLM.EN,
                                          freq.include = freq.include, freq.par = freq.par,
                                          return.coef = return.coef,
                                          ...)
      }

      # Adding the correlations to the list
      SE.out <- Add_Correlations(SE.out = SE.out, data = data, cleanOutliers = FALSE, corOut = corOut, IF.func = IF.robMean, ...)

      # Returning the output
      return(SE.out)
    }
}

Try the RPESE package in your browser

Any scripts or data that you put into this service are public.

RPESE documentation built on Sept. 8, 2022, 9:07 a.m.