Mehrebenenanalyse mit R (HLM mit R)
Reliabilitätsschätzung auf mehreren Ebenen

Arndt Regorz, Dipl. Kfm. & MSc. Psychologie, 29.05.2026

Wenn Sie Skalen für Ihre statistischen Tests verwenden, dann wollen Sie normalerweise auch deren Reliabilität prüfen (Cronbachs Alpha, McDonalds Omega). Das gilt genauso, wenn Sie eine Mehrebenenanalyse (= linear mixed effects model, hierarchisch lineares Modell) durchführen. Dieses Tutorial zeigt Ihnen, wie das mit R geht.

In der Praxis werden verschiedene Wege gewählt, um für ein Mehrebenenmodell die Reliabilität der verwendeten Skalen zu prüfen.

Zunächst werden einige suboptimale, aber häufiger verwendete Methoden genannt. Dann wird ausführlicher auf eine empfehlenswerte Methode eingegangen (Berechnung der Reliabilität getrennt für die verschiedenen Ebenen), inkl. des zugehörigen R-Codes.

Suboptimale Optionen zur Reliabilitätsanalyse bei der Mehrebenenanalyse

Reliabilität ohne die Mehrebenenstruktur

Der vermutlich häufigste Weg zur Reliabilitätsberechnung ist, einfach die Mehrebenenstruktur zu ignorieren, den Datensatz im Long-Format zu nehmen und damit die Reliabilität zu berechnen (Alpha oder Omega). Das hat mehrere Nachteile. Zum einen wird so nicht die Mehrebenenstruktur berücksichtigt, man erhält als Ergebnis eine undefinierbare Mischung von within- und between-Reliabilität. Umd zum anderen sind auch evtl. angegebenen Standardfehler für die Reliabilität falsch.

Daher ist von diesem Verfahren abzuraten.

Reliabilität nur auf Level 2 (Gruppenmittelwerte)

Ein weiterer, manchmal verwenderter Ansatz ist, die Reliabilität nur für die Gruppenmittelwerte zu berechnen, also die Level 2 Reliabilität. Jedoch ist diese nicht sinnvoll, wenn man (auch) Effekte auf der within-Ebene betrachtet. Die Level 2 Reliabilität wäre in der Regel eine systematische Überschätzung der Reliabilität auf Level 1.

Daher ist auch von diesem Vorgehen abzuraten.

Reliabilität pro Erhebungszeitpunkt im Längsschnittmodell

Wenn man Längsschnittdaten hat (also Messzeitpunkte genestet in Personen), dann könnte man die Reliabilität gesondert je Messzeitpunkt berechnen und dann die Bandbreite der Werte berichten. Falls es einem nur um die Genauigkeit des Messinstruments geht, könnte das eine einfache Lösung sein. Sobald man jedoch Level-1-Effekte und Level-2-Effekte gesondert betrachten möchte im Rahmen der Mehrebenenanalyse, fehlen einem die ebenenbezogenen Reliabilitätsinformationen.

Deshalb ist dies nur als Notlösung (z.B. für Bachelorarbeit, ggf. noch für Masterarbeit) bei einem Längsschnittmodell anzusehen. Besser wäre auch hier eine getrennte Betrachtung der Reliabilität je Ebene.

Reliabilität getrennt je Ebene mit R berechnen (McDonalds Omega)

Alle oben genannten Lösungswege haben gemeinsam, dass sie nicht wirklich die Mehrebenenstruktur der Daten berücksichtigen. Doch genau diese ist ein Hauptgrund, warum wir eine Mehrebenenanalyse durchführen. Daher sollten wir auch die Reliabilität getrennt auf mehreren Ebenen schätzen sollten.

Dies kann man am besten mit einer Mehrebenen-CFA erreichen, in welcher man das Messmodell getrennt für beide Ebenen schätzt und daraus das Reliabilitätsmaß McDonalds Omega berechnet. Nachfolgend finden Sie den kommentierten R-Code (lavaan) für eine derartige konfirmatorische Faktorenanalyse mit zwei Ebenen (wenn Sie mehr als zwei Ebenen haben, dann müssten Sie ggf. auf die kommerzielle Software MPlus ausweichen).

Kommentierter R-Code zur Mehrebenen-CFA mit Berechnung von Omega

Hier finden Sie den kommentierten R-Code. Wenn Sie sich Code kopieren möchten, finden Sie am Ende der Seite nochmals nur den Code alleine ohne Kommentare.

library(lavaan)

Die Reliabilitätsberechnung beruht auf dem SEM/CFA Modul lavaan. Falls Sie dieses noch nicht installiert haben, müssten Sie dieses einmalig mit install.packages() vorab noch installieren.

head(FamIQData, 6)

Der Beispieldatensatz, mit dem ich Ihnen die Berechnung von McDonalds Omega auf zwei Ebenen zeige, stammt aus Kapitel 14 des Lehrbuchs von Hox et al. zur Mehrebenenanalyse. Dieser Datensatz ist auch im Internet verfügbar:
https://multilevel-analysis.sites.uu.nl/datasets/

Dieser Datensatz enthält verschiedene Subtests zu kognitiven Fähigkeiten, die an Kindern, genestet in Familien erhoben worden sind (daher Mehrebenenanalyse). Betrachtet werden sollen drei Subtests, die zusammen eine Skale bilden sollen: figures, animals, occupats.

Zunächst erfolgt, wie generell bei lavaan, die Modellspezifikation:

model_mc <- '

level: 1

Das Modell wird gesondert je Ebenen spezifiziert. Eingeleitet wird es mit dem Schlüsselwort "level", gefolgt von Doppelpunkt und der Nummer des Levels (nicht umgekehrt! "level 1:" würde zu einem Fehler führen).

# Latenter Faktor within (L1)
fw =~ lw1 * figures + lw2 * animals + lw3 * occupats

Hier wird das Messmodell für den Faktor auf der within-Ebene (fw) aufgestellt. Dabei werden alle drei Items von links mit einem Label multipliziert, das wir später für die Berechnung von McDonalds Omega benötigen. Die Namen können Sie frei festlegen, bei mir steht lw1 für die erste Ladung auf der within-Ebene.

Falls Sie mehr als drei Items für Ihre Skala haben, dann ergänzen Sie diese einfach oben in der Zeile mit den Ladungen. Mit nur zwei Items hingegen funktioniert die Berechnung von Omega nicht.

# Fehlervarianz within
figures ~~ ew1 * figures
animals ~~ ew2 * animals
occupats ~~ ew3 * occupats

Normalerweise muss man in lavaan die Fehlervarianzen nicht definieren, da das das System automatisch macht. Hier definiere ich diese dennoch, um auch den Fehlervarianzen Labels zuweisen zu können (ew1, ew2, etc.). Dieser werden später, ebenso wie die Ladungen, für die Berechnung von Omega benötigt.

Falls Sie mehr als drei Items haben, müssen Sie auch hier für jedes zusätzliche Item eine weitere Zeile mit der Berechnung der Fehlervarianz ergänzen (inkl. entsprechende zusätzliche Labels).

# Omega within
zaehler_w := (lw1 + lw2 + lw3)^2
nenner_w := ((lw1 + lw2 + lw3)^2 + (ew1 + ew2 + ew3))
OMEGA_w := zaehler_w / nenner_w

Hier sehen Sie die eigentliche Berechnung von Omega aus den Schätzungen für Ladungen und Fehlervarianzen. Dabei ist der Zähler die Summe der Ladungen, die anschließend quadriert wird. Der Nenner ist nochmals diese quadrierte Summe der Ladungen, dazu werden noch die Fehlervarianzen addiert. Und Omega ist dann Zähler geteilt durch Nenner. Das alles hier zunächst auf der within-Ebene (Level 1).

level: 2

Auch für Level 2 (between-Ebene) stellen wir das CFA-Modell auf. Dabei nutzen wir den gleichen Code wie oben für Level 1, lediglich mit anderen Labels, z.B. lb1 (erste Ladung between) statt lw1 (erste Ladung within), etc. Und bei mehr als drei Items müssten Sie hier genauso die weiteren Items ergänzen wie oben bei Level 1.

# Lantenter Faktor between (L2)
fb =~ lb1 * figures + lb2 * animals + lb3 * occupats

# Fehlervarianz between
figures ~~ eb1 * figures
animals ~~ eb2 * animals
occupats ~~ eb3 * occupats

# Omega between
zaehler_b := (lb1 + lb2 + lb3)^2
nenner_b := ((lb1 + lb2 + lb3)^2 + (eb1 + eb2 + eb3))
OMEGA_b := zaehler_b / nenner_b'

schaetzung_omega <- cfa(model_mc,
data = FamIQData,
std.lv = T,
cluster = "family")

Wenn das Modell aufgestellt ist, können Sie diese schätzen mit der cfa() Funktion. Dabei sind vor allem zwei Punkte zu beachten:
Sie sollten den Parameter std.lv = T verwenden, da die oben verwendete Formel für Omega auf standardisierten Faktoren beruht.
Bei cluster = tragen Sie den Namen Ihrer Level 2 Einheit ein (hier im Beispiel family, weil die Kinder genestet in Familien sind).

summary(schaetzung_omega,
fit.measures = T,
standardized = T)

Mit der summary() Funktion erhalten Sie das Ergebnis Ihrer Reliabilitätsschätzung.

Zunächst müssen Sie natürlich wie bei jeder CFA den Modell-Fit prüfen, denn nur bei einem akzeptablen Fit erhalten Sie für die Reliabilität Ergebnisse, die Sie verwenden können. Hier im Beispiel ist das nicht relevant, da eine Skala mit exakt drei Items zu einem just identified Modell führen (df = 0), das automatisch einen perfekten Fit aufweist.

Defined Parameters:
_______ Estimate Std.Err z-value P(>|z|) Std.lv Std.all
zaehler_w 83.292 7.752 10.744 0.000 83.292 5.581
nenner_w 100.312 7.697 13.032 0.000 100.312 6.720
OMEGA_w 0.830 0.016 51.925 0.000 0.830 0.831
zaehler_b 89.024 20.189 4.409 0.000 89.024 7.813
nenner_b 93.369 20.172 4.629 0.000 93.369 8.205
OMEGA_b 0.953 0.014 66.595 0.000 0.953 0.952

Die beiden relevanten Zeile sind hier OMEGA_w (Reliabilität Level 1) und OMEGA_b (Reliabilität Level 2). Sie sehen, dass auf Level 2 die Reliabilität mit 0.953 (Spalte ganz "Estimate", von mir fett markiert) deutlich höher ist als die Reliabilität auf Level 1 mit 0.830. Das ist ein typisches Ergebnis und der Regelfall - auf Level 2 gleichen sich Zufallsschwankungen zwischen einzelnen Level-1-Einheiten teilweise aus, was auf der between-Ebene zu einer höheren Reliabilität führt.

Und die Ergebnisse zeigen damit auch, warum es so wichtig ist, bei einer Mehrebenenanalyse die Reliabilität gesondert je Ebene zu berechnen.

R-Code ohne Kommentierung

library(lavaan)

head(FamIQData, 6)

model_mc <- '

level: 1

# Latenter Faktor within (L1)
fw =~ lw1 * figures + lw2 * animals + lw3 * occupats

# Fehlervarianz within
figures ~~ ew1 * figures
animals ~~ ew2 * animals
occupats ~~ ew3 * occupats

# Omega within
zaehler_w := (lw1 + lw2 + lw3)^2
nenner_w := ((lw1 + lw2 + lw3)^2 + (ew1 + ew2 + ew3))
OMEGA_w := zaehler_w / nenner_w

level: 2

# Lantenter Faktor between (L2)
fb =~ lb1 * figures + lb2 * animals + lb3 * occupats

# Fehlervarianz between
figures ~~ eb1 * figures
animals ~~ eb2 * animals
occupats ~~ eb3 * occupats

# Omega between
zaehler_b := (lb1 + lb2 + lb3)^2
nenner_b := ((lb1 + lb2 + lb3)^2 + (eb1 + eb2 + eb3))
OMEGA_b := zaehler_b / nenner_b'

schaetzung_omega <- cfa(model_mc,
data = FamIQData,
std.lv = T,
cluster = "family")

summary(schaetzung_omega,
fit.measures = T,
standardized = T)