10 Causal Inference

The Rubin causal model is based on the idea of potential outcomes. For example, a person would have a particular income at age 40 if they had attended college, whereas they would have a different income at age 40 if they had not attended college. To measure the causal effect of going to college for this person, we need to compare the outcome for the same individual in both alternative futures. Since it is impossible to see both potential outcomes at once, one of the potential outcomes is always missing. This dilemma is the “fundamental problem of causal inference.”

10.1 Potential outcome framework

Thought experiment

  • Let’s assume we want to know if a particular intervention/treatment $D$ (like job loss) caused a particular outcome $Y$ (AFD vote propensity)

  • The variables job loss $D$ can take two values: 1 if the respondent did lose the job and 0 otherwise

  • The variable AFD vote propensity $Y$ is measured as a standard normal variable (that could be a continous survey measure)

  • In this thought experiment, we also assume that we know the potential outcomes for each individual

  • Our experimental sample of interest are $N=100$ German citizens $u$ drawn from the population of all citizers that are eligble to vote

  • In an ideal experiment we would observe the vote choice under job loss or not and compute the difference to get the causal effect

Lets simulate this setup in R:

N=100
u = seq(1:N)
Y0 = rnorm(N)
Y1 = rnorm(N) + 1
D=1:100 %in% sample(1:100, 50)
yl = "Y(0) & Y(1)"
# Plot Potential Outcomes for each unit
# Library to resize plot
library(repr)
plot(u, Y0, ylim=c(-3, 4), xlim=c(1,N), xlab="u")
lines(u, Y1, type = "p", col="red")
title("Y(1) and Y(0) for all units ")

options(repr.plot.width=4, repr.plot.height=4)
# Plot Potential Outcomes for each unit and take mean for treatment and control
plot(u[D==0], Y0[D==0], ylim=c(-3, 4), xlim=c(1,N), main = "Y(1| T=1) and Y(0| T=0)", xlab="u", ylab=yl)
abline(h=mean(Y0[D==0]))
lines(u[D==1], Y1[D==1], type = "p", col="red")
abline(h=mean(Y1[D==1]), col="red")

options(repr.plot.width=4, repr.plot.height=4)