Learn R Programming

backtest (version 0.3-4)

backtest: Creating an Object of Class Backtest

Description

Conducts a backtest and returns the results as an object of class backtest.

Usage

backtest(x, in.var, ret.var, universe, by.var  = NULL, date.var  = NULL, id.var  = NULL, buckets  = 5, natural  = FALSE, do.spread = TRUE, by.period = TRUE, overlaps  = 1)

Arguments

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. In order to call plot, the contents of date.var must be of class Date or be coercible to an object of class Date via as.Date.
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.
do.spread
Object of class "logical". If TRUE the summary method displays information about the spread between the extreme quantiles. If FALSE this information is suppressed. Defaults to TRUE.
by.period
Object of class "logical". If TRUE the quantiles are recalculated within each date period. If FALSE the quantiles are calculated all at once. Defaults to TRUE.
overlaps
An object of class "numeric" which specifies the number of prior periods to include in the current period's portfolio weights calculation. If overlaps is the default of 1, backtest behaves as usual and only uses a periods own data to determine its portfolio. If overlaps is set to n > 1, a period's portfolio comprises the weighted mean of portfolio weights from the previous n periods, with period n having a weight of 1/n.

Value

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, totalCounts, marginals, means, naCounts, and turnover extract different parts of the value returned by backtest.

Details

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.

See Also

backtest-class

Examples

Run this code

data(starmine)

## Backtest with 1 'in.var' and 1 'ret.var'

bt <- backtest(starmine, in.var = "smi", ret.var = "ret.0.1.m", by.period = FALSE)
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 = "ret.0.1.m", by.var = "sector", by.period = FALSE)
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 = "ret.0.1.m", buckets = 4, by.period = FALSE)
summary(bt)

## Backtest with 1 'in.var', multiple 'ret.var', and a
## universe restriction

bt <- backtest(starmine, in.var = "smi",
               ret.var = c("ret.0.1.m", "ret.0.6.m"),
               universe = sector == "HiTec", by.period = FALSE)
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 = "ret.0.1.m", date.var = "date",
               id.var = "id", buckets = 10,
               natural = TRUE, by.period = FALSE)
summary(bt)

## The same backtest, but calculating quantiles within periods.

bt <- backtest(starmine, in.var = c("smi","cap.usd"),
               ret.var = "ret.0.1.m", date.var = "date",
               id.var = "id", buckets = 10,
               natural = TRUE, by.period = TRUE)
summary(bt)

plot(bt, type = "turnover")
plot(bt, type = "return")
plot(bt, type = "cumreturn")
plot(bt, type = "cumreturn.split")


Run the code above in your browser using DataLab