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

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

Author

Matthieu Lestel

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