Learning objectives
By the end of this lecture you should be able to:
- write a system of simultaneous equations in structural and reduced form, and derive simultaneity bias;
- state and apply the order and rank conditions for identification of a single equation;
- estimate an identified equation by 2SLS and LIML, and a full system by 3SLS, and compare their properties;
- explain identification through covariance restrictions and heteroskedasticity;
- connect the identification problem in simultaneous equations to structural VARs (Lecture 11).
Motivation
The Cowles Commission developed econometrics in the 1940s around one problem. Equilibrium prices and quantities are determined jointly by supply and demand, so a scatter of price–quantity pairs traces out neither curve. That problem — learning about behavioral relationships from data generated by their interaction — is still the central identification problem in industrial organization, macroeconomics and trade. The tools of this lecture are the order and rank conditions, which formalize exactly how much a priori information is needed to recover a structural equation.
1. Structure and reduced form
Consider a market with demand and supply
where \(y_t,w_t\) are exogenous and \((u^d_t,u^s_t)\) are structural shocks with mean zero, uncorrelated with \((y_t,w_t)\). Solving for the endogenous variables gives the reduced form
In general, write \(G\) equations as
where \(y_t\) is the \(G\times1\) vector of endogenous variables and \(x_t\) is the \(K\times1\) vector of exogenous variables. The reduced form is a set of regressions on exogenous variables, so \(\Pi\) is always consistently estimable by OLS. Identification asks whether \((B,\Gamma)\) can be recovered from \(\Pi\).
2. Simultaneity bias
In the demand equation, price depends on \(u^d_t\) through the reduced form, so
when the two shocks are uncorrelated. With no exogenous shifters and uncorrelated shocks, the OLS regression of \(q\) on \(p\) converges to
a variance-weighted average of the demand and supply slopes. If supply shocks dominate (\(\sigma_s^2\gg\sigma_d^2\)), the equilibria trace out the demand curve. If demand shocks dominate, they trace out supply. Otherwise OLS estimates neither.
3. Identification of a single equation
Identification of the demand equation needs a variable that shifts supply but is excluded from demand: weather \(w_t\). Shifting supply along a fixed demand curve traces out demand. Symmetrically, income identifies supply. This idea generalizes.
Write equation \(g\) after normalization as \(y_{1t}=y_{2t}'\gamma+x_{1t}'\delta+u_t\), with \(G_g\) included right-hand-side endogenous variables and \(K_g\) included exogenous variables, out of \(K\) exogenous variables in the system.
Theorem 6.1 (Order and rank conditions). With exclusion restrictions only:
- Order condition (necessary): the number of excluded exogenous variables is at least the number of included right-hand-side endogenous variables, \(K-K_g\ge G_g\).
- Rank condition (necessary and sufficient): the submatrix of reduced-form coefficients \(\Pi_{21}\), relating the included endogenous regressors \(y_{2t}\) to the excluded exogenous variables, has rank \(G_g\).
The equation is just identified if \(K-K_g=G_g\) and over-identified if \(K-K_g>G_g\).
Proof sketch. Substituting the reduced form into the equation and matching coefficients on the excluded exogenous variables gives \(\pi_{1,\text{excl}}=\Pi_{21}'\gamma\), where \(\pi_{1,\text{excl}}\) holds the reduced-form coefficients of \(y_1\) on the excluded variables. This is a linear system of \(K-K_g\) equations in \(G_g\) unknowns. It has a unique solution if and only if \(\Pi_{21}\) has full column rank \(G_g\), which requires at least as many equations as unknowns. Once \(\gamma\) is known, \(\delta\) follows from the coefficients on the included exogenous variables. ∎
The rank condition is the relevance condition. It is the population version of "the excluded instruments jointly predict the endogenous regressors" from Lecture 5, and it can fail even when the order condition holds. For example, the excluded variable may have a zero coefficient in the relevant reduced-form equation (no weather variation actually moves supply), or two excluded variables may move the endogenous variables only in fixed proportion. The rank condition is testable through the first stage; the exclusion restrictions are not.
Normalization and other restrictions. One coefficient in each equation is normalized to 1. Identification can also come from restrictions on \(\Gamma\) other than exclusions (for example, known ratios), from restrictions on the covariance matrix \(\Sigma=E[\varepsilon_t\varepsilon_t']\), or from cross-equation restrictions implied by theory.
4. Estimation
Single-equation methods. An identified equation can be estimated by 2SLS (Lecture 5) using all exogenous variables in the system as instruments. This is consistent whether or not other equations are correctly specified, which is a big robustness advantage. Its finite-sample properties deteriorate with many or weak instruments.
LIML. Limited-information maximum likelihood minimizes the least-variance ratio
and belongs to the \(k\)-class of estimators \(\widehat\beta(k)=[W'(I-kM_X)W]^{-1}W'(I-kM_X)y_1\), where \(W=[Y_2\;X_1]\). Here \(k=0\) gives OLS, \(k=1\) gives 2SLS, and \(k=\widehat\kappa_{\min}\) gives LIML. LIML is approximately median-unbiased and much less biased than 2SLS with many or weak instruments, at the cost of thicker tails. Fuller's modification, \(k=\widehat\kappa-a/(n-K)\), restores finite moments.
System methods. 3SLS (Zellner and Theil, 1962) applies GLS to the stacked 2SLS system, using the cross-equation error covariance \(\widehat\Sigma\) from 2SLS residuals. FIML maximizes the full Gaussian likelihood. Both are asymptotically more efficient than equation-by-equation 2SLS when every equation is correctly specified and \(\Sigma\) is not diagonal. Both are inconsistent for all equations if any one equation is misspecified. This is the classic efficiency–robustness trade-off of system estimation.
5. Covariance restrictions and identification through heteroskedasticity
Without exclusion restrictions, information about \(\Sigma\) can identify the structure.
Recursive systems. If \(B\) is triangular and \(\Sigma\) is diagonal, every equation can be estimated consistently by OLS: each right-hand-side endogenous variable depends only on shocks orthogonal to the current equation's shock. This is the logic of the Cholesky identification of a VAR (Lecture 11).
Identification through heteroskedasticity (Rigobon, 2003). Suppose the structural parameters are stable but the variances of the shocks change between two regimes (for example, crisis and calm periods). Each regime gives a reduced-form covariance matrix \(\Omega_r=B^{-1}\Sigma_rB^{-1\prime}\). For a 2×2 system, the two regimes provide six moments, against six unknowns (two slopes and four variances), so the system is just identified as long as the relative variances change. The method needs no instruments, but it requires that the slopes do not change across regimes and that the shocks are uncorrelated.
Worked example
The Fulton fish market (Graddy, 1995; Angrist, Graddy and Imbens, 2000). Daily data on whiting sold in New York. Demand is \(\log q_t=\alpha_0+\alpha_1\log p_t+\text{day dummies}+u^d_t\). Weather at sea (wave height, wind speed) affects how much fish boats can land, but plausibly not how much buyers in New York demand. Weather therefore shifts supply and is excluded from demand.
- OLS of \(\log q\) on \(\log p\) gives an elasticity of about \(-0.5\): too small in absolute value, because demand shocks also move price.
- IV using "stormy" weather as the instrument gives an elasticity close to \(-1\).
Identification checks: the first stage (does stormy weather raise prices?) is strong; the exclusion restriction requires that weather at sea does not affect the demand of fish buyers, which is plausible but should be argued, for example by noting that the market is indoors. The supply equation is not identified from these data: there is no variable that shifts demand but is excluded from supply. Day-of-week dummies are a candidate, if they shift demand only.
Problem set
-
OLS in a market. Derive \(\operatorname{plim}\widehat\alpha_1^{OLS}\) in the model of Section 1 with no exogenous variables and uncorrelated shocks, and show that it is a weighted average of \(\alpha_1\) and \(\beta_1\).
Solution
\(p=(u^s-u^d)/(\alpha_1-\beta_1)\) and \(q=(\alpha_1u^s-\beta_1u^d)/(\alpha_1-\beta_1)\), dropping constants. Then \(\operatorname{Cov}(q,p)=(\alpha_1\sigma_s^2+\beta_1\sigma_d^2)/(\alpha_1-\beta_1)^2\) and \(\operatorname{Var}(p)=(\sigma_s^2+\sigma_d^2)/(\alpha_1-\beta_1)^2\). The ratio gives the result, with weights \(\sigma_s^2/(\sigma_s^2+\sigma_d^2)\) and \(\sigma_d^2/(\sigma_s^2+\sigma_d^2)\).
-
Order and rank. A three-equation macro model has endogenous \((C_t,I_t,Y_t)\) and exogenous \((1,G_t,r_t,Y_{t-1})\): \(C_t=a_0+a_1Y_t+u_{1t}\); \(I_t=b_0+b_1r_t+b_2Y_{t-1}+u_{2t}\); \(Y_t=C_t+I_t+G_t\). Check the order condition for the consumption equation and explain what the rank condition requires.
Solution
The consumption equation has one RHS endogenous variable (\(Y_t\)) and excludes three exogenous variables (\(G_t,r_t,Y_{t-1}\)): over-identified by 2. Rank requires that at least one excluded variable has a nonzero reduced-form coefficient in the \(Y_t\) equation. Here \(\partial Y_t/\partial G_t=1/(1-a_1)\neq0\), so it holds whenever \(a_1\neq1\).
-
\(k\)-class. Show that \(k=1\) in the \(k\)-class formula reproduces 2SLS.
Solution
\(I-M_X=P_X\), so \(\widehat\beta(1)=(W'P_XW)^{-1}W'P_Xy_1\), which is 2SLS with instruments \(X\). Since \(X_1\subset X\), \(P_XX_1=X_1\), so the included exogenous regressors are their own instruments.
-
System misspecification. Explain why 3SLS estimates of the demand equation become inconsistent if the supply equation wrongly omits a relevant exogenous variable, while 2SLS estimates of demand remain consistent.
Solution
3SLS weights equations by \(\widehat\Sigma^{-1}\), so the misspecified supply equation's error, now correlated with the instruments, contaminates the demand estimates through the off-diagonal weights. 2SLS for demand only uses \(E[x_tu^d_t]=0\), which is unaffected.
-
Heteroskedasticity identification. In \(p=\beta q+\varepsilon\), \(q=\alpha p+\eta\), with \(\varepsilon\perp\eta\), suppose \(\operatorname{Var}(\eta)\) changes between regimes but \(\operatorname{Var}(\varepsilon)\) does not. Show that \(\beta=\Delta\operatorname{Cov}(p,q)/\Delta\operatorname{Var}(q)\), where \(\Delta\) denotes the difference across regimes.
Solution
Solving, \(q=(\alpha\varepsilon+\eta)/(1-\alpha\beta)\) and \(p=(\varepsilon+\beta\eta)/(1-\alpha\beta)\). A change in \(\sigma^2_\eta\) by \(\Delta\) changes \(\operatorname{Var}(q)\) by \(\Delta/(1-\alpha\beta)^2\) and \(\operatorname{Cov}(p,q)\) by \(\beta\Delta/(1-\alpha\beta)^2\). The ratio is \(\beta\): this is an IV estimator with regime dummies interacted with \(q\) as instruments.
Computational lab
Goal: see simultaneity bias and how exclusion restrictions solve it.
import numpy as np
rng = np.random.default_rng(6)
T = 2_000
a1, b1 = -1.0, 0.5 # demand slope, supply slope
y = rng.normal(size=T) # income: shifts demand
w = rng.normal(size=T) # weather: shifts supply
ud, us = rng.normal(0, 1, T), rng.normal(0, 1, T)
# demand: q = a1 p + 0.8 y + ud ; supply: q = b1 p - 0.8 w + us
p = (0.8 * y + ud + 0.8 * w - us) / (b1 - a1)
q = a1 * p + 0.8 * y + ud
def tsls(yv, Xmat, Zmat):
PZ_X = Zmat @ np.linalg.lstsq(Zmat, Xmat, rcond=None)[0]
return np.linalg.lstsq(PZ_X, yv, rcond=None)[0]
one = np.ones(T)
ols_d = np.linalg.lstsq(np.column_stack([one, p, y]), q, rcond=None)[0]
iv_d = tsls(q, np.column_stack([one, p, y]), np.column_stack([one, y, w]))
iv_s = tsls(q, np.column_stack([one, p, w]), np.column_stack([one, y, w]))
print("demand slope OLS:", ols_d[1].round(3), " 2SLS:", iv_d[1].round(3))
print("supply slope 2SLS:", iv_s[1].round(3))
Tasks: (i) compute the theoretical OLS limit for the demand slope (exogenous shifters included) and compare; (ii) set the weather coefficient to zero and observe what happens to the demand estimate (rank failure); (iii) estimate both equations jointly by 3SLS with linearmodels.system.IV3SLS (Python) or systemfit (R) and compare standard errors.
Coding exercises
These exercises use real data and run in Python. Install the packages once with
pip install wooldridge statsmodels linearmodels scipy. The wooldridge package contains the datasets
from Wooldridge's Introductory Econometrics; statsmodels ships U.S. and Danish macroeconomic series.
Try the starter code first, then open the solution. Every printed result below was produced by running the solution code exactly as shown.
Exercise 6.1 — Labor supply and wage offers of married women as a simultaneous system
Data: mroz — working married women (428 observations).
Wooldridge (2020, Example 16.5) writes a two-equation system:
- labor supply:
hoursonlwage,educ,age,kidslt6,nwifeinc; - wage offer:
lwageonhours,educ,exper,expersq.
- Check the order condition for each equation.
- Estimate each equation by OLS and by 2SLS, using all exogenous variables in the system as instruments.
- Interpret the implied labor supply elasticity at the mean of
hours. - Check the rank condition empirically: in the first stage for
lwage, areexperandexpersqjointly significant?
import wooldridge as wd, statsmodels.formula.api as smf
from linearmodels.iv import IV2SLS
df = wd.data("mroz").query("inlf == 1").copy()
supply = IV2SLS.from_formula("hours ~ 1 + educ + age + kidslt6 + nwifeinc + [lwage ~ exper + expersq]", data=df).fit(cov_type="robust")
# TODO: wage-offer equation instruments hours with age, kidslt6, nwifeinc
Solution, output and discussion
import wooldridge as wd, statsmodels.formula.api as smf
from linearmodels.iv import IV2SLS
df = wd.data("mroz").query("inlf == 1").copy()
s_ols = smf.ols("hours ~ lwage + educ + age + kidslt6 + nwifeinc", data=df).fit(cov_type="HC1")
s_iv = IV2SLS.from_formula("hours ~ 1 + educ + age + kidslt6 + nwifeinc + [lwage ~ exper + expersq]", data=df).fit(cov_type="robust")
w_ols = smf.ols("lwage ~ hours + educ + exper + expersq", data=df).fit(cov_type="HC1")
w_iv = IV2SLS.from_formula("lwage ~ 1 + educ + exper + expersq + [hours ~ age + kidslt6 + nwifeinc]", data=df).fit(cov_type="robust")
print(f"supply: hours on lwage OLS {s_ols.params['lwage']:8.1f} 2SLS {s_iv.params['lwage']:8.1f} (se {s_iv.std_errors['lwage']:.1f})")
print(f"offer: lwage on hours OLS {w_ols.params['hours']:8.5f} 2SLS {w_iv.params['hours']:8.5f} (se {w_iv.std_errors['hours']:.5f})")
print(f"implied labor supply elasticity at mean hours ({df['hours'].mean():.0f}): {s_iv.params['lwage']/df['hours'].mean():.2f}")
fs = smf.ols("lwage ~ exper + expersq + educ + age + kidslt6 + nwifeinc", data=df).fit(cov_type="HC1")
print(f"rank check, first stage for lwage: F(exper, expersq) = {fs.wald_test('exper = 0, expersq = 0', scalar=True).statistic/2:.2f}")
Output:
supply: hours on lwage OLS -2.0 2SLS 1639.6 (se 593.3)
offer: lwage on hours OLS -0.00006 2SLS 0.00013 (se 0.00029)
implied labor supply elasticity at mean hours (1303): 1.26
rank check, first stage for lwage: F(exper, expersq) = 6.17
Each equation excludes enough exogenous variables: supply excludes exper and expersq (just enough for one
endogenous regressor, plus one over-identifying restriction), and the wage-offer equation excludes three. OLS finds a
negative effect of wages on hours, because of simultaneity bias. 2SLS reverses the sign and implies a labor supply
elasticity of about 1.3. The first-stage \(F\) for the supply equation's instruments is only about 6 — below the rule of
thumb of 10 — so the estimate is imprecise and weak-instrument-robust inference (Lecture 5) is needed before taking the
elasticity seriously. The exclusion of experience from the
supply equation is itself debatable.
Exercise 6.2 — Inflation and openness: a cross-country simultaneous system (Romer, 1993)
Data: openness — 114 countries, averages 1973–1990: inflation inf, imports as share of GDP open, log land area lland, log per capita income lpcinc.
Romer (1993) argues that more open economies have less incentive to inflate. Openness is plausibly endogenous, but small countries are mechanically more open, so land area can shift openness without affecting inflation directly.
- Estimate
infonopenandlpcincby OLS. - Estimate the first stage of
openonllandandlpcinc. - Estimate 2SLS with
llandinstrumentingopen. Compare. - Discuss the exclusion restriction.
import wooldridge as wd, statsmodels.formula.api as smf
from linearmodels.iv import IV2SLS
df = wd.data("openness").rename(columns={"inf": "infl"}) # "inf" would be read as infinity in a formula
# TODO: OLS, first stage and IV2SLS.from_formula("infl ~ 1 + lpcinc + [open ~ lland]", ...)
Solution, output and discussion
import wooldridge as wd, statsmodels.formula.api as smf
from linearmodels.iv import IV2SLS
df = wd.data("openness")
df = df.rename(columns={"inf": "infl"})
ols = smf.ols("infl ~ open + lpcinc", data=df).fit(cov_type="HC1")
fs = smf.ols("open ~ lland + lpcinc", data=df).fit(cov_type="HC1")
iv = IV2SLS.from_formula("infl ~ 1 + lpcinc + [open ~ lland]", data=df).fit(cov_type="robust")
print(f"OLS : effect of openness on inflation {ols.params['open']:.3f} (se {ols.bse['open']:.3f})")
print(f"first stage: lland -> open {fs.params['lland']:.3f}, robust F = {fs.tvalues['lland']**2:.1f}")
print(f"2SLS: effect of openness on inflation {iv.params['open']:.3f} (se {iv.std_errors['open']:.3f})")
print(f"a 10-point rise in openness changes inflation by {10*iv.params['open']:.2f} percentage points (2SLS)")
Output:
OLS : effect of openness on inflation -0.215 (se 0.079)
first stage: lland -> open -7.567, robust F = 43.9
2SLS: effect of openness on inflation -0.337 (se 0.150)
a 10-point rise in openness changes inflation by -3.37 percentage points (2SLS)
Land area is a strong instrument: larger countries trade less. Both OLS and 2SLS give a negative effect of openness on inflation, and 2SLS is larger in absolute value, consistent with Romer's argument. Exclusion requires that country size affects inflation only through openness. Size could also matter through the political economy of central banking or seigniorage needs, so the restriction is an assumption to be argued, not a fact.
Reading
Required: Wooldridge, Econometric Analysis of Cross Section and Panel Data, chapter 9; Hayashi, Econometrics, chapter 4. Further: Haavelmo (1943), "The statistical implications of a system of simultaneous equations", Econometrica 11(1); Graddy (1995), "Testing for imperfect competition at the Fulton fish market", RAND Journal of Economics 26(1); Angrist, Graddy and Imbens (2000), Review of Economic Studies 67(3); Rigobon (2003), "Identification through heteroskedasticity", REStat 85(4); Matzkin (2013), "Nonparametric identification in structural economic models", Annual Review of Economics 5.