Learn R Programming

fPortfolio (version 201.10060)

AssetsModelling: Modelling of Multivariate Asset Sets

Description

A collection and description of functions which generate multivariate artificial data sets of assets, which fit the parameters to a multivariate normal, skew normal, or (skew) Student-t distribution and which compute some benchmark statistics. In addition a function is provided which allows for the selection and clustering of individual assets from portfolios using hierarchical and k-means clustering approaches. The functions are: ll{ assetsSim Simulates a data set of assets, assetsSelect Asset Selection from Portfolios, assetsFit Fits the parameter of a data set of assets, assetsStats Computes benchmark statistics of asset sets, print S3 print method for an object of class 'fASSETS', plot S3 Plot method for an object of class 'fASSETS", summary S3 summary method for an object of class 'fASSETS'. }

Usage

assetsSim(n, dim = 2, model = list(mu = rep(0, dim), Omega = diag(dim), 
    alpha = rep(0, dim), df = Inf), assetNames = NULL) 
assetsSelect(x, method = c("hclust", "kmeans"), 
    kmeans.centers = 5, kmeans.maxiter = 10, doplot = TRUE, ...)
assetsFit(x, method = c("st", "snorm", "norm"), title = NULL, 
    description = NULL, fixed.df = NA, ...)
assetsStats(x)

## S3 method for class 'fASSETS': print(x, \dots) ## S3 method for class 'fASSETS': plot(x, which = "ask", \dots) ## S3 method for class 'fASSETS': summary(object, which = "all", \dots)

Arguments

assetNames
[assetsSim] - a vector of character strings of length dim allowing for modifying the names of the individual assets.
description
[assetsFit] - a character string, assigning a brief description to an "fASSETS" object.
doplot
[assetsSelect] - a logical, should a plot be displayed?
fixed.df
[assetsFit] - either NA, the default, or a numeric value assigning the number of degrees of freedom to the model. In the case that fixed.df=NA the value of df will be included in the optimiz
kmeans.centers
[assetsSelect] - either the number of clusters or a set of initial cluster centers. If the first, a random set of rows in x are chosen as the initial centers.
kmeans.maxiter
[assetsSelect] - the maximum number of iterations allowed.
method
[assetsFit] - a character string, which type of distribution should be fitted? "st" a multivariate skew-Student-t, "snorm" a multivariate skew-normal, or "norm" a multivariate normel. By default a multivariate n
model
[assetsSim] - a list of model parameters: mu a vector of mean values, one for each asset series, Omega the covariance matrix of assets, alpha the skewness vector, and df the number of degrees of fre
n, dim
[assetsSim] - integer values giving the number of data records to be simulated, and the dimension of the assets set.
object
[summary] - An object of class fASSETS.
title
[assetsFit] - a character string, assigning a title to an "fASSETS" object.
which
which of the five plots should be displayed? which can be either a character string, "all" (displays all plots) or "ask" (interactively asks which one to display), or a vector of 5 logical
x
[assetsFit][assetsStats] - a numeric matrix of returns or any other rectangular object like a data.frame or a multivariate time series objects which can be transformed by the function as.matrix to an object of class
...
optional arguments to be passed.

Value

  • assetsSim returns a matrix, the artifical data records represent the assets of the portfolio. Row names and column names are not created, they have to be added afterwards. assetsSelects if method="hclust" was selected then the function returns a S3 object of class "hclust", otherwise if method="kmeans" was selected then the function returns an obkject of class list. For details we refer to the help pages of hclust and kmeans. assetsFit returns a S4 object class of class "fASSETS", with the following slots:
  • @callthe matched function call.
  • @datathe input data in form of a data.frame.
  • @descriptionallows for a brief project description.
  • @fitthe results as a list returned from the underlying fitting function.
  • @methodthe selected method to fit the distribution, one of "norm", "snorm", "st".
  • @modelthe model parameters describing the fitted parameters in form of a list, model=list(mu, Omega, alpha, df.
  • @titlea title string.
  • The @fit slot is a list with the following compontents: (Note, not all are documented here).
  • @fit$dpa list containing the direct parameters beta, Omega, alpha. Here, beta is a matrix of regression coefficients with dim(beta)=c(nrow(X), ncol(y)), Omega is a covariance matrix of order dim, alpha is a vector of shape parameters of length dim.
  • @fit$sea list containing the components beta, alpha, info. Here, beta and alpha are the standard errors for the corresponding point estimates; info is the observed information matrix for the working parameter, as explained below.
  • fit@optimthe list returned by the optimizer optim; see the documentation of this function for explanation of its components.
  • Note that the @fit$model slot can be used as input to the function assetsSim for simulating a similar portfolio of assets compared with the original portfolio data, usually market assets. assetsStats returns a data frame with the following entries per column and asset: Records - number of records (length of time series), paMean - annualized (pa, per annum) Mean of Returns, paAve - annualized Average of Returns, paVola - annualized Volatility (standard Deviation), paSkew - Skewness of Returns, paKurt - Kurtosis of Returns, maxDD - maximum Drawdown, TUW - Time under Water, mMaxLoss - Monthly maximum Loss, mVaR - Monthly 99 mModVaR - Monthly 99 mSharpe - Monthly Sharpe Ratio, mModSharpe - Monthly Modified Sharpe Ratio, and skPrice - Skewness/Kurtosis Price.

notes

The 'Rmetrics' packages fbasics and fExtremes are required.

Details

Data sets of assets x can be expressed as multivariate 'timeSeries' objects, as 'data.frame' objects, or any other rectangular object which can be transformed into an object of class 'matrix'. The functions assetsFit for the parameter estimation and assetsSim for the simulation of assets sets use code based on functions from the mentioned package "mtvnorm" and "sn". The required functionality from the contributed R package "sn" for fitting data to a multivariate Normal, skew-Normal, or skew-Student-t is available from builtin functions, so it is not necessary to load the packages "mtvnorm" and "sn". The function assetsStats implements benchmark formulas and statistics as reported in the help page of the hedge fund software from www.AlternativeSoft.com. The computed statistics are listed in the 'Value' section below. Note, that the functions were written for monthly recorded data sets. Be aware of this when you use or generate asset sets on different time scales, then you have them to scale properly. The function assetsSelect calls the functions hclust and kmeans from R's "stats" package. hclust performs a hierarchical cluster analysis on the set of dissimilarities hclust(dist(t(x))) and kmeans performs a k-means clustering on the data matrix itself.

References

The references are listed in the MultivariateDistribution collection.

See Also

MultivariateDistribution, hclust and kmeans.

Examples

Run this code
## SOURCE("fBasics.A0-SPlusCompatibility")
## SOURCE("fPortfolio.A2-AssetsModelling")

## berndtInvest -
   xmpPortfolio("Start: Load monthly data set of returns > ")
   data(berndtInvest)
   # Exclude Date, Market and Interest Rate columns from data frame,
   # then multiply by 100 for percentual returns ...
   berndtAssets = berndtInvest[, -c(1, 11, 18)]
   rownames(berndtAssets) = berndtInvest[, 1]
   head(berndtAssets)
    
## assetsSelect -
   xmpPortfolio("Next: Select 4 most dissimilar assets from hclust > ")
   clustered = assetsSelect(berndtAssets, doplot = FALSE)
   myAssets = berndtAssets[, c(clustered$order[1:4])]
   colnames(myAssets)
   # Scatter and time series plot:
   par(mfrow = c(2, 1), cex = 0.7)
   plot(clustered)  
   myPrices = apply(myAssets, 2, cumsum)
   ts.plot(myPrices, main = "Selected Assets", 
     xlab = "Months starting 1978", ylab = "Price", col = 1:4)
   legend(0, 3, legend = colnames(myAssets), pch = "----", col = 1:4, cex = 1)
   
## assetsStats -
   if (require(fBasics)) assetsStats(myAssets)
   
## assetsSim -
   xmpPortfolio("Next: Fit a Skew Student-t > ")
   fit = assetsFit(myAssets)
   # Show Model Slot:
   fit @model
   # Simulate set with same properties:
   set.seed(1953)
   simAssets = assetsSim(n = 120, dim = 4, model = fit@model)
   head(simAssets)
   simPrices = apply(simAssets, 2, cumsum)
   ts.plot(simPrices, main = "Simulated Assets", 
     xlab = "Number of Months", ylab = "Simulated Price", col = 1:4)
   legend(0, 3, legend = colnames(simAssets), pch = "----", col = 1:4, cex = 1)
   
## plot -
   xmpPortfolio("Next: Show Simulated Assets Plots > ")
   if (require(fExtremes)) {
     # Show Scatterplot:
     par(mfrow = c(1, 1), cex = 0.7)
     plot(fit, which = c(TRUE, FALSE, FALSE, FALSE, FALSE))
     # Show  QQ and PP Plots:
     par(mfrow = c(2, 2), cex = 0.7)
     plot(fit, which = !c(TRUE, FALSE, FALSE, FALSE, FALSE))
   }

Run the code above in your browser using DataLab