Skip to content
All library documents

Two-Pass Fama–MacBeth Regression for Factor Risk Premia

Article Quant Q&A · Author: Vitomir

Summary

The document explains how to implement a Fama–MacBeth procedure after estimating asset exposures to the Fama–French three factors. The first pass is a time-series regression for each asset, producing estimated market, size, and value betas. In the second pass, for each month, realized asset returns are regressed across assets on those estimated betas, with an intercept. The resulting monthly coefficients are estimates of the factors’ prices of risk.

The procedure then averages each monthly price-of-risk estimate over time. The document gives a covariance-based variance estimate for the average, constructed from the deviations of monthly coefficient vectors around their sample mean, and says this can be used to assess statistical significance. It clarifies that the second-stage dependent variable is each asset’s return in that month and that the first-stage betas serve as explanatory variables. It does not discuss finite-sample adjustments, errors-in-variables from estimated betas, or alternative standard-error corrections.

Key ideas

  • Estimate each asset’s factor betas in first-pass time-series regressions.
  • For each month, regress cross-sectional asset returns on the previously estimated betas and an intercept.
  • The second-pass coefficients represent that month’s prices of factor risk.
  • Average the monthly prices of risk to obtain their sample estimates over time.
  • Use the dispersion of monthly coefficient vectors to estimate the variance of the time-averaged estimates.

Tags

Full text
# Implementing Fama-MacBeth cross sectional regression


# Implementing Fama-MacBeth cross sectional regression












I have built a Fama and French three factors model (market excess return, small-minus-big, high-minus-low) and estimated its betas through a time series regression (code in R, but any other language works fine too):

`lm(return ~ market_excess_return + small_minus_big + high_minus_low, data = df)`

Now I want to run a cross-sectional regression in Fama-MacBeth (1973) fashion.

I don't understand how to proceed with this. In particular, I understand that the previously estimated betas become new explanatory variables. But what is not clear to me is:

- is there any other explanatory variable?

- how to correctly specify the dependent variable?

Online I found the following but I don't know how to use it:

`twof <- lm(returns ~ betas + factorbetas, data=sstage)`

Appreciate your help.

## Answer by phdstudent (score 4, accepted)

https://quant.stackexchange.com/a/54939

You first run your FF three factor model. And get an estimate of $\alpha$ and $\beta$ for each factor.

Then for each month $t$, you run a cross-section regression:

$r_{i,t} = \lambda_0 + \hat{\beta}_i {\lambda}_t + \epsilon_{i,t}$

Where: $\hat{\beta}_i \equiv [\beta_{i, MktRf}, \beta_{i, SMB}, \beta_{i, HML}]'$, is a vector of the coefficients estimated on the first step.

What you are looking for is to estimate the vector of $\hat{\lambda}_t \equiv [\lambda_{t, MktRf}, \lambda_{y, SMB}, \lambda_{t, HML}]$.

So after the second step you will have $T$ estimates for each $\lambda$ (price of risk).

Then you just need to average those $\lambda$'s:

$\hat{\lambda} = \frac{1}{T} \sum^{T}_{t=1} \hat{\lambda}_t$

And you can test their statistical significance using as a variance estimate the following:

$Est.Asy.Var(\hat{\lambda}) = \frac{1}{T^2} \sum^{T}_{t=1} (\hat{\lambda}_t - \hat{\lambda} )(\hat{\lambda}_t - \hat{\lambda} )'$

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.