Quantitative Finance & Empirical Asset Pricing
Fama-MacBeth Risk Premia and Shanken EIV Standard Error Formula
Adjust naive Fama-MacBeth cross-sectional t-statistics for first-pass beta estimation error using Shanken’s (1992) errors-in-variables factor c_S = 1 + (lambda_hat / sigma_f)^2.
Why naive Fama-MacBeth standard errors overstate factor significance
In Fama and MacBeth’s (1973) two-pass procedure, time-series regressions first estimate portfolio factor betas beta_hat_i, and T monthly cross-sectional regressions then estimate monthly risk-premium realizations lambda_t with naive standard error SE_FM = s_lambda / SQRT(T). Because beta_hat_i contains first-pass sampling noise rather than true betas, Shanken (1992) proved that cross-sectional sampling variance is magnified by c_S = 1 + (lambda_hat / sigma_f)^2: Var_Shanken(lambda_hat) = ((s_lambda^2 - sigma_f^2) * c_S + sigma_f^2) / T!
See how Shanken’s correction flips a borderline factor test across T = 100 months (B2) with estimated monthly risk price lambda_hat = 0.0140 (B3), factor volatility sigma_f = 0.0250 (B4), and cross-sectional slope SD s_lambda = 0.0650 (B5): naive SE_FM = 0.0650 / 10 = 0.0065 produces t_FM = 0.0140 / 0.0065 = 2.1538 (falsely significant at 5%!). Applying c_S = 1 + (0.014 / 0.025)^2 = 1.3136 raises SE_Shanken to 0.0073 and lowers t_Shanken to 1.9133 (< 1.96)!
| Asset-Pricing Inference Quantity | Formula | Sample Value |
|---|---|---|
| Naive Fama-MacBeth SE & t-Stat | s_lam / SQRT(T) -> lambda_hat / SE_FM | SE = 0.0065, t_FM = 2.1538 |
| Shanken Multiplicative Factor (c_S) | 1 + (lambda_hat / sigma_f)^2 | 1.3136 (+31.36% EIV Factor) |
| Shanken-Corrected SE & t-Stat | SQRT(((s_lam^2 - sig_f^2)*c_S + sig_f^2)/T) | SE = 0.0073, t_S = 1.9133 (< 1.96) |
Shanken (1992) Errors-in-Variables Multiplier c_S = 1 + (lambda_hat / sigma_f)^2 Formula
Notice that under the null hypothesis lambda_hat = 0, c_S collapses to 1.0000 — Shanken’s correction grows quadratically with the estimated Sharpe ratio of the factor price of risk!
=LET(lam_h, B3, sig_f, B4, IF(sig_f <= 0, "Invalid Factor Volatility", ROUND(1 + (lam_h / sig_f)^2, 4)))Shanken-Corrected Two-Pass t-Statistic Formula
Validate T >= 2 and s_lambda >= sigma_f > 0 before evaluating Shanken’s traded-factor variance ((s_lambda^2 - sigma_f^2) * c_S + sigma_f^2) / T.
=LET(t_len, B2, lam_h, B3, sig_f, B4, s_lam, B5, IF(OR(t_len < 2, sig_f <= 0, s_lam < sig_f), "Invalid FM-Shanken Input", LET(c_sh, 1 + (lam_h / sig_f)^2, v_sh, ((s_lam^2 - sig_f^2) * c_sh + sig_f^2) / t_len, ROUND(lam_h / SQRT(v_sh), 4))))Try the example
Use the original values or change them to test your understanding.