backtest {backtest} | R Documentation |
Conducts a backtest and returns the results as an object of class backtest
.
backtest(x, in.var, ret.var, universe, by.var = NULL, date.var = NULL, id.var = NULL, buckets = 5, natural = FALSE)
x |
A data frame containing the data to be analysed in the backtest. The details of what this data frame must contain are given below. |
in.var |
A character vector which indicates the name of the
column or columns in x to be used as input variables. |
ret.var |
A character vector which indicates the name of the
column or columns in x to be used as return variables. |
by.var |
An optional character value, specifying a second
variable in x to be used for categorising the data. The details
of how categories are created are given below. |
id.var |
An optional character value which indicates the name of
the column in x containing a unique identifier for each
observation. id.var must be specified if natural is
TRUE. |
date.var |
An optional character vector which indicates the name
of the column in x to be used as a date for each
observation. date.var must be specified if natural is
TRUE. |
buckets |
An optional numeric vector which specifies how many
quantiles to create according to in.var and by.var . |
universe |
An optional expression for selecting a subset of x .
The details of how this expression may be constructed are given below.
|
natural |
An optional logical value. If TRUE, the summary
method returns additional information and the backtest object may be
plotted. The details of how a natural backtest differs from a pooled
backtest are given below.
|
Data frames for backtest
must, at a minimum, contain a column of class
numeric to be referenced by the in.var
and ret.var
arguments.
The in.var
is the primary variable by which the backtest categorises
observations. It must reference a numeric column in x
. Using the
values in x
, backtest
breaks the values into equal sized
quantiles, or buckets
.
The by.var
is the secondary variable by which the backtest categorises
observations. When specifying both in.var
and by.var
, backtest
organises the observations into a n
by j
matrix where n
is the
number of quantiles or categories created for the by.var
and j
is
the number of quantiles created for the in.var
. By default,
backtest
creates 5 quantiles.
If natural
is TRUE, the data and arguments must meet certain
requirements. First, the frequency of the observations and ret.var
must be the same. Second, an id.var
and date.var
are
required. Third, a by.var
is not allowed. Note that the code
does not verify that the backtest is truly natural; backtest
accepts the value passed by the user as valid.
Returns an object of class backtest
.
The functions show
and summary
are used to obtain and
print a short description and longer summary of the results of the
backtest
. The accessor functions counts
,
marginals
, mean
, naCounts
, and turnover
extract different parts of the value returned by backtest
.
Kyle Campbell kyle.w.campbell@williams.edu and Jeff Enos jeff@kanecap.com
data(starmine) ## Backtest with 1 'in.var' and 1 'ret.var' bt <- backtest(starmine, in.var = "smi", ret.var = "fwd.ret.1m") summary(bt) ## Backtest with 2 'in.var' values, 1 'ret.var', and a 'by.var' bt <- backtest(starmine, in.var = c("smi", "cap.usd"), ret.var = "fwd.ret.1m", by.var = "sector") summary(bt) ## Backtest with 1 'in.var', 1 'by.var', and 1 'ret.var'. Number of ## buckets changed from default of 5 to 4. Change in number of buckets ## only affects the 'in.var' because the 'by.var' column in 'starmine' ## contains character data. For each value in this column there is a ## unique category. bt <- backtest(starmine, in.var = "smi", by.var = "sector", ret.var = "fwd.ret.1m", buckets = 4) summary(bt) ## Backtest with 1 'in.var', multiple 'ret.var', and a ## universe restriction bt <- backtest(starmine, in.var = "smi", ret.var = c("fwd.ret.1m", "fwd.ret.6m"), universe = sector == "HiTec") summary(bt) ## Running a natural backtest with 2 'in.vars', 1 'ret.var' ## 10 buckets bt <- backtest(starmine, in.var = c("smi","cap.usd"), ret.var = "fwd.ret.1m", date.var = "date", id.var = "id", buckets = 10, natural = TRUE) summary(bt) plot(bt, type = "turnover") plot(bt, type = "return") plot(bt, type = "cumreturn") plot(bt, type = "cumreturn.split")