R/table.custom.R

table.custom = function(Ra, Rb, Rf = 0, scale=12) {
  
  Ra = na.omit(Ra)
  Rb=Rb[index(Ra)]
  if(class(Rf)[1] == "xts"){
    Rf = Rf[index(Ra)]
  }
  
  # tab.dates = sapply(cbind(Ra, Rb), function(f)as.character(c(start(na.omit(f)), end(na.omit(f)))))
  # row.names(tab.dates) = c("From", "To")
  
  tab.ret = PerformanceAnalytics::table.AnnualizedReturns(cbind(Ra, Rb), Rf = Rf, scale = scale)
  tab.dist = PerformanceAnalytics::table.Distributions(cbind(Ra, Rb), scale = scale)
  tab.dsr = PerformanceAnalytics::table.DownsideRisk(cbind(Ra, Rb), Rf = Rf, scale = scale)
  tab.stat = PerformanceAnalytics::table.Stats(cbind(Ra, Rb))
  tab.var = PerformanceAnalytics::table.Variability(cbind(Ra, Rb), scale = scale)
  # tab.ir = PerformanceAnalytics::table.InformationRatio(Ra, Rb, scale = scale)
  
  per_lengths = c(1,3,12,36, 60)
  tabs.op =  lapply(Ra, function(R) PerformanceAnalytics::table.ProbOutPerformance(R, Rb[index(R)], period_lengths = per_lengths))
  tab.op = tabs.op[[1]][, 5, drop =FALSE]
  if(ncol(Ra) > 1){
    for(j in 2:ncol(Ra)){
      tab.op = cbind(tab.op, tabs.op[[j]][, 5, drop =FALSE])
    }
  }
  tab.op = cbind(tab.op, rep(NA, nrow(tab.op)))
  colnames(tab.op) = c(names(Ra), names(Rb))
  row.names(tab.op) = paste0("Prob Outperform ", names(Rb), " ", per_lengths, "m")
  
  
  
  tab.capm = table.CAPM2(Ra, Rb, Rf = Rf, scale = scale)
  tab.capm = cbind(tab.capm, rep(NA, nrow(tab.capm)))
  
  tab.capm_bull = table.CAPM2(Ra[Rb > 0], Rb[Rb > 0], Rf = Rf, scale = scale)
  tab.capm_bull = cbind(tab.capm_bull, rep(NA, nrow(tab.capm_bull)))
  
  tab.capm_bear = table.CAPM2(Ra[Rb < 0], Rb[Rb < 0], Rf = Rf, scale = scale)
  tab.capm_bear  = cbind(tab.capm_bear, rep(NA, nrow(tab.capm_bear)))
  
  colnames(tab.capm) = colnames(tab.capm_bear) = colnames(tab.capm_bull) = c(colnames(Ra),colnames(Rb))
  row.names(tab.capm_bear) = paste0(row.names(tab.capm_bear), " (bear)")
  row.names(tab.capm_bull) = paste0(row.names(tab.capm_bull), " (bull)")
  
  tab.rw_bull_bear = rbind(tab.capm_bull["Correlation (bull)",]^2, tab.capm_bear["Correlation (bear)",]^2)
  row.names(tab.rw_bull_bear)[1] = "Systematic Risk Weight (bull)"
  row.names(tab.rw_bull_bear)[2] = "Systematic Risk Weight (bear)"
  
  tab.ac = PerformanceAnalytics::table.Autocorrelation(cbind(Ra, Rb))
  
  if(indexClass(Ra) != "Date"){
    indexClass(Ra) = "Date"
    indexClass(Rb) = "Date"
  } 
  tab.sr = PerformanceAnalytics::table.SpecificRisk(Ra, Rb, Rf = Rf)
  tab.sr = cbind(tab.sr, rep(NA, nrow(tab.sr)))
  colnames(tab.sr) = c(colnames(Ra),colnames(Rb))
  tab.sr = rbind(tab.sr, `Systematic Risk Weight` = tab.sr[2,]^2/tab.sr[3,]^2)
  
 
  
  res=rbind(  tab.ret
        #tab.dist[c(1, 2, 4),, drop=FALSE]), 
        , tab.stat[6, , drop=FALSE]
        , tab.var[2, , drop=FALSE]
        , tab.stat[c(5, 15:16, 9, 3),, drop=FALSE]
        , tab.dsr[7:9, , drop=FALSE]
        , tab.ac
        , tab.capm
        , tab.capm_bull
        , tab.capm_bear
        , tab.sr
        , tab.rw_bull_bear
        , tab.op
        )
  row.names(res)[(which(row.names(res)=="Alpha")):(which(row.names(res) == "Systematic Risk Weight (bear)"))] = paste0(row.names(res)[(which(row.names(res)=="Alpha")):(which(row.names(res) == "Systematic Risk Weight (bear)"))], " (", names(Rb), ")")
  res

}
bplloyd/CoreHF documentation built on May 20, 2019, 5:05 p.m.