rc: Return Contribution

View source: R/rc.R

rcR Documentation

Return Contribution

Description

Return contribution of portfolio segments.

Usage

rc(R, weights, timestamp, segments = NULL,
   R.bm = NULL, weights.bm = NULL,
   method = "contribution",
   linking.method = NULL,
   allocation.minus.bm = TRUE,
   tol = sqrt(.Machine$double.eps))

Arguments

R

returns: a numeric matrix

weights

the segment weights: a numeric matrix. weights[i, j] must correspond to R[i, j]

timestamp

character or numeric

segments

character. If missing, column names of R or of weights are used (if they are not NULL).

method

a string

linking.method

NULL or a string

allocation.minus.bm

logical

tol

numeric: weights whose absolute value is below tol are considered zero and not used for computations. Ignored if NA.

If portfolio returns are to be compared against benchmark returns, benchmark returns/weights must be supplied:

R.bm

returns: a numeric matrix

weights.bm

the segment weights: a numeric matrix. weights[i, j] must correspond to R[i, j]

Details

The function computes segment contribution, potentially over time. Returns and weights must be arranged in matrices, with rows corresponding to time periods and columns to portfolio segments. If weights and R are not matrices (i.e. are atomic vectors), then they are interpreted as cross-sectional weights/returns for a single period.

Weights can be missing, in which case R is assumed to already comprise segment returns.

Value

A list of two components

period_contributions

a data.frame

total_contributions

a numeric vector

Author(s)

Enrico Schumann

References

Jon A. Christopherson and David R. CariƱo and Wayne E. Ferson (2009), Portfolio Performance Measurement and Benchmarking, McGraw-Hill.

Feibel, Bruce (2003), Investment Performance Measurement, Wiley.

http://enricoschumann.net/R/packages/PMwR/manual/PMwR.html#return-contribution

See Also

returns

Examples

weights <- rbind(c( 0.25, 0.75),
                 c( 0.40, 0.60),
                 c( 0.25, 0.75))

R <- rbind(c( 1  ,    0),
           c( 2.5, -1.0),
           c(-2  ,  0.5))/100

rc(R, weights, segment = c("equities", "bonds"))


## contribution for btest:
##   run a portfolio 10% equities, 90% bonds
P <- as.matrix(merge(DAX, REXP, by = "row.names")[, -1])
(bt <- btest(prices = list(P),
            signal = function() c(0.1, 0.9),
            convert.weights = TRUE,
            initial.cash = 100))

W <- bt$position*P/bt$wealth
rc(returns(P)*W[-nrow(W), ])$total_contributions

PMwR documentation built on Oct. 19, 2023, 9:09 a.m.