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"), ...)an xts, vector, matrix, data frame, timeSeries or zoo object of asset return
return vector of the benchmark asset
risk free rate, in same period as your returns
one of "geometric" or "arithmetic" indicating the method to use to calculate MSquareExcess
any other passthru parameters
$$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.
Carl Bacon, Practical portfolio performance measurement and attribution, second edition 2008 p.68
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