InterviewBiz LogoInterviewBiz
← Back
Explain the Regression Discontinuity Design (RDD) and Its Role in Causal Inference
business-analyticshard

Explain the Regression Discontinuity Design (RDD) and Its Role in Causal Inference

HardCommonMajor: business analyticsmckinsey, amazon, meta

Concept

Regression Discontinuity Design (RDD) is a quasi-experimental causal inference method used to estimate treatment effects when assignment to treatment is determined by a known cutoff or threshold in a continuous variable.
RDD leverages the discontinuity at that cutoff — where observations just above and below are assumed to be similar — to infer causal impact.


1. Core Idea

RDD identifies causal effects by comparing outcomes for units near the treatment threshold.
Near the cutoff, treatment assignment is effectively random, creating a natural experiment.

Suppose treatment T_i = 1 if a running variable X_i exceeds a cutoff c:


T_i = 1 if X_i ≥ c
T_i = 0 if X_i < c

The treatment effect (τ) is estimated as the jump or discontinuity in the expected outcome at the cutoff:


τ = E[Y_i | X_i = c⁺] - E[Y_i | X_i = c⁻]

This difference reflects the local average treatment effect (LATE) — the causal effect for units close to the threshold.


2. Example Scenario

A company awards sales bonuses to employees whose quarterly score exceeds 85.
To test whether bonuses improve future sales, analysts compare employees just above (86–87) and just below (83–84) the cutoff.
Because these employees are nearly identical, any jump in performance at 85 can be attributed to the bonus policy itself.


3. Types of RDD

  • Sharp RDD:
    Treatment assignment changes strictly at the cutoff (e.g., bonus given only if score ≥ 85).

  • Fuzzy RDD:
    Probability of treatment jumps at the cutoff but not perfectly (e.g., some exceptions).
    Here, the cutoff serves as an instrumental variable for treatment.


4. Estimation and Visualization

RDD is typically estimated using local linear regression, fitting separate lines on either side of the cutoff:


Y_i = α + βX_i + τD_i + ε_i

Analysts plot the running variable (X) versus the outcome (Y) to visualize the discontinuity.
Choosing the bandwidth (how close to the cutoff to include data) is crucial for balancing bias and precision.

Common tools:

  • R: rdrobust, rddtools
  • Python: statsmodels, rdd

5. Key Assumptions

  1. Continuity of Potential Outcomes:
    Other factors influencing outcomes change smoothly around the cutoff.

  2. No Manipulation:
    Units should not precisely control the running variable to cross the threshold (e.g., no “gaming” scores).
    Use McCrary tests to detect manipulation.

  3. Local Validity:
    The estimated effect applies only near the cutoff — not across the entire range.


6. Strengths and Limitations

Strengths:

  • Delivers credible causal estimates without full randomization.
  • Intuitive visual interpretation.
  • Effective for rule-based policies and incentive evaluations.

Limitations:

  • Estimates only local effects near the threshold.
  • Needs dense data around the cutoff.
  • Sensitive to bandwidth choice and manipulation risks.

7. Applications in Business Analytics

  • Sales & HR: Assessing thresholds for bonuses or promotions.
  • Marketing & Finance: Evaluating effects of credit-score cutoffs on approvals or repayments.
  • Policy & Operations: Analyzing eligibility-based tax or subsidy programs.
  • Education Analytics: Estimating the effect of score-based scholarships or admissions.

RDD’s interpretability makes it a practical tool that bridges experimental rigor and real-world constraints.


Tips for Application

  • When to apply:

    • When treatment is determined by a continuous score or rule-based threshold.
    • In settings where randomization is impossible but eligibility rules exist.
  • Interview Tip:

    • Explain sharp vs. fuzzy RDD clearly and emphasize local randomization near the cutoff.
    • Mention diagnostic tools (e.g., McCrary test, visual checks).
    • Highlight that RDD estimates are local causal effects — precise yet context-limited.