Same study as exercise 1 — Uruguay's cash transfer and the question of whether welfare buys political loyalty — but now the state-of-the-art estimator: rdrobust(), which fits a local linear regression inside an optimal bandwidth with triangular-kernel weights.

pacman::p_load(tidyverse, rdrobust, causaldata)
data("gov_transfers", package = "causaldata")
  1. Run it. Estimate the RDD with rdrobust(): outcome Support, running variable Income_Centered, cutoff c = 0. Read the Conventional coefficient. The estimate is about . Is it statistically significant?
RDD <- rdrobust(gov_transfers$Support, gov_transfers$Income_Centered, c = 0)
summary(RDD)
  1. Why so uncertain? In exercise 1 the parametric model — using all the data — found a clear, significant effect of about 0.10. Here rdrobust() cannot even reach significance. Look at the bandwidth it chose (h ≈ 0.005) and the number of observations left inside it. The most likely reason the non-parametric estimate is so imprecise is that

  2. Turn the bandwidth up by hand. rdrobust() takes an argument h to set the bandwidth yourself. Re-run it with h = 0.02. The estimate is now about , and it is statistically significant.

RDD_wide <- rdrobust(gov_transfers$Support, gov_transfers$Income_Centered, c = 0, h = 0.02)
summary(RDD_wide)
  1. Mind the sign. In exercise 1 the parametric \(\lambda\) was +0.10; here rdrobust() reports about −0.10 for the same effect. rdrobust() always estimates (value just above the cutoff) − (value just below). In this study the households who received the transfer are below the cutoff. So the negative sign means:

  2. Write one sentence as a # comment reconciling the two exercises — then compare:

Both exercises say the transfer raised government support by roughly 0.10 on the 0–1 scale. The parametric model reported it as +0.10 for a below-cutoff dummy; rdrobust() reports it as −0.10 because it measures the jump as above-minus-below, and the treated sit below. The sign is bookkeeping — the substantive finding is identical. The lesson is that at the MSE-optimal bandwidth the local estimate was too imprecise to detect, and widening the window traded a little bias for the precision needed to see the effect.

  1. Discuss with your neighbour.

    • rdrobust() picked a smaller bandwidth than the one that finally revealed the effect. Is the algorithm "wrong"? What is it optimising, and why might that differ from "find me a significant result"?
    • You could keep widening h until the stars pile up. Why would that be p-hacking, and what protects an honest RDD against it?
    • Which estimate would you report in a paper — the parametric 0.10, the optimal-bandwidth rdrobust, or the hand-widened one? Defend your choice.