[GSoC-PortA] Issue passing "clean"?

Ross Bennett rossbennett34 at gmail.com
Sun Oct 13 03:43:32 CEST 2013


I'm glad it works, thanks for the feedback... and thanks for your patience
while I get things like this ironed out.

Ross


On Fri, Oct 11, 2013 at 7:37 AM, Peter Carl <peter at braverock.com> wrote:

> Works great - thanks again...
>
> pcc
> --
> Peter Carl
> http://www.braverock.com/peter
>
> > Thanks for doing this - I'll test it today.
> >
> > To your point on comparing different methods - I completely agree.  That
> > said, comparing the outputs of the different methods can be useful for
> > understanding methodological differences and ferreting out issues like
> > this one.
> >
> > The heuristic methods are less accurate and possibly less precise than
> the
> > closed form methods (it isn't clear to me how much I care about this in
> > the face of estimation error), not to mention slower and more compute
> > intensive (but I know I care about those issues), and we'll always prefer
> > the latter when they are applicable.  The heuristic methods, of course,
> > have their place in visualization and developing intuition about the more
> > 'abstract' methods, as well as in more complex objective sets.
> >
> > I actually identified this issue comparing the two ROI-based methods,
> > noting that one of the dimensions was "off".  Although I'm guessing that
> > this will take care of the issue, I'm not entirely sure.  I'm glad you
> > told me that none of the arguments were being passed - it gives me some
> > comfort that the mETL measure was probably being calc'd at 95% instead of
> > 91.7% in the ROI optimization - this change should impact the portfolio
> > selected significantly.  So hopefully this will work.
> >
> > pcc
> > --
> > Peter Carl
> > http://www.braverock.com/peter
> >
> >> Peter,
> >>
> >> In commit r3216 I made revisions so that the ROI solvers recognize clean
> >> and any other arguments in the $arguments slot in each objective. I am
> >> really glad you brought this up because I realized that nothing in the
> >> $arguments slot was being recognized for optimize_method="ROI"... this
> >> was
> >> something I overlooked. This is corrected and cleaned returns can now be
> >> used with optimize_method="ROI" for the QP/LP problems. I also added
> >> "StdDev" as a valid objective name, but still use "var" to calculate the
> >> variance-covariance matrix used in the objective function.
> >>
> >> Regarding your example above with the min SD portfolio having a lower
> >> mETL
> >> than the min mETL. I'm not 100% sure on this, but it could depend on
> >> if/how
> >> you call constrained_objective to calculate the objective measures. For
> >> example, the results of the minimum ETL portfolio with ROI will be
> >> different than the minimum mETL portfolio with RP. The LP formulation to
> >> minimize ETL uses empirical returns data whereas the optimization with
> >> random portfolios uses modified ETL by default which will likely result
> >> in
> >> different optimal weights. It is a case of comparing "apples to
> >> oranges".
> >>
> >> Attached is a quick script demonstrating this. Relevant outputs below.
> >>
> >>> # Minimum ETL using ROI
> >>> optROI <- optimize.portfolio(R=ret, portfolio=tmp1,
> >> optimize_method="ROI", trace=TRUE)
> >> [1] 0.0833
> >>> extractObjectiveMeasures(optROI)
> >> $ES
> >> [1] 0.01718848
> >>
> >>> # Use constrained_objective to calculate mETL with the optimal weights
> >> from optROI
> >>> constrained_objective(w=optROI$weights, R=ret, portfolio=tmp1,
> >> trace=TRUE)$objective_measures
> >> $ES
> >>          [,1]
> >> ES 0.01761023
> >> attr(,"names")
> >> [1] "ES"
> >>
> >>> # minimum mETL with random portfolios
> >>> optRP <- optimize.portfolio(R=ret, portfolio=tmp1,
> >> optimize_method="random", search_size=2000, trace=TRUE)
> >>> extractObjectiveMeasures(optRP)
> >> $ES
> >>          [,1]
> >> ES 0.01740961
> >> attr(,"names")
> >> [1] "ES"
> >>
> >> Ross
> >>
> >>
> >>
> >> On Wed, Oct 9, 2013 at 3:20 PM, Ross Bennett
> >> <rossbennett34 at gmail.com>wrote:
> >>
> >>> Peter,
> >>>
> >>> Thanks for the detailed description of what is going on. I will be able
> >>> to
> >>> dig into this deeper tomorrow afternoon, but here are some initial
> >>> comments.
> >>>
> >>> See comments in-line.
> >>>
> >>>
> >>>
> >>> On Wed, Oct 9, 2013 at 1:38 PM, Peter Carl <peter at braverock.com>
> wrote:
> >>>
> >>>> Ross,
> >>>>
> >>>> I'm running into the following:
> >>>>
> >>>> > buoys.portfmeas
> >>>>                 Mean      StdDev       mETL
> >>>> MinSD    0.005435103 0.009286484 0.01357282
> >>>> MinmETL  0.005846839 0.011196709 0.01371471
> >>>>
> >>>> Note that the minimum standard deviation portfolio has a lower mETL
> >>>> than
> >>>> the Min mETL portfolio.  Both were calculated with ROI.
> >>>>
> >>>> MinSD.portf <- add.objective(portfolio=init.portf,
> >>>>   type="risk", # the kind of objective this is
> >>>>   name="var", # name of the function
> >>>>   arguments=list(clean=clean)
> >>>> )
> >>>>
> >>>> > MinSD.ROI<-optimize.portfolio(R=R,
> >>>> +   portfolio=MinSD.portf,
> >>>> +   optimize_method='ROI'
> >>>> +   )
> >>>> Warning message:
> >>>> In constrained_objective(w = weights, R = R, portfolio, trace = TRUE,
> >>>> :
> >>>>   some arguments stored for var do not match
> >>>>
> >>>> That warning is true, "var" doesn't take that list of arguments,
> >>>> including
> >>>> "clean".  But when I use name="StdDev" in the portfolio construction,
> >>>> I
> >>>> get the following error:
> >>>>
> >>>> Error in optimize.portfolio(R = R, portfolio = MinSD.portf,
> >>>> optimize_method = "ROI") :
> >>>>   ROI only solves mean, var, or sample ETL/ES/CVaR type business
> >>>> objectives, choose a different optimize_method.
> >>>> In addition: Warning message:
> >>>> In is.na(le) : is.na() applied to non-(list or vector) of type 'NULL'
> >>>>
> >>>> So the first issue is to map "StdDev" into the list of acceptable
> >>>> functions for that solver.  It should then accept the "clean" argument
> >>>> and
> >>>> that should fix part of the issue.
> >>>>
> >>>
> >>> Got it, I'll add functionality for StdDev to be accepted by the ROI
> >>> solvers. I'll have to add StdDev, but still use "var" to calculate the
> >>> variance-covariance matrix used in the objective function. I will also
> >>> have
> >>> to detect the "clean" argument so that the cleaned returns are used to
> >>> calculate the variance-covariance matrix.
> >>>
> >>>
> >>>>
> >>>> The second issue is that the Min mETL portfolio being identified isn't
> >>>> being plotted as the minimum mETL portfolio being identified in the
> >>>> cloud
> >>>> of random portfolios.  This is the same issue I saw earlier that
> >>>> turned
> >>>> out to be related to "clean" not being applied consistently across
> >>>> objectives.
> >>>>
> >>>> In this case, it should be:
> >>>> p=1-1/12
> >>>> clean="boudt"
> >>>> MinmETL.portf <- add.objective(portfolio=init.portf,
> >>>>   type="risk", # the kind of objective this is
> >>>>   name="ES", # the function to minimize
> >>>>   arguments=list(p=p, clean=clean)
> >>>> )
> >>>>
> >>>> > MinmETL.ROI<-optimize.portfolio(R=R,
> >>>> +   portfolio=MinmETL.portf,
> >>>> +   optimize_method='ROI',
> >>>> +   trace=TRUE, verbose=TRUE
> >>>> +   )
> >>>> Warning message:
> >>>> In is.na(le) : is.na() applied to non-(list or vector) of type 'NULL'
> >>>>
> >>>> I'm not sure if the warning is related.  But I'm wondering if "clean"
> >>>> is
> >>>> getting passed into "ES" with ROI.  If it isn't, then the optimizer is
> >>>> likely selecting the wrong portfolio.  Could you take a look at this
> >>>> when
> >>>> you have a moment?
> >>>>
> >>>
> >>> It could be related, in general, the "clean" argument is not passed to
> >>> ROI. I should be able to make some changes so that the cleaned returns
> >>> are
> >>> used for the ROI solvers. I'll take a closer look and report back with
> >>> my
> >>> findings.
> >>>
> >>>
> >>>>
> >>>> Thanks,
> >>>>
> >>>> pcc
> >>>> --
> >>>> Peter Carl
> >>>> http://www.braverock.com/peter
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> 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
> >>>>
> >>>
> >>>
> >> _______________________________________________
> >> 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
> >>
> >
> > _______________________________________________
> > 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
> >
>
>
> _______________________________________________
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/gsoc-porta/attachments/20131012/c24fce67/attachment.html>


More information about the GSoC-PortA mailing list