Path: blob/master/sandbox/paper_analysis/insample/EfficientFrontier_MakePlots.R
1433 views
# Paper: Portfolio Optimization with Conditional Value-at-Risk Budgets1# Boudt, Carl, Peterson (2010)2# This R script serves to make the exhibits regarding the four asset efficient frontier34setwd("c:/Documents and Settings/Administrator/Desktop/risk budget programs/insample")56cAssets = 4; p = priskbudget = 0.95;7mincriterion = "mES" ; percriskcontribcriterion = "mES";89# Load programs1011source("Risk_budget_functions.R");12library(zoo); library(fGarch); library("PerformanceAnalytics"); library("PortfolioAnalytics")13clean = TRUE; CC = T1415# Load the data16firstyear = 1976 ; firstquarter = 1; lastyear = 2010; lastquarter = 2;17data = read.table( file= paste(getwd(),"/data.txt",sep="") ,header=T)18date = as.Date(data[,1],format="%Y-%m-%d")1920monthlyR = zoo( data[,2:(1+cAssets)] , order.by = date )21set.seed(1234)22if(clean){ monthlyR = clean.boudt2(monthlyR,alpha=0.05)[[1]] }23mu = apply(monthlyR,2,'mean')24sigma = cov(monthlyR)25if(!CC){26M3 = PerformanceAnalytics:::M3.MM(monthlyR-matrix( rep(as.numeric(mu),nrow(monthlyR)) , nrow=nrow(monthlyR) , byrow=TRUE) );27M4 = PerformanceAnalytics:::M4.MM(monthlyR-matrix( rep(as.numeric(mu),nrow(monthlyR)) , nrow=nrow(monthlyR) , byrow=TRUE) )28}else{29source( "coskewkurtosis.R" )30M3 = coskewCC(monthlyR-matrix( rep(as.numeric(mu),nrow(monthlyR)) , nrow=nrow(monthlyR) , byrow=TRUE) );31M4 = cokurtCC(monthlyR-matrix( rep(as.numeric(mu),nrow(monthlyR)) , nrow=nrow(monthlyR) , byrow=TRUE) );32}33N = ncol(monthlyR)3435# Summary stats individual assets36apply(monthlyR,2,'mean')*1237apply(monthlyR,2,'sd')*sqrt(12)38apply(monthlyR,2,'skewness')39apply(monthlyR,2,'kurtosis')40ES(monthlyR[,1],method="modified"); ES(monthlyR[,2],method="modified")41ES(monthlyR[,3],method="modified"); ES(monthlyR[,4],method="modified")4243#################################################################################44# Make Exhibit 3 Risk budget paper: Efficient frontier plot45#################################################################################4647# Layout 348source("chart.StackedBar.R");4950mESfun = function( series ){ return( operMES( series , alpha = 0.05 , r = 2 ) ) }51assetmu = apply( monthlyR , 2 , 'mean' )52assetCVaR = apply( monthlyR , 2 , 'mESfun' )5354mESfun2 = function( w ){ return( operPortMES(w,mu=mu,alpha=0.05,sigma=sigma,M3=M3,M4=M4)[[1]] ) }55assetCVaR = rep(0,4);56for( i in 1:4 ){57w = rep(0,4); w[i]=1;58assetCVaR[i] = mESfun2( as.matrix(w) )59}6061#> assetCVaR62#[1] 0.01235899 0.12465759 0.27755656 0.205585276364minmu = min(assetmu); maxmu = max(assetmu); print(minmu*12); print(maxmu*12);6566# Load the data6768labelnames = c( "US bond" , "S&P 500" , "NAREIT" , "GSCI" )697071if(clean){72# Portfolio weights73W_MCC = read.csv( file = "EffFrontierMinCVaRConc_weights_clean_CC.csv" )[,2:(1+cAssets)]74W_minCVaR = read.csv( file = "EffFrontierMinCVaR_weights_clean_CC.csv" )[,2:(1+cAssets)]75W_minVar = read.csv( file = "EffFrontierMinVar_weights_clean.csv" )[,2:(1+cAssets)]76# Percentage CVaR contributions77PercCVaR_MCC = read.csv( file = "EffFrontierMinCVaRConc_percrisk_clean_CC.csv" )[,2:(1+cAssets)]78PercCVaR_minCVaR = read.csv( file = "EffFrontierMinCVaR_percrisk_clean_CC.csv" )[,2:(1+cAssets)]79PercCVaR_minVar = read.csv( file = "EffFrontierMinVar_percrisk_clean.csv" )[,2:(1+cAssets)]80# Summary stats81EffFrontier_stats_MCC = read.csv(file = "EffFrontierMinCVaRConc_stats_clean_CC.csv")[,2:5]82EffFrontier_stats_minCVaR = read.csv(file = "EffFrontierMinCVar_stats_clean_CC.csv")[,2:5]83EffFrontier_stats_minVar = read.csv(file = "EffFrontierMinVar_stats_clean.csv")[,2:5]8485}else{86# Portfolio weights87W_MCC = read.csv(file = "EffFrontierMinCVaRConc_weights_CC.csv")[,2:(1+cAssets)]88W_minCVaR = read.csv(file = "EffFrontierMinCVaR_weights_CC.csv")[,2:(1+cAssets)]89W_minVar = read.csv(file = "EffFrontierMinVar_weights.csv")[,2:(1+cAssets)]90# Percentage CVaR contributions91PercCVaR_MCC = read.csv( file = "EffFrontierMinCVaRConc_percrisk_CC.csv" )[,2:(1+cAssets)]92PercCVaR_minCVaR = read.csv( file = "EffFrontierMinCVaR_percrisk_CC.csv" )[,2:(1+cAssets)]93PercCVaR_minVar = read.csv(file = "EffFrontierMinVar_percrisk.csv")[,2:(1+cAssets)]94# Summary stats95EffFrontier_stats_MCC = read.csv(file = "EffFrontierMinCVaRConc_stats_CC.csv")[,2:5]96EffFrontier_stats_minCVaR = read.csv(file = "EffFrontierMinCVar_stats_CC.csv")[,2:5]97EffFrontier_stats_minVar = read.csv(file = "EffFrontierMinVar_stats.csv")[,2:5]98}99100vmu_MCC = EffFrontier_stats_MCC[,1] ; vmu_minCVaR = EffFrontier_stats_minCVaR[,1] ; vmu_minVar = EffFrontier_stats_minVar[,1] ;101vrisk_MCC = EffFrontier_stats_MCC[,2] ; vrisk_minCVaR = EffFrontier_stats_minCVaR[,2] ; vrisk_minVar = EffFrontier_stats_minVar[,2] ;102vmaxpercrisk_MCC = EffFrontier_stats_MCC[,3] ; vmaxpercrisk_minCVaR = EffFrontier_stats_minCVaR[,3] ;103vriskconc_MCC = EffFrontier_stats_MCC[,4] ; vriskconc_minCVaR = EffFrontier_stats_minCVaR[,4] ; vriskconc_minVar = EffFrontier_stats_minVar[,4] ;104105vstdev_MCC = c();106for( r in 1:nrow(W_MCC) ){ wr = matrix( as.numeric(W_MCC[r,]) , ncol = 1 ) ;107vstdev_MCC = c( vstdev_MCC , sqrt( t(wr)%*%sigma%*%wr ) ) }108vstdev_minVar = c();109for( r in 1:nrow(W_minVar) ){ wr = matrix( as.numeric(W_minVar[r,]) , ncol = 1 ) ;110vstdev_minVar = c( vstdev_minVar , sqrt( t(wr)%*%sigma%*%wr ) ) }111112vstdev_minCVaR = c();113for( r in 1:nrow(W_minCVaR) ){ wr = matrix( as.numeric(W_minCVaR[r,]) , ncol = 1 ) ;114vstdev_minCVaR = c( vstdev_minCVaR , sqrt( t(wr)%*%sigma%*%wr ) ) }115116# The MCC and Min CVaR were obtained with DEoptim. The solutions are not always optimal. Correct for this:117118order_MCC = sort(vmu_MCC,index.return=T)$ix ; order_minCVaR = sort(vmu_minCVaR,index.return=T)$ix119vmu_MCC = vmu_MCC[order_MCC] ; vmu_minCVaR = vmu_minCVaR[order_minCVaR]120vrisk_MCC = vrisk_MCC[order_MCC] ; vrisk_minCVaR = vrisk_minCVaR[order_minCVaR]121vstdev_MCC = vstdev_MCC[order_MCC] ; vstdev_minCVaR = vstdev_minCVaR[order_minCVaR]122vmaxpercrisk_MCC = vmaxpercrisk_MCC[order_MCC] ; vmaxpercrisk_minCVaR = vmaxpercrisk_MCC[order_minCVaR]123vriskconc_MCC = vriskconc_MCC[order_MCC] ; vriskconc_minCVaR = vriskconc_minCVaR[order_minCVaR]124W_MCC = W_MCC[order_MCC,] ; W_minCVaR = W_minCVaR[order_minCVaR,]125PercCVaR_MCC = PercCVaR_MCC[order_MCC,] ; PercCVaR_minCVaR = PercCVaR_minCVaR[order_minCVaR,]126127# eliminate duplicates in mu128# Determines which elements of a vector or data frame are duplicates of elements with smaller subscripts,129# and returns a logical vector indicating which elements (rows) are duplicates.130a_MCC = duplicated(vmu_MCC) ; a_minCVaR = duplicated(vmu_minCVaR)131vmu_MCC = vmu_MCC[!a_MCC] ; vmu_minCVaR = vmu_minCVaR[!a_minCVaR]132vrisk_MCC = vrisk_MCC[!a_MCC] ; vrisk_minCVaR = vrisk_minCVaR[!a_minCVaR]133vstdev_MCC = vstdev_MCC[!a_MCC] ; vstdev_minCVaR = vstdev_minCVaR[!a_minCVaR]134vmaxpercrisk_MCC = vmaxpercrisk_MCC[!a_MCC] ; vmaxpercrisk_minCVaR = vmaxpercrisk_minCVaR[!a_minCVaR]135vriskconc_MCC = vriskconc_MCC[!a_MCC] ; vriskconc_minCVaR = vriskconc_minCVaR[!a_minCVaR]136W_MCC = W_MCC[!a_MCC,] ; W_minCVaR = W_minCVaR[!a_minCVaR,]137PercCVaR_MCC = PercCVaR_MCC[!a_MCC,] ; PercCVaR_minCVaR = PercCVaR_minCVaR[!a_minCVaR,]138139# eliminate (efficiency: lower mu, higher CVaR alloc140141sel_MCC = sel_minCVaR = c(); nmu_MCC = length(vmu_MCC); nmu_minCVaR = length(vmu_minCVaR);142for( i in 1:(nmu_MCC-1) ){143if( any(vriskconc_MCC[(i+1):nmu_MCC]<=vriskconc_MCC[i]) ){ }else{sel_MCC = c(sel_MCC, i) }144}145for( i in 1:(nmu_minCVaR-1) ){146if( any(vrisk_minCVaR[(i+1):nmu_minCVaR]<=vrisk_minCVaR[i]) ){ }else{sel_minCVaR = c(sel_minCVaR, i) }147}148vmu_MCC = vmu_MCC[sel_MCC] ; vmu_minCVaR = vmu_minCVaR[sel_minCVaR]149vrisk_MCC = vrisk_MCC[sel_MCC] ; vrisk_minCVaR = vrisk_minCVaR[sel_minCVaR]150vstdev_MCC = vstdev_MCC[sel_MCC] ; vstdev_minCVaR = vstdev_minCVaR[sel_minCVaR]151vmaxpercrisk_MCC = vmaxpercrisk_MCC[sel_MCC] ; vmaxpercrisk_minCVaR = vmaxpercrisk_minCVaR[sel_minCVaR]152vriskconc_MCC = vriskconc_MCC[sel_MCC] ; vriskconc_minCVaR = vriskconc_minCVaR[sel_minCVaR]153W_MCC = W_MCC[sel_MCC,] ; W_minCVaR = W_minCVaR[sel_minCVaR,]154PercCVaR_MCC = PercCVaR_MCC[sel_MCC,] ; PercCVaR_minCVaR = PercCVaR_minCVaR[sel_minCVaR,]155156wEW <- rep(1/4,4)157muEW = mean(assetmu*12)158outES = ES(weights=wEW, portfolio_method="component", mu = mu, sigma = sigma, m3=M3, m4=M4,invert=FALSE)159riskEW = outES$MES; riskconcEW = max(outES$contribution)160161if(clean){162postscript('frontier_fourassets_clean.eps')163}else{ postscript('frontier_fourassets.eps') }164165layout( matrix( c(1,2,3,1,2,3), ncol = 2 ) , height= c(5,5,1), width=c(1,1) )166ylim = c( min(assetmu) , max(assetmu) )167par( mar = c(4.5,5,2,2), las=1 ,cex=0.9 , cex.axis=0.9, cex.main=0.95)168plot( vrisk_MCC , vmu_MCC*12 , type="l", lty = 1, main = "" ,169ylab="Annualized mean return" , xlab="Monthly 95% Portfolio CVaR" ,170lwd=2, xlim = c(0.01,0.13) , ylim = (ylim*12+c(0,0.01)) , col="black" )171lines( vrisk_minCVaR , vmu_minCVaR*12, lty = 1, lwd=2, col="darkgray" )172lines( vrisk_minVar , vmu_minVar*12, lty = 3, lwd=2, col="black" )173174c = 1; text(y=assetmu[c]*12,x= assetCVaR[c]-0.005 , label=labelnames[c] , cex = 0.7, offset = 0.2, pos = 3); points(y=assetmu[c]*12,x= assetCVaR[c] )175for( c in 2:cAssets ){176text(y=assetmu[c]*12,x= assetCVaR[c] , label=labelnames[c] , cex = 0.7, offset = 0.2, pos = 3)177points(y=assetmu[c]*12,x= assetCVaR[c] )178};179# Plot also EW portfolio180text(y=muEW,x=riskEW, label="EW" , cex = 0.7, offset = 0.2, pos = 3)181points(y=muEW,x= riskEW , pch=22 )182text(y=vmu_MCC[1]*12,x=vrisk_MCC[1], label="MCC=ERC" , cex = 0.7, offset = 0.2, pos = 1)183points(y=vmu_MCC[1]*12,x=vrisk_MCC[1], pch=22 )184text(y=vmu_minCVaR[1]*12,x=vrisk_minCVaR[1]-0.0035, label="Min CVaR" , cex = 0.7, offset = 0.2, pos = 1)185points(y=vmu_minCVaR[1]*12,x=vrisk_minCVaR[1], pch=22 )186text(y=vmu_minVar[1]*12-0.001,x=vrisk_minVar[1]+0.0035, label="Min StdDev" , cex = 0.7, offset = 0.2, pos = 1)187points(y=vmu_minVar[1]*12,x=vrisk_minVar[1], pch=22 )188189par( mar = c(4.5,5,2,2), las=1 ,cex=0.9 , cex.axis=0.9, cex.main=0.95)190plot( vriskconc_MCC/vrisk_MCC , vmu_MCC*12 , type="l", lty = 1, main = "" ,191ylab="Annualized mean return" , xlab="Largest Perc. CVaR contribution" ,192lwd=2, xlim = c(0.2,1.1), ylim = c(ylim*12+c(0,0.01)) , col="black" )193lines( vriskconc_minCVaR/vrisk_minCVaR , vmu_minCVaR*12, lty = 1, lwd=2, col="darkgray" )194lines( vriskconc_minVar/vrisk_minVar , vmu_minVar*12 , lty = 3, lwd=2, col="black" )195196text(y=muEW,x=riskconcEW/riskEW, label="EW" , cex = 0.7, offset = 0.2, pos = 1)197points(y=muEW,x= riskconcEW/riskEW , pch=22 )198text(y=vmu_MCC[1]*12,x=vriskconc_MCC[1]/vrisk_MCC[1], label="MCC=ERC" , cex = 0.7, offset = 0.2, pos = 1)199points(y=vmu_MCC[1]*12,x=vriskconc_MCC[1]/vrisk_MCC[1], pch=22 )200text(y=vmu_minCVaR[1]*12,x=vriskconc_minCVaR[1]/vrisk_minCVaR[1], label="Min CVaR" , cex = 0.7, offset = 0.2, pos = 1)201points(y=vmu_minCVaR[1]*12,x=vriskconc_minCVaR[1]/vrisk_minCVaR[1], pch=22 )202text(y=vmu_minVar[1]*12,x=vriskconc_minVar[1]/vrisk_minVar[1], label="Min StdDev" , cex = 0.7, offset = 0.2, pos = 1)203points(y=vmu_minVar[1]*12,x=vriskconc_minVar[1]/vrisk_minVar[1], pch=22 )204205for( c in 1:cAssets ){206text(y=assetmu[c]*12,x= 1 , label=labelnames[c] , cex = 0.7, offset = 0.2, pos = 4)207points(y=assetmu[c]*12,x= 1 )208};209210par( mar = c(0,1,1,0) )211plot.new()212legend("center",legend=c("Mean-CVaR concentration", "Mean-CVaR","Mean-StdDev" ),213lty=c("solid","solid","dashed"), cex=0.8,ncol=3,lwd=c(4,4,2),col=c("black","darkgray","black"))214215dev.off()216217if(clean){218postscript('frontier_fourassets_bis_clean.eps')219}else{ postscript('frontier_fourassets_bis.eps') }220221layout( matrix( c(1,2,3,1,2,3), ncol = 2 ) , height= c(5,5,1), width=c(1,1) )222ylim = c( min(assetmu) , max(assetmu) )223par( mar = c(4.5,5,2,2), las=1 ,cex=0.9 , cex.axis=0.9, cex.main=0.95)224plot( vrisk_MCC , vmu_MCC*12 , type="l", lty = 1, main = "" ,225ylab="Annualized mean return" , xlab="Monthly 95% Portfolio CVaR" ,226lwd=2, xlim = c(0,0.13) , ylim = (ylim*12+c(0,0.02)) , col="black" )227lines( vrisk_minCVaR , vmu_minCVaR*12, lty = 1, lwd=2, col="darkgray" )228lines( vrisk_minVar , vmu_minVar*12, lty = 3, lwd=2, col="black" )229230c = 1; text(y=assetmu[c]*12,x= assetCVaR[c]-0.005 , label=labelnames[c] , cex = 0.7, offset = 0.2, pos = 3); points(y=assetmu[c]*12,x= assetCVaR[c] )231for( c in 2:cAssets ){232text(y=assetmu[c]*12,x= assetCVaR[c] , label=labelnames[c] , cex = 0.7, offset = 0.2, pos = 3)233points(y=assetmu[c]*12,x= assetCVaR[c] )234};235# Plot also EW portfolio236text(y=muEW,x=riskEW, label="EW" , cex = 0.7, offset = 0.2, pos = 3)237points(y=muEW,x= riskEW , pch=22 )238text(y=vmu_MCC[1]*12,x=vrisk_MCC[1], label="MCC=ERC" , cex = 0.7, offset = 0.2, pos = 4)239points(y=vmu_MCC[1]*12,x=vrisk_MCC[1], pch=22 )240text(y=vmu_minCVaR[1]*12,x=vrisk_minCVaR[1]-0.0035, label="Min CVaR" , cex = 0.7, offset = 0.2, pos = 1)241points(y=vmu_minCVaR[1]*12,x=vrisk_minCVaR[1], pch=22 )242text(y=vmu_minVar[1]*12-0.0035,x=vrisk_minVar[1], label="Min StdDev" , cex = 0.7, offset = 0.2, pos = 1)243points(y=vmu_minVar[1]*12,x=vrisk_minVar[1], pch=22 )244245par( mar = c(4.5,5,2,2), las=1 ,cex=0.9 , cex.axis=0.9, cex.main=0.95)246247plot( vriskconc_MCC, vmu_MCC*12 , type="l", lty = 1, main = "" ,248ylab="Annualized mean return" , xlab="Largest CVaR contribution" ,249lwd=2, xlim = c(0,0.13), ylim = c(ylim*12+c(0,0.02)) , col="black" )250lines( vriskconc_minCVaR , vmu_minCVaR*12, lty = 1, lwd=2, col="darkgray" )251lines( vriskconc_minVar , vmu_minVar*12 , lty = 3, lwd=2, col="black" )252253text(y=muEW,x=riskconcEW, label="EW" , cex = 0.7, offset = 0.2, pos = 1)254points(y=muEW,x= riskconcEW , pch=22 )255text(y=vmu_MCC[1]*12,x=vriskconc_MCC[1], label="MCC=ERC" , cex = 0.7, offset = 0.2, pos = 2)256points(y=vmu_MCC[1]*12,x=vriskconc_MCC[1], pch=22 )257text(y=vmu_minCVaR[1]*12,x=vriskconc_minCVaR[1], label="Min CVaR" , cex = 0.7, offset = 0.2, pos = 4)258points(y=vmu_minCVaR[1]*12,x=vriskconc_minCVaR[1], pch=22 )259text(y=vmu_minVar[1]*12-0.003,x=vriskconc_minVar[1], label="Min StdDev" , cex = 0.7, offset = 0.2, pos = 1)260points(y=vmu_minVar[1]*12,x=vriskconc_minVar[1], pch=22 )261262#for( c in 1:cAssets ){263# text(y=assetmu[c]*12,x= 1 , label=labelnames[c] , cex = 0.7, offset = 0.2, pos = 4)264# points(y=assetmu[c]*12,x= 1 )265#};266267par( mar = c(0,1,1,0) )268plot.new()269legend("center",legend=c("Mean-CVaR concentration", "Mean-CVaR","Mean-StdDev" ),270lty=c("solid","solid","dashed"), cex=0.8,ncol=3,lwd=c(4,4,2),col=c("black","darkgray","black"))271272dev.off()273274275276if(clean){277postscript('frontier_fourassets_bis_clean.eps')278}else{ postscript('frontier_fourassets_bis.eps') }279280layout( matrix( c(1,2,3,1,2,3), ncol = 2 ) , height= c(5,5,1), width=c(1,1) )281ylim = c( min(assetmu) , max(assetmu) )282par( mar = c(4.5,5,2,2), las=1 ,cex=0.9 , cex.axis=0.9, cex.main=0.95)283plot( vrisk_MCC , vmu_MCC*12 , type="l", lty = 1, main = "" ,284ylab="Annualized mean return" , xlab="Monthly 95% Portfolio CVaR" ,285lwd=2, xlim = c(0,0.13) , ylim = (ylim*12+c(0,0.02)) , col="black" )286lines( vrisk_minCVaR , vmu_minCVaR*12, lty = 1, lwd=2, col="darkgray" )287lines( vrisk_minVar , vmu_minVar*12, lty = 3, lwd=2, col="black" )288289c = 1; text(y=assetmu[c]*12,x= assetCVaR[c]-0.005 , label=labelnames[c] , cex = 0.7, offset = 0.2, pos = 3);290points(y=assetmu[c]*12,x= assetCVaR[c] )291for( c in 2:cAssets ){292text(y=assetmu[c]*12,x= assetCVaR[c] , label=labelnames[c] , cex = 0.7, offset = 0.2, pos = 3)293points(y=assetmu[c]*12,x= assetCVaR[c] )294};295# Plot also EW portfolio296text(y=muEW,x=riskEW, label="EW" , cex = 0.7, offset = 0.2, pos = 3)297points(y=muEW,x= riskEW , pch=22 )298text(y=vmu_MCC[1]*12,x=vrisk_MCC[1], label="MCC=ERC" , cex = 0.7, offset = 0.2, pos = 4)299points(y=vmu_MCC[1]*12,x=vrisk_MCC[1], pch=22 )300text(y=vmu_minCVaR[1]*12,x=vrisk_minCVaR[1]-0.0035, label="Min CVaR" , cex = 0.7, offset = 0.2, pos = 1)301points(y=vmu_minCVaR[1]*12,x=vrisk_minCVaR[1], pch=22 )302text(y=vmu_minVar[1]*12-0.0035,x=vrisk_minVar[1], label="Min StdDev" , cex = 0.7, offset = 0.2, pos = 1)303points(y=vmu_minVar[1]*12,x=vrisk_minVar[1], pch=22 )304305par( mar = c(4.5,5,2,2), las=1 ,cex=0.9 , cex.axis=0.9, cex.main=0.95)306307plot( vriskconc_MCC, vmu_MCC*12 , type="l", lty = 1, main = "" ,308ylab="Annualized mean return" , xlab="Largest CVaR contribution" ,309lwd=2, xlim = c(0,0.13), ylim = c(ylim*12+c(0,0.02)) , col="black" )310lines( vriskconc_minCVaR , vmu_minCVaR*12, lty = 1, lwd=2, col="darkgray" )311lines( vriskconc_minVar , vmu_minVar*12 , lty = 3, lwd=2, col="black" )312313text(y=muEW,x=riskconcEW, label="EW" , cex = 0.7, offset = 0.2, pos = 1)314points(y=muEW,x= riskconcEW , pch=22 )315text(y=vmu_MCC[1]*12,x=vriskconc_MCC[1], label="MCC=ERC" , cex = 0.7, offset = 0.2, pos = 2)316points(y=vmu_MCC[1]*12,x=vriskconc_MCC[1], pch=22 )317text(y=vmu_minCVaR[1]*12,x=vriskconc_minCVaR[1], label="Min CVaR" , cex = 0.7, offset = 0.2, pos = 4)318points(y=vmu_minCVaR[1]*12,x=vriskconc_minCVaR[1], pch=22 )319text(y=vmu_minVar[1]*12-0.003,x=vriskconc_minVar[1], label="Min StdDev" , cex = 0.7, offset = 0.2, pos = 1)320points(y=vmu_minVar[1]*12,x=vriskconc_minVar[1], pch=22 )321322#for( c in 1:cAssets ){323# text(y=assetmu[c]*12,x= 1 , label=labelnames[c] , cex = 0.7, offset = 0.2, pos = 4)324# points(y=assetmu[c]*12,x= 1 )325#};326327par( mar = c(0,1,1,0) )328plot.new()329legend("center",legend=c("Mean-CVaR concentration", "Mean-CVaR","Mean-StdDev" ),330lty=c("solid","solid","dashed"), cex=0.8,ncol=3,lwd=c(4,4,2),col=c("black","darkgray","black"))331332dev.off()333334assetStdDev = sqrt(diag(sigma))335StdDevEW = sqrt(matrix( rep(1/4,4) , ncol = 4 )%*%sigma%*%matrix( rep(1/4,4) , ncol = 1 ))336if(clean){337postscript('frontier_fourassets_tris_clean.eps')338}else{ postscript('frontier_fourassets_tris.eps') }339340layout( matrix( c(1,2,3,4,1,2,3,4), ncol = 2 , nrow=4 ) , height= c(5,5,5,1), width=c(1,1) )341342layout( matrix( c(1,2,3,4), ncol = 2 , nrow=2 ) , height= c(5,5), width=c(1,1) )343344ylim = c( min(assetmu) , max(assetmu) )345par( mar = c(4.5,5,2,0.1), las=1 ,cex=0.9 , cex.axis=0.9, cex.main=0.95)346plot( vstdev_MCC*sqrt(12) , vmu_MCC*12 , type="l", lty = 1, main = "" ,347ylab="Annualized mean return" , xlab="Annualized Portfolio StdDev" ,348lwd=2, xlim = c(-0.01,0.2) , ylim = (ylim*12+c(0,0.01)) , col="black" )349lines( vstdev_minCVaR*sqrt(12) , vmu_minCVaR*12, lty = 1, lwd=1, col="darkgray" )350lines( vstdev_minVar*sqrt(12) , vmu_minVar*12, lty = 3, lwd=2, col="black" )351352c = 1; text(y=assetmu[c]*12+0.0005,x= assetStdDev[c]*sqrt(12) , label=labelnames[c] ,353cex = 0.7, offset = 0.2, pos = 4);354points(y=assetmu[c]*12,x= assetStdDev[c]*sqrt(12) )355for( c in 2:cAssets ){356text(y=assetmu[c]*12,x= assetStdDev[c]*sqrt(12) , label=labelnames[c] , cex = 0.7, offset = 0.2, pos = 3)357points(y=assetmu[c]*12,x= assetStdDev[c]*sqrt(12) )358};359# Plot also EW portfolio360text(y=muEW,x=StdDevEW*sqrt(12), label="EW" , cex = 0.7, offset = 0.2, pos = 3)361points(y=muEW,x= StdDevEW*sqrt(12) , pch=22 )362text(y=vmu_MCC[1]*12,x=vstdev_MCC[1]*sqrt(12), label="MCC=ERC" , cex = 0.7, offset = 0.2, pos = 4)363points(y=vmu_MCC[1]*12,x=vstdev_MCC[1]*sqrt(12), pch=22 )364text(y=vmu_minCVaR[1]*12-0.0035,x=vstdev_minCVaR[1]*sqrt(12)-0.0035, label="Min CVaR" , cex = 0.7, offset = 0.2, pos = 4)365points(y=vmu_minCVaR[1]*12,x=vstdev_minCVaR[1]*sqrt(12), pch=22 )366text(y=vmu_minVar[1]*12+0.0035,x=vstdev_minVar[1]*sqrt(12), label="Min StdDev" , cex = 0.7, offset = 0.2, pos = 2)367points(y=vmu_minVar[1]*12,x=vstdev_minVar[1]*sqrt(12), pch=22 )368369# Values of 1, 2, 3 and 4, respectively indicate positions below, to the left of, above and to the right370371372373374par( mar = c(0,1,1,0.1) )375plot.new()376legend("center",legend=c("Mean-CVaR concentration", "Mean-CVaR","Mean-StdDev" ),377lty=c("solid","solid","dashed"), cex=0.8,ncol=1,lwd=c(4,2,2),col=c("black","darkgray","black"))378379380ylim = c( min(assetmu) , max(assetmu) )381par( mar = c(4.5,5,2,0.1), las=1 ,cex=0.9 , cex.axis=0.9, cex.main=0.95)382plot( vrisk_MCC , vmu_MCC*12 , type="l", lty = 1, main = "" ,383ylab="Annualized mean return" , xlab="Monthly 95% Portfolio CVaR" ,384lwd=2, xlim = c(-0.01,0.13) , ylim = (ylim*12+c(0,0.01)) , col="black" )385lines( vrisk_minCVaR , vmu_minCVaR*12, lty = 1, lwd=1, col="darkgray" )386lines( vrisk_minVar , vmu_minVar*12, lty = 3, lwd=2, col="black" )387388c = 1; text(y=assetmu[c]*12,x= assetCVaR[c]-0.005 , label=labelnames[c] , cex = 0.7, offset = 0.2, pos = 3); points(y=assetmu[c]*12,x= assetCVaR[c] )389for( c in 2:cAssets ){390text(y=assetmu[c]*12,x= assetCVaR[c] , label=labelnames[c] , cex = 0.7, offset = 0.2, pos = 3)391points(y=assetmu[c]*12,x= assetCVaR[c] )392};393# Plot also EW portfolio394text(y=muEW,x=riskEW, label="EW" , cex = 0.7, offset = 0.2, pos = 3)395points(y=muEW,x= riskEW , pch=22 )396text(y=vmu_MCC[1]*12,x=vrisk_MCC[1], label="MCC=ERC" , cex = 0.7, offset = 0.2, pos = 4)397points(y=vmu_MCC[1]*12,x=vrisk_MCC[1], pch=22 )398text(y=vmu_minCVaR[1]*12,x=vrisk_minCVaR[1]-0.0035, label="Min CVaR" , cex = 0.7, offset = 0.2, pos = 1)399points(y=vmu_minCVaR[1]*12,x=vrisk_minCVaR[1], pch=22 )400text(y=vmu_minVar[1]*12,x=vrisk_minVar[1], label="Min StdDev" , cex = 0.7, offset = 0.2, pos = 4)401points(y=vmu_minVar[1]*12,x=vrisk_minVar[1], pch=22 )402403404405par( mar = c(4.5,5,2,0.1), las=1 ,cex=0.9 , cex.axis=0.9, cex.main=0.95)406407plot( vriskconc_MCC, vmu_MCC*12 , type="l", lty = 1, main = "" ,408ylab="Annualized mean return" , xlab="Largest contribution to monthly 95% CVaR" ,409lwd=2, xlim = c(-0.01,0.13), ylim = c(ylim*12+c(0,0.01)) , col="black" )410lines( vriskconc_minCVaR , vmu_minCVaR*12, lty = 1, lwd=1, col="darkgray" )411lines( vriskconc_minVar , vmu_minVar*12 , lty = 3, lwd=2, col="black" )412413text(y=muEW,x=riskconcEW, label="EW" , cex = 0.7, offset = 0.2, pos = 1)414points(y=muEW,x= riskconcEW , pch=22 )415text(y=vmu_MCC[1]*12,x=vriskconc_MCC[1], label="MCC=ERC" , cex = 0.7, offset = 0.2, pos = 2)416points(y=vmu_MCC[1]*12,x=vriskconc_MCC[1], pch=22 )417text(y=vmu_minCVaR[1]*12,x=vriskconc_minCVaR[1], label="Min CVaR" , cex = 0.7, offset = 0.2, pos = 4)418points(y=vmu_minCVaR[1]*12,x=vriskconc_minCVaR[1], pch=22 )419text(y=vmu_minVar[1]*12,x=vriskconc_minVar[1], label="Min StdDev" , cex = 0.7, offset = 0.2, pos = 2)420points(y=vmu_minVar[1]*12,x=vriskconc_minVar[1], pch=22 )421422423424#for( c in 1:cAssets ){425# text(y=assetmu[c]*12,x= 1 , label=labelnames[c] , cex = 0.7, offset = 0.2, pos = 4)426# points(y=assetmu[c]*12,x= 1 )427#};428429430431dev.off()432433434# Make the weight/CVaR allocation plots435#---------------------------------------436437Wsel_MCC = PercCVaRsel_MCC = Wsel_minCVaR = PercCVaRsel_minCVaR = Wsel_minVar = PercCVaRsel_minVar = c();438vmusel_MCC = vrisksel_MCC = vriskconcsel_MCC = vmusel_minCVaR = vrisksel_minCVaR = vriskconcsel_minCVaR = vmusel_minVar = vrisksel_minVar = vriskconcsel_minVar = c();439lm = minmu = min( c(vmu_MCC,vmu_minCVaR) ) ; maxmu = max( c(vmu_MCC,vmu_minCVaR) );440ylim = c( min(assetmu) - 0.0003 , max(assetmu) + 0.0003 )441xlim = c( 0 , max(assetCVaR) + 0.01 )442443binning = T # for the weight plots, binned data such that no visual misinterpretation is possible444step = quantile( diff(vmu_MCC) , 0.1 )445if( binning ){446for( rm in seq( minmu+step , maxmu , step ) ){447selection = c(vmu_MCC >= lm & vmu_MCC < rm) ;448if( any(selection) ){449selection = c(1:length(selection))[selection]450selone = sort(vriskconc_MCC[ selection ],index.return=T)$ix[1]451selone = selection[selone]452vmusel_MCC = c( vmusel_MCC , mean(vmu_MCC[selone ] ));453Wsel_MCC = rbind( Wsel_MCC , apply( W_MCC[selone,] ,2,'mean' ))454PercCVaRsel_MCC = rbind( PercCVaRsel_MCC , apply( PercCVaR_MCC[selone,] ,2,'mean' ))455vrisksel_MCC = c( vrisksel_MCC , mean(vrisk_MCC[ selone ]) );456vriskconcsel_MCC = c( vriskconcsel_MCC , mean(vriskconc_MCC[ selone ]) )457}else{458vmusel_MCC = c( vmusel_MCC , NA );459Wsel_MCC = rbind( Wsel_MCC , rep(NA,cAssets) )460PercCVaRsel_MCC = rbind( PercCVaRsel_MCC , rep(NA,cAssets) )461vrisksel_MCC = c( vrisksel_MCC , NA );462vriskconcsel_MCC = c( vriskconcsel_MCC , NA )463}464selection = c(vmu_minCVaR >= lm & vmu_minCVaR < rm) ;465if( any(selection) ){466selection = c(1:length(selection))[selection]; selone = sort(vrisk_minCVaR[ selection ],index.return=T)$ix[1]467selone = selection[selone]468vmusel_minCVaR = c( vmusel_minCVaR , mean(vmu_minCVaR[selone ] ));469Wsel_minCVaR = rbind( Wsel_minCVaR , apply( W_minCVaR[selone,] ,2,'mean' ))470PercCVaRsel_minCVaR = rbind( PercCVaRsel_minCVaR , apply( PercCVaR_minCVaR[selone,] ,2,'mean' ))471vrisksel_minCVaR = c( vrisksel_minCVaR , mean(vrisk_minCVaR[ selone ]) );472vriskconcsel_minCVaR = c( vriskconcsel_minCVaR , mean(vriskconc_minCVaR[ selone ]) )473}else{474vmusel_minCVaR = c( vmusel_minCVaR , NA );475Wsel_minCVaR = rbind( Wsel_minCVaR , rep(NA,cAssets) )476PercCVaRsel_minCVaR = rbind( PercCVaRsel_minCVaR , rep(NA,cAssets) )477vrisksel_minCVaR = c( vrisksel_minCVaR , NA );478vriskconcsel_minCVaR = c( vriskconcsel_minCVaR , NA )479}480selection = c(vmu_minVar >= lm & vmu_minVar < rm) ;481if( any(selection) ){482selection = c(1:length(selection))[selection]; selone = sort(vrisk_minVar[ selection ],index.return=T)$ix[1]483selone = selection[selone]484vmusel_minVar = c( vmusel_minVar , mean(vmu_minVar[selone ] ));485Wsel_minVar = rbind( Wsel_minVar , apply( W_minVar[selone,] ,2,'mean' ))486PercCVaRsel_minVar = rbind( PercCVaRsel_minVar , apply( PercCVaR_minVar[selone,] ,2,'mean' ))487vrisksel_minVar = c( vrisksel_minVar , mean(vrisk_minVar[ selone ]) );488vriskconcsel_minVar = c( vriskconcsel_minVar , mean(vriskconc_minVar[ selone ]) )489}else{490vmusel_minVar = c( vmusel_minVar , NA );491Wsel_minVar = rbind( Wsel_minVar , rep(NA,cAssets) )492PercCVaRsel_minVar = rbind( PercCVaRsel_minVar , rep(NA,cAssets) )493vrisksel_minVar = c( vrisksel_minVar , NA );494vriskconcsel_minVar = c( vriskconcsel_minVar , NA )495}496lm = rm;497}498}else{499vmusel_MCC = vmu_MCC ; vmusel_minCVaR = vmu_minCVaR500Wsel_MCC = W_MCC ; Wsel_minCVaR = W_minCVaR ;501vrisksel_MCC = vrisk_MCC ; vrisksel_minCVaR = vrisk_minCVaR502vriskconcsel_MCC = vriskconc_MCC ; vriskconcsel_minCVar = vriskconc_minCVaR503PercCVaRsel_MCC = PercCVaR_MCC ; PercCVaRsel_minCVar = PercCVaR_minCVar ;504}505506library(zoo)507cAssets = ncol(monthlyR)508colorset = sort(gray( 1-(seq(1,cAssets,1)/(cAssets))^1.5 )) ;509colnames( Wsel_MCC ) = colnames( Wsel_minCVaR ) = labelnames510rownames( Wsel_MCC ) = rownames( PercCVaRsel_MCC ) = round( interpNA(vmusel_MCC)*12,4);511rownames( Wsel_minCVaR ) = rownames( PercCVaRsel_minCVaR ) = round( interpNA(vmusel_minCVaR)*12,4) ;512513rownames( Wsel_minVar ) = rownames( PercCVaRsel_minVar ) = round( interpNA(vmusel_minVar)*12,4) ;514colnames( Wsel_minVar ) = labelnames515516517w.names = c( "US bond" , "S&P 500", "NAREIT" , "GSCI" )518namelabels = c("Mean-StdDev" , "Mean-CVaR","Mean-CVaR concentration" )519l = 2 ; mar1 =c(2,l,2,1.1) ; mar3 = c(3,l+1,3,0.1)520521source("chart.StackedBar.R");522523# Stacked weights plot:524if(clean){525postscript('stackedweightsriskcont_efficientfrontier_withNA_clean.eps')526}else{ postscript('stackedweightsriskcont_efficientfrontier_withNA.eps') }527528layout( matrix( c(1,2,3,4,5,6,7,4), ncol = 2 ) , height= c(1.5,1.5,1.5,0.7), width=1)529530par(mar=mar3 , cex.main=1)531chart.StackedBar2(Wsel_minVar ,col=colorset,space=0, main = namelabels[1], ylab="Weight allocation", las=1, l=3.9, r=0, cex.axis=1, cex.lab=1, cex.main=1, axisnames=T,legend.loc = NULL,ylim=c(0,1),border = F )532chart.StackedBar2(Wsel_minCVaR,col=colorset,space=0, main = namelabels[2], ylab="Weight allocation", las=1, l=3.9, r=0, cex.axis=1, cex.lab=1, cex.main=1, axisnames=T,legend.loc = NULL,ylim=c(0,1),border = F )533chart.StackedBar2(Wsel_MCC ,col=colorset,space=0, main = namelabels[3], ylab="Weight allocation", las=1, l=3.9, r=0, cex.axis=1, cex.lab=1, cex.main=1, axisnames=T, legend.loc = NULL,ylim=c(0,1),border = F )534535par(mar=mar1 , cex.main=1)536plot.new()537legend("center",legend=w.names,fill=colorset,ncol=4)538539par(mar=mar3 , cex.main=1)540chart.StackedBar2(PercCVaRsel_minVar,col=colorset,space=0, main = namelabels[1], ylab="CVaR allocation", las=1, l=3.9, r=0, cex.axis=1, cex.lab=1, cex.main=1, axisnames=T,legend.loc = NULL,ylim=c(0,1),border = F )541chart.StackedBar2(PercCVaRsel_minCVaR,col=colorset,space=0, main = namelabels[2], ylab="CVaR allocation", las=1, l=3.9, r=0, cex.axis=1, cex.lab=1, cex.main=1, axisnames=T,legend.loc = NULL,ylim=c(0,1),border = F )542chart.StackedBar2(PercCVaRsel_MCC,col=colorset,space=0, main = namelabels[3], ylab="CVaR allocation", las=1, l=3.9, r=0, cex.axis=1, cex.lab=1, cex.main=1, axisnames=T,legend.loc = NULL,ylim=c(0,1),border = F )543544dev.off()545546547if(clean){548postscript('stackedweightsriskcont_efficientfrontier_clean.eps')549}else{ postscript('stackedweightsriskcont_efficientfrontier.eps') }550551layout( matrix( c(1,2,3,4,5,6,7,4), ncol = 2 ) , height= c(1.5,1.5,1.5,0.7), width=1)552553par(mar=mar3 , cex.main=1)554chart.StackedBar2(interpNA(Wsel_minVar) ,col=colorset,space=0, main = namelabels[1], ylab="Weight allocation", las=1, l=3.9, r=0, cex.axis=1, cex.lab=1, cex.main=1, axisnames=T,legend.loc = NULL,ylim=c(0,1),border = F )555chart.StackedBar2(interpNA(Wsel_minCVaR),col=colorset,space=0, main = namelabels[2], ylab="Weight allocation", las=1, l=3.9, r=0, cex.axis=1, cex.lab=1, cex.main=1, axisnames=T,legend.loc = NULL,ylim=c(0,1),border = F )556chart.StackedBar2(interpNA(Wsel_MCC) ,col=colorset,space=0, main = namelabels[3], ylab="Weight allocation", las=1, l=3.9, r=0, cex.axis=1, cex.lab=1, cex.main=1, axisnames=T, legend.loc = NULL,ylim=c(0,1),border = F )557558par(mar=mar1 , cex.main=1)559plot.new()560legend("center",legend=w.names,col=colorset,ncol=4,lwd=6)561562par(mar=mar3 , cex.main=1)563chart.StackedBar2(interpNA(PercCVaRsel_minVar),col=colorset,space=0, main = namelabels[1], ylab="CVaR allocation", las=1, l=3.9, r=0, cex.axis=1, cex.lab=1, cex.main=1, axisnames=T,legend.loc = NULL,ylim=c(0,1),border = F )564chart.StackedBar2(interpNA(PercCVaRsel_minCVaR),col=colorset,space=0, main = namelabels[2], ylab="CVaR allocation", las=1, l=3.9, r=0, cex.axis=1, cex.lab=1, cex.main=1, axisnames=T,legend.loc = NULL,ylim=c(0,1),border = F )565chart.StackedBar2(interpNA(PercCVaRsel_MCC),col=colorset,space=0, main = namelabels[3], ylab="CVaR allocation", las=1, l=3.9, r=0, cex.axis=1, cex.lab=1, cex.main=1, axisnames=T,legend.loc = NULL,ylim=c(0,1),border = F )566567dev.off()568569570571#----------------------------------------------------------------------------------------------------572# DISCUSSION RESULTS573574575# unconstrained:57612*vmu_minVar[1] ; sqrt(12)*vstdev_minVar[1] ; vrisk_minVar[1] ; W_minVar[1,] ; PercCVaR_minVar[1,];57712*vmu_minCVaR[1]; sqrt(12)*vstdev_minCVaR[1] ; vrisk_minCVaR[1]; W_minCVaR[1,]; PercCVaR_minCVaR[1,];57812*vmu_MCC[1] ; sqrt(12)*vstdev_MCC[1] ; vrisk_MCC[1] ; W_MCC[1,] ; PercCVaR_MCC[1,];579580> # unconstrained:581> 12*vmu_minVar[1] ; sqrt(12)*vstdev_minVar[1] ; vrisk_minVar[1] ; W_minVar[1,] ; PercCVaR_minVar[1,];582[1] 0.07705461583[1] 0.04967331584[1] 0.0277955585V1 V2 V3 V45861 0.8404353 0.03862133 0.03643427 0.08450912587V1 V2 V3 V45881 0.5620443 0.08734358 0.08376784 0.2668442589> 12*vmu_minCVaR[1]; sqrt(12)*vstdev_minCVaR[1] ; vrisk_minCVaR[1]; W_minCVaR[1,]; PercCVaR_minCVaR[1,];590[1] 0.075321591[1] 0.05230409592[1] 0.0228343593V1 V2 V3 V45942 0.9771176 0 0 0.02288243595V1 V2 V3 V45962 0.9771177 0 0 0.02288231597> 12*vmu_MCC[1] ; sqrt(12)*vstdev_MCC[1] ; vrisk_MCC[1] ; W_MCC[1,] ; PercCVaR_MCC[1,];598[1] 0.08714249599[1] 0.06588349600[1] 0.038659601V1 V2 V3 V46021 0.4733987 0.2070037 0.1843733 0.1352243603V1 V2 V3 V46041 0.25064 0.2505296 0.2497479 0.2490826605606607608cbind( vmu_minVar*12 , vriskconc_minVar ) :609610cbind( vmu_minCVaR*12 , vriskconc_minCVaR ) : 0.0816 is turning point611# [124,] 0.09017165 0.01210119 is turning point612613cbind( vmu_MCC*12 , vrisk_MCC, vriskconc_MCC )614615# Mean/CVaR concentration efficient portfolios616617# On Cleaned Data: Three segments618619> cbind( vmu_MCC*12 , vrisk_MCC, vriskconc_MCC )620[1,] 0.08714249 0.03865900 0.009689492621[2,] 0.08726420 0.03849615 0.009802639622#24623[23,] 0.08997886 0.03585947 0.011824072624[24,] 0.09010885 0.03585032 0.011871467625[25,] 0.09024551 0.03589501 0.011974648626[26,] 0.09036701 0.03594272 0.012064923627[27,] 0.09050353 0.03610158 0.012242378628[28,] 0.09062808 0.03621858 0.012405637629[29,] 0.09075394 0.03635143 0.012544703630[30,] 0.09087482 0.03674130 0.012857458631# 174632[170,] 0.10996933 0.06748652 0.039200481633[171,] 0.11008934 0.06789785 0.042263237634[172,] 0.11020953 0.06842979 0.045351289635[173,] 0.11033011 0.06909579 0.048542053636[174,] 0.11045013 0.06985814 0.051639874637[175,] 0.11057105 0.07075940 0.054836023638[176,] 0.11069142 0.07176853 0.057990740639640[193,] 0.11273404 0.10433383 0.104615672641[194,] 0.11273413 0.10433618 0.104617643642643> W_MCC644V1 V2 V3 V46451 4.733987e-01 0.20700375 0.1843733 1.352243e-016463 4.759377e-01 0.20759359 0.1855799 1.308888e-01647#2464823 5.561089e-01 0.22228044 0.2020208 1.958989e-0264924 5.614145e-01 0.22306274 0.2027785 1.274428e-0265025 5.651643e-01 0.22387831 0.2036273 7.330121e-0365126 5.664972e-01 0.22511059 0.2048818 3.510355e-0365227 5.674492e-01 0.22627029 0.2060026 2.778562e-0465328 5.623908e-01 0.22852300 0.2080519 1.034299e-0365429 5.595434e-01 0.23008873 0.2098842 4.836782e-04655656# 174657170 1.444844e-02 0.51421725 0.4710510 2.833091e-04658171 1.074035e-02 0.51609949 0.4727863 3.738407e-04659172 7.379454e-03 0.51796198 0.4745030 1.555284e-04660173 3.671705e-03 0.51988524 0.4762691 1.739490e-04661174 2.930070e-04 0.52170814 0.4779540 4.485562e-05662175 2.228161e-05 0.50313662 0.4968072 3.392269e-05663176 9.137182e-07 0.48289134 0.5170837 2.405561e-05664665199 1.461185e-06 0.01379234 0.9862059 2.992504e-07666200 8.716672e-07 0.01377375 0.9862242 1.214785e-06667668# Unconstrained: Equal Risk Contribution Portfolio:669# > W_MCC[1,]670# 0.4733987 0.2070037 0.1843733 0.1352243671#> PercCVaR_MCC[1,]672# 0.25064 0.2505296 0.2497479 0.2490826673# > vmu_MCC[1]*12674# [1] 0.08714249675#> vrisk_MCC[1]676#[1] 0.038659677#> vriskconc_MCC[1]678#[1] 0.009689492679# Segment 1: increasing allocation to bonds and decreasing allocation to commodities680# Portfolio risk concentration increases, portfolio risk decreases681# > W_MCC[25:27,]682# 0.7052788 0.1584357 0.1321813 0.0041042550683# 0.7085301 0.1597522 0.1313759 0.0003417814684# 0.7025028 0.1628656 0.1344935 0.0001380022685#> vmu_MCC[26]*12686#[1] 0.0812571687#> vrisk_MCC[26]688#[1] 0.03352778689#> vriskconc_MCC[26]690#[1] 0.0112691# Segment 2: increasing allocation to both US equity and EAFE692# Portfolio risk concentration and risk increase together693# > W_MCC[138:140,]694# 0.0078323664 0.5106416 0.4814090 1.169711e-04695# 0.0005986683 0.5136429 0.4856355 1.228907e-04696# 0.0002258733 0.5201106 0.4796231 4.051641e-05697# > PercCVaR_MCC[138:140,]698# 0e+00 0.4999 0.5000 0699#> vmu_MCC[139]*12700#[1] 0.09483605701# > vrisk_MCC[139]702# [1] 0.09808784703# > vriskconc_MCC[139]704# [1] 0.049705# Segment 3: increasing alllocation to US equity and decreasing to EAFE706# Portfolio risk concentration and risk increase together707# > tail(W_MCC,1)708# 5.45402e-05 0.9998762 4.340072e-05 2.585630e-05709710711712713