sf_quant.research.run_quantile_ff_regression#

sf_quant.research.run_quantile_ff_regression(portfolio_returns: DataFrame) DataFrame#

Run Fama-French 5-factor regressions on portfolio returns.

This function performs ordinary least squares regression of portfolio excess returns against the Fama-French 5 factors (market, size, value, profitability, and investment). It computes alphas, betas, t-statistics, and other regression statistics for each portfolio.

Parameters#

portfolio_returnspl.DataFrame

Portfolio returns data containing:

  • date (date): The observation date.

  • Portfolio return columns (e.g., p_1, p_2, …, spread).

Returns#

pl.DataFrame

Regression results with rows as statistics and columns as portfolios:

  • feature_names (str): Statistic name (alpha, alpha_t, beta_mkt, mkt_t, beta_smb, smb_t, beta_hml, hml_t, beta_rmw, rmw_t, beta_cma, cma_t).

  • Portfolio columns (e.g., p_1, p_2, …, spread): Values for each coefficient or t-statistic.

Notes#

  • Fama-French factors are automatically loaded based on date range in portfolio_returns.

  • Portfolio excess returns are computed as portfolio return minus risk-free rate.

  • Regressions use OLS with intercept.

  • Results are transposed so rows are statistics and columns are portfolios.

Examples#

>>> import polars as pl
>>> import sf_quant.research as sfr
>>> import datetime as dt
>>> ports = pl.DataFrame({
...     'date': [dt.date(2024, 1, i) for i in range(1, 100)],
...     'p_1': [0.01] * 99,
...     'p_10': [0.02] * 99,
...     'spread': [0.01] * 99
... })
>>> results = sfr.run_quantile_ff_regression(ports)
>>> results
shape: (12, 4)
┌───────────────┬──────────┬──────────┬──────────┐
│ feature_names ┆ p_1      ┆ p_10     ┆ spread   │
│ ---           ┆ ---      ┆ ---      ┆ ---      │
│ str           ┆ f64      ┆ f64      ┆ f64      │
╞═══════════════╪══════════╪══════════╪══════════╡
│ alpha         ┆ 0.0023   ┆ 0.0045   ┆ 0.0078   │
│ alpha_t       ┆ 2.134    ┆ 3.421    ┆ 4.532    │
│ beta_mkt      ┆ 1.123    ┆ 0.987    ┆ 0.854    │
│ mkt_t         ┆ 15.234   ┆ 14.123   ┆ 12.456   │
│ beta_smb      ┆ 0.234    ┆ -0.123   ┆ -0.345   │
│ smb_t         ┆ 3.456    ┆ -2.134   ┆ -4.567   │
│ beta_hml      ┆ -0.145   ┆ 0.234    ┆ 0.456    │
│ hml_t         ┆ -2.345   ┆ 3.456    ┆ 5.678    │
│ beta_rmw      ┆ 0.123    ┆ 0.234    ┆ 0.345    │
│ rmw_t         ┆ 2.345    ┆ 3.456    ┆ 4.567    │
│ beta_cma      ┆ -0.234   ┆ -0.345   ┆ -0.456   │
│ cma_t         ┆ -3.456   ┆ -4.567   ┆ -5.678   │
└───────────────┴──────────┴──────────┴──────────┘