Description Usage Arguments Details Value Author(s) References Examples
Fit a fundamental (cross-sectional) factor model using ordinary
least squares or robust regression. Fundamental factor models use observable
asset specific characteristics (or) fundamentals, like industry
classification, market capitalization, style classification (value, growth)
etc. to calculate the common risk factors. An object of class "ffm"
is returned.
1 2 3 4 5 6 7 8 9 10 11 12 13 | fitFfm(data, asset.var, ret.var, date.var, exposure.vars, weight.var = NULL,
fit.method = c("LS", "WLS", "Rob", "W-Rob"), rob.stats = FALSE,
full.resid.cov = FALSE, z.score = FALSE, addIntercept = FALSE,
lagExposures = FALSE, ...)
## S3 method for class 'ffm'
coef(object, ...)
## S3 method for class 'ffm'
fitted(object, ...)
## S3 method for class 'ffm'
residuals(object, ...)
|
data |
data.frame of the balanced panel data containing the variables
|
asset.var |
character; name of the variable for asset names. |
ret.var |
character; name of the variable for asset returns. |
date.var |
character; name of the variable containing the dates
coercible to class |
exposure.vars |
vector; names of the variables containing the fundamental factor exposures. |
weight.var |
character; name of the variable containing the weights
used when standarizing style factor exposures. Default is |
fit.method |
method for estimating factor returns; one of "LS", "WLS" "Rob" or "W-Rob". See details. Default is "LS". |
rob.stats |
logical; If |
full.resid.cov |
logical; If |
z.score |
logical; If |
addIntercept |
logical; If |
lagExposures |
logical; If |
... |
potentially further arguments passed. |
object |
a fit object of class |
Estimation method "LS" corresponds to ordinary least squares using
lm
and "Rob" is robust regression using
lmRob
. "WLS" is weighted least squares using estimates
of the residual variances from LS regression as weights (feasible GLS).
Similarly, "W-Rob" is weighted robust regression.
Standardizing style factor exposures: The exposures can be standardized into
z-scores using regular or robust (see rob.stats
) measures of location
and scale. Further, weight.var
, a variable such as market-cap, can be
used to compute the weighted mean exposure, and an equal-weighted standard
deviation of the exposures about the weighted mean. This may help avoid an
ill-conditioned covariance matrix. Default option equally weights exposures
of different assets each period.
If rob.stats=TRUE
, covRob
is used to compute a
robust estimate of the factor covariance/correlation matrix, and,
scaleTau2
is used to compute robust tau-estimates
of univariate scale for residuals during "WLS" or "W-Rob" regressions. When
standardizing style exposures, the median
and
mad
are used for location and scale respectively.
At this time, the regression can contain only one dummy exposure (one of industry, sector, country etc.) or Market term, otherwise the exposure matrix will become singular. We plan to expand the function to allow specifying more than one dummy variable, and, dummy variable(s) in combination with an Market term in the future. (Ex: Country + Sector + Market)
The original function was designed by Doug Martin and initially implemented in S-PLUS by a number of University of Washington Ph.D. students: Christopher Green, Eric Aldrich, and Yindeng Jiang. Guy Yollin ported the function to R and Yi-An Chen modified that code. Sangeetha Srinivasan re-factored, tested, corrected and expanded the functionalities and S3 methods.
fitFfm
returns an object of class "ffm"
for which
print
, plot
, predict
and summary
methods exist.
The generic accessor functions coef
, fitted
and
residuals
extract various useful features of the fit object.
Additionally, fmCov
computes the covariance matrix for asset returns
based on the fitted factor model.
An object of class "ffm"
is a list containing the following
components:
factor.fit |
list of fitted objects that estimate factor returns in each
time period. Each fitted object is of class |
beta |
N x K matrix of factor exposures for the last time period. |
factor.returns |
xts object of K-factor returns (including Market). |
residuals |
xts object of residuals for N-assets. |
r2 |
length-T vector of R-squared values. |
factor.cov |
K x K covariance matrix of the factor returns. |
resid.cov |
N x N covariance matrix of residuals. |
return.cov |
N x N return covariance estimated by the factor model, using the factor exposures from the last time period. |
restriction.mat |
The restriction matrix used in the computation of f=Rg. |
resid.var |
length-N vector of residual variances. |
call |
the matched function call. |
data |
data frame object as input. |
date.var |
date.var as input |
ret.var |
ret.var as input |
asset.var |
asset.var as input. |
exposure.vars |
exposure.vars as input. |
weight.var |
weight.var as input. |
fit.method |
fit.method as input. |
asset.names |
length-N vector of asset names. |
factor.names |
length-K vector of factor.names. |
time.periods |
length-T vector of dates. |
Where N is the number of assets, K is the number of factors (including the Market or dummy variables) and T is the number of unique time periods.
Sangeetha Srinivasan, Guy Yollin, Yi-An Chen and Avinash Acharya
Menchero, J. (2010). The Characteristics of Factor Portfolios. Journal of Performance Measurement, 15(1), 52-62.
Grinold, R. C., & Kahn, R. N. (2000). Active portfolio management (Second Ed.). New York: McGraw-Hill.
And, the following extractor functions: coef
,
fitted
, residuals
,
fmCov
, fmSdDecomp
, fmVaRDecomp
and fmEsDecomp
.
paFm
for Performance Attribution.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # Load fundamental and return data
data("factorDataSetDjia5Yrs")
# fit a fundamental factor model
exposure.vars <- c("P2B", "MKTCAP")
fit <- TestfactorAnalytics::fitFfm(data=factorDataSetDjia5Yrs, asset.var="TICKER", ret.var="RETURN",
date.var="DATE", exposure.vars=exposure.vars)
names(fit)
# fit a Industry Factor Model with Market
exposure.vars <- c("SECTOR","P2B")
fit1 <- TestfactorAnalytics::fitFfm(data=factorDataSetDjia5Yrs, asset.var="TICKER", ret.var="RETURN",
date.var="DATE", exposure.vars=exposure.vars, addIntercept=TRUE)
# Fit a SECTOR+COUNTRY+Style model with Market
# Create a COUNTRY column with just 3 countries
factorDataSetDjia5Yrs$COUNTRY = rep(rep(c(rep("US", 1 ),rep("INDIA", 1),
rep("GERMANY", 1 )), 10), 60)
exposure.vars= c("SECTOR", "COUNTRY","P2B", "MKTCAP")
fit.MICM <- TestfactorAnalytics::fitFfm(data=factorDataSetDjia5Yrs, asset.var="TICKER", ret.var="RETURN",
date.var="DATE", exposure.vars=exposure.vars, addIntercept=TRUE)
#Fit a Market+SECTOR+COUNTRY+Style model with lagged exposures
fit.MICM.lagged <- TestfactorAnalytics::fitFfm(data=factorDataSetDjia5Yrs, asset.var="TICKER", ret.var="RETURN",
date.var="DATE", exposure.vars=exposure.vars, addIntercept=TRUE, lagExposures =TRUE)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.