Selection Bias

Why correlation ≠ causation — potential outcomes & confounding

Friedolin Merhout & Merlin Schaeffer · Department of Sociology

2026-07-23

By the end of today you can …

  1. state a causal hypothesis as a counterfactual comparison — the potential-outcomes framework;

  2. explain why a naïve comparison of two groups is usually not the causal effect — selection bias;

  3. read a DAG — spot a confounder on a backdoor path — and use a balance test to expose it.

One part per goal. Our running question: does consuming news make immigrant minorities report more discrimination?

From hypothesis to comparison

Part 1 of 3

Every causal claim is secretly a comparison — of what happened against what would have happened.

The research question of the day

The integration paradox: immigrants and their descendants who are better integrated — more educated, longer resident — often report more discrimination, not less Schaeffer and Kas (2024).

One proposed mechanism: the better integrated consume more news, become more aware of discrimination, and so report it more often.

Research question: does consuming news increase how often immigrant minorities report discrimination?

280 estimates from 42 studies; overall ≈ +0.022. Source: Schaeffer and Kas (2024)

A hypothesis is a comparison

A causal claim implies a counterfactual: things would have been different had \(X\) (not) happened.

\(H_1:\) news consumption increases how often minorities report discrimination:

\[0 < \text{Avg}_n[\text{Discr.} \mid \text{news} = 1] - \text{Avg}_n[\text{Discr.} \mid \text{news} = 0]\]

\(H_0:\) news consumption does not change it: the difference of the two group averages is \(\leq 0\).

Discuss: what comparison is implied by each classic claim? Marx — capitalist labour alienates people and reduces mental health. Simmel — city life increases nervous stimulation and makes residents distant.

Why not just ask people?

The obvious “study”: ask people “How does reading the news affect you?”

Discuss: why is simply asking a bad way to test our hypothesis?

People have inaccurate perceptions of what shapes them — social desirability, faulty memory, little self-insight. Statements by research subjects are valuable, but they are not credible causal evidence. We need a comparison, not an introspection.

Preparation

pacman::p_load(
  tidyverse,    # Data manipulation and visualization
  estimatr,     # OLS with robust / weighted standard errors
  modelsummary  # Regression AND balance tables
)

Schaeffer, Kas, and Hagedorn (2023) — 1,093 immigrants and children of immigrants in Berlin, Hamburg, Munich, Frankfurt & Cologne, interviewed August 2021.

  1. “On a typical day, about how much time do you spend watching, reading, or listening to news about politics and current affairs?” (hours + minutes)

  2. “How often were you personally discriminated …” — when looking for work, at work, in education, looking for housing, with officials, out in public. (1) Never … (5) Very often — averaged into one index.

# APAD ships as a local file (download it from Absalon into your project folder)
load("../assets/APAD.RData")

APAD <- APAD %>%
  mutate(
    news    = news_hrs * 60 + news_mins,          # total daily minutes
    news_yn = if_else(news >= 15, 1, 0),          # reads news? (>= 15 min)
    dis_index = rowMeans(                          # average across the 6 domains
      select(., dis_trainee, dis_job, dis_school,
             dis_house, dis_gov, dis_public),
      na.rm = TRUE
    )
  )

The naïve comparison

# Weighted OLS: discrimination on the news dummy
ols <- lm_robust(dis_index ~ news_yn, weights = gewFAKT, data = APAD)

modelsummary(list("Discrimination" = ols), stars = TRUE,
             coef_rename = c("news_yn" = "Reads news"),
             gof_map = c("nobs", "r.squared"), output = "kableExtra")
Discrimination
(Intercept) 2.187***
(0.116)
Reads news −0.093
(0.129)
Num.Obs. 1085
R2 0.002
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001

News readers report, if anything, 0.09 points less discrimination — and the difference is not significant (\(t \approx -0.7\)). Taken at face value, \(H_1\) looks wrong. But is this a fair comparison?

Break

Your turn: exercise 1

You run the naïve analysis yourself — on a different outcome: support for an anti-discrimination law.

Open exercise 1 in a new tab ↗

Potential outcomes & selection bias

Part 2 of 3

To see why the comparison can mislead, we need the language of potential outcomes.

Two futures for one person

For Ferda, two potential outcomes — one for each version of her life:

\[\text{effect}_{\text{Ferda}} = Y_{1,\text{Ferda}} - Y_{0,\text{Ferda}}\]

Ferda
\(Y_0\): discrimination without news 2 (rarely)
\(Y_1\): discrimination with news 4 (often)
Personal causal effect +2

The fundamental problem of causal inference: we only ever see one of Ferda’s two futures. The other potential outcome is always missing — so a personal causal effect can never be observed directly.

The average causal effect

\[\text{Avg}_n[Y_{1i} - Y_{0i}] = \frac{1}{n}\sum_{i=1}^{n} Y_{1i} - \frac{1}{n}\sum_{i=1}^{n} Y_{0i}\]

The average causal effect is just the average of everyone’s personal causal effects.

It compares two whole worlds: one where everyone reads the news, against one where no one does. Neither world is ever fully observed — but, under the right conditions, we can estimate the average.

Apples and oranges: Ferda vs. Tuki

We can’t see Ferda’s missing future — so what if we compare her to Tuki, who doesn’t read news?

Ferda Tuki
\(Y_0\): without news 2 5
\(Y_1\): with news 4 5
true effect +2 0

Grey = the counterfactual we never see.

\[\underbrace{Y_{1,\text{Ferda}}}_{4} - \underbrace{Y_{0,\text{Tuki}}}_{5} = -1\]

Discuss: Ferda’s true effect is \(+2\), yet comparing her to Tuki gives \(-1\). Why is comparing different people so misleading here?

The hidden term: selection bias

\[\underbrace{Y_{1,\text{Ferda}}}_{4} - \underbrace{Y_{0,\text{Tuki}}}_{5} = \underbrace{Y_{1,\text{Ferda}} - Y_{0,\text{Ferda}}}_{\text{true effect: }4-2 = +2} + \underbrace{Y_{0,\text{Ferda}} - Y_{0,\text{Tuki}}}_{\text{selection bias: }2-5 = -3}\]

Selection bias \(= Y_{0,\text{Ferda}} - Y_{0,\text{Tuki}} \neq 0\): the two people differ at baseline. Even with no news at all, Tuki would report more discrimination than Ferda. That pre-existing gap contaminates the comparison.

From two people to two groups

\[\underbrace{\text{Avg}_n[Y_{1i} \mid D_i = 1] - \text{Avg}_n[Y_{0i} \mid D_i = 0]}_{\text{difference in observed group means}} = \underbrace{\text{effect on the treated}}_{\text{what we want}} + \underbrace{\text{selection bias}}_{\text{what contaminates it}}\]

\[\text{Selection bias} = \underbrace{\text{Avg}_n[Y_{0i} \mid D_i = 1]}_{\text{unobserved!}} - \text{Avg}_n[Y_{0i} \mid D_i = 0]\] the gap in the outcome’s baseline (\(Y_0\)) between the groups we compare.

Think: if the minorities who read the news had not read them, would they report discrimination as often as those who never read news? If not — the comparison is biased.

(Im)balance of observed variables

We can never see the unobserved baseline \(Y_0\). But if the two groups differ on things we can measure — age, citizenship, generation — that is a strong hint they differ on \(Y_0\) too.

A balance test compares the groups on those background variables.

APAD %>%
  select(news_yn, age, german, imor,
         nbh_exposed, gewFAKT) %>%
  rename(weights = gewFAKT) %>% # so it is used as a weight
  datasummary_balance(~ news_yn, data = .,
                      output = "kableExtra")
0
1
Mean Std. Dev. Mean Std. Dev. Diff. in Means Std. Error
age 36.7 12.3 43.8 15.4 7.1 2.2
nbh_exposed 4.2 0.8 4.2 1.0 −0.0 0.1
N Pct. N Pct.
german Ja 89 40.8 561 64.1
Nein 129 59.2 314 35.9
imor Child of immigrant 64 29.4 399 45.6
Immigrant 154 70.6 476 54.4

The groups are not balanced — news readers are markedly older (≈ 44 vs. 37) and more often German citizens. Our naïve comparison is confounded — and these are only the observed differences.

DAGs: seeing the bias

Part 3 of 3

A directed acyclic graph draws our causal assumptions — and makes the source of the bias visible.

Reading a DAG

  • Nodes = variables; arrows = causal effects.
  • A backdoor path links \(D\) and \(Y\) starting with an arrow into \(D\) (Pearl, Glymour, and Jewell, 2016; Breen, 2022).
  • A confounder \(C\) sits on a backdoor path — it makes \(D\) and \(Y\) correlate without any causal arrow between them. Confounder bias is selection bias.

The red dashed arrow is not really part of the DAG — it just marks the spurious \(D\)\(Y\) correlation that the backdoor path through \(C\) produces.

Our case: a confounded correlation

Plausibly, German citizenship shapes both whether people follow German news and how much discrimination they encounter.

It opens a backdoor path — so the raw news–discrimination correlation is (at least partly) spurious, exactly the selection bias the balance table revealed.

The verdict: correlation ≠ causation

Correlation ≠ causation. The baseline \(Y_0\) differs between the groups we compare, because confounders sort people into and out of reading the news.

Ice-cream sales and shark attacks correlate — but temperature drives both. A raw correlation is a starting point, never a conclusion. The rest of this course is about earning the causal reading.

Your turn: exercise 2

You draw the DAG and run a balance test yourself — is racial appearance balanced across news readers?

Open exercise 2 in a new tab ↗

Today’s general lessons

  1. A causal claim is a counterfactual claim — it compares an outcome with a treatment to the same outcome without it.

  2. Potential outcomes (\(Y_0\), \(Y_1\)) make this precise; a personal causal effect is \(Y_1 - Y_0\). The fundamental problem: one of them is always missing.

  3. The average causal effect is the average of those personal effects.

  4. A naïve comparison of groups usually is not the causal effect — it adds selection bias: the groups differ in their baseline \(Y_0\).

  5. A balance test exposes observed imbalance; a DAG shows why — a confounder on a backdoor path. Confounder bias is selection bias.

Check yourself: today’s goals

  • Write a causal hypothesis as a difference of two potential-outcome averages — and say which term is never observed.
  • Explain, using Ferda & Tuki, how an observed group difference splits into a causal effect plus selection bias.
  • Draw the news → discrimination DAG with a confounder, and say what a balance test would show.

Shaky on any of these? That is what this week’s Absalon quiz and the Friday exercise class are for.

Today’s important functions

  • rowMeans(select(., ...)): average several items into one index (same units).
  • estimatr::lm_robust(y ~ d, weights = ...): weighted OLS with robust standard errors.
  • modelsummary::datasummary_balance(~ group, data = ...): a balance table across two groups (rename your weight column to weights).

References

Breen, R. (2022). “Causal inference with observational data”. In: Handbook of Sociological Science: Contributions to Rigorous Sociology. Ed. by K. Gërxhani, N. de Graaf and W. Raub. Edward Elgar Publishing, pp. 272-286.

Pearl, J., M. Glymour, and N. P. Jewell (2016). Causal Inference in Statistics - A Primer. 1.th ed. Chichester, West Sussex: Wiley.

Schaeffer, M. and J. Kas (2024). “The integration paradox: Does awareness of the extent of ethno-racial discrimination increase reports of discrimination?” In: Political Psychology.

Schaeffer, M., J. Kas, and P. Hagedorn (2023). “The Association between Actual and Perceived Discrimination (APAD): Technical Report”. In: SocArXiv.