·  METHODEN-NOTIZEN
PANELDATEN · KAUSALITÄT

Mundlak-Zerlegung: Within- und Between-Effekt sauber trennen

13. Juli 2026 · ~7 Min · Nico Schäfer

Ein einfaches Random-Effects-Modell vermengt bei Paneldaten zwei analytisch zu trennende Fragestellungen: die Veränderung innerhalb einer Einheit über die Zeit einerseits, die Unterschiede zwischen den Einheiten andererseits. Die Mundlak-Korrektur trennt beide Varianzquellen — mit einer einzigen zusätzlichen Kovariate und ohne den Effizienzverlust eines reinen Fixed-Effects-Ansatzes.

Das Problem an einem Beispiel

Modelliert sei die Häufigkeit von Streckenstörungen im Schienenverkehr als Funktion der Instandhaltungsintensität, beobachtet über mehrere Jahre je Streckenabschnitt (strecke_id × jahr). Zu klären ist, ob eine höhere Instandhaltungsintensität die Störungen senkt. Ein naives Random-Effects-Modell liefert hier einen Koeffizienten, der Within- und Between-Variation vermischt. Verzerrt ist dieser Schätzer immer dann, wenn stärker beanspruchte Strecken zugleich intensiver gewartet werden und häufiger stören: Die Selektion schlägt sich dann als vermeintlicher Effekt nieder.

Das Verfahren in einem Satz

In das Modell wird zusätzlich der Einheiten-Mittelwert jeder zeitveränderlichen Kovariate aufgenommen. Der ursprüngliche Koeffizient misst dann den reinen Within-Effekt — die Veränderung innerhalb einer Strecke —, der Koeffizient des Mittelwerts die Between-Korrektur. Fällt letzterer signifikant aus, war das naive RE-Modell verzerrt; insofern liefert die Zerlegung zugleich einen handlichen Hausman-Test.

mundlak.R
# Einheiten-Mittelwert der zeitveränderlichen Kovariate
d <- d |> group_by(strecke_id) |>
       mutate(instand_bar = mean(instandhaltung)) |> ungroup()

# Mundlak-RE-Modell: Within-Effekt + Between-Korrektur
library(plm)
m <- plm(stoerungen ~ instandhaltung + instand_bar,
         data = d, index = c("strecke_id", "jahr"),
         model = "random")

library(lmtest)
coeftest(m)   # instand_bar signifikant  =>  RE war verzerrt

Der Koeffizient auf instandhaltung entspricht nun dem Within-Effekt und ist numerisch identisch mit dem Fixed-Effects-Schätzer, verbleibt jedoch im RE-Rahmen, sodass zeitkonstante Merkmale wie Streckentyp oder Region im Modell erhalten bleiben. Der Koeffizient auf instand_bar bindet exakt jene Selektion, die den naiven Schätzer verzerrt hätte.

effekt-zerlegung between (roh): +0.31 within (mundlak): −0.22 links: unterschiedliche strecken  ·  rechts: veränderung innerhalb einer strecke
Between-Signal (grau) zeigt fälschlich einen positiven Zusammenhang — nur die Within-Zerlegung (grün) misst die Wirkung der Instandhaltung.

Erweiterung auf Zähldaten

Das lineare Modell bildet die Mechanik am klarsten ab. Streckenstörungen sind jedoch Zähldaten und häufig überdispers; methodisch gehört die Mundlak-Korrektur daher in ein (Quasi-)Poisson- bzw. negativ-binomiales Modell mit zufälligem Streckenintercept. Das Prinzip bleibt identisch, lediglich die Verteilungsannahme ändert sich:

mundlak_count.R
library(glmmTMB)
mc <- glmmTMB(stoerungen ~ instandhaltung + instand_bar + (1 | strecke_id),
             family = nbinom2, data = d)   # Overdispersion abgedeckt
SO NUTZEN WIR DAS PRODUKTIV

In Kundenprojekten läuft die Zerlegung nicht als Einzelskript, sondern als reproduzierbarer targets-Schritt: Rohdaten → Panel bauen → Mundlak-Modell → automatischer Quarto-Report mit Koeffizienten-Tabelle und dieser Grafik. Neue Datenlieferung, ein Befehl, aktualisierter Bericht — die Methodik bleibt prüfbar, das Ergebnis landet ohne Handarbeit im Postfach der Fachabteilung.

Fazit

Die Mundlak-Zerlegung kostet eine Zeile Code und beantwortet die Frage, an der naive Panelmodelle scheitern: Was ist Wirkung, was ist Selektion? Wer Effekte berichtet, ohne beide Varianzquellen getrennt zu haben, berichtet im Zweifel das Falsche.

ÄHNLICHE FRAGESTELLUNG?

Paneldaten, Wirkungsevaluation oder ein Modell, das produktiv laufen soll — im 15-minütigen Erstgespräch klären wir den kürzesten Weg zur belastbaren Antwort.

15-MIN-TERMIN BUCHEN →