<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>-----Original Message-----<br>From: gsoc-porta-bounces@lists.r-forge.r-project.org [mailto:gsoc-porta-bounces@lists.r-forge.r-project.org] On Behalf Of Brian G. Peterson<br>Sent: Sunday, July 28, 2013 11:31 AM<br>To: gsoc-porta@r-forge.wu-wien.ac.at<br>Subject: Re: [GSoC-PortA] Constraints and Objectives Separately in Optimize.Portfolio</p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>I think it is worth supporting, and I don't think it will be too hard.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>If we allow optimize.portfolio to take portfolio( the default) as well as constraints and objectives arguments (with default NULL) we can reconstitute a 'full' portfolio object with constraints and objectives included inside optimize.portfolio.  I'd suggest that the behavior in this case would be to append the constraints list/object or objectives list/object to the slots in the portfolio specification.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>I think this is important because while constraints, by definition, usually require some knowledge of the portfolio, objectives, again by definition, can often be completely independent of the portfolio specification.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Another related use case which we should begin discussing is the ability to store multiple constraint and objective sets.  See for example the various benchmark optimizations Peter and I used in the 2012 R/Finance seminar.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>To understand the solution space, it is very common for an investor to calculate GMV, Markowitz, minETL, risk budget, etc portfolios.  How should we represent this multiple specification model?  A list of portfolio specifications?  I don't have an implementation answer right now, I'm just aware of the user case for supporting it.<o:p></o:p></p><p class=MsoPlainText><b><i><span style='color:black'>[Doug] Indeed, this is crucial.  I did the following with backtest code I used in the spring – it has a function backtest.weight that generates the time series of rebalanced weights, and looks like this locally (one of a bunch of examples):<o:p></o:p></span></i></b></p><p class=MsoPlainText><b><i><span style='color:black'><o:p> </o:p></span></i></b></p><p class=MsoPlainText><b><i><span style='color:black'>weight.mvlub <- backtest.weight(ret, t.mw, FUN = "port.mvlub",blo,bup)$weight<o:p></o:p></span></i></b></p><p class=MsoPlainText><b><i><span style='color:black'>weight.mveq <- backtest.weight(ret, t.mw, port.eq)$weight<o:p></o:p></span></i></b></p><p class=MsoPlainText><b><i><span style='color:black'><o:p> </o:p></span></i></b></p><p class=MsoPlainText><b><i><span style='color:black'>So I’m wondering if we can’t have FUN = optimize.portfolio, and pass the arguments for constraints and/or ojbectives as in the case of blo and bup for each instance of executing backtest.weight?  I will, as we discussed in Hood River, end up using the PortfolioAnalytics backtest capability.<o:p></o:p></span></i></b></p><p class=MsoPlainText><b><i><span style='color:black'><o:p> </o:p></span></i></b></p><p class=MsoPlainText><b><i><span style='color:black'>Best,<o:p></o:p></span></i></b></p><p class=MsoPlainText><b><i><span style='color:black'>Doug <o:p></o:p></span></i></b></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText>Regards,<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Brian<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>On 07/28/2013 01:17 PM, Doug Martin wrote:<o:p></o:p></p><p class=MsoPlainText>> Ross,<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Earlier this week Brian and I discussed the desirability of being able <o:p></o:p></p><p class=MsoPlainText>> to specify constraints and objectives separately in <o:p></o:p></p><p class=MsoPlainText>> optimize.portfolio, and agreed that this is worth doing.  Brian, please confirm.<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Thanks,<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Doug<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> *From:*Ross Bennett [<a href="mailto:rossbennett34@gmail.com"><span style='color:windowtext;text-decoration:none'>mailto:rossbennett34@gmail.com</span></a>]<o:p></o:p></p><p class=MsoPlainText>> *Sent:* Thursday, July 18, 2013 9:05 AM<o:p></o:p></p><p class=MsoPlainText>> *To:* Doug Martin<o:p></o:p></p><p class=MsoPlainText>> *Cc:* Guy Yollin<o:p></o:p></p><p class=MsoPlainText>> *Subject:* Constraints and Objectives Separately in Optimize.Portfolio<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> It is doable, but it won't be an easy fix because <o:p></o:p></p><p class=MsoPlainText>> optimize.portfolio_v2, constrained_objective_v2, and the subfunctions <o:p></o:p></p><p class=MsoPlainText>> are designed to operate on a single portfolio object.<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> It is possible to change constraints or objectives without recreating <o:p></o:p></p><p class=MsoPlainText>> the entire portfolio object. You can do this for constraints as well <o:p></o:p></p><p class=MsoPlainText>> as objectives. See example below, will this suffice?<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> # Load necessary packages<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> library(PortfolioAnalytics)<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> library(ROI)<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> library(ROI.plugin.glpk)<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> # Load the edhec data<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> data(edhec)<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> ret <- edhec[, 1:4]<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> funds <- colnames(ret)<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> # Specify a portfolio object<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> pspec <- portfolio.spec(assets=funds)<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> # Add constraints<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> pspec <- add.constraint(portfolio=pspec, type="weight_sum",<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>>                          min_sum=0.99, max_sum=1.01, enabled=TRUE)<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> pspec <- add.constraint(portfolio=pspec, type="box", min=0.1, max=0.4,<o:p></o:p></p><p class=MsoPlainText>> enabled=TRUE)<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> pspec <- add.objective_v2(portfolio=pspec, type="return", name="mean",<o:p></o:p></p><p class=MsoPlainText>> enabled=TRUE)<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> opt <- optimize.portfolio_v2(R=ret, portfolio=pspec, <o:p></o:p></p><p class=MsoPlainText>> optimize_method="ROI")<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> opt$weights<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> # The box constraints is the 2nd element (indexnum=2) in the <o:p></o:p></p><p class=MsoPlainText>> constraints list<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> # We can update this in place by specifying the indexnum argument in <o:p></o:p></p><p class=MsoPlainText>> add.constraint<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> # The indexnum depends on the order the constraint was added<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> pspec$constraints<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> # Now say we wanted to change the box constraints to for specific per <o:p></o:p></p><p class=MsoPlainText>> asset weights<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> pspec <- add.constraint(portfolio=pspec, type="box",<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>>                          min=c(0.1, 0.05, 0.1, 0.15),<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>>                          max=c(0.4, 0.4, 0.5, 0.45),<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>>                          indexnum=2, enabled=TRUE)<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> opt_new <- optimize.portfolio_v2(R=ret, portfolio=pspec,<o:p></o:p></p><p class=MsoPlainText>> optimize_method="ROI")<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> opt_new$weights<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Ross<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> On Thu, Jul 18, 2013 at 10:05 AM, Doug Martin <martinrd@comcast.net <o:p></o:p></p><p class=MsoPlainText>> <<a href="mailto:martinrd@comcast.net"><span style='color:windowtext;text-decoration:none'>mailto:martinrd@comcast.net</span></a>>> wrote:<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Do you think you can fairly easily make the fix I suggested concerning <o:p></o:p></p><p class=MsoPlainText>> having optimize.portfolio take separate constraint and objective <o:p></o:p></p><p class=MsoPlainText>> arguments, in case the is not already possible?<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Doug<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> *From:*Ross Bennett [mailto:rossbennett34@gmail.com <o:p></o:p></p><p class=MsoPlainText>> <<a href="mailto:rossbennett34@gmail.com"><span style='color:windowtext;text-decoration:none'>mailto:rossbennett34@gmail.com</span></a>>]<o:p></o:p></p><p class=MsoPlainText>> *Sent:* Thursday, July 18, 2013 7:24 AM<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> *To:* Doug Martin<o:p></o:p></p><p class=MsoPlainText>> *Cc:* Guy Yollin<o:p></o:p></p><p class=MsoPlainText>> *Subject:* Re: Recurrent Problem<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Excellent, glad to hear that fixed the problem.<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Ross<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> On Thu, Jul 18, 2013 at 9:16 AM, Doug Martin <martinrd@comcast.net <o:p></o:p></p><p class=MsoPlainText>> <<a href="mailto:martinrd@comcast.net"><span style='color:windowtext;text-decoration:none'>mailto:martinrd@comcast.net</span></a>>> wrote:<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> I did as you suggested and that fixed the problem.  Thanks!  Doug<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> *From:*Ross Bennett [mailto:rossbennett34@gmail.com <o:p></o:p></p><p class=MsoPlainText>> <<a href="mailto:rossbennett34@gmail.com"><span style='color:windowtext;text-decoration:none'>mailto:rossbennett34@gmail.com</span></a>>]<o:p></o:p></p><p class=MsoPlainText>> *Sent:* Thursday, July 18, 2013 4:18 AM<o:p></o:p></p><p class=MsoPlainText>> *To:* Doug Martin<o:p></o:p></p><p class=MsoPlainText>> *Cc:* Guy Yollin<o:p></o:p></p><p class=MsoPlainText>> *Subject:* Re: Recurrent Problem<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Doug,<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> That does seem to be the exact problem you were running into before. I <o:p></o:p></p><p class=MsoPlainText>> found this discussion about dependencies for the methods package.<o:p></o:p></p><p class=MsoPlainText>> <a href="http://grokbase.com/t/r/r-devel/1272tva0c2/rd-dependency-problem-for-h"><span style='color:windowtext;text-decoration:none'>http://grokbase.com/t/r/r-devel/1272tva0c2/rd-dependency-problem-for-h</span></a><o:p></o:p></p><p class=MsoPlainText>> asarg<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> I'm not familiar with WinEdt and Stangle, but it might be calling <o:p></o:p></p><p class=MsoPlainText>> Rscript to run the R code chunks and the methods package doesn't load <o:p></o:p></p><p class=MsoPlainText>> with Rscript. Can you try putting require(methods) in the first R code <o:p></o:p></p><p class=MsoPlainText>> chunk?<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Hope that helps,<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Ross<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> On Wed, Jul 17, 2013 at 10:14 PM, Doug Martin <martinrd@comcast.net <o:p></o:p></p><p class=MsoPlainText>> <<a href="mailto:martinrd@comcast.net"><span style='color:windowtext;text-decoration:none'>mailto:martinrd@comcast.net</span></a>>> wrote:<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Ross,<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> When I run the attached .Rnw file from WinEdt it fails and I get the <o:p></o:p></p><p class=MsoPlainText>> following _Err.log message:<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Error:  chunk 1<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Error in add.constraint(portfolio = pspec, type = "full_investment", <o:p></o:p></p><p class=MsoPlainText>> enabled = TRUE) :<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>>    could not find function "hasArg"<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Execution halted<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> I believe this was the same error message I got when I tried to run <o:p></o:p></p><p class=MsoPlainText>> your Vignette (remember the “could not find function “hasArg”.<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> If you run Stangle on the .Rnw file and execute it, it runs fine.<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> I tried R2.15.1 as well as 3.0.1 and have the same problem.<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Any idea how to fix this problem?<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Doug<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> P.S. I am running other R code with Sweave in the latex document for <o:p></o:p></p><p class=MsoPlainText>> Chapter 1 with no problem.<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>--<o:p></o:p></p><p class=MsoPlainText>Brian G. Peterson<o:p></o:p></p><p class=MsoPlainText><a href="http://braverock.com/brian/"><span style='color:windowtext;text-decoration:none'>http://braverock.com/brian/</span></a><o:p></o:p></p><p class=MsoPlainText>Ph: 773-459-4973<o:p></o:p></p><p class=MsoPlainText>IM: bgpbraverock<o:p></o:p></p><p class=MsoPlainText>_______________________________________________<o:p></o:p></p><p class=MsoPlainText>GSoC-PortA mailing list<o:p></o:p></p><p class=MsoPlainText><a href="mailto:GSoC-PortA@lists.r-forge.r-project.org"><span style='color:windowtext;text-decoration:none'>GSoC-PortA@lists.r-forge.r-project.org</span></a><o:p></o:p></p><p class=MsoPlainText><a href="http://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/gsoc-porta"><span style='color:windowtext;text-decoration:none'>http://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/gsoc-porta</span></a><o:p></o:p></p></div></body></html>