Causal Calculator
G-Computation · Kontrafaktuale · Individuelle Treatment-Effekte
© Dr. Rainer Düsing · Interactive Tools by Claude
Warum ein einfacher Gruppenvergleich täuscht — und wie G-Computation daraus den tatsächlichen kausalen Effekt (ATE, ATT, ATU) schätzt. An einem geführten Beispiel.
Das Problem — und die Lösung
Szenario: L = Vorkenntnisse der Studierenden  ·  A = freiwillige Tutorial-Teilnahme  ·  Y = Prüfungsnote
Wer mehr Vorkenntnisse hat (hohes L), meldet sich häufiger zum Tutorial an (L→A) und erzielt sowieso bessere Noten (L→Y). Das erzeugt eine Scheinkorrelation: Tutorial-Teilnehmer schneiden besser ab — aber nicht nur wegen des Tutorials, sondern weil sie schon mehr wussten.

Warum täuscht der naive Gruppenvergleich? Wer das Tutorial besucht (A=1), hat im Schnitt schon mehr Vorkenntnisse — bessere Noten kämen also zum Teil „von selbst“. Der naive Mittelwertsvergleich E[Y|A=1] − E[Y|A=0] mischt echten Tutorial-Effekt und Vorkenntnis-Vorteil: Naiver Schätzer = Kausaler Effekt + Konfundierungs-Bias. Nur in einem Experiment (RCT) wären beide Gruppen vergleichbar — in Beobachtungsstudien benötigen wir G-Computation.

G-Computation stellt für jede Person die Gegenfrage: „Was wäre die Note bei denselben Vorkenntnissen — einmal mit, einmal ohne Tutorial?" Die gemittelte Differenz ist der kausale Effekt — bereinigt um die Vorkenntnisse.
Aktuell im Tool
■ Naiv: —
■ G-Comp: —
■ Wahr: —
Bias: —
Estimand — Für welche Population?
Average Treatment Effect — Durchschnittlicher Effekt in der Gesamtpopulation. Als ob jede Person zufällig behandelt worden wäre.
① Warum täuscht der einfache Gruppenvergleich?
A=1, bedingt auf L A=0, bedingt auf L Gruppendurchschnitt (unbedingt) — das ist "naiv"
Die beiden schrägen Linien sind die Y-Werte, bedingt auf L — das nutzt G-Computation. Die beiden gepunkteten waagerechten Linien sind die rohen Gruppendurchschnitte Ȳ|A=1 und Ȳ|A=0, die L komplett ignorieren — ihr Abstand ist der naive Vergleich. Die grünen Striche bei L=0 markieren, wie viel von diesem Abstand tatsächlich auf das Tutorial zurückgeht, wenn man L konstant hält (Infobox oben links).
② Was schätzt G-Computation für den kausalen Effekt?
G-Computation (dunkel=50% HDI, hell=95% HDI) Wahr Naiv
ⓘ Browser-Approximation via Normal-Normal-Konjugiertheit — nicht MCMC-basiert; dient der konzeptuellen Illustration von G-Computation.
Bias-Anatomie — Warum täuscht der naive Schätzer?
Pfeilbreite ∝ |Pfadstärke|  ·  Orange = Backdoor-Pfad  ·  Grün = kausaler Pfad
Zerlegung des naiven Schätzers
β̂naiv = θ  +  γY · δA∼L
—
Zahlengerade (ATE)
θ (ATE) Naiv
OVB = —  (γY = — × δA∼L = —)
③ Wie funktioniert das? — Eine Person, zwei Welten
Ŷ(1) — unter Behandlung Ŷ(0) — ohne Behandlung ● beobachtet  ·  ○ kontrafaktisch (nie beobachtet)
Jede Senkrechte verbindet die zwei kontrafaktischen Ergebnisse derselben Person: Ŷ(1) unter Behandlung und Ŷ(0) ohne Behandlung. Nur eine Hälfte davon wurde je beobachtet (●) — die andere bleibt für immer kontrafaktisch (○), das ist das Fundamentalproblem der Kausalinferenz. G-Computation mittelt die Lücken über die Zielpopulation. Bewege die Maus über das Diagramm, um eine einzelne Person im Detail zu sehen. Blasse Linien liegen außerhalb der aktuell gewählten Population.
④ Hat die Behandlung für alle denselben Effekt?
Behandelt (A=1) Kontrolle (A=0) Mittlerer Effekt (ATE)
Y-Achse: individueller kausaler Effekt Ŷ(1)−Ŷ(0) jeder Person — dieselbe Zahl wie die Länge einer Verbindungslinie in Grafik ③, hier aber direkt als ein Punkt pro Person aufgetragen statt als Punktepaar. X-Achse: Vorkenntnisse L derselben Person.

Die Farbe zeigt hier nicht unterschiedliche Effekte — bei gleichem L ist der Effekt für Behandelte und Unbehandelte identisch, das Modell nimmt an, dass er nur von L abhängt. Die Farbe zeigt nur, wer tatsächlich A=1 war (orange) oder A=0 (blau) — deshalb häufen sich orange Punkte rechts (hohes L) und blaue links: genau das ist dieselbe Konfundierung wie in Grafik ①.

Ohne Effekt-Heterogenität (ξ=0) wäre die Punktewolke eine flache Linie; mit ξ≠0 steigt sie an — wer mehr Vorkenntnisse hat, profitiert stärker vom Tutorial. Die gestrichelte Linie ist der Mittelwert nur über die kräftig gefärbten Punkte (die Zielpopulation) — wechsle oben zwischen ATE/ATT/ATU, um zu sehen, wie sich diese Linie verschiebt, je nachdem über welche Punkte gemittelt wird.
G-Computation
—
95% HDI: —
Wahrer Wert (DGP)
—
Datengenerierender Prozess
Naiv (unkorrigiert)
—
Bias: —
R-Code (brms + marginaleffects)▶

      
    
Methodische Hintergründe▶

DGP dieses Tools.
Alle Daten werden nach folgendem Datengenerierenden Prozess simuliert:
L ~ Normal(0,1) — Confounder (z.B. Gesundheitszustand)
A | L ~ Bernoulli(σ(γ_A·L)) — Behandlung hängt von L ab
Y | A, L ~ Normal((θ + ξ·L)·A + γ_Y·L, 1) — Outcome
θ ist der wahre kausale Effekt von A auf Y. γ_A steuert wie stark L die Behandlungszuweisung beeinflusst; γ_Y wie stark L das Outcome beeinflusst. Je größer beide, desto stärker der Konfundierungs-Bias. In realen Daten sind θ, γ_A und γ_Y unbekannt; hier können wir alles einstellen.

G-Computation: voll Bayesianisch.
Das Outcome-Modell Y ~ A + L (bzw. Y ~ A·L mit Heterogenität) wird bayesianisch gefittet: flache Priors, dann K Samples aus dem Posterior. Für jeden Sample berechnen wir für jede Person "Wie hoch wäre Y unter A=1 vs. A=0?" und mitteln die Differenz über die Zielpopulation. Das Ergebnis ist eine echte Posterior-Verteilung des Estimands.

Warum unterschiedliche Populationen bei ATE, ATT, ATU?
Das Outcome-Modell gilt für alle, aber die Frage für wen wir mitteln, definiert den Estimand:
— ATE: Ŷ(1)−Ŷ(0) wird über alle n Personen gemittelt → "Was wäre der Effekt in der Gesamtpopulation?" Im Code: avg_comparisons(fit_gc, variables = "A")
— ATT: nur die n₁ tatsächlich Behandelten (A=1) → "Hat das Treatment denen geholfen, die es bekamen?" Ihre L-Werte sind systematisch höher (da Behandlung mit L zusammenhängt). Im Code: newdata = subset(dat, A==1)
— ATU: nur die n₀ Unbehandelten (A=0) → "Was würde passieren, wenn wir das Treatment ausweiten?" Im Code: newdata = subset(dat, A==0)
Ohne Effekt-Heterogenität (ξ=0) sind alle drei Werte gleich. Mit ξ≠0 divergieren sie — weil die Subpopulationen unterschiedliche L-Werte haben und der Effekt von L abhängt.

Approximation im Browser.
Zur Illustration nutzt dieses Tool die Normal-Normal-Konjugiertheit: Bei Normalverteilungs-Likelihood und Normalprior ist der Posterior analytisch berechenbar, kein MCMC nötig. Der R-Code zeigt brms mit vollständigem MCMC — das ist die empfohlene Vorgehensweise für eigene Analysen.

Effekt-Heterogenität (ξ).
Ohne Heterogenität (ξ=0): Y = θ·A + γ_Y·L + ε — der kausale Effekt θ ist für jede Person gleich, unabhängig von L. ATE = ATT = ATU = θ, und im Effektdiagramm (4. Grafik) liegen alle Punkte auf einer horizontalen Linie.
Mit ξ=0.5: Y = (θ + 0.5·L)·A + γ_Y·L + ε — Personen mit höherem L profitieren mehr. Im Effektdiagramm entsteht eine positive Steigung. Da bei positiver Konfundierung die Behandelten im Schnitt höhere L-Werte haben (sie wurden häufiger behandelt), gilt: ATT > ATE > ATU. Dieselben Daten, dieselbe Methode, drei verschiedene richtige Antworten — weil drei verschiedene Populationsfragen gestellt werden.

Overlap (Positivity-Annahme).
Overlap bedeutet: Für jeden beobachteten L-Wert gibt es sowohl Behandelte als auch Unbehandelte — 0 < P(A=1|L=l) < 1. Im ersten Streudiagramm ist das sichtbar: Bei gutem Overlap mischen sich orange (A=1) und blaue (A=0) Punkte über den gesamten L-Bereich. Beim Szenario "Kein Overlap" sind die Gruppen fast vollständig getrennt — Personen mit hohem L werden fast immer behandelt.
Das ist ein Problem, weil G-Computation dann das Outcome-Modell in L-Bereiche extrapoliert, in denen keine (oder kaum) Kontrollen beobachtet wurden. Die Schätzung hängt stark vom Modell ab — sichtbar als breiterer Posterior und größere Unsicherheit.

Wann ist G-Computation unverzichtbar — und wann reicht der Regressionskoeffizient?
Im linearen Modell ohne Interaktion (Y ~ A + L) entspricht der G-Computation-ATE exakt dem Regressionskoeffizienten β̂_A: Die Linearität bewirkt, dass bedingter und marginaler Effekt übereinstimmen (ohne Konfundierung ist die G-Computation sogar identisch mit einem t-Test).

Im linearen Modell mit Interaktion (Y ~ A + L + A:L) gilt das nicht mehr allgemein: β̂_A ist nur der Effekt bei L=0, während G-Computation korrekt über die tatsächliche L-Verteilung der Zielpopulation mittelt (ATE = β̂_A + β̂_{AL}·Ē[L]). Zudem berechnet G-Computation ATT und ATU durch Einschränkung auf die jeweilige Subpopulation — das ist mit dem Koeffizienten allein nicht möglich.

Formelwahl: Y ~ A + L versus Y ~ A * L
Standard-DAGs kodieren kausale Struktur (welche Variable beeinflusst welche) — aber keine funktionale Form der Beziehungen. Ob der Effekt von A auf Y für verschiedene L-Werte unterschiedlich groß ist (Effekt-Heterogenität, A:L-Interaktion), ist eine inhaltliche Behauptung, die über den Graphen hinausgeht: „Ist es plausibel, dass L den Effekt von A moderiert?“

Im Tool wird das Outcome-Modell deshalb immer als Y ~ A * L spezifiziert — als konservativer Default, der Heterogenität zulässt ohne sie vorauszusetzen. Ob A:L tatsächlich nötig ist, lässt sich empirisch mit loo_compare(loo(fit_gc), loo(fit_add)) prüfen (s. R-Code). Fehlt Evidenz für die Interaktion, ist Y ~ A + L das sparsamere Modell. Der Golem Builder hilft zu entscheiden, ob eine Moderationsbeziehung im DAG theoretisch begründbar ist.

Entscheidend wird G-Computation bei GLMs mit nicht-linearem Link (z.B. logit bei logistischer Regression, log bei Poisson): Dort ist der Koeffizient ein bedingter Effekt auf der Link-Skala (z.B. Log-Odds-Ratio). Wegen der Nicht-Kollapsierbarkeit des logit-Links weichen bedingter und marginaler Effekt grundsätzlich voneinander ab — selbst ohne Konfundierung. G-Computation liefert den marginalen Effekt auf der Antwortskala (z.B. Risikodifferenz in Wahrscheinlichkeitspunkten), den der Koeffizient allein nicht geben kann. avg_comparisons() in marginaleffects realisiert genau das, modellklassenunabhängig.

Umfangreiche Beispiele für G-Computation mit brms für verschiedene GLMs (logistisch, Poisson, multinomial u.a.) finden sich im Blog von Solomon Kurz: Boost your power with baseline covariates (siehe Referenz).

Bias Deep Dive — OVB & Heckman-Zerlegung▶

Das Omitted Variable Bias (OVB) Framework.
Wird nur Y ~ A geschätzt (ohne L zu kontrollieren), gilt für den OLS-Schätzer:

β̂naiv = Cov(Y, A) / Var(A)
       = θ + γY · Cov(L, A) / Var(A)
       = θ  (wahrer Effekt)  +  γY · δA∼L  (Konfundierungs-Bias)

δA∼L = Cov(L,A)/Var(A) ist der Steigungskoeffizient aus der Hilfsregression A ~ L — er misst, wie stark L die Behandlungszuweisung vorhersagt. Das Produkt γY · δA∼L ist der Omitted Variable Bias: er verschwindet genau dann, wenn entweder L das Outcome nicht beeinflusst (γY=0) oder L unabhängig von A ist (bestimmt durch γA) (δA∼L=0).

Vorzeichen des Bias. Im Tool können γ_A (L→A) und γ_Y (L→Y) getrennt eingestellt werden, was folgende Vorzeichenstruktur ergibt:

L→A L→Y Bias = (L→Y)×(L→A) Naiv vs. Wahr
++ + (Überschätzung) Naiv größer
−− + (−×− = +) Naiv größer (oft überraschend!)
+− − (Unterschätzung) Naiv kleiner
−+ − (Unterschätzung) Naiv kleiner (falsches Vorzeichen möglich!)

Merkregel: Bias > 0 wenn beide Pfade gleichsinnig sind (beide + oder beide −). Bias < 0 bei entgegengesetzten Vorzeichen. Im Tool kann man γ_A und γ_Y jetzt getrennt einstellen — bei gleichem Vorzeichen ist der Bias positiv, bei entgegengesetzten Vorzeichen negativ.

Heckman-Zerlegung: Naiver Vergleich = ATE + Selection Bias + HTEB.
Der naive Vergleich E[Y(1)|A=1] − E[Y(0)|A=0] entspricht i.d.R. nicht dem ATE (Cunningham, 2021; Morgan & Winship, 2007). Der ATE ist zunächst eine gewichtete Summe aus ATT und ATU (π = P(A=1)):

ATE = π · ATT + (1−π) · ATU

Nach algebraischer Umstellung (E[Y(0)|A=1] addieren und subtrahieren) gilt direkt:

Naiver Vergleich
E[Y(1)|A=1] − E[Y(0)|A=0] = ATE

                                 + {E[Y(0)|A=1] − E[Y(0)|A=0]} ← Selection Bias / Baseline Bias

                                 + (1−π) · (ATT − ATU) ← Heterogeneous Treatment Effect Bias (HTEB)

Interpretation der Terme:
— Selection Bias / Baseline Bias = E[Y(0)|A=1] − E[Y(0)|A=0]: Wie unterscheiden sich die beiden Gruppen, wenn es von Anfang an keine Behandlung gäbe? Es ist lediglich eine Beschreibung der Unterschiede zwischen den beiden Gruppen unter der Kontrollbedingung.
— HTEB (Heterogeneous Treatment Effect Bias) = (1−π)·(ATT−ATU): Entspricht dem erwarteten Unterschied im Behandlungseffekt zwischen denjenigen in der Behandlungs- und denjenigen in der Kontrollgruppe (multipliziert mit dem Anteil der Population). Entsteht wenn ξ≠0 in diesem Tool.

Wann gilt Naiv = ATE? Genau dann, wenn beide Terme verschwinden:
— Selection Bias = 0 ⟺ E[Y(0)|A=1] = E[Y(0)|A=0] ⟺ Y(0) ⊥ A  (keine Baseline-Konfundierung)
— HTEB = 0 ⟺ ATT = ATU  (kein Heterogenitätsproblem) oder π = 1

In einem RCT ist A zufällig zugewiesen → Y(0) ⊥ A (Selection Bias = 0) und ATT ≈ ATU (HTEB ≈ 0) → Naiv = ATE ✓

Quelle: Cunningham, S. (2021). Causal Inference: The Mixtape. Yale University Press. Frei online verfügbar — mit vielen weiteren Techniken für Kausalanalysen: IPW, Difference-in-Differences, Regression Discontinuity, Instrumental Variables u.a. Eine exzellente Einführung in die gesamte Breite kausaler Inferenzmethoden.

ℹ Causal Calculator — Hilfe
Was lerne ich hier?
Das fundamentale Problem kausaler Inferenz: Wir beobachten nie denselben Menschen gleichzeitig unter Behandlung und ohne Behandlung. G-Computation löst das durch ein Outcome-Modell: Schätze Y für jede Person unter beiden Treatment-Armen — und vergleiche. Voraussetzung: No unmeasured confounding (welche Variablen nötig sind, zeigt der Golem Builder).
Was bedeutet "Confounder" hier?
L beeinflusst sowohl wer behandelt wird (L → A) als auch das Outcome (L → Y). Das erzeugt eine Scheinkorrelation. Die naive Schätzung (bloße Differenz behandelt − unbehandelt) vermischt diesen Confounder-Einfluss mit dem echten Effekt. G-Computation korrigiert das durch explizite Kontrolle von L im Outcome-Modell.
Empfohlene Schritte
ATE · ATT · ATU
Drei verschiedene Fragen an dieselben Daten:

ATE: "Was wäre der Effekt, wenn die gesamte Population zufällig behandelt würde?" — bevölkerungsweite Entscheidungen.

ATT: "Wie stark hat das Treatment denen geholfen, die es bekamen?" — Programmevaluation.

ATU: "Was würde bei Ausweitung auf Unbehandelte passieren?" — Skalierungsentscheidungen.

Ohne Effekt-Heterogenität (ξ=0) sind alle drei gleich. Mit ξ≠0 weichen sie ab — weil die Subpopulationen unterschiedliche L-Verteilungen haben (sichtbar im Effektdiagramm: orange = Behandelte, blau = Kontrollen).
G-Computation (Standardisierung)
Schritt 1: Outcome-Modell fitten — Y ~ A + L (oder Y ~ A * L mit Heterogenität).
Schritt 2: Für jeden Posterior-Sample alle Ŷ(1) und Ŷ(0) berechnen und über die Zielpopulation mitteln.
Schritt 3: Differenz Ŷ(1) − Ŷ(0) = kausaler Effekt für diesen Sample.
Ergebnis: Eine Posterior-Verteilung des ATE/ATT/ATU — sichtbar im Posterior-Panel und als individuelle Punkte im Effektdiagramm (vierte Grafik).
Verwandte Tools
Golem Builder — DAG-basierte Kausalanalyse: Welche Variablen müssen im Modell kontrolliert werden? (Backdoor-Kriterium, Collider-Warnung, Datensimulation)

brms Model Builder — brms-Formel und Priors aus dem Golem Builder in R-Code überführen
Weiterführende Literatur
Cunningham (2021) — Causal Inference: The Mixtape
Morgan & Winship (2007) — Counterfactuals and Causal Inference
Kurz — brms-Beispielcode für G-Computation