Spatial Panel Regression in Stata

Cross-border cigarette spillovers, from two-way FE to the dynamic Spatial Durbin Model

−0.627SDM total price effect
0.265spatial parameter rho
0.65habit persistence tau

Carlos Mendez

Nagoya University (GSID)

June 11, 2026

The Tension

Act I

When Virginia raises its cigarette tax, smokers in neighboring states change their behavior

A state’s cigarette tax is a local instrument. But consumers near borders simply drive across the line to buy cheaper packs.

So one state’s consumption depends on its neighbors’ prices and incomes. Standard panel models treat every state as an island.

The two-way fixed effects price elasticity is −0.40. The spatial model says it is really −0.63

−0.63

SDM total price effect vs −0.40 from two-way FE — a 57% larger response, once cross-border spillovers are counted

Where we’re going

  • The lab: a balanced 46-state, 30-year cigarette panel with a contiguity weight matrix \(W\)
  • Four non-spatial benchmarks — pooled OLS to two-way FE
  • The Spatial Durbin Model — neighbors’ \(Y\) and neighbors’ \(X\) both matter
  • Wald tests: can the SDM collapse to SAR, SLX, or SEM?
  • Dynamic extensions: separating habit from spillover

The Investigation

Act II

The lab: 46 states × 30 years, 1,380 rows, one contiguity weight matrix

  • Outcome — log per-capita cigarette consumption logc
  • Regressors — log real price logp, log real per-capita income logy
  • Weight matrix — binary contiguity \(W\), row-standardized so \(Wy\) is a neighbor average

Strongly balanced Baltagi panel, 1963–1992. Two states are neighbors if they share a border; the diagonal of \(W\) is zero (no self-loop).

Row-standardizing \(W\) turns the spatial lag into a neighbor average

* Load binary contiguity W and build a row-standardized spmat object
use ".../cigar/Wct_bin.dta", replace
spmat dta Wst m1-m46, norm(row) replace
* Load the balanced cigarette panel and declare it
use ".../cigar/baltagi_cigar.dta", clear
xtset state year      // panel: state (46), time: year 1963–1992

norm(row) makes each row of \(W\) sum to 1, so \(Wy\) for California averages Nevada, Oregon, and Arizona’s consumption.

Pooled OLS says price elasticity is −0.39 — but it assumes states are interchangeable

Outcome Coef. SE Sig.?
logp (price) −0.386 0.031 yes
logy (income) 0.372 0.026 yes

\(R^2 = 0.224\). This naive benchmark ignores the panel structure entirely — every state treated as an independent draw.

Fixed effects swing the elasticity from −0.23 to −0.86 depending on what you absorb

Region FE

  • absorbs time-invariant state traits
  • \(\hat\beta_{logp} = -0.231\)
  • income turns insignificant (\(-0.015\))
  • within \(R^2 = 0.406\)

Time FE

  • absorbs common year shocks
  • \(\hat\beta_{logp} = -0.861\)
  • income \(+0.805\)
  • \(R^2 = 0.507\)

Two-way FE is the credible non-spatial benchmark: price elasticity −0.40

Outcome Coef. SE Sig.?
logp (price) −0.402 0.027 yes
logy (income) 0.119 0.048 5%

Within \(R^2 = 0.789\) — state and year effects absorbed. But every state still depends only on its own price and income.

The Spatial Durbin Model lets neighbors’ \(Y\) and neighbors’ \(X\) both move local consumption

\[y_{it} = \rho \sum_{j=1}^{N} w_{ij}\, y_{jt} + x_{it}\beta + \sum_{j=1}^{N} w_{ij}\, x_{jt}\theta + \mu_i + \lambda_t + \varepsilon_{it}\]

\(\rho W y\) is the neighbor-consumption feedback; \(W X \theta\) is the spillover of neighbors’ prices and incomes; \(\mu_i,\lambda_t\) are state and year effects.

One xsmle line fits the full SDM with two-way fixed effects

xsmle logc logp logy, fe type(both) wmat(Wst) mod(sdm) ///
      effects nsim(999) nolog
estimates store sdm1

type(both) = two-way FE; mod(sdm) = Spatial Durbin; effects decomposes the impact into direct + indirect via 999 Monte Carlo draws.

\(\rho = 0.265\): states with higher-consuming neighbors consume more, even after controlling for their own prices

Parameter Coef. SE \(z\)
[Main]logp (own price) −0.307 0.028 −10.88
[Wx]logp (neighbor price) −0.206 0.065 −3.17
[Spatial]rho 0.265 0.033 8.08

Higher neighbor prices also cut local consumption — exactly the cross-border-shopping signature.

The coefficient is not the effect: price decomposes into direct −0.31 and indirect −0.31

\[\text{Total} = \underbrace{-0.313}_{\text{direct, own state}} + \underbrace{-0.314}_{\text{indirect, spillover}} = -0.627\]

The spillover is as large as the own-state effect — when neighbors raise prices 1%, local consumption falls about as much as if the state had raised its own price.

The SDM total price effect is −0.63 — 57% larger than two-way FE missed entirely

−0.627

Total price effect (direct −0.313 + indirect −0.314), SE 0.087, \(z = -7.23\) · two-way FE saw only −0.402

The Lee–Yu correction barely moves the estimates — so the small-sample bias is negligible

SDM (standard) SDM (Lee–Yu)
\(\rho\) 0.265 0.260
logp (own) −0.307 −0.304
Total price effect −0.627 −0.623

With \(T = 30\), the incidental-parameters bias of order \(1/T\) is small; the near-identical estimates confirm the ML results are reliable.

Can the SDM collapse to a simpler model? Three Wald tests say no

* Reduce to SAR?  (drop neighbors' X)
test ([Wx]logp = 0) ([Wx]logy = 0)            // chi2 = 12.87, p = 0.002

* Reduce to SLX?  (no autoregressive feedback)
test ([Spatial]rho = 0)                       // chi2 = 61.04, p < 0.001

* Reduce to SEM?  (common-factor restriction)
testnl ([Wx]logp = -[Spatial]rho*[Main]logp) ///
       ([Wx]logy = -[Spatial]rho*[Main]logy)  // chi2 = 8.49, p = 0.014

All three restrictions are rejected — the full SDM is the right specification

Reduce to Restriction \(\chi^2\) \(p\) Verdict
SAR \(\theta = 0\) 12.87 0.002 reject
SLX \(\rho = 0\) 61.04 <0.001 reject
SEM \(\theta + \rho\beta = 0\) 8.49 0.014 reject

Spatial dependence in cigarette demand is substantive, not a nuisance — neighbors’ consumption, prices, and incomes all matter.

The Resolution

Act III

Add habit persistence and \(\rho\) collapses from 0.265 to 0.080

Static SDM

  • \(\rho = 0.265\)
  • own price \(-0.307\)
  • \(\tau\) — not modeled

Full dynamic SDM

  • \(\rho = 0.080\)
  • short-run price \(-0.150\)
  • \(\tau = 0.639\) (habit)

Habit persistence is the dominant dynamic force: \(\tau \approx 0.65\)

0.65

\(\tau\), the temporal-lag coefficient (\(z = 33.33\)) · about 65% of last year’s consumption persists into this year

Static models hide the timing: short-run elasticity −0.15, long-run −0.42

\[\text{long-run} = \frac{\hat\beta_{logp}}{1 - \tau} = \frac{-0.150}{1 - 0.639} \approx -0.42\]

The static SDM conflates short- and long-run responses into one coefficient; the dynamic model separates how fast a tax bites from how hard it eventually bites.

Does the spatial model identify a causal tax effect? No — it disciplines correlation

Objection. Adding a weight matrix can’t manufacture identification — \(\rho\) and the spillovers are still associations.

Response. Correct. The SDM models the structure of cross-state dependence; it does not relax the usual selection-on-observables assumptions. The contribution is a better-specified demand model — one that stops attributing neighbors’ influence to own price — not a quasi-experimental tax effect.

Coordinated regional taxation beats isolated state-level taxes — and takes years to bite.