I attach what I think is a syntactically correct version of the email, which looks like it was pasted from HTML.

We'll try to take a look.

Regards,

Brian

On 10/12/2016 04:34 AM, Marco Mastrangeli wrote:
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.weyla...@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.mastrang...@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@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]]

_______________________________________________
R-SIG-Finance@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.



--
Brian G. Peterson
http://braverock.com/brian/
Ph: 773-459-4973
IM: bgpbraverock
# Reported by Marco Mastrrangeli <marco.mastrang...@gmail.com>
# 2016-10-12
# possible issue in constrained_objective

#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
# correspondence between constrained_objective and the function VaR of
# PerformanceAnalytics package.
# I repeat 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
# correspondence 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 correspondence
# (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.
_______________________________________________
R-SIG-Finance@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.

Reply via email to