DiD with Geocoded Microdata

When distance defines treatment: the ring design

−5.78%parametric ring DiD at 0.1 mi
−20.6%nonparametric, closest 300 feet
52%spread from ring-choice alone

Carlos Mendez

Nagoya University (GSID)

June 11, 2026

The Tension

Act I

When the treatment is a point in space, the radius you choose dictates the answer

A registered sex offender moves into a neighborhood. To measure the price effect, compare homes close to the address with homes a little farther — before and after arrival.

But “close” is a choice. Linden & Rockoff drew the line at 0.1 mile. Move it, and the answer moves with it. Which radius?

One number hides the story: −5.78% on average, but −20.6% within 300 feet

Nonparametric ring DiD on Linden-Rockoff: 23 bins; two closest bins at −20.6% and −15.2%; the curve crosses zero at \(d \approx 0.094\) mi.

Where we’re going

  • The ring design: distance defines treated vs control
  • A simulated world with a known answer to test the estimators
  • The parametric ring DiD — and why its headline wobbles with the radius
  • The nonparametric alternative — let the data trace the whole curve
  • Linden & Rockoff: reconciling −5.78% with −20.6%

The Investigation

Act II

The estimand is an ATT — and the radius \(\bar d\) is baked into it

The ring DiD estimates the average treatment effect among the treated:

\[\tau = E[\Delta Y \mid d \le \bar d] - E[\Delta Y \mid d > \bar d]\]

Crucially, \(\bar d\) appears inside the expectation. Change the cutoff and you change the estimand — not just the precision.

Distance buys identification but spends sample: 6% treated, 28% control, 65% dropped

Toy ring geometry: 126 treated, 566 control, 1,308 dropped out of 2,000 random points.

A ring DiD is a 2×2 DiD whose groups are defined by distance

The textbook two-way fixed-effects form, with \(\Delta Y\) first-differenced:

\[Y_{it} = \alpha_i + \gamma_t + \tau\, D_i P_t + \varepsilon_{it}\]

Estimator Estimate SE True
First-differences 0.3097 0.0258 0.30
Two-way FE 0.3097 0.0258 0.30

The two are algebraically identical — that is why the ring DiD is one line of feols().

Build a world where the truth is known: \(\tau(d)\) vanishes exactly at 0.75 mi

\[\tau(d) = 1.5 \cdot \exp(-2.3\, d) \cdot \mathbf{1}\{d \le 0.75\}\]

True treatment-effect curve: \(\approx 1.5\) at the point, decaying smoothly, zero past 0.75 mi; mean over the affected region \(= 0.726\).

With the correct radius, the parametric estimator nails the truth: 0.726

Parametric ring DiD at the correct cutoff recovers the truth: \(\hat\tau = 0.726\), 95% CI \([0.716, 0.736]\).

Same data, three radii, three answers: 0.913 / 0.726 / 0.456

Same data, three ring choices: 0.913 (too narrow), 0.726 (correct), 0.456 (too wide). Both bad-case 95% CIs exclude the truth.

Choice \(\hat\tau\) Bias
Too narrow (0, 0.30] 0.913 +25.7% — averages the steepest slice
Correct (0, 0.75] 0.726 none
Too wide (0, 1.20] 0.456 −37.1% — dilutes with zero-effect units

The parametric ring DiD is one line of feols() on first-differenced outcomes

ring_dgp <- ring_data |>
  mutate(treat_ring = as.integer(dist <= 0.75)) |>
  feols(delta_y ~ treat_ring, cluster = "neighborhood", data = _)

delta_y is the first-differenced outcome; treat_ring is the 0/1 inner-ring indicator. The whole estimator is that one regression.

Let the data choose: partition distance into bins and trace the whole curve

The nonparametric estimator recovers the whole TE curve — 53 quantile-spaced bins, no cutoff committed up front; left-most bin \(\hat\tau = 1.461\) vs truth 1.5.

Eyeballing the cutoff is the same fragility in disguise — three bandwidths, three radii

Same data, three smoothing bandwidths — the implied treated radius shifts from ~0.10 mi (bw 0.025) to ~0.20 mi (bw 0.125).

The Resolution

Act III

On real data, the ring DiD says homes inside 0.1 mile drop 5.78%

−5.78%

parametric ring DiD, ATT at 0.1 mi · SE 0.0225 · 95% CI \([-10.4\%,\, -1.5\%]\) · \(n = 9{,}029\)

Redraw the radius and the headline wobbles 52% — the sign holds, the magnitude doesn’t

Three inner-ring cutoffs on the same data: ATT moves from −6.40% (0.05 mi) to −4.21% (0.15 mi) — a 52% relative spread driven entirely by the cutoff.

Cutoff ATT (%) 95% CI
0.05 mi −6.40% \([-14.1\%, +0.9\%]\)
0.10 mi −5.45% \([-10.3\%, -0.9\%]\)
0.15 mi −4.21% \([-7.8\%, -0.8\%]\)

Let the curve flex and the closest 300 feet drop 20.6% — twice the parametric average

−20.6%

nonparametric bin 1 (first ~300 ft) · sample-weighted ATT inside 0.1 mi \(= -12.4\%\), about \(2.1\times\) the parametric −5.78%

The data-driven cutoff lands at 0.094 mi — validating the radius Linden & Rockoff guessed

Parametric

  • one number per radius
  • −5.78% at 0.1 mi
  • magnitude conditional on \(\bar d\)
  • 52% spread across choices

Nonparametric

  • a whole \(\hat\tau(d)\) curve
  • −20.6% in the closest bin
  • crosses zero at \(d \approx 0.094\) mi
  • the cutoff is an output, not an input

Does the nonparametric estimator make this causal? No — assumptions still carry the weight

Objection. A flexible, data-driven estimator must give the “true” causal effect — no researcher choice, no bias.

Response. Flexibility removes the cutoff choice, not the identifying assumptions. The ATT is identified only under local parallel trends and no anticipation — both untestable in this cross-section. binsreg discovers the shape; it cannot manufacture identification.

Report both numbers: the average is correct, the curve is the whole story.