Title: | Luck-Corrected Peer Performance Analysis in R |
---|---|
Description: | Provides functions to perform the peer performance analysis of funds' returns as described in Ardia and Boudt (2018) <doi:10.1016/j.jbankfin.2017.10.014>. |
Authors: | David Ardia [aut, cre] , Kris Boudt [aut] , Nabil Bouamara [ctb], Sebastien Legros [ctb] |
Maintainer: | David Ardia <[email protected]> |
License: | GPL (>= 2) |
Version: | 2.3.1 |
Built: | 2024-11-13 20:16:05 UTC |
Source: | https://github.com/ardiad/peerperformance |
Function which performs the screening of a universe of returns, and computes the alpha outperformance ratio.
alphaScreening(X, factors = NULL, control = list(), screen_beta = FALSE)
alphaScreening(X, factors = NULL, control = list(), screen_beta = FALSE)
X |
Matrix |
factors |
Matrix |
control |
Control parameters (see *Details*). |
screen_beta |
Boolean to screen all factors' coefficients (beta).
Default: |
The alpha measure (Treynor and Black 1973, Carhart 1997, Fung and Hsieh 2004) is one industry standard for measuring the absolute risk adjusted performance of hedge funds. We propose to complement the alpha measure with the fund's alpha outperformance ratio, defined as the percentage number of funds that have a significantly lower alpha. In a pairwise testing framework, a fund can have a significantly higher alpha because of luck. We correct for this by applying the false discovery rate approach by Storey (2002).
The methodology proceeds as follows:
(1) compute all pairwise tests of alpha differences. This means that for a universe of
funds, we perform
tests. The algorithm has
been parallelized and the computational burden can be split across several
cores. The number of cores can be defined in
control
, see below.
(2) for each fund, the false discovery rate approach by Storey (2002) is used to determine the proportions of over, equal, and underperforming funds, in terms of alpha, in the database.
The argument control
is a list that can supply any of the following
components:
'hac'
Heteroscedastic-autocorrelation consistent
standard errors. Default: hac = FALSE
.
'minObs'
Minimum number of concordant observations to compute the ratios. Default:
minObs = 10
.
'minObsPi'
Minimum number of observations
for computing the p-values). Default: minObsPi = 1
.
'nCore'
Number of cores used to perform the screening. Default:
nCore = 1
.
'lambda'
Threshold value to compute pi0.
Default: lambda = NULL
, i.e. data driven choice.
A list with the following components:
n
: Vector (of length ) of number of non-
NA
observations.
npeer
: Vector (of length ) of number of available peers.
alpha
: Vector (of length ) of unconditional alpha.
dalpha
: Matrix (of size ) of alpha
differences.
tstat
: Matrix (of size ) of t-statistics.
pval
: Matrix (of size ) of p-values of test for alpha
differences.
lambda
: Vector (of length ) of lambda values.
pizero
: Vector (of length ) of probability of equal
performance.
pipos
: Vector (of length ) of probability of outperformance
performance.
pineg
: Vector (of length ) of probability of underperformance
performance.
Further details on the methodology with an application to the hedge fund industry is given in Ardia and Boudt (2018).
Application of the false discovery rate approach applied to the mutual fund industry has been presented in Barras, Scaillet and Wermers (2010).
Currently, the HAC asymptotic and studentized circular block bootstrap
presented in Ledoit and Wolf (2008) are not supported by the
alphaScreening
function.
David Ardia and Kris Boudt.
Ardia, D., Boudt, K. (2015). Testing equality of modified Sharpe ratios. Finance Research Letters 13, pp.97–104. doi:10.1016/j.frl.2015.02.008
Ardia, D., Boudt, K. (2018). The peer performance ratios of hedge funds. Journal of Banking and Finance 87, pp.351-.368. doi:10.1016/j.jbankfin.2017.10.014
Barras, L., Scaillet, O., Wermers, R. (2010). False discoveries in mutual fund performance: Measuring luck in estimated alphas. Journal of Finance 65(1), pp.179–216.
Carhart, M. (1997). On persistence in mutual fund performance. Journal of Finance 52(1), pp.57–82.
Fama, E., French, K. (2010). Luck versus skill in the cross-section of mutual fund returns. Journal of Finance 65(5), pp.1915–1947.
Fung, W., Hsieh, D. (2004). Hedge fund benchmarks: A risk based approach. Financial Analysts Journal 60(5), pp.65–80.
Storey, J. (2002). A direct approach to false discovery rates. Journal of the Royal Statistical Society B 64(3), pp.479–498.
Treynor, J. L., Black, F. (1973). How to use security analysis to improve portfolio selection. Journal of Business 46(1), pp.66–86.
sharpeScreening
and msharpeScreening
.
## Load the data (randomized data of monthly hedge fund returns) data("hfdata") rets = hfdata[,1:5] ## Run alpha screening ctr = list(nCore = 1) alphaScreening(rets, control = ctr) ## Run alpha screening with HAC standard deviation ctr = list(nCore = 1, hac = TRUE) alphaScreening(rets, control = ctr)
## Load the data (randomized data of monthly hedge fund returns) data("hfdata") rets = hfdata[,1:5] ## Run alpha screening ctr = list(nCore = 1) alphaScreening(rets, control = ctr) ## Run alpha screening with HAC standard deviation ctr = list(nCore = 1, hac = TRUE) alphaScreening(rets, control = ctr)
Function which performs the testing of the difference of alpha outperformance ratios.
alphaTesting(x, y, factors = NULL, control = list(), screen_beta = FALSE)
alphaTesting(x, y, factors = NULL, control = list(), screen_beta = FALSE)
x |
Vector (of length |
y |
Vector (of length |
factors |
Matrix |
control |
Control parameters (see *Details*). |
screen_beta |
Boolean to screen all factors' coefficients (beta).
Default: |
The alpha measure (Treynor and Black 1973, Carhart 1997, Fung and Hsieh 2004) is one industry standard for measuring the absolute risk adjusted performance of hedge funds. This function performs the testing of alpha outperformance ratio difference for two funds.
For the testing, only the intersection of non-NA
observations for the
two funds are used.
The argument control
is a list that can supply any of the following
components:
'hac'
Heteroscedastic-autocorrelation consistent
standard errors. Default: hac = FALSE
.
A list with the following components:
n
: Number of non-NA
concordant observations.
alpha
: Vector (of length 2) of unconditional alpha outperformance ratios.
dalpha
: alpha outperformance ratios difference.
tstat
: t-stat of alpha outperformance ratios differences.
pval
: pvalues of test of alpha outperformance ratios differences.
Further details on the methodology with an application to the hedge fund industry is given in in Ardia and Boudt (2018).
Some internal functions where adapted from Michael Wolf MATLAB code.
David Ardia and Kris Boudt.
Ardia, D., Boudt, K. (2015). Testing equality of modified Sharpe ratios. Finance Research Letters 13, 97–104.
Ardia, D., Boudt, K. (2018). The peer performance ratios of hedge funds. Journal of Banking and Finance 87, 351–368.
Barras, L., Scaillet, O., Wermers, R. (2010). False discoveries in mutual fund performance: Measuring luck in estimated alphas. Journal of Finance 65(1), 179–216.
Sharpe, W.F. (1994). The Sharpe ratio. Journal of Portfolio Management 21(1), 49–58.
Ledoit, O., Wolf, M. (2008). Robust performance hypothesis testing with the Sharpe ratio. Journal of Empirical Finance 15(5), 850–859.
Storey, J. (2002). A direct approach to false discovery rates. Journal of the Royal Statistical Society B 64(3), 479–498.
## Load the data (randomized data of monthly hedge fund returns) data("hfdata") x = hfdata[,1] y = hfdata[,2] ## Run alpha testing alphaTesting(x, y)
## Load the data (randomized data of monthly hedge fund returns) data("hfdata") x = hfdata[,1] y = hfdata[,2] ## Run alpha testing alphaTesting(x, y)
The matrix hfdata
contains randomized and modified monthly returns of hedge funds.
data(hfdata)
data(hfdata)
A matrix of size 60 x 100, containing 60 monthly net returns for 100 hedge funds. Returns have been modified.
HFR database
Function which computes the modified Sharpe ratio
msharpe(X, level = 0.9, na.rm = TRUE, na.neg = TRUE)
msharpe(X, level = 0.9, na.rm = TRUE, na.neg = TRUE)
X |
Vector (of length |
level |
Modified Value-at-Risk level. Default: |
na.rm |
A logical value indicating whether |
na.neg |
A logical value indicating whether |
The modified Sharpe ratio (Favre and Galeano 2002) is one industry standard for measuring the absolute risk adjusted performance of hedge funds.
Scalar or a vector (of size ) with the modified Sharpe
ratios.
David Ardia and Kris Boudt.
Ardia, D., Boudt, K. (2015). Testing equality of modified Sharpe ratios. Finance Research Letters 13, 97–104.
Ardia, D., Boudt, K. (2018). The peer performance ratios of hedge Funds. Journal of Banking and Finance 87, 351–368.
Favre, L., Galeano, J.A. (2002). Mean-modified Value-at-Risk Optimization with Hedge Funds. Journal of Alternative Investments 5(2), 21–25.
Gregoriou, G. N., Gueyie, J.-P. (2003). Risk-adjusted performance of funds of hedge funds using a modified Sharpe ratio. Journal of Wealth Management 6(3), 77–83.
msharpeTesting
, msharpeScreening
and
sharpe
.
## Load the data (randomized data of monthly hedge fund returns) data('hfdata') out = msharpe(hfdata) print(out) out = msharpe(hfdata, na.rm = FALSE) print(out)
## Load the data (randomized data of monthly hedge fund returns) data('hfdata') out = msharpe(hfdata) print(out) out = msharpe(hfdata, na.rm = FALSE) print(out)
Function which performs the screening of a universe of returns, and computes the modified Sharpe outperformance ratio.
msharpeScreening(X, level = 0.9, na.neg = TRUE, control = list())
msharpeScreening(X, level = 0.9, na.neg = TRUE, control = list())
X |
Matrix |
level |
Modified Value-at-Risk level. Default: |
na.neg |
A logical value indicating whether |
control |
Control parameters (see *Details*). |
The modified Sharpe ratio (Favre and Galeano 2002, Gregoriou and Gueyie 2003) is one industry standard for measuring the absolute risk adjusted performance of hedge funds. We propose to complement the modified Sharpe ratio with the fund's outperformance ratio, defined as the percentage number of funds that have a significantly lower modified Sharpe ratio. In a pairwise testing framework, a fund can have a significantly higher modified Sharpe ratio because of luck. We correct for this by applying the false discovery rate approach by Storey (2002).
For the testing, only the intersection of non-NA
observations for the
two funds are used.
The argument control
is a list that can supply any of the following
components:
'type'
Asymptotic approach (type = 1
) or
studentized circular bootstrap approach (type = 2
). Default:
type = 1
.
'ttype'
Test based on ratio (type = 1
)
or product (type = 2
). Default: type = 2
.
'hac'
heteroscedastic-autocorrelation consistent standard
errors. Default: hac = FALSE
.
'nBoot'
Number of
bootstrap replications for computing the p-value. Default: nBoot =
499
.
'bBoot'
Block length in the circular bootstrap. Default:
bBoot = 1
, i.e. iid bootstrap. bBoot = 0
uses optimal
block-length.
'pBoot'
Symmetric p-value (pBoot = 1
) or
asymmetric p-value (pBoot = 2
). Default: pBoot = 1
.
'nCore'
Number of cores to be used. Default: nCore = 1
.
'minObs'
Minimum number of concordant observations to compute
the ratios. Default: minObs = 10
.
'minObsPi'
Minimum number of observations to compute pi0. Default: minObsPi = 1
.
'lambda'
Threshold value to compute pi0. Default: lambda
= NULL
, i.e. data driven choice.
A list with the following components:
n
: Vector (of length ) of number of non-
NA
observations.
npeer
: Vector (of length ) of number of available peers.
msharpe
: Vector (of length ) of unconditional modified Sharpe
ratios.
dmsharpe
: Matrix (of size ) of modified Sharpe
ratios differences.
tstat
: Matrix (of size ) of t-statistics.
pval
: Matrix (of size ) of p-values of test for
modified Sharpe ratios differences.
lambda
: Vector (of length ) of lambda values.
pizero
: Vector (of length ) of probability of equal
performance.
pipos
: Vector (of length ) of probability of outperformance
performance.
pineg
: Vector (of length ) of probability of underperformance
performance.
Further details on the methodology with an application to the hedge fund industry is given in in Ardia and Boudt (2018).
Some internal functions where adapted from Wolf's R code.
Application of the false discovery rate approach applied to the mutual fund industry has been presented in Barraz, Scaillet and Wermers (2010).
David Ardia and Kris Boudt.
Ardia, D., Boudt, K. (2015). Testing equality of modified Sharpe ratios. Finance Research Letters 13, 97–104.
Ardia, D., Boudt, K. (2018). The peer performance ratios of hedge funds. Journal of Banking and Finance 87, 351–368.
Barras, L., Scaillet, O., Wermers, R. (2010). False discoveries in mutual fund performance: Measuring luck in estimated alphas. Journal of Finance 65(1), 179–216.
Favre, L., Galeano, J.A. (2002). Mean-modified Value-at-Risk Optimization with Hedge Funds. Journal of Alternative Investments 5(2), 21–25.
Gregoriou, G. N., Gueyie, J.-P. (2003). Risk-adjusted performance of funds of hedge funds using a modified Sharpe ratio. Journal of Wealth Management 6(3), 77–83.
Ledoit, O., Wolf, M. (2008). Robust performance hypothesis testing with the Sharpe ratio. Journal of Empirical Finance 15(5), 850–859.
Storey, J. (2002). A direct approach to false discovery rates. Journal of the Royal Statistical Society B 64(3), 479–498.
msharpe
, msharpeTesting
,
sharpeScreening
and alphaScreening
.
## Load the data (randomized data of monthly hedge fund returns) data("hfdata") rets = hfdata[,1:5] ## Modified Sharpe screening msharpeScreening(rets, control = list(nCore = 1)) ## Modified Sharpe screening with bootstrap and HAC standard deviation msharpeScreening(rets, control = list(nCore = 1, type = 2, hac = TRUE))
## Load the data (randomized data of monthly hedge fund returns) data("hfdata") rets = hfdata[,1:5] ## Modified Sharpe screening msharpeScreening(rets, control = list(nCore = 1)) ## Modified Sharpe screening with bootstrap and HAC standard deviation msharpeScreening(rets, control = list(nCore = 1, type = 2, hac = TRUE))
Function which performs the testing of the difference of modified Sharpe ratios.
msharpeTesting(x, y, level = 0.9, na.neg = TRUE, control = list())
msharpeTesting(x, y, level = 0.9, na.neg = TRUE, control = list())
x |
Vector (of length |
y |
Vector (of length |
level |
Modified Value-at-Risk level. Default: |
na.neg |
A logical value indicating whether |
control |
Control parameters (see *Details*). |
The modified Sharpe ratio (Favre and Galeano 2002) is one industry standard for measuring the absolute risk adjusted performance of hedge funds. This function performs the testing of modified Sharpe ratio difference for two funds using a similar approach than Ledoit and Wolf (2002). See also Gregoriou and Gueyie (2003).
For the testing, only the intersection of non-NA
observations for the
two funds are used.
The argument control
is a list that can supply any of the following
components:
'type'
Asymptotic approach (type = 1
) or
studentized circular bootstrap approach (type = 2
). Default:
type = 1
.
'ttype'
Test based on ratio (type = 1
)
or product (type = 2
). Default: type = 2
.
'hac'
Heteroscedastic-autocorrelation consistent standard
errors. Default: hac = FALSE
.
'minObs'
Minimum number of concordant observations to compute the ratios. Default: minObs =
10
.
'nBoot'
Number of bootstrap replications for computing the
p-value. Default: nBoot = 499
.
'bBoot'
Block length in
the circular bootstrap. Default: bBoot = 1
, i.e. iid bootstrap.
bBoot = 0
uses optimal block-length.
'pBoot'
Symmetric
p-value (pBoot = 1
) or asymmetric p-value (pBoot = 2
).
Default: pBoot = 1
.
A list with the following components:
n
: Number of non-NA
concordant observations.
msharpe
: Vector (of length 2) of unconditional modified Sharpe
ratios.
dmsharpe
: Modified Sharpe ratios difference.
tstat
: t-stat of modified Sharpe ratios differences.
pval
: pvalues of test of modified Sharpe ratios differences.
Further details on the methodology with an application to the hedge fund industry is given in Ardia and Boudt (2018).
Some internal functions where adapted from Michael Wolf MATLAB code.
David Ardia and Kris Boudt.
Ardia, D., Boudt, K. (2015). Testing equality of modified Sharpe ratios. Finance Research Letters 13, pp.97–104. doi:10.1016/j.frl.2015.02.008
Ardia, D., Boudt, K. (2018). The peer performance ratios of hedge funds. Journal of Banking and Finance 87, pp.351-.368. doi:10.1016/j.jbankfin.2017.10.014
Barras, L., Scaillet, O., Wermers, R. (2010). False discoveries in mutual fund performance: Measuring luck in estimated alphas. Journal of Finance 65(1), pp.179–216.
Favre, L., Galeano, J.A. (2002). Mean-modified Value-at-Risk Optimization with Hedge Funds. Journal of Alternative Investments 5(2), pp.21–25.
Gregoriou, G. N., Gueyie, J.-P. (2003). Risk-adjusted performance of funds of hedge funds using a modified Sharpe ratio. Journal of Wealth Management 6(3), pp.77–83.
Ledoit, O., Wolf, M. (2008). Robust performance hypothesis testing with the Sharpe ratio. Journal of Empirical Finance 15(5), pp.850–859.
Storey, J. (2002). A direct approach to false discovery rates. Journal of the Royal Statistical Society B 64(3), pp.479–498.
msharpe
, msharpeScreening
and
sharpeTesting
.
## Load the data (randomized data of monthly hedge fund returns) data("hfdata") x = hfdata[,1] y = hfdata[,2] ## Run modified Sharpe testing (asymptotic) ctr = list(type = 1) out = msharpeTesting(x, y, level = 0.95, control = ctr) print(out) ## Run modified Sharpe testing (asymptotic hac) ctr = list(type = 1, hac = TRUE) out = msharpeTesting(x, y, level = 0.95, control = ctr) print(out) ## Run modified Sharpe testing (iid bootstrap) set.seed(1234) ctr = list(type = 2, nBoot = 250) out = msharpeTesting(x, y, level = 0.95, control = ctr) print(out) ## Run modified Sharpe testing (circular bootstrap) set.seed(1234) ctr = list(type = 2, nBoot = 250, bBoot = 5) out = msharpeTesting(x, y, level = 0.95, control = ctr) print(out)
## Load the data (randomized data of monthly hedge fund returns) data("hfdata") x = hfdata[,1] y = hfdata[,2] ## Run modified Sharpe testing (asymptotic) ctr = list(type = 1) out = msharpeTesting(x, y, level = 0.95, control = ctr) print(out) ## Run modified Sharpe testing (asymptotic hac) ctr = list(type = 1, hac = TRUE) out = msharpeTesting(x, y, level = 0.95, control = ctr) print(out) ## Run modified Sharpe testing (iid bootstrap) set.seed(1234) ctr = list(type = 2, nBoot = 250) out = msharpeTesting(x, y, level = 0.95, control = ctr) print(out) ## Run modified Sharpe testing (circular bootstrap) set.seed(1234) ctr = list(type = 2, nBoot = 250, bBoot = 5) out = msharpeTesting(x, y, level = 0.95, control = ctr) print(out)
PeerPerformance
is an R package for the peer-performance evaluation of financial investments with
luck-correction, useful in the financial industry. In particular, it implements the peer performance ratios of Ardia and Boudt
(2018) which measure the percentage of peers a focal (hedge) fund outperforms and underperforms, after
correction for luck. It is useful for fund or portfolio managers to benchmark their investments or screen a universe of new funds.
In addition, the package implements the testing framework for the Sharpe and modified Sharpe ratios, described in
Ledoit and Wolf (2008) and Ardia and Boudt (2015). See also Ardia et al. (2022,2023) for applications in sustainable finance.
Alpha: alphaTesting
and alphaScreening
;
Sharpe ratio: sharpe
, sharpeTesting
and sharpeScreening
;
Modified Share ratio: msharpe
, msharpeTesting
and msharpeScreening
;
Screening: alphaScreening
, sharpeScreening
, and msharpeScreening
.
The latest version of the package is available at https://github.com/ArdiaD/PeerPerformance
By using PeerPerformance
you agree to the following rules: (1) You must cite Ardia and Boudt (2018) in
working papers and published papers that use PeerPerformance
(use citation("PeerPerformance")
), (2) you
must place the URL https://CRAN.R-project.org/package=PeerPerformance in a footnote to help
others find PeerPerformance
, and (3) you assume all risk for the use of PeerPerformance
.
Full description of the methodologies implemented in the various functions is available in Ledoit and Wolf (2008) and Ardia and Boudt (2015, 2018).
David Ardia and Kris Boudt.
Ardia, D., Boudt, K. (2015). Testing equality of modified Sharpe ratios. Finance Research Letters 13, 97–104.
Ardia, D., Boudt, K. (2018). The peer performance ratios of hedge Funds. Journal of Banking and Finance 87, 351–368.
Ardia, D., Bluteau, K., Tran, D. (2022). How easy is it for investment managers to deploy their talent in green and brown stocks? Finance Research Letters 48, 102992.
Ardia, D., Bluteau, K., Lortie-Cloutier, G., Tran, D. (2023). Factor exposure heterogeneity in green and brown stocks. Finance Research Letters 55, Part A, 103900.
Barras, L., Scaillet, O., Wermers, R. (2010). False discoveries in mutual fund performance: Measuring luck in estimated alphas. Journal of Finance 65(1), 179–216.
Favre, L., Galeano, J.A. (2002). Mean-modified Value-at-Risk Optimization with Hedge Funds. Journal of Alternative Investments 5(2), 21–25.
Gregoriou, G. N., Gueyie, J.-P. (2003). Risk-adjusted performance of funds of hedge funds using a modified Sharpe ratio. Journal of Wealth Management 6(3), 77–83.
Ledoit, O., Wolf, M. (2008). Robust performance hypothesis testing with the Sharpe ratio. Journal of Empirical Finance 15(5), 850–859.
Sharpe, W.F. (1994). The Sharpe ratio. Journal of Portfolio Management 21(1), 49–58.
Storey, J. (2002). A direct approach to false discovery rates. Journal of the Royal Statistical Society B 64(3), 479–498.
Function which computes the Sharpe ratio.
sharpe(X, na.rm = TRUE)
sharpe(X, na.rm = TRUE)
X |
Vector (of length |
na.rm |
A logical value indicating whether |
The Sharpe ratio (Sharpe 1992) is one industry standard for measuring the absolute risk adjusted performance of hedge funds.
A scalar or a vector (of size ) with the Sharpe ratios.
David Ardia and Kris Boudt.
Ardia, D., Boudt, K. (2015). Testing equality of modified Sharpe ratios. Finance Research Letters 13, pp.97–104. doi:10.1016/j.frl.2015.02.008
Ardia, D., Boudt, K. (2016). The Peer Ratios Performance of Hedge Funds. Working paper. doi:10.2139/ssrn.2000901
Sharpe, W.F. (1994). The Sharpe ratio. Journal of Portfolio Management 21(1), pp.49–58. doi:10.3905/jpm.1994.409501
sharpeTesting
, sharpeScreening
and
msharpe
.
## Load the data data('hfdata') ## Compute the Sharpe ratio out = sharpe(hfdata) print(out) out = sharpe(hfdata, na.rm = FALSE) print(out)
## Load the data data('hfdata') ## Compute the Sharpe ratio out = sharpe(hfdata) print(out) out = sharpe(hfdata, na.rm = FALSE) print(out)
Function which performs the screening of a universe of returns, and computes the Sharpe outperformance ratio.
sharpeScreening(X, control = list())
sharpeScreening(X, control = list())
X |
Matrix |
control |
Control parameters (see *Details*). |
The Sharpe ratio (Sharpe 1992) is one industry standard for measuring the absolute risk adjusted performance of hedge funds. We propose to complement the Sharpe ratio with the fund's outperformance ratio, defined as the percentage number of funds that have a significantly lower Sharpe ratio. In a pairwise testing framework, a fund can have a significantly higher Sharpe ratio because of luck. We correct for this by applying the false discovery rate approach by Storey (2002).
For the testing, only the intersection of non-NA
observations for the
two funds are used.
The methodology proceeds as follows:
(1) compute all
pairwise tests of Sharpe differences using the bootstrap approach of Ledoit
and Wolf (2002). This means that for a universe of funds, we perform
tests. The algorithm has been parallelized and the
computational burden can be split across several cores. The number of cores
can be defined in
control
, see below.
(2) for each fund, the false discovery rate approach by Storey (2002) is used to determine the proportions over, equal, and underperforming funds, in terms of Sharpe ratio, in the database.
The argument control
is a list that can supply any of the following
components:
'type'
Asymptotic approach (type = 1
) or
studentized circular bootstrap approach (type = 2
). Default:
type = 1
.
'ttype'
Test based on ratio (type = 1
)
or product (type = 2
). Default: type = 2
.
'hac'
Heteroscedastic-autocorrelation consistent standard
errors. Default: hac = FALSE
.
'nBoot'
Number of bootstrap replications for computing the p-value. Default: nBoot =
499
.
'bBoot'
Block length in the circular bootstrap. Default:
bBoot = 1
, i.e. iid bootstrap. bBoot = 0
uses optimal
block-length.
'pBoot'
Symmetric p-value (pBoot = 1
) or
asymmetric p-value (pBoot = 2
). Default: pBoot = 1
.
'nCore'
Number of cores to be used. Default: nCore = 1
.
'minObs'
Minimum number of concordant observations to compute
the ratios. Default: minObs = 10
.
'minObsPi'
Minimum
number of observations to compute pi0. Default: minObsPi = 1
.
'lambda'
Threshold value to compute pi0. Default: lambda
= NULL
, i.e. data driven choice.
A list with the following components:
n
: Vector (of length ) of number of non-
NA
observations.
npeer
: Vector (of length ) of number of available peers.
sharpe
: Vector (of length ) of unconditional Sharpe ratios.
dsharpe
: Matrix (of size ) of Sharpe ratios
differences.
tstat
: Matrix (of size ) of t-statistics.
pval
: Matrix (of size ) of pvalues of test for Sharpe
ratios differences.
lambda
: vector (of length ) of lambda values.
pizero
: vector (of length ) of probability of equal
performance.
pipos
: vector (of length ) of probability of outperformance
performance.
pineg
: Vector (of length ) of probability of underperformance
performance.
Further details on the methodology with an application to the hedge fund industry is given in in Ardia and Boudt (2018).
Some internal functions where adapted from Michael Wolf MATLAB code.
Application of the false discovery rate approach applied to the mutual fund industry has been presented in Barraz, Scaillet and Wermers (2010).
David Ardia and Kris Boudt.
Ardia, D., Boudt, K. (2015). Testing equality of modified Sharpe ratios. Finance Research Letters 13, 97–104.
Ardia, D., Boudt, K. (2018). The peer performance ratios of hedge funds. Journal of Banking and Finance 87, 351–368.
Barras, L., Scaillet, O., Wermers, R. (2010). False discoveries in mutual fund performance: Measuring luck in estimated alphas. Journal of Finance 65(1), 179–216.
Sharpe, W.F. (1994). The Sharpe ratio. Journal of Portfolio Management 21(1), 49–58.
Ledoit, O., Wolf, M. (2008). Robust performance hypothesis testing with the Sharpe ratio. Journal of Empirical Finance 15(5), 850–859.
Storey, J. (2002). A direct approach to false discovery rates. Journal of the Royal Statistical Society B 64(3), 479–498.
sharpe
, sharpeTesting
,
msharpeScreening
and alphaScreening
.
## Load the data (randomized data of monthly hedge fund returns) data("hfdata") rets = hfdata[,1:5] ## Sharpe screening sharpeScreening(rets, control = list(nCore = 1)) ## Sharpe screening with bootstrap and HAC standard deviation sharpeScreening(rets, control = list(nCore = 1, type = 2, hac = TRUE))
## Load the data (randomized data of monthly hedge fund returns) data("hfdata") rets = hfdata[,1:5] ## Sharpe screening sharpeScreening(rets, control = list(nCore = 1)) ## Sharpe screening with bootstrap and HAC standard deviation sharpeScreening(rets, control = list(nCore = 1, type = 2, hac = TRUE))
Function which performs the testing of the difference of Sharpe ratios.
sharpeTesting(x, y, control = list())
sharpeTesting(x, y, control = list())
x |
Vector (of length |
y |
Vector (of length |
control |
Control parameters (see *Details*). |
The Sharpe ratio (Sharpe 1992) is one industry standard for measuring the absolute risk adjusted performance of hedge funds. This function performs the testing of Sharpe ratio difference for two funds using the approach by Ledoit and Wolf (2002).
For the testing, only the intersection of non-NA
observations for the
two funds are used.
The argument control
is a list that can supply any of the following
components:
'type'
Asymptotic approach (type = 1
) or
studentized circular bootstrap approach (type = 2
). Default:
type = 1
.
'ttype'
Test based on ratio (type = 1
)
or product (type = 2
). Default: type = 2
.
'hac'
Heteroscedastic-autocorrelation consistent standard
errors. Default: hac = FALSE
.
'nBoot'
Number of boostrap replications for computing the p-value. Default: nBoot =
499
.
'bBoot'
Block length in the circular bootstrap. Default:
bBoot = 1
, i.e. iid bootstrap. bBoot = 0
uses optimal
block-length.
'pBoot'
Symmetric p-value (pBoot = 1
) or
asymmetric p-value (pBoot = 2
). Default: pBoot = 1
.
A list with the following components:
n
: Number of non-NA
concordant observations.
sharpe
: Vector (of length 2) of unconditional Sharpe ratios.
dsharpe
: Sharpe ratios difference.
tstat
: t-stat of Sharpe ratios differences.
pval
: pvalues of test of Sharpe ratios differences.
Further details on the methodology with an application to the hedge fund industry is given in in Ardia and Boudt (2018).
Some internal functions where adapted from Michael Wolf MATLAB code.
David Ardia and Kris Boudt.
Ardia, D., Boudt, K. (2015). Testing equality of modified Sharpe ratios. Finance Research Letters 13, 97–104.
Ardia, D., Boudt, K. (2018). The peer performance ratios of hedge funds. Journal of Banking and Finance 87, 351-.368.
Barras, L., Scaillet, O., Wermers, R. (2010). False discoveries in mutual fund performance: Measuring luck in estimated alphas. Journal of Finance 65(1), 179–216.
Sharpe, W.F. (1994). The Sharpe ratio. Journal of Portfolio Management 21(1), 49–58.
Ledoit, O., Wolf, M. (2008). Robust performance hypothesis testing with the Sharpe ratio. Journal of Empirical Finance 15(5), 850–859.
Storey, J. (2002). A direct approach to false discovery rates. Journal of the Royal Statistical Society B 64(3), 479–498.
sharpe
, sharpeScreening
and
msharpeTesting
.
## Load the data (randomized data of monthly hedge fund returns) data("hfdata") x = hfdata[,1] y = hfdata[,2] ## Run Sharpe testing (asymptotic) ctr = list(type = 1) out = sharpeTesting(x, y, control = ctr) print(out) ## Run Sharpe testing (asymptotic hac) ctr = list(type = 1, hac = TRUE) out = sharpeTesting(x, y, control = ctr) print(out) ## Run Sharpe testing (iid bootstrap) set.seed(1234) ctr = list(type = 2, nBoot = 100) out = sharpeTesting(x, y, control = ctr) print(out) ## Run Sharpe testing (circular bootstrap) set.seed(1234) ctr = list(type = 2, nBoot = 100, bBoot = 5) out = sharpeTesting(x, y, control = ctr) print(out)
## Load the data (randomized data of monthly hedge fund returns) data("hfdata") x = hfdata[,1] y = hfdata[,2] ## Run Sharpe testing (asymptotic) ctr = list(type = 1) out = sharpeTesting(x, y, control = ctr) print(out) ## Run Sharpe testing (asymptotic hac) ctr = list(type = 1, hac = TRUE) out = sharpeTesting(x, y, control = ctr) print(out) ## Run Sharpe testing (iid bootstrap) set.seed(1234) ctr = list(type = 2, nBoot = 100) out = sharpeTesting(x, y, control = ctr) print(out) ## Run Sharpe testing (circular bootstrap) set.seed(1234) ctr = list(type = 2, nBoot = 100, bBoot = 5) out = sharpeTesting(x, y, control = ctr) print(out)