Learn R Programming

fPortfolio (version 4023.84)

portfolio-portfolioSpec: Specification of Portfolios

Description

Specifies a portfolio from scratch.

Usage

portfolioSpec(
    model = list(
        type = "MV", optimize = "minRisk",           
        estimator = "covEstimator", tailRisk = list(),
        params = list(alpha = 0.05)),
    portfolio = list(
        weights = NULL, targetReturn = NULL,
        targetRisk = NULL, riskFreeRate = 0, nFrontierPoints = 50,
        status = NA),
    optim = list(
        solver = "solveRquadprog", 
        objective = c("portfolioObjective", "portfolioReturn", "portfolioRisk"),
        options = list(meq = 2), control = list(), trace = FALSE),
    messages = list(
        messages = FALSE, note = ""),
    ampl = list(
        ampl = FALSE, project = "ampl", solver = "ipopt",
        protocol = FALSE, trace = FALSE)
    )

Value

portfolioSpec


returns an S4 object of class "fPFOLIOSPEC".

Arguments

model

a list, containing different arguments: type, estimator, params. See these arguments for further explanation.

portfolio

a list, containing different arguments: weights, targetReturn, riskFreeRate, nFrontierPoints. See these arguments for further explanation.

optim

a list with four entries, a character string solver denoting the type of the solver to be used, a params list to pass further arguments to the objective function to optimize, a control list for all control settings of the solver, and a logical flag, trace denoting if the optimization should be traced.

messages

a list, for optional messages.

ampl

a list, controls settings for the R/AMPL interface.

Details

To optimize a portfolio of assets we first have to specify it. All settings which specify a portfolio of assets are respresented by a S4 class named fPFOLIOSPEC.


    setClass("fPFOLIOSPEC", 
      representation(
        model = "list",
        portfolio = "list",
        optim = "list") )
    

An object of class fPFOLIOSPEC has three slots, named @model, @portfolio, and @optim. The first slot @model holds the model information, the second slot @portfolio the portfolio information, and the last slot @optim the information about the solver used for optimization.

The default settings are as follows:


    model = list(
        type = "MV",
        optimize = "minRisk",    
        estimator = "covEstimator",     
        tailRisk = list(),               
        params = list(alpha = 0.05, a = 2)),
    portfolio = list(
        weights = NULL, 
        targetReturn = NULL, 
        targetRisk = NULL,
        riskFreeRate = 0, 
        nFrontierPoints = 50,
        status = NA),
    optim = list(
        solver = "solveRquadprog",    
        objective = NULL,  
        parames = list(),
        control = list(meq = 2),   
        trace = FALSE)
    

Model Slot:

Type of Model:
The list entry type from the @model slot describes the type of the desired portfolio. The current implementation supports three types of portfolios. This may be a Markowitz mean -- variance portfolio named "MV", a mean -- lower partial moment portfolio named "LPM", or a mean -- CVaR condititional value-at-risk portfolio named "CVaR". One can use the function getType to retrieve the current setting and the function setType to modify this selection.

What to optimize?
The list entry optimize from the @model slot describes what should be optimized. Two choices are psssible. Either


        \code{"minRisk"}
        

which minimizes the risk if the target returns is given, or


        \code{"maxReturn"}
        

which maximizes the return if the target risk is given. One can use the function getOptimize to retrieve the current setting and the function setOptimize to modify this selection.

How to estimate mean and covariance?
The list entry estimator from the @model slot requests for a string that denotes the function name of the covariance estimator which should be used for the estimation of risk.

In Markowitz' mean-variance portfolio model, type="MV", the default function


        \code{"covEstimator"} 
        

is used which computes the standard column means of the multivariate assets data series and the standard covariance matrix. Alternative robust estimators include


        \code{"covMcdEstimator"}
        \code{"covOGKEstimator"}
        \code{"mveEstimator"}
        \code{"nnveEstimator"}
        \code{"mcdEstimator"}
        

In addition a shrinkage covariance estimator named


        \code{"shrinkEstimator"},
        

and a bagged covariance estimator named

   
        \code{"baggedEstimator"} 
        

are also available. Note, the experienced user can add his own function to estimate in any alternative way the mean and the covariance of the multivariate assets data series. In this case (s)he has to write a function, e.g. named

   
        \code{myEstimator=function(x,spec=NULL,...)}
        

where x is a multivariate time series, spec optionally the portfolio specification, if rquired, and ... additional arguments passed to the users code. Note, myEstimator must a return a named list, with at least the following two entries \$mu and \$Sigma, which represent estimators for the mean and covariance, respectively.

In the case of the Mean -- Lower-Partial-Moment portfolio, type="LPM" we make use of the equivalence to Markowitz' mean-variance portfolio with a modified covariance estimator, i.e.


        \code{"lpmEstimator"},
        

Note, in this case the setting of type="LPM" changes the covariance estimator function name from any selection previously made to the function automatically to "lpmEstimator" which returns the LPM mean and covariance estimates.

One can use the function getEstimator to retrieve the current setting and the function setEstimator to modify this selection.

Tail Risk List:
The list entry tailRisk from the @model slot is an empty list. It can be used to add tail risk budget constrains to the optimization. In this case a square matrix of the size of the number of assets is expected as list entry, which contains bivariate tail risk measures, i.e. the tail dependence coefficients estaimated via a copulae approach. Use the function setType to modify this selection.

The list entry parameters from the @model slot is a list with additional parameters used in different situations. It can be ebhanced by the user if needed. By default it contains the exponent a=2, the parameter needed for "LPM" portfolio optimization, and it contains the targetAlpha=0.05, the confidence level for "CVaR" portfolio optimization. Use the function setParams to modify this selection.

Portfolio Slot:

The values weights, targetReturn, and targetRisk from the portfolio slot have to be considered in common. By default all three are set to NULL. If this is the case, then it is assumed that an equal weight portfolio should be calculated. If only one of the three values is different from NULL then the following procedure will be startet. If the weights are specified then it is assumed that a feasible portfolio should be considered. If the target return is fixed then it is assumed that the efficient portfolio with the minimal risk will be considered. And finally if the risk is fixed, then the return should be maximized. Use the functions setWeights, setTargetReturn, and setTargetRisk to modify this selection.Note, the change in of the three functions will influence the settings of the other two.

The riskFreeRate=0 is also stored in the portfolio slot. Its value defaults to zero. It can be changed by the user. Use the function setRiskFreeRate to modify this selection.

The number of frontier points reqauired by the calculation of the portfolioFrontier is obtained from the value of nFrontierPoints=50 hold in the portfolio slot. Its value defaults to 50. It can be changed by the user. Use the function setNFrontierPoints to modify this selection.

The final status of portfolio optimization is returned and stored in the portfolio slot. Before optimization the value is unset to NA, after optimization a value of status=0 means a successful termination. For other values we recommend to inspect the help page of the selected solver, the name of the solver can be returned by the function getSolver. Use the function setSolver to reset the value to NA if it should be required.

Optim Slot:

The name of the default solver used for optimization can be retrieved calling the function getSolver. The default value for the value solver in the specification is set to NULL which means that the best solver availalbe will be autoselected and used. Before optimization the user can change the setting to another solver. Be aware, that a possible personal change will be overwritten by the function setType, so call setSolver after setting the type of the portfolio.

The logical flag trace in the slot optim allows to trace optionally the portfolio optimization process. By default this will not be the case since the default value is trace=FALSE. Use the fanction setTrace to modify the selection.

Retrieving and Modifying Specification Settings:

Information about the current portfolio specification can be retrieved by "get" functions. These include:

getTypeExtracts portfolio type from specification,
getOptimizeExtracts what to optimize from specification,
getEstimatorExtracts type of covariance estimator,
getTailRiskExtracts list of tail dependency risk matrixes,
getParamsExtracts parameters from specification,
getWeightsExtracts weights from a portfolio object,
getTargetReturnExtracts target return from specification,
getTargetRiskExtracts target riks from specification,
getAlphaExtracts target VaR-alpha specification,
getRiskFreeRateExtracts risk free rate from specification,
getNFrontierPointsExtracts number of frontier points,
getStatusExtracts the status of optimization,
getSolverExtracts solver from specification,
getTraceExtracts solver's trace flag.

For details we refer to link{getSpec}.

To modify the setting from a portfolio specification use the "set" functions:

setTypeSets type of portfolio optimization,
setOptimizeSets what to optimize, min risk or max return,
setEstimatorSets names of mean and covariance estimators,
setParamsSets optional model parameters,
setWeightsSets weights vector,
setTargetReturnSets target return value,
setTargetRiskSets target risk value,
setTargetAlphaSets CVaR target alpha value,
setRiskFreeRateSets risk-free rate value,
setNFrontierPointsSets number of frontier points,
setStatusSets status value,
setSolverSets the type of solver to be used,
setTraceSets the logical trace flag.

For details we refer to link{setSpec}.

Printing Specification Settings:

There is a generic print function to print information from specification. What is printed depends on the values of the settings. For example print(portfolioSpec()) returns the type of portfolio, the name of the covariance estimator, the portfolios risk free rate, and the desired solver.

References

Wuertz, D., Chalabi, Y., Chen W., Ellis A. (2009); Portfolio Optimization with R/Rmetrics, Rmetrics eBook, Rmetrics Association and Finance Online, Zurich.