Mundlak-Zerlegung: Within- und Between-Effekt sauber trennen
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.
# 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.
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:
library(glmmTMB) mc <- glmmTMB(stoerungen ~ instandhaltung + instand_bar + (1 | strecke_id), family = nbinom2, data = d) # Overdispersion abgedeckt
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.
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 →