[GSoC-PortA] Quick question on multipliers and constrained_objective()

Doug Martin martinrd at comcast.net
Sat Jun 22 05:44:33 CEST 2013


Small comment:  a lot (if not most) literature on risk takes risk as a
positive number, so puts a minus sign on the VaR quantile, etc.  I
previously noticed that PerformanceAnalytics takes risk as negative, had the
thought to change that.


-----Original Message-----
From: gsoc-porta-bounces at lists.r-forge.r-project.org
[mailto:gsoc-porta-bounces at lists.r-forge.r-project.org] On Behalf Of Brian
G. Peterson
Sent: Friday, June 21, 2013 8:10 PM
To: gsoc-porta at r-forge.wu-wien.ac.at
Subject: Re: [GSoC-PortA] Quick question on multipliers and
constrained_objective()

On 06/21/2013 08:31 PM, Ross Bennett wrote:
> Hi All,
>
> I have a quick question on how the multiplier is used inside of the
> constrained_objective() function.
>
> The code below is from lines 230-248 in constrained_objective.R for 
> objects of class return_objective and portfolio_risk_objective.
>
>            # now set the new value of the objective output
>            if(inherits(objective,"return_objective")){
>                if (!is.null(objective$target) & 
> is.numeric(objective$target)){ # we have a target
>                    out = out +
> penalty*abs(objective$multiplier)*abs(tmp_measure-objective$target)
>                }
>                # target is null or doesn't exist, just maximize, or 
> minimize violation of constraint
>                out = out + abs(objective$multiplier)*tmp_measure
>            } # end handling for return objectives
>
>            if(inherits(objective,"portfolio_risk_objective")){
>              if (!is.null(objective$target) & 
> is.numeric(objective$target)){ # we have a target
>                  out = out +
> penalty*abs(objective$multiplier)*abs(tmp_measure-objective$target)
>                  #should we also penalize risk too low for risk targets?
> or is a range another objective?
>                  #    # half penalty for risk lower than target
>                  #    if(  prw < (.9*Riskupper) ){ out = out +
> .5*(penalty*( prw - Riskupper)) }
>              }
>              # target is null or doesn't exist, just maximize, or 
> minimize violation of constraint
>              out = out + abs(objective$multiplier)*tmp_measure
>            } #  univariate risk objectives
>
> When specifying objectives, if we want to maximize return, we would 
> set
> multiplier=-1 and if we wanted to minimize risk we would set
> multiplier=1 in the objective object.
>
> Because the code below takes the absolute value of the multiplier 
> (abs(objective$multiplier)), doesn't this make the multiplier have no 
> effect?
>
> Any thoughts or insight is much appreciated.

I think your analysis of the code seems correct.

Returns are positive numbers, risk, generally negative numbers.

 From the svn logs, the abs was added in revision 2327 by Peter with a
commit log:

- added abs to multiplier when using targets to keep searches directionally
correct

the diff between that revision and the previous revision is here:

https://r-forge.r-project.org/scm/viewvc.php/pkg/PortfolioAnalytics/R/constr
ained_objective.R?root=returnanalytics&r1=2326&r2=2327

 From the comment, it would seem that Peter figured that he needed abs()
when there was a target, and multiplier is just a scalar.

That doesn't explain why it would be applied in all cases.

Maybe Peter remembers why?

I'll update my development environment to current code in the morning and
see if I can't run some of the code from the seminar script:

/pkg/PortfolioAnalytics/sandbox/script.workshop2012.R

usually, when I'm trying to understand what's going on in some of this code,
I use simple objectives (maximize return, minimize risk, etc), a small
portfolio of only a few assets, and random portfolios so that I can see the
entire space and figure out if things are being done correctly.

I'll try to construct some sort of contrived example tomorrow.

Regards,

- Brian


--
Brian G. Peterson
http://braverock.com/brian/
Ph: 773-459-4973
IM: bgpbraverock
_______________________________________________
GSoC-PortA mailing list
GSoC-PortA at lists.r-forge.r-project.org
http://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/gsoc-porta



More information about the GSoC-PortA mailing list