Econometrics & Causal Inference
Sargan-Hansen Overidentifying Restrictions J-Statistic Formula
Calculate Sargan’s J = N * R^2_aux overidentification statistic with df = L_excl - K_endog and catch the exact-identification trap (L_excl = K_endog -> df = 0).
Catch the #1 IV mistake: reporting J = 0 as "valid instruments" when L = K!
When you have more excluded instruments L_excl than endogenous regressors K_endog, Sargan’s (1958) homoskedastic test regresses 2SLS structural residuals u_hat on all exogenous controls and instruments, forming J = N * (SSR_aux / SST_u) ~ Chi-Square(df = L_excl - K_endog). However, when L_excl = K_endog (exact identification), 2SLS normal equations force Z' * u_hat = 0 mechanically so J = 0 with zero degrees of freedom — instrument exogeneity is completely untestable!
Verify on the sheet with N = 200 observations (B2), K_endog = 1 endogenous regressor (B3), L_excl = 3 excluded instruments (B4, giving df_over = 2 and 5% Chi-Square cutoff 5.9915), total residual sum of squares SST_u = 80.0 (B5), and auxiliary instrument-explained sum of squares SSR_aux = 0.96 (B6): R^2_aux = 0.0120 and J = 200 * 0.0120 = 2.4000 (< 5.9915, coherent instruments). Raise SSR_aux to 3.20 and J jumps to 8.0000 (rejecting joint instrument validity); set L_excl = 1 and the guard immediately flags "Untestable: Exactly Identified (df = 0)"!
| Identification Regime | Overidentification df = L - K | Sargan J Diagnostic |
|---|---|---|
| Underidentified (L < K) | df < 0 | Model Not Identified |
| Exactly Identified (L = K) | df = 0 | Untestable (Mechanical J = 0) |
| Overidentified Coherent (L=3, K=1, SSR=0.96) | df = 2 (Crit 5% = 5.9915) | J = 2.4000 (Do Not Reject) |
| Overidentified Conflicting (L=3, K=1, SSR=3.20) | df = 2 (Crit 5% = 5.9915) | J = 8.0000 (Reject Validity) |
Sargan Overidentifying J = N * (SSR_aux / SST_u) Formula with Identification Guard
Explicitly check df_over = L_excl - K_endog BEFORE returning a numeric J statistic so no analyst mistakes mechanical zero in an exactly identified model for empirical proof of exogeneity.
=LET(n_obs, B2, k_end, B3, l_iv, B4, sst_u, B5, ssr_a, B6, df_ov, l_iv - k_end, IF(OR(n_obs <= 0, k_end < 1, sst_u <= 0, ssr_a < 0, ssr_a > sst_u), "Invalid Sargan Input", IF(df_ov < 0, "Invalid: Underidentified Model", IF(df_ov = 0, "Untestable: Exactly Identified (df = 0)", ROUND(n_obs * (ssr_a / sst_u), 4)))))Chi-Square 5% Critical Cutoff Lookup (df = 1..4) and Overidentification Verdict Formula
Map common overidentification degrees of freedom df = 1..4 to exact 5% Chi-Square critical cutoffs (3.8415, 5.9915, 7.8147, 9.4877) via CHOOSE.
=LET(j_stat, E3, df_ov, B4 - B3, IF(ISTEXT(j_stat), j_stat, IF(df_ov > 4, "Check ChiSq Table (df > 4)", LET(c_05, CHOOSE(df_ov, 3.8415, 5.9915, 7.8147, 9.4877), IF(j_stat >= c_05, "Reject Exclusion Restriction (5%)", "Valid Overidentification (Do Not Reject)")))))Try the example
Use the original values or change them to test your understanding.