The `rdrobust` output we got in [[Statistical modeling of RD|Chapter 2.2.2]] looks unremarkable at first read:
```r
=====================================================================
Point Robust Inference
Estimate z P>|z| [ 95% C.I. ]
---------------------------------------------------------------------
RD Effect 1567.178 36.225 0.000 [1496.639 , 1667.855]
=====================================================================
```
A point estimate of \$1,567.18 with a 95% confidence interval of [\$1,496.64, \$1,667.86]. Reasonable. Now check the midpoint of that interval: $\frac{1496.64 + 1667.86}{2} = 1582.25$. The interval is *not centered on the displayed point*. The header on this single row of output actually hints at the discrepancy: the **Point Estimate** and the **Robust Inference** columns aren't reporting the same estimator.
To further understand this, we'll pull the underlying `rdrobust` object and unpack it:
```r
rd <- rdrobust(y = df$future_spending, x = df$past_spending, c = 10000)
rd$coef
rd$se
rd$ci
```
```r
Coeff
Conventional 1567.178
Bias-Corrected 1582.247
Robust 1582.247
Std. Err.
Conventional 38.50828
Bias-Corrected 38.50828
Robust 43.67820
CI Lower CI Upper
Conventional 1491.703 1642.653
Bias-Corrected 1506.772 1657.722
Robust 1496.639 1667.855
```
There are *three* estimators here, not one. The **Conventional** estimator is the local polynomial fit at the cutoff – the textbook RD estimate. The **Bias-Corrected** estimator subtracts an estimate of the leading bias term (Calonico et al., 2014); it shifts the point by \$15 and keeps the same standard error.[^2] The **Robust** estimator uses the same bias-corrected point but inflates the standard error to account for the additional variance introduced by estimating the bias correction.
The single-row summary table at the top of `summary(rd)` is therefore a deliberate mash-up: it displays the **conventional point estimate** but reports the **robust z-statistic, p-value, and CI** built around the bias-corrected estimate. That is why the displayed \$1,567 sits asymmetrically inside [\$1,497, \$1,668] (the interval is symmetric around \$1,582, not around \$1,567).
> [!NOTE]
> The robust CI's midpoint exactly equals the bias-corrected coefficient: $\frac{1496.639 + 1667.855}{2} = 1582.247$. This is by design, not coincidental – `rd$ci["Robust", ]` is computed as $\hat\tau_{bc} \pm 1.96 \cdot \widehat{SE}_{robust}$.
So which estimator should we report? Calonico et al. (2019) recommend the **bias-corrected point with the robust CI**.[^1] Reporting the conventional point next to the robust CI, as `rdrobust`'s default summary does, is convenient for backwards comparison with the textbook estimator but invites a misreading. One solution is to report the bias-corrected estimate explicitly when summarizing results, e.g., "$\hat\tau = \$1,582$ (robust 95% CI [\$1,497, \$1,668])," which lines up the point and the interval. Another solution is to report the conventional point as the primary estimate, treating the robust CI as an inference object and noting the bias correction in a footnote. Both are defensible.
[^1]: Calonico, S., Cattaneo, M. D., Farrell, M. H., & Titiunik, R. (2019). Regression discontinuity designs using covariates. *Review of Economics and Statistics*, 101(3), 442-451. See also Calonico, S., Cattaneo, M. D., Farrell, M. H., & Titiunik, R. (2017). rdrobust: Software for regression-discontinuity designs. *The Stata Journal*, 17(2), 372-404.
[^2]: Calonico, S., Cattaneo, M. D., & Titiunik, R. (2014). Robust nonparametric confidence intervals for regression-discontinuity designs. *Econometrica*, 82(6), 2295-2326.
> [!info]- Last updated: May 13, 2026