Factor Model Summary
Types
PortfolioOptimisers.FactorSummaryResult — Type
struct FactorSummaryResult{__T_ann_return, __T_ann_volatility, __T_sharpe, __T_autocorr, __T_mean_abs_t, __T_t_rate, __T_mean_vif, __T_stability, __T_coverage, __T_ppy} <: AbstractResultThe headline statistics of every factor of a cross-sectional factor model.
FactorSummaryResult is what factor_model_summary returns. It carries the nine columns plot_factor_model_summary draws, one entry per raw factor, and the annualisation factor that produced the first three, so a summary can be tabulated, compared across fits, asserted on in a test, or read without a plotting package installed.
The five columns that can be absent
mean_abs_t, t_rate and mean_vif read the regression design, and stability and coverage read the exposure history. A block that carries no exposure history has none of them, and all five read back as nothing. A consumer reads that by dispatch rather than by a test of its own.
The raw factor axis
The three Gram columns are computed on the reduced factor axis of the family re-basis, and are written back onto the raw axis by name. A raw factor the re-basis dropped carries NaN in those three columns and a value in the others.
Fields
ann_return: Annualised mean of the factor return series, one entry per raw factor.
ann_volatility: Annualised volatility of the factor return series, one entry per raw factor.
sharpe: Ratio of the annualised mean to the annualised volatility, one entry per raw factor.
autocorr: Lag-one autocorrelation of the factor return series, one entry per raw factor.
mean_abs_t: Mean absolute cross-sectional t-statistic, one entry per raw factor, ornothingwhen the block carries no exposure history.
t_rate: Fraction of the observations at which the absolute t-statistic passes the threshold, one entry per raw factor, ornothingwhen the block carries no exposure history.
mean_vif: Mean variance inflation factor, one entry per raw factor, ornothingwhen the block carries no exposure history.
stability: Median exposure stability coefficient, one entry per raw factor, ornothingwhen the block carries no exposure history.
coverage: Average fraction of the universe at which the factor exposure is finite, one entry per raw factor, ornothingwhen the block carries no exposure history.
ppy: Annualisation factor. 252 for daily, 52 for weekly, 12 for monthly returns. It defaults to1, which reports the statistics per period.
Constructors
FactorSummaryResult( ann_return, ann_volatility, sharpe, autocorr, mean_abs_t, t_rate, mean_vif, stability, coverage, ppy) -> FactorSummaryResultArguments correspond to the struct's fields, in the order they are declared. The type is a Result, so factor_model_summary builds it and a caller reads it; there is no keyword constructor, and the type validates nothing of its own.
Related
Functions
PortfolioOptimisers.factor_model_summary — Function
factor_model_summary(csfm::CrossSectionalFactorModel; ppy::Number = 1,
threshold::Number = 2, step::Integer = 21,
weighting = BenchmarkWeightMetric(),
coverage_weighting = RegressionWeightMetric()) -> FactorSummaryResultSummarise every factor of a cross-sectional factor model as a FactorSummaryResult.
The summary is the top of the diagnostic hierarchy. It calls one level-2 verb of the regression group and one of the exposure group per column, and it aggregates each series over the observations. It computes no statistic of its own but the factor return statistics and two aggregates: the median of the stability, and the patch that reads a constant exposure as perfectly stable.
The answer is on the raw factor axis. The regression group answers on the reduced axis of the family re-basis, and the summary joins the two by name.
Algorithm
- Read the factor return history off
csr, refusing a block that carries none. - Take the annualised mean, the annualised volatility and the Sharpe ratio of each series with
factor_summary_return_stats, dropping the absent observations. - Take the lag-one autocorrelation of each series with
factor_summary_autocorrelation. - Take the mean absolute t-statistic, the exceedance rate and the mean variance inflation factor, and join them onto the raw factor axis. A block with no exposure history gives
nothingfor all three. - Take the median stability and the coverage. A block with no exposure history gives
nothingfor both. - Collect the nine columns and
ppyinto aFactorSummaryResult.
Arguments
csfm: A cross-sectional factor model block. A caller who holds a Prior Result writespr.rr.ppy: Periods per year.252annualises a daily fit, and the default of1reports the statistics per period.threshold: Absolute t-statistic the exceedance rate counts against.step: Number of observations between the two cross-sections the stability reads.weighting: TheAbstractOrthogonalityMetricwhose weight history the stability reads.coverage_weighting: TheAbstractOrthogonalityMetricwhose positive weights are the universe of the coverage. Its default ofRegressionWeightMetricis the estimation universe of the fit.
Validation
ppy > 0.csfm.csris notnothing.csfm.nfis notnothingwhencsfm.fcbis present.
Returns
fs::FactorSummaryResult: The computed summary.
Related