% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/sharpeScreening.R
\name{sharpeScreening}
\alias{sharpeScreening}
\title{Screening using the Sharpe outperformance ratio}
\usage{
sharpeScreening(X, control = list(), Y = NULL)
}
\arguments{
\item{X}{Matrix \eqn{(T \times N)}{(TxN)} of \eqn{T} returns for the \eqn{N}
funds. \code{NA} values are allowed.}

\item{control}{Control parameters (see *Details*).}

\item{Y}{Optional matrix \eqn{(T \times M)}{(TxM)} of returns for a second
(peer) group of \eqn{M} funds. When supplied, the ratios are computed for
each fund in \code{X} against the funds in \code{Y} (cross-group screening)
instead of against the other funds in \code{X}; a single focal fund versus a
peer group corresponds to \code{X} being a vector. Columns of \code{Y}
identical to the focal fund are automatically excluded. Default:
\code{Y = NULL}, i.e. within-group screening.}
}
\value{
A list with the following components:\cr

\code{n}: Vector (of length \eqn{N}) of number of non-\code{NA}
observations.\cr

\code{npeer}: Vector (of length \eqn{N}) of number of available peers.\cr

\code{sharpe}: Vector (of length \eqn{N}) of unconditional Sharpe ratios.\cr

\code{dsharpe}: Matrix (of size \eqn{N \times N}{NxN}) of Sharpe ratios
differences.\cr

\code{tstat}: Matrix (of size \eqn{N \times N}{NxN}) of t-statistics.\cr

\code{pval}: Matrix (of size \eqn{N \times N}{NxN}) of pvalues of test for Sharpe
ratios differences.\cr

\code{lambda}: vector (of length \eqn{N}) of lambda values.\cr

\code{pizero}: vector (of length \eqn{N}) of probability of equal
performance.\cr

\code{pipos}: vector (of length \eqn{N}) of probability of outperformance
performance.\cr

\code{pineg}: Vector (of length \eqn{N}) of probability of underperformance
performance.
}
\description{
Function which performs the screening of a universe of returns, and
computes the Sharpe outperformance ratio.
}
\details{
The Sharpe ratio (Sharpe 1994) 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-\code{NA} observations for the
two funds are used.

The methodology proceeds as follows:
\itemize{
\item (1) compute all
pairwise tests of Sharpe differences using the bootstrap approach of Ledoit
and Wolf (2002). This means that for a universe of \eqn{N} funds, we perform
\eqn{N(N-1)/2}{N*(N-1)/2} tests. The algorithm has been parallelized and the
computational burden can be split across several cores. The number of cores
can be defined in \code{control}, see below.
\item (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 \code{control} is a list that can supply any of the following
components:
\itemize{
\item \code{'type'} Asymptotic approach (\code{type = 1}) or
studentized circular bootstrap approach (\code{type = 2}). Default:
\code{type = 1}.
\item \code{'ttype'} Test based on ratio (\code{type = 1})
or product (\code{type = 2}). Default: \code{type = 2}.
\item \code{'hac'} Heteroscedastic-autocorrelation consistent standard
errors. Default: \code{hac = FALSE}.
\item \code{'nBoot'} Number of bootstrap replications for computing the p-value. Default: \code{nBoot =
499}.
\item \code{'bBoot'} Block length in the circular bootstrap. Default:
\code{bBoot = 1}, i.e. iid bootstrap. (The data-driven choice
\code{bBoot = 0} is only available in \code{\link{sharpeTesting}}, not in
screening.)
\item \code{'pBoot'} Symmetric p-value (\code{pBoot = 1}) or
asymmetric p-value (\code{pBoot = 2}). Default: \code{pBoot = 1}.
\item \code{'nCore'} Number of cores to be used. Default: \code{nCore = 1}.
\item \code{'minObs'} Minimum number of concordant observations to compute
the ratios. Default: \code{minObs = 10}.
\item \code{'minObsPi'} Minimum
number of observations to compute pi0. Default: \code{minObsPi = 1}.
\item \code{'lambda'} Threshold value to compute pi0. Default: \code{lambda
= NULL}, i.e. data driven choice.
\item \code{'gammaPos'} One-sided quantile level (of the standard Normal
distribution) used as the critical value for counting outperformed peers:
a peer counts as outperformed when the pairwise t-statistic exceeds
\code{qnorm(gammaPos)} (a \emph{negative} threshold for
\code{gammaPos < 0.5}), and the expected fraction \code{1 - gammaPos} of
false positives among the equal-performing peers is then subtracted.
Default: \code{gammaPos = 0.4} (the value recommended in Ardia and Boudt, 2018).
\item \code{'gammaNeg'} Mirror image of \code{gammaPos} for the peers that
outperform the focal fund: the count uses \code{tstat <= qnorm(gammaNeg)}
and subtracts the expected fraction \code{gammaNeg} of false positives.
Default: \code{gammaNeg = 0.6}.
\item \code{'fastAdjust'} Use a fast vectorised inversion in the
truncated-normal bias correction of \eqn{\pi^0}{pi0} instead of one
\code{uniroot} call per value. This is the dominant cost when \code{lambda}
is data driven and gives a large speed-up on big universes. The bisection
locates the root to about 1e-12; since \code{uniroot} stops at its own
tolerance (about 1.2e-4), the two paths typically differ by a few 1e-5, the
fast path being the more accurate. Default: \code{fastAdjust = FALSE},
i.e. the original code path, kept as default so that published results
reproduce exactly.
}
}
\note{
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.

Application of the false discovery rate approach applied to the mutual fund
industry has been presented in Barras, Scaillet and Wermers (2010).
}
\examples{
## Load the data (randomized data of monthly hedge fund returns)
data("hfdata")
rets = hfdata[,1:4]

## Sharpe screening
sharpeScreening(rets, control = list(nCore = 1))

## Sharpe screening with HAC standard errors (asymptotic test)
sharpeScreening(rets, control = list(nCore = 1, hac = TRUE))

## Sharpe screening with the studentized circular bootstrap
## (the 'hac' flag is ignored when type = 2)
sharpeScreening(rets, control = list(nCore = 1, type = 2))
}
\references{
Ardia, D., Boudt, K. (2015).
Testing equality of modified Sharpe ratios.
\emph{Finance Research Letters} \bold{13}, 97--104.

Ardia, D., Boudt, K. (2018).
The peer performance ratios of hedge funds.
\emph{Journal of Banking and Finance} \bold{87}, 351--368.

Barras, L., Scaillet, O., Wermers, R. (2010).
False discoveries in mutual fund performance: Measuring luck in estimated alphas.
\emph{Journal of Finance} \bold{65}(1), 179--216.

Sharpe, W.F. (1994).
The Sharpe ratio.
\emph{Journal of Portfolio Management} \bold{21}(1), 49--58.

Ledoit, O., Wolf, M. (2008).
Robust performance hypothesis testing with the Sharpe ratio.
\emph{Journal of Empirical Finance} \bold{15}(5), 850--859.

Storey, J. (2002).
A direct approach to false discovery rates.
\emph{Journal of the Royal Statistical Society B} \bold{64}(3), 479--498.
}
\seealso{
\code{\link{sharpe}}, \code{\link{sharpeTesting}},
\code{\link{msharpeScreening}} and \code{\link{alphaScreening}}.
}
\author{
David Ardia and Kris Boudt.
}
\keyword{htest}
