Day 76. Fuzzy RD as Local IV
When crossing the cutoff raises the probability of treatment without determining it, the discontinuity becomes an instrument. The ratio of the jump in outcomes to the jump in take-up identifies a local average effect for compliers at the cutoff, and is estimated by 2SLS within a bandwidth.
- ●Define the fuzzy RD estimand as a ratio of two jumps.
- ●Prove that it equals the average effect for compliers at the cutoff under continuity and monotonicity.
- ●Implement fuzzy RD as 2SLS with the same bandwidth and controls in both stages.
- ●Apply it to class size, insurance at 65 and scholarship take-up, with attention to weak first stages.
Theory
Fuzzy designs
In a fuzzy RD, crossing the cutoff changes the probability of treatment by less than one:
Examples: eligibility rules with imperfect take-up, guidelines that doctors sometimes override, class-size caps that schools partly ignore.
Estimand
It is a Wald estimator (Day 62) using as the instrument, evaluated at the cutoff. A sharp RD is the special case .
Interpretation (Hahn, Todd and van der Klaauw)
Let denote treatment if the cutoff rule were set as if the unit's running variable were , with types defined at the cutoff. Under continuity of potential outcomes and type shares in , monotonicity (crossing the cutoff never discourages treatment) and exclusion (the cutoff affects only through ),
It is doubly local: compliers, and at the cutoff.
Estimation
Within bandwidth (kernel-weighted), run 2SLS:
- First stage: .
- Second stage: .
With the same bandwidth, kernel and controls in both stages, equals the ratio of the two local linear jumps. Bandwidths are chosen for the ratio (or for the reduced form), and RBC inference extends to the ratio.
Practical points
Always plot the first stage. A small jump in take-up is a weak instrument (Day 65): report the reduced form and weak-instrument-robust intervals.
Part 1 · Warm-up
Exercise 1 · A ratio of jumps
The outcome jumps by 6 at the cutoff and the treatment probability by 0.4. Estimate the fuzzy RD effect.
Show solution
Step 1. .
Exercise 2 · Types at the cutoff
At a scholarship cutoff, take-up approaches 0.15 from below and 0.70 from above. Under monotonicity, what are the shares of always-takers, never-takers and compliers among students at the cutoff?
Show solution
Step 1. Always-takers (funded anyway below the cutoff): 0.15.
Step 2. Never-takers (not taking it even when eligible): .
Step 3. Compliers: .
Exercise 3 · Sharp as a special case
Show that if jumps from 0 to 1, the fuzzy estimand equals the sharp one.
Show solution
Step 1. The denominator is .
Step 2. The ratio equals the outcome jump, the sharp RD estimand.
Exercise 4 · The reduced form
In Exercise 1, what does the outcome jump of 6 estimate by itself?
Show solution
Step 1. The effect of eligibility (crossing the cutoff) on the outcome, averaged over all units at the cutoff: an intention-to-treat effect.
Answer: 6 is the ITT; dividing by take-up gives the effect of treatment for compliers.
Exercise 5 · A weak jump
Take-up jumps by 0.05 at the cutoff. What problems does this create?
Show solution
Step 1. The denominator is small and estimated with noise: the ratio is imprecise, biased towards OLS, and its usual CI unreliable (Day 65).
Answer: report the reduced form, the first stage with its F, and an Anderson–Rubin-type interval.
Part 2 · Proofs
Exercise 6 · Identification of the complier effect
Assume that, near the cutoff, acts as a randomly assigned instrument in the limit: type shares and the conditional means of given type are continuous in at . Under monotonicity and exclusion, prove .
Show solution
Step 1. Just above , treated units are compliers and always-takers; just below, always-takers only.
Step 2. Outcome jump: by continuity, always-takers' and never-takers' contributions are the same on both sides and cancel; compliers contribute .
Step 3. Take-up jump: .
Step 4. Divide (the LATE theorem at the cutoff).
Exercise 7 · 2SLS equals the ratio of jumps
Show that, with a uniform kernel and the same window and controls in both stages, 2SLS gives , the ratio of the reduced-form and first-stage jumps.
Show solution
Step 1. The model is just identified, with the excluded instrument and the same controls in both stages.
Step 2. By FWL, partial out of , and : .
Step 3. The reduced-form coefficient on is and the first-stage one ; their ratio is the same expression.
Exercise 8 · A delta-method standard error
With reduced-form jump , first-stage jump and covariance matrix of the two, write the delta-method variance of .
Show solution
Step 1. As in Day 62, Exercise 7:
Exercise 9 · One-sided fuzziness
If nobody below the cutoff can be treated, show the fuzzy RD estimand is the average effect on treated units at the cutoff.
Show solution
Step 1. No always-takers: all treated units just above the cutoff are compliers.
Step 2. By Exercise 6 the estimand is the complier effect at , i.e. the effect on the treated at (Day 62, Exercise 8).
Exercise 10 · A direct effect of crossing the cutoff
If crossing the cutoff affects directly by (exclusion fails), what does estimate?
Show solution
Step 1. The outcome jump becomes .
Step 2. .
Answer: biased, more so with a weak first stage; for instance an age-65 cutoff that also triggers retirement benefits.
Part 3 · Applied
Exercise 11 · Maimonides' rule and class size
When enrolment passes 40, the rule splits a cohort into two classes. At the cutoff, average class size drops by 8 pupils and reading scores rise by 2 points. Estimate the effect of one extra pupil per class.
Show solution
Step 1. First stage: pupils. Reduced form: points.
Step 2. points per extra pupil.
Answer: reducing class size by 10 raises scores by about 2.5 points, for classes at the 40-pupil threshold.
Exercise 12 · Insurance at 65
At age 65, insurance coverage rises by 9 points and hospital admissions per 100 people per year rise from 10.0 to 10.8. Estimate the effect of insurance on admissions for those who gain coverage at 65.
Show solution
Step 1. Reduced form: admissions per 100 people.
Step 2. First stage: .
Step 3. admissions per 100 newly insured people per year.
Answer: about 0.09 extra admissions per newly insured person, under exclusion (other changes at 65, such as retirement, would bias this).
Exercise 13 · Scholarship take-up
Eligibility raises scholarship take-up by 0.5 at the cutoff and college enrolment by 0.04. Estimate the effect of receiving the scholarship.
Show solution
Step 1. .
Answer: receiving the scholarship raises enrolment by 8 points for compliers at the cutoff.
Exercise 14 · A weak first stage
A guideline recommends a drug for patients with a risk score above 10; prescribing jumps by only 0.05 (SE 0.03) and the outcome by 0.01 (SE 0.008). What would you report?
Show solution
Step 1. First-stage , : very weak.
Step 2. The ratio is uninformative; its AR set is unbounded (Day 65, Exercise 8).
Answer: report the reduced form (the effect of the guideline itself, 0.01 with SE 0.008) and state that the drug's effect is not identified with useful precision at this cutoff.
Exercise 15 · Same bandwidth in both stages
Why must the first stage and reduced form use the same bandwidth, kernel and polynomial order?
Show solution
Step 1. The ratio estimates the complier effect only if both jumps are measured on the same units with the same weights.
Step 2. Different windows would compare different populations (and different bias), so the ratio would not have the LATE interpretation.
Answer: use the 2SLS implementation within a common window, or a bandwidth selected for the ratio.
Verify in Python
import numpy as np
print("Ex 1:", 6 / .4, " Ex 2 types:", (.15, round(1 - .70, 2), round(.70 - .15, 2)), " Ex 11:", 2 / -8, " Ex 12:", round(.8 / .09, 2), " Ex 13:", .04 / .5)
# Simulated fuzzy RD with heterogeneous effects
rng = np.random.default_rng(76); n = 200_000
x = rng.uniform(-1, 1, n); z = (x >= 0).astype(float)
typ = rng.choice(["c", "a", "n"], n, p=[.55, .15, .30])
d = ((typ == "a") | ((typ == "c") & (z == 1))).astype(float)
gain = np.select([typ == "c", typ == "a", typ == "n"], [3.0, 1.0, 0.5]) + 2 * x # effects vary with type and x
y = 10 + 4 * x + 2 * (typ == "a") + d * gain + rng.normal(0, 2, n)
h = .2; m = np.abs(x) <= h
W = np.column_stack([np.ones(m.sum()), x[m], z[m] * x[m]])
def coef_on(v, target):
X = np.column_stack([W, v]); return np.linalg.lstsq(X, target, rcond=None)[0][-1]
rho, pi = coef_on(z[m], y[m]), coef_on(z[m], d[m])
Xs = np.column_stack([W, d[m]]); Zs = np.column_stack([W, z[m]])
Xh = Zs @ np.linalg.lstsq(Zs, Xs, rcond=None)[0]
tsls = np.linalg.lstsq(Xh, y[m], rcond=None)[0][-1]
print(f"reduced form {rho:.3f}, first stage {pi:.3f}, ratio {rho / pi:.3f}, 2SLS {tsls:.3f} (complier effect at cutoff 3.0)")
Key takeaways
- Fuzzy RD divides the outcome jump by the take-up jump; it is IV with the cutoff indicator as instrument.
- It identifies the average effect for compliers at the cutoff, under continuity, monotonicity and exclusion.
- Estimate by 2SLS with a common window and controls; plot the first stage and guard against weak jumps.
Simulation Lab: Fuzzy RD
Open full screen →First-stage and reduced-form jumps; their ratio recovers the compliers' effect at the cutoff.
Crossing the cutoff makes treatment available to compliers; always-takers are treated on both sides, never-takers on neither. Left: take-up jumps by the complier share (first stage). Right: outcomes jump by compliers' share × their effect (reduced form). The ratio recovers the compliers' effect at the cutoff; comparing treated and untreated units near the cutoff does not.