[R-SIG-Finance] CVaR and Penalty Augmented objective function

Marco Mastrangeli marco.mastrangeli at gmail.com
Wed Oct 12 11:34:48 CEST 2016


Hi Michael,

thanks for your reply, I apologize for the not full clarity of my question.
In the following, I try to report a full example.

#Library
*library(PerformanceAnalytics)*
*library(PortfolioAnalytics)*

#Returns data present in "PortfolioAnalytics"
*data(indexes)*
*indexes <- indexes[,1:4]*

#New Portfolio Object
*Wcons <- portfolio.spec(assets=colnames(indexes))*

#Add box constraints
*Wcons <- add.constraint(portfolio=Wcons, type='box', min=0, max=1)*

#Add the full investment constraint
*Wcons <- add.constraint(portfolio=Wcons, type="full_investment")*

#Add Objective specification: VaR with default parameter for vector "mu"
(EXAMPLE 1)
*VaRObjSpec <- add.objective(portfolio=Wcons, type="risk", name="VaR",
arguments=list(p=0.95), enabled=TRUE)*

#The value of the objective function is:
*constrained_objective(w=rep(1/4,4), R=indexes, portfolio=VaRObjSpec)    #* VaR
*0.0499467*

#This is the VaR of the equal-weight portfolio as computed by the function
VaR in the PerformanceAnalytics package.
*VaRout <- VaR(indexes, weights=rep(1/4,4), p=0.95,
portfolio_method="component")*
*VaRout$MVaR       # *[1,]* 0.0499467*

Now, I repet the VaR example with a user-defined vector for the parameter
"mu".

#User-defined vector "mu"
*myMu = rep(0.01, 4)*

#Add Objective specification: VaR with user-defined parameter for vector
"mu"
*myVaRObjSpec <- add.objective(portfolio=Wcons, type="risk", name="VaR",
arguments=list(p=0.95, mu=myMu), enabled=TRUE)*

#The value of the objective function is:
*constrained_objective(w=rep(1/4,4), R=indexes, portfolio=myVaRObjSpec)
 #* VaR *0.04638622*

#This is the VaR of the equal-weight portfolio as computed by the function
VaR in the PerformanceAnalytics package with *mu=myMu.*
*myVaRout <- VaR(indexes, weights=rep(1/4,4),
p=0.95, mu=myMu, portfolio_method="component")*
*myVaRout$MVaR       # *[1,]* 0.04638622*

So, using the default and user-defined parameter for "mu" there is
corrispondence between constrained_objective and the function VaR of
PerformanceAnalytics package.
I repet the example but now adding CVaR as risk objective in Wcons
portfolio.

#Add Objective specification: CVaR with default parameter for vector "mu"
(EXAMPLE 2)
*CVaRObjSpec <- add.objective(portfolio=Wcons, type="risk", name="CVaR",
arguments=list(p=0.95), enabled=TRUE)*

#The value of the objective function is:
*constrained_objective(w=rep(1/4,4), R=indexes, portfolio=CVaRObjSpec)    #* ES
*0.1253199*

#This is the CVaR of the equal-weight portfolio as computed by the function
ES in the PerformanceAnalytics package.
*CVaRout <- ES(indexes, weights=rep(1/4,4), p=0.95,
portfolio_method="component")*
*CVaRout$MES       # *[1,]* 0.1253199*

Now, I repet the CVaR example with a user-defined vector for the parameter
"mu".

#User-defined vector "mu"
*myMu = rep(0.01, 4)*

#Add Objective specification: CVaR with user-defined parameter for vector
"mu"
*myCVaRObjSpec <- add.objective(portfolio=Wcons, type="risk", name="CVaR",
arguments=list(p=0.95, mu=myMu), enabled=TRUE)*

#The value of the objective function is:
*constrained_objective(w=rep(1/4,4), R=indexes, portfolio=myCVaRObjSpec)
 #* ES *0.1217594*

#This should be the CVaR of the equal-weight portfolio as computed by the
function ES in the PerformanceAnalytics package with *mu=myMu.*
*myCVaRout <- ES(indexes, weights=rep(1/4,4),
p=0.95, mu=myMu, portfolio_method="component")*
*myCVaRout$MES       # *[1,]* 0.1235878*

In this case, using the user-defined parameter for "mu" there is no
corrispondence between the value of constrained_objective (0.1217594*) *and
the result of function ES of PerformanceAnalytics package (0.1235878). Why
there is no match in this case?
This not the case for the matrix parameter (for portfolio) "sigma": if I
use a user-defined sigma matrix, there is always corrispondence (without,
obviosly, costraints that augment the penalty augmented objective
function) between the value of constrained_objective (with VaR/CVaR risk
objective) and the result of function VaR/ES of PerformanceAnalytics
package.

I hope my example is clear enough to illustrate the question.
Thanks a lot for your attention.
Marco


On Wed, Oct 12, 2016 at 1:55 AM, Michael Weylandt <
michael.weylandt at gmail.com> wrote:

> Hi Marco,
>
> Can you put together a minimal reproducible example [1,2] so that it's
> easier for others to answer your question?
>
> For this problem, I'd recommend using the edhec data distributed with
> PerformanceAnalytics.
>
> Thanks,
> Michael
>
> [1] http://stackoverflow.com/questions/5963269/how-to-make-
> a-great-r-reproducible-example
> [2] http://adv-r.had.co.nz/Reproducibility.html
>
> On Tue, Oct 11, 2016 at 11:46 AM, Marco Mastrangeli
> <marco.mastrangeli at gmail.com> wrote:
> > I have a question about the use of the "mu" parameter in the functions
> > StdDev, VaR e CVaR.
> > As reference data we can use data in the paper "Vignette: Portfolio
> > Optimization with CVaR budgets in PortfolioAnalytics".
> > If we use the default parameters for "mu" and "sigma", there is a
> > match between
> >
> >>constrained_objective( w = rep(1/4,4) , R = indexes, portfolio = ObjSpec)
> >                [,1]
> > ES 0.1253199
> >
> > and
> >
> >>out<-ES(indexes, weights = rep(1/4,4),p=0.95,
> portfolio_method="component")
> >> out$MES
> >                 [,1]
> > [1,] 0.1253199
> >
> > as explained by the authors.
> > If I insert a user-defined sigma matrix for the "sigma" parameter, the
> > match is still there between this two exspressions. If I insert a
> > user-defined vector for the "mu" parameter (for example "mu=rep(0.01,
> 4)",
> > the result of the two exspressions is the same only for portafolio with
> > risk objective function StdDev and VaR, not for CVaR.
> >
> > VaR case:
> >>ObjSpec = add.objective(portfolio=Wcons, type="risk", name="VaR",
> > arguments=list(p=0.95, mu=rep(0.01,4)), enabled=TRUE)
> >> constrained_objective(w=rep(1/4,4), R=indexes, portfolio=ObjSpec)
> >                   [,1]
> > VaR 0.04638622
> >
> >>out<-VaR(indexes, weights=rep(1/4,4), p=0.95, mu=rep(0.01,4),
> > portfolio_method="component")
> >> out
> > $MVaR
> >                  [,1]
> > [1,] 0.04638622
> >
> >
> > CVaR case:
> >>ObjSpec = add.objective(portfolio=Wcons, type="risk", name="CVaR",
> > arguments=list(p=0.95, mu=rep(0.01,4)), enabled=TRUE)
> >>constrained_objective(w=rep(1/4,4), R=indexes, portfolio=ObjSpec)
> >                 [,1]
> > ES 0.1217594
> >
> >>out<-ES(indexes, weights=rep(1/4,4), p=0.95, mu=rep(0.01,4),
> > portfolio_method="component")
> >> out
> > $MES
> >                 [,1]
> > [1,] 0.1235878
> >
> > I can't find the explanation for this thing. Thanks a lot for your
> > attention.
> >
> > Marco
> >
> >         [[alternative HTML version deleted]]
> >
> > _______________________________________________
> > R-SIG-Finance at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> > -- Subscriber-posting only. If you want to post, subscribe first.
> > -- Also note that this is not the r-help list where general R questions
> should go.
>

	[[alternative HTML version deleted]]



More information about the R-SIG-Finance mailing list