fmmcSemiParam: Semi-parametric factor model Monte Carlo

fmmcSemiParamR Documentation

Semi-parametric factor model Monte Carlo

Description

Simulate asset returns using semi-parametric Monte Carlo, by making use of a fitted factor model. Residuals are randomly generated from a chosen parametric distribution (Normal, Cornish-Fisher or Skew-t). Factor returns are resampled through non-parametric or stationary bootstrap.

Usage

fmmcSemiParam(
  B = 1000,
  factor.ret,
  beta,
  alpha,
  resid.par,
  resid.dist = c("normal", "Cornish-Fisher", "skew-t", "empirical"),
  boot.method = c("random", "block"),
  seed = 123
)

Arguments

B

number of bootstrap samples. Default is 1000.

factor.ret

T x K matrix or data.frame of factor returns having a complete history of data.

beta

N x K matrix of factor betas.

alpha

N x 1 matrix of factor alphas (intercepts). If missing, these are assumed to be 0 for all funds.

resid.par

matrix of parameters for the residual distribution. See Details.

resid.dist

the residual distribution; one of "normal", "Cornish-Fisher" or "skew-t". Default is "normal".

boot.method

the resampling method for factor returns; one of "random" or "block".

seed

integer to set random number generator state before resampling factor returns.

Details

Refer to Yindeng Jiang's PhD thesis referenced below for motivation and empirical results. An abstract can be found at <http://gradworks.umi.com/33/77/3377280.html>.

T is the no. of observations, K is the no. of factors, N is the no. of assets or funds, P is the no. of parameters for the residual distribution and B is the no. of bootstrap samples.

The columns in resid.par depend on the choice of resid.dist. If resid.dist = "normal", resid.par has one column for standard deviation. If resid.dist = "Cornish-Fisher", resid.par has three columns for sigma=standard deviation, skew=skewness and ekurt= excess kurtosis. If resid.dist = "skew-t", resid.par has four columns for xi=location, omega=scale, alpha=shape, and nu=degrees of freedom. Cornish-Fisher distribution is based on the Cornish-Fisher expansion of the Normal quantile. If resid.dist = "empirical", resid.par should be the TxN residuals retunred by the ffm object. Skew-t is the skewed Student's t-distribution– Azzalini and Captiano. The parameters can differ across funds, though the type of distribution is the same.

Bootstrap method: "random" corresponds to random sampling with replacement, and "block" corresponds to stationary block bootstrap– Politis and Romano (1994).

Value

A list containing the following components:

sim.fund.ret

B x N matrix of simulated fund returns.

boot.factor.ret

B x K matrix of resampled factor returns.

sim.residuals

B x N matrix of simulated residuals.

Author(s)

Eric Zivot, Yi-An Chen, Sangeetha Srinivasan.

References

Jiang, Y. (2009). Factor model Monte Carlo methods for general fund-of-funds portfolio management. University of Washington.

See Also

http://gradworks.umi.com/33/77/3377280.html

Examples

# fit a time series factor model for all assets

 # load data
data(managers, package = 'PerformanceAnalytics')
colnames(managers)
 # Make syntactically valid column names
colnames(managers) <- make.names( colnames(managers))
colnames(managers)

fit <- fitTsfm(asset.names=colnames(managers[,(1:6)]),
               factor.names=colnames(managers[,(7:9)]), 
               data=managers)
## Not run: 
# bootstrap returns using the fitted factor model, Normal dist. for residuals
resid.par <- as.matrix(fit$resid.sd,1,6)
fmmc.returns <- fmmcSemiParam(factor.ret = managers[,(7:9)], 
                              beta = fit$beta, 
                              alpha = fit$alpha, 
                              resid.par = resid.par)
                     
# Cornish-Fisher distribution for residuals
resid.par <- cbind(c(1,2,1,3,0.1,0.5), rnorm(6), c(2,3,1,2,1,0))
colnames(resid.par) <- c("var","skew","xskurt")
rownames(resid.par) <- colnames(managers[,(1:6)])

fmmc.returns.CF <- fmmcSemiParam(factor.ret = managers[,(7:9)], 
                                 beta = fit$beta, 
                                 alpha = fit$alpha, 
                                 resid.par = resid.par,
                                 resid.dist = "Cornish-Fisher")

# skew-t distribution
resid.par <- cbind(rnorm(6), c(1,2,1,3,0.1,0.5), rnorm(6), c(2,3,1,6,10,100))
colnames(resid.par) <- c("xi","omega","alpha","nu")
rownames(resid.par) <- colnames(managers[,(1:6)])
fmmc.returns.skewt <- fmmcSemiParam(factor.ret = managers[,(7:9)], 
                                    beta = fit$beta, alpha = fit$alpha, 
                                    resid.dist = "skew-t", resid.par = resid.par)
                                    
#Empirical deistribution 
data("factorDataSetDjia5Yrs")
exposure.vars <- 
fit.ffm <- fitFfm(data = factorDataSetDjia5Yrs, 
                  asset.var = "TICKER",
                   ret.var = "RETURN", 
                   date.var = "DATE", 
                   exposure.vars = c("P2B", "MKTCAP", "SECTOR"), 
                   addIntercept = FALSE)
                   
resid.par <- fit.ffm$residuals
fmmc.returns.ffm <- fmmcSemiParam(factor.ret = fit.ffm$factor.returns,
                                   beta = fit.ffm$beta, 
                                   resid.par = resid.par,
                                   resid.dist = "empirical", 
                                   boot.method = "block")

## End(Not run)

braverock/factorAnalytics documentation built on Dec. 16, 2024, 1:05 p.m.