M squared excess is the quantity above the standard M. There is a geometric excess return which is better for Bacon and an arithmetic excess return
Usage
MSquaredExcess(Ra, Rb, Rf = 0, Method = c("geometric", "arithmetic"), ...)Arguments
- Ra
an xts, vector, matrix, data frame, timeSeries or zoo object of asset return
- Rb
return vector of the benchmark asset
- Rf
risk free rate, in same period as your returns
- Method
one of "geometric" or "arithmetic" indicating the method to use to calculate MSquareExcess
- ...
any other passthru parameters
Details
$$M^2 excess (geometric) = \frac{1 + M^2}{1 + b} - 1$$ $$M^2 excess (arithmetic) = M^2 - b$$
where \(M^2\) is MSquared and \(b\) is the benchmark annualised return.
References
Carl Bacon, Practical portfolio performance measurement and attribution, second edition 2008 p.68
Examples
data(portfolio_bacon)
MSquaredExcess(portfolio_bacon[,1], portfolio_bacon[,2]) #expected -0.00998
#> benchmark.return....
#> benchmark.return.... -0.01553103
MSquaredExcess(portfolio_bacon[,1], portfolio_bacon[,2], Method="arithmetic") #expected -0.011
#> benchmark.return....
#> benchmark.return.... -0.01736344
data(managers)
MSquaredExcess(managers['1996',1], managers['1996',8])
#> SP500 TR
#> SP500 TR 0.02027322
MSquaredExcess(managers['1996',1:5], managers['1996',8])
#> HAM1 HAM2 HAM3 HAM4 HAM5
#> MSquaredExcess (Risk free = 0) 0.02027322 NA 0.1409545 -0.02546609 NA