CVaR and Penalty Augmented objective function
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.