fmmcSemiParam | R Documentation |
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.
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
)
B |
number of bootstrap samples. Default is 1000. |
factor.ret |
|
beta |
|
alpha |
|
resid.par |
matrix of parameters for the residual
distribution. See |
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. |
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).
A list containing the following components:
sim.fund.ret |
|
boot.factor.ret |
|
sim.residuals |
|
Eric Zivot, Yi-An Chen, Sangeetha Srinivasan.
Jiang, Y. (2009). Factor model Monte Carlo methods for general fund-of-funds portfolio management. University of Washington.
http://gradworks.umi.com/33/77/3377280.html
# 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)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.