Quantitative Finance & Empirical Asset Pricing
Gibbons-Ross-Shanken (GRS) Joint Alpha F-Test Formula
Test whether N portfolio alphas are jointly zero using the exact Gibbons-Ross-Shanken (1989) Sharpe-ratio F-statistic F_GRS = ((T - N - K) / N) * ((SR_max^2 - SR_f^2) / (1 + SR_f^2)).
Understand GRS geometrically: do test portfolios expand the benchmark tangency Sharpe ratio?
Gibbons, Ross, and Shanken (1989) proved that testing H_0: alpha_1 = ... = alpha_N = 0 across N test portfolios against K traded benchmark factors over T periods is equivalent to testing whether the K factors already span the ex-post mean-variance tangency portfolio! Because alpha' * Sigma_e^(-1) * alpha = SR_max^2 - SR_f^2, the exact finite-sample F(N, T - N - K) statistic is F_GRS = ((T - N - K) / N) * ((SR_max^2 - SR_f^2) / (1 + SR_f^2)).
Audit T = 126 quarterly observations (B2), N = 25 size-value portfolios (B3), and K = 1 market factor (B4, giving df_2 = 126 - 25 - 1 = 100 and multiplier 100 / 25 = 4.0000): when benchmark Sharpe is SR_f = 0.50 (B5, 1 + SR_f^2 = 1.25) and combined tangency Sharpe reaches SR_max = 1.00 (B6), squared Sharpe gain is 1.00 - 0.25 = 0.75, normalized ratio is 0.75 / 1.25 = 0.6000, and F_GRS = 4 * 0.6000 = 2.4000 (> F_0.05(25, 100) = 1.6156, rejecting mean-variance efficiency)! Lower SR_max to 0.75 and F_GRS drops cleanly to 1.0000.
| Tangency Sharpe Regime (T=126, N=25, K=1) | Quadratic Alpha Term SR_max^2 - SR_f^2 | Exact F_GRS(25, 100) |
|---|---|---|
| Zero Pricing Errors (SR_max = 0.50) | 0.0000 | 0.0000 (Exact Spanning) |
| Modest Alphas (SR_max = 0.75) | 0.5625 - 0.2500 = 0.3125 | 1.0000 (Pass < 1.6156) |
| Large Alphas (SR_max = 1.00) | 1.0000 - 0.2500 = 0.7500 | 2.4000 (Reject CAPM at 5%) |
Exact Gibbons-Ross-Shanken F_GRS(N, T - N - K) Formula
Enforce both finite-sample invertibility (T > N + K so residual covariance matrix Sigma_e is nonsingular!) and tangency dominance (SR_max >= SR_f >= 0, since expanding the asset menu can never shrink the unconstrained sample Sharpe ratio).
=LET(t_obs, B2, n_port, B3, k_fac, B4, sr_f, B5, sr_mx, B6, df_2, t_obs - n_port - k_fac, IF(OR(n_port < 1, k_fac < 1, df_2 <= 0), "Insufficient Time Series (Require T > N + K)", IF(OR(sr_f < 0, sr_mx < sr_f), "Invalid Sharpe Ordering (Require SR_max >= SR_f)", ROUND((df_2 / n_port) * ((sr_mx^2 - sr_f^2) / (1 + sr_f^2)), 4))))Implied Quadratic Pricing Error alpha' * Sigma_e^(-1) * alpha = SR_max^2 - SR_f^2 Formula
Report SR_max^2 - SR_f^2 directly so researchers can compare economic Sharpe-ratio improvement independently of sample length T.
=IF(OR(B5 < 0, B6 < B5), "Invalid Sharpe Ordering (Require SR_max >= SR_f)", ROUND(B6^2 - B5^2, 4))Try the example
Use the original values or change them to test your understanding.