Another Google Summer of Code (GSoC) project this summer focused on creating functions for doing returns-based performance attribution. I’ve always been a little puzzled about why this functionality wasn’t covered already, but I think that most analysts do this kind of work in Excel. That, of course, has its own perils. But beyond the workflow issues, there have been a number of methodological refinements through time that I’m guessing most analysts don’t take advantage of. Furthermore, FactSet, Morningstar, and other vendors provide attribution functionality embedded within their reporting functions.
I’m of the opinion that R is a natural place for this kind of functionality to reside, and portfolio attribution has long been on the list of additions to the PortfolioAnalytics package. The calculations are relatively straight forward, but the mechanics of specifying and managing a portfolio hierarchy can be inconvenient. They require an attention to calculation order and other details, as well.
The mentors for this project included David Cariño, who is a Research Fellow at Russell Investments. He is also a co-author of the book that was used as a reference for the project, and he teaches a course on this topic at UW. Doug Martin, who is a Professor of Statistics, Adjunct Professor of Finance and Director of Computational Finance at the University of Washington, and former Chairman of the Department of Statistics, was also a mentor.
Again, student interest in the project was strong. The mentors for GSoC decided that Andrii Babii, a student at Toulouse School of Economics, provided the strongest proposal and example code.
Working from Christopherson, Carino and Ferson (2009), Bacon (2008), and several other sources, Andrii proceeded to construct functions for calculating contribution and linking returns through time both arithmetically and geometrically. He supports a variety of methods for multi-period linking including Carino, Menchero, Davies-Laker, Frongello, and GRAP.
Using his functions, arithmetic effects can be displayed either as suggested in Brinson, Hood and Beebower (1986), or as in Brinson and Fachler (1985). Priority can be switched around from top-down to bottom-up, as well. Currency attribution is included with arithmetic effects handled according to Ankrim and Hensel (1992).
Andrii established a data format for specifying a portfolio hierarchy, which allows him to provide multi-level attribution. This is usually discussed within the Brinson model as “asset-country-sector,” although the function is written generally. It then returns the total multi-period effects and attribution effects at each level. He provides functions for weight aggregation to accomplish this, which I think will also be generally useful in PortfolioAnalytics.
Finally, Andrii also constructed functions for Fixed Income attribution and delta adjusting option returns for attribution.
All of these attribution-related functions will be moved into the PortfolioAnalytics package proper, shortly. I think you will find that all of these functions are well documented and come with good examples.
But, wait, there’s more! Andrii also knocked out a function for estimating market timing attribution according to either the Treynor-Mazuy or Merton-Henriksson models, called
MarketTiming. That function is likely to end up in PerformanceAnalytics, since it is estimated using multiple regression and doesn’t require portfolio weights.
He also provided an
AcctReturns function that extends the
blotter package. This function takes the account data calculated from transactions and prices, along with external cash flows (such as contributions or withdrawals) to calculate time-weighted returns or linked modifed Dietz returns. This will be a welcome addition to blotter.
Congratulations to Andrii on a very successful GSoC 2012! This is a substantial contribution to PortfolioAnalytics, and is one that I think will see a great deal of use through time. I’m also looking forward to seeing where Andrii’s interests take him, and I hope they result in more contributions. Thanks also go to the mentors, David and Doug, and also to Google to making the summer possible.